yangg 1 an în urmă
părinte
comite
493ce5e729

+ 10 - 0
manager-admin/src/api/order.js

@@ -294,3 +294,13 @@ export function extension(id,param) {
   })
 }
 
+/* 保存发货单/admin/erp/order/saveOrderSend/{orderSendId} */
+
+export function saveOrderSend(orderSendId,param) {
+  return request({
+    url: `/admin/erp/order/saveOrderSend/${orderSendId}`,
+    method: 'post',
+    headers: { 'Content-Type': 'application/json' },
+    data:param
+  })
+}

+ 11 - 0
manager-admin/src/api/setting.js

@@ -336,3 +336,14 @@ export function getPage(params) {
     params
   })
 }
+
+/* /admin/erp/goods/sn/updateSnCode/{id}/{snCode} */
+
+export function updateSnCode(id,snCode) {
+  return request({
+    url: `/admin/erp/goods/sn/updateSnCode/${id}/${snCode}`,
+    method: 'post',
+    headers: { 'Content-Type': 'application/json' },
+   
+  })
+}

+ 2 - 1
manager-admin/src/lang/zh.js

@@ -25,7 +25,7 @@ export default {
     returnOrderAudit: '退货单审核',
     supplierSettlement: '供应商结算',
     settlementDeatil: '结算单详情',
-    productClass:'商品分类',
+    productClass:'商品组合',
     productClassAdd:"新增分类",
     productClassEdit:'编辑分类',
     stock: '仓库管理',
@@ -39,6 +39,7 @@ export default {
     goodsLendEdit: '库位管理编辑',
     goodsLendDetail: '库位管理详情',
     skuSort:"SKU排序",
+    freezeList:"冻结列表",
     // goodsLendReturn: '商品借出登记归还',
     goodsExchange: '出入明细',//商品换货
     goodsExchangeAudit: '查看出库',

+ 1 - 0
manager-admin/src/router/index.js

@@ -118,6 +118,7 @@ const asyncRouters = [
       { path: 'check-inventory/:id?', component: () => import('@/views/stock/goodsExchange/checkInventory'), name: 'checkInventory', meta: { title: 'checkInventory', noCache: true }, hidden: true },
       { path: 'warehouse-location', component: () => import('@/views/stock/warehouseLocation'), name: 'warehouseLocation', meta: { title: 'warehouseLocation', noCache: true } },
       { path: 'inventory-item/:id?', component: () => import('@/views/stock/inventoryItem'), name: 'inventoryItem', meta: { title: 'inventoryItem', noCache: true },hidden:true },
+      { path: 'freeze_list', component: () => import('@/views/stock/freezeList'), name: 'freezeList', meta: { title: 'freezeList', noCache: true } },
     ]
   },
   // 库存报表

+ 123 - 206
manager-admin/src/views/basicSetting/goods/index.vue

@@ -6,61 +6,25 @@
           <div class="inner-toolbar">
             <div class="toolbar-btns">
               <span class="categary">商品类别</span>
-              <el-button
-                size="mini"
-                v-if="checkPermission(['category:add'])"
-                type="primary"
-                @click="handleAddCategary"
-                >新增类别</el-button
-              >
+              <el-button size="mini" v-if="checkPermission(['category:add'])" type="primary"
+                @click="handleAddCategary">新增类别</el-button>
             </div>
           </div>
         </div>
-        <el-tree
-          :data="categorys"
-          node-key="identifier"
-          :expand-on-click-node="true"
-          :style="{ height: categoryHeight }"
-        >
-          <span
-            class="custom-tree-node"
-            slot-scope="{ node, data }"
-            @click="handleSeachShop(data)"
-          >
+        <el-tree :data="categorys" node-key="category_id" :expand-on-click-node="false"
+          :style="{ height: categoryHeight }" :default-expanded-keys="expandedKeys" ref="categoryTree">
+          <span class="custom-tree-node" slot-scope="{ node, data }" @click="handleSeachShop(data)">
             <span>{{ data.name }}</span>
             <span>
-              <el-button
-                type="text"
-                size="mini"
-                :disabled="node.level === 3"
-                icon="el-icon-plus"
-                :title="node.level === 3 ? '类别最多添加三级' : '增加'"
-                v-if="checkPermission(['category:add'])"
-                @click.stop="handleAddCategary(data)"
-              ></el-button>
-              <el-button
-                type="text"
-                style="color: #f56c6c"
-                size="mini"
-                icon="el-icon-minus"
-                v-if="checkPermission(['category:del'])"
-                @click.stop="handleDeleteCategory(data)"
-              ></el-button>
-              <el-button
-                type="text"
-                size="mini"
-                icon="el-icon-edit"
-                v-if="checkPermission(['category:edit'])"
-                @click.stop="handleEditCategary(data)"
-              ></el-button>
-              <el-button
-                type="text"
-                size="mini"
-                icon="el-icon-setting"
-                v-if="checkPermission(['category:spec'])"
-                @click.stop="handleEditSpecs(data)"
-                >规格</el-button
-              >
+              <el-button type="text" size="mini" :disabled="node.level === 3" icon="el-icon-plus"
+                :title="node.level === 3 ? '类别最多添加三级' : '增加'" v-if="checkPermission(['category:add'])"
+                @click.stop="handleAddCategary(data)"></el-button>
+              <el-button type="text" style="color: #f56c6c" size="mini" icon="el-icon-minus"
+                v-if="checkPermission(['category:del'])" @click.stop="handleDeleteCategory(data)"></el-button>
+              <el-button type="text" size="mini" icon="el-icon-edit" v-if="checkPermission(['category:edit'])"
+                @click.stop="handleEditCategary(data)"></el-button>
+              <el-button type="text" size="mini" icon="el-icon-setting" v-if="checkPermission(['category:spec'])"
+                @click.stop="handleEditSpecs(data)">规格</el-button>
               <!--   <el-button
                 type="text"
                 size="mini"
@@ -74,45 +38,19 @@
         </el-tree>
       </el-col>
       <el-col :span="16">
-        <en-table-layout
-          :tableData="tableData.data"
-          class="draggable-table"
-          :row-key="getRowKeys"
-          :loading="loading"
-          style="margin: 10px 10px 0 10px"
-        >
+        <en-table-layout :tableData="tableData.data" class="draggable-table" :row-key="getRowKeys" :loading="loading"
+          style="margin: 10px 10px 0 10px">
           <div slot="toolbar" class="inner-toolbar">
             <div class="toolbar-btns">
-              <el-button
-                size="mini"
-                v-if="checkPermission(['goods:add'])"
-                type="primary"
-                @click="handleAddGoods('sail')"
-                >新增售卖商品</el-button
-              >
-              <el-button
-                size="mini"
-                v-if="checkPermission(['goodsLease:add'])"
-                type="primary"
-                @click="handleAddGoods('hire')"
-                >新增租赁商品</el-button
-              >
+              <el-button size="mini" v-if="checkPermission(['goods:add'])" type="primary"
+                @click="handleAddGoods('sail')">新增售卖商品</el-button>
+              <el-button size="mini" v-if="checkPermission(['goodsLease:add'])" type="primary"
+                @click="handleAddGoods('hire')">新增租赁商品</el-button>
             </div>
-            <div
-              class="toolbar-search"
-              style="display: flex; align-items: center"
-            >
+            <div class="toolbar-search" style="display: flex; align-items: center">
               <span>商品编号/sku/序列号:</span>
-              <en-table-search
-                @search="searchEvent"
-                placeholder="请输入关键字搜索"
-              />
-              <el-button
-                @click="refresh"
-                icon="el-icon-refresh"
-                type="info"
-                plain
-              ></el-button>
+              <en-table-search @search="searchEvent" placeholder="请输入关键字搜索" />
+              <el-button @click="refresh" icon="el-icon-refresh" type="info" plain></el-button>
             </div>
           </div>
 
@@ -129,90 +67,52 @@
                 {{ brand(scope.row.brand_id) }}
               </template>
             </el-table-column>
-            <el-table-column prop="" label="商品形式"
-              ><template slot-scope="scope">
+            <el-table-column prop="" label="商品形式"><template slot-scope="scope">
                 {{ sailOrHire(scope.row.hire_or_sail) }}
-              </template></el-table-column
-            >
+              </template></el-table-column>
 
             <!-- <el-table-column prop="price" label="价格" :formatter="MixinFormatPrice"/>
             <el-table-column prop="label_names" label="商品标签"/> -->
             <el-table-column label="上架" key="market_enable">
               <template slot-scope="scope">
-                <el-switch
-                  v-model="scope.row.market_enable"
-                  active-color="#13ce66"
-                  inactive-color="#ff4949"
-                  @change="switchVal($event, scope.row)"
-                >
+                <el-switch v-model="scope.row.market_enable" active-color="#13ce66" inactive-color="#ff4949"
+                  @change="switchVal($event, scope.row)">
                 </el-switch>
                 <!-- <span>{{ scope.row.market_enable ? '上架' : '下架' }}</span> -->
               </template>
             </el-table-column>
             <el-table-column label="操作" width="200px">
               <template slot-scope="scope">
-                <el-button
-                  type="primary"
-                  size="mini"
-                  v-if="checkPermission(['goods:edit'])"
-                  @click="handleEditGoods(scope.row)"
-                  >编辑</el-button
-                >
-                <el-button
-                  size="mini"
-                  v-if="checkPermission(['goods:del'])"
-                  type="danger"
-                  @click="handleDeleteGoods(scope.row)"
-                  >删除</el-button
-                >
+                <el-button type="primary" size="mini" v-if="checkPermission(['goods:edit'])"
+                  @click="handleEditGoods(scope.row)">编辑</el-button>
+                <el-button size="mini" v-if="checkPermission(['goods:del'])" type="danger"
+                  @click="handleDeleteGoods(scope.row)">删除</el-button>
               </template>
             </el-table-column>
           </template>
 
-          <el-pagination
-            v-if="tableData"
-            slot="pagination"
-            @size-change="handlePageSizeChange"
-            @current-change="handlePageCurrentChange"
-            :current-page="tableData.page_no"
-            :page-sizes="[50, 70, 90, 100]"
-            :page-size="tableData.page_size"
-            layout="total, sizes, prev, pager, next, jumper"
-            :total="tableData.data_total"
-          >
+          <el-pagination v-if="tableData" slot="pagination" @size-change="handlePageSizeChange"
+            @current-change="handlePageCurrentChange" :current-page="tableData.page_no" :page-sizes="[50, 70, 90, 100]"
+            :page-size="tableData.page_size" layout="total, sizes, prev, pager, next, jumper"
+            :total="tableData.data_total">
           </el-pagination>
         </en-table-layout>
       </el-col>
     </el-row>
     <!--编辑分类dialog-->
-    <el-dialog
-      :title="categoryForm.name ? '编辑类别' : '添加类别'"
-      :visible.sync="dialogCategoryVisible"
-      width="500px"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
+    <el-dialog :title="categoryForm.name ? '编辑类别' : '添加类别'" :visible.sync="dialogCategoryVisible" width="500px"
+      :close-on-click-modal="false" :close-on-press-escape="false">
       <el-form :model="categoryForm" ref="categoryForm" label-width="100px">
         <el-form-item label="上级类别名称" prop="parent_id">
-          <el-cascader
-            v-model="categoryForm.parent_id"
-            ref="cascaderHandle"
-            :options="categorys"
-            :props="{
-              label: 'name',
-              value: 'category_id',
-              emitPath: false,
-              checkStrictly: true,
-            }"
-            @change="handleChange"
-            clearable
-          ></el-cascader>
+          <el-cascader v-model="categoryForm.parent_id" ref="cascaderHandle" :options="categorys" :props="{
+            label: 'name',
+            value: 'category_id',
+            emitPath: false,
+            checkStrictly: true,
+          }" @change="handleChange" clearable></el-cascader>
         </el-form-item>
         <el-form-item label="商品类别名称" prop="category_name">
-          <el-input
-            v-model="categoryForm.category_name"
-            :maxlength="6"
-          ></el-input>
+          <el-input v-model="categoryForm.category_name" :maxlength="6"></el-input>
         </el-form-item>
         <el-form-item label="商品类别编号" prop="custom_sn">
           <el-input v-model="categoryForm.custom_sn"></el-input>
@@ -220,34 +120,17 @@
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogCategoryVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submitCategoryForm('categoryForm')"
-          >确 定</el-button
-        >
+        <el-button type="primary" @click="submitCategoryForm('categoryForm')">确 定</el-button>
       </span>
     </el-dialog>
     <!--编辑关联规格dialog-->
-    <el-dialog
-      title="关联规格"
-      width="500px"
-      :visible.sync="dialogSpecsVisible"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
+    <el-dialog title="关联规格" width="500px" :visible.sync="dialogSpecsVisible" :close-on-click-modal="false"
+      :close-on-press-escape="false">
       <el-form :model="specsForm" ref="specsForm">
         <el-form-item label="选择规格">
-          <el-select
-            v-model="specsForm.selectedSpecsList"
-            placeholder="请选择关联规格"
-            multiple
-            filterable
-            style="width: 350px"
-          >
-            <el-option
-              v-for="item in specsForm.specsList"
-              :key="item.id"
-              :label="item.text"
-              :value="item.id"
-            >
+          <el-select v-model="specsForm.selectedSpecsList" placeholder="请选择关联规格" multiple filterable
+            style="width: 350px">
+            <el-option v-for="item in specsForm.specsList" :key="item.id" :label="item.text" :value="item.id">
             </el-option>
           </el-select>
         </el-form-item>
@@ -292,12 +175,18 @@ export default {
       // 左侧商品分类高度,和table保持一致
       categoryHeight: `${document.body.clientHeight - 219}px`,
       brandList: [],
+      expandedKeys: [],
+
     };
   },
   mounted() {
     //this.rowDrop();
     this.GET_ProductList();
     this.GET_Category();
+    this.$nextTick(() => {
+      // 确保组件已渲染
+      console.log(this.$refs.categoryTree);
+    });
     this.timer = setInterval(function () {
       document.querySelectorAll(".el-cascader-node__label").forEach((el) => {
         el.onclick = function () {
@@ -339,52 +228,52 @@ export default {
     getRowKeys(row) {
       return row.id;
     },
-   // 行拖拽
-  rowDrop() {
-    const tbody = document.querySelector(".draggable-table .el-table__body-wrapper tbody");
-    const _this = this;
-    Sortable.create(tbody, {
-      animation: 300,
-      onEnd({ newIndex, oldIndex }) {
-        const currRow = _this.tableData.data.splice(oldIndex, 1)[0];
-        _this.tableData.data.splice(newIndex, 0, currRow);
-       /*  console.log("拖拽后的行详情:", currRow); */
-        _this.updateList(currRow.id, newIndex);
-      },
-    });
-  },
-  // 更新列表顺序
-  updateList(id, newIndex) {
-    // 假设API需要商品ID和新的索引位置
-    console.log(this.tableData.data);
-    /* API_Goods.updateSort({data:[{goods_id: id, sort: newIndex}]}).then((res) => {
-        this.$message.success("更新成功!");
-        this.GET_ProductList();
-    }).catch(()=>{ this.$message.error("更新失败!");}) */
-  },
-   /*  updateList(id, sort) {
-      API_Goods.updateSort({ goods_id: id, sort: sort }).then((res) => {
-        if (res.errno != 0) {
-          this.getList();
-        }
-      });
-    }, 
-    //行拖拽
+    // 行拖拽
     rowDrop() {
-      const tbody = document.querySelector(
-        ".draggable-table .el-table__body-wrapper tbody"
-      );
+      const tbody = document.querySelector(".draggable-table .el-table__body-wrapper tbody");
       const _this = this;
       Sortable.create(tbody, {
         animation: 300,
         onEnd({ newIndex, oldIndex }) {
           const currRow = _this.tableData.data.splice(oldIndex, 1)[0];
           _this.tableData.data.splice(newIndex, 0, currRow);
-          console.log(currRow);
-          _this.updateList(currRow.id, currRow.sort);
+          /*  console.log("拖拽后的行详情:", currRow); */
+          _this.updateList(currRow.id, newIndex);
         },
       });
-    },*/
+    },
+    // 更新列表顺序
+    updateList(id, newIndex) {
+      // 假设API需要商品ID和新的索引位置
+      console.log(this.tableData.data);
+      /* API_Goods.updateSort({data:[{goods_id: id, sort: newIndex}]}).then((res) => {
+          this.$message.success("更新成功!");
+          this.GET_ProductList();
+      }).catch(()=>{ this.$message.error("更新失败!");}) */
+    },
+    /*  updateList(id, sort) {
+       API_Goods.updateSort({ goods_id: id, sort: sort }).then((res) => {
+         if (res.errno != 0) {
+           this.getList();
+         }
+       });
+     }, 
+     //行拖拽
+     rowDrop() {
+       const tbody = document.querySelector(
+         ".draggable-table .el-table__body-wrapper tbody"
+       );
+       const _this = this;
+       Sortable.create(tbody, {
+         animation: 300,
+         onEnd({ newIndex, oldIndex }) {
+           const currRow = _this.tableData.data.splice(oldIndex, 1)[0];
+           _this.tableData.data.splice(newIndex, 0, currRow);
+           console.log(currRow);
+           _this.updateList(currRow.id, currRow.sort);
+         },
+       });
+     },*/
     switchVal(val, row) {
       API_Goods.updateGoods({ id: row.id, market_enable: val }).then((res) => {
         this.GET_ProductList();
@@ -398,7 +287,7 @@ export default {
     handleEditGoods(row) {
       this.$router.push({
         name: "goodsEditForm",
-        params: { id: row.id,hire_or_sail: row.hire_or_sail  },
+        params: { id: row.id, hire_or_sail: row.hire_or_sail },
       });
     },
     /** 编辑关联规格 */
@@ -462,7 +351,7 @@ export default {
         );
       }
     },
-    handleDeleteCategory(category) {
+   /*  handleDeleteCategory(category) {
       this.$confirm("确定要删除这个分类吗?", "提示", { type: "warning" })
         .then(() => {
           API_Category.deleteCategory(category.category_id).then(() => {
@@ -471,6 +360,34 @@ export default {
           });
         })
         .catch(() => {});
+    } */handleDeleteCategory(data) {
+      this.$nextTick(() => {
+        const node = this.$refs.categoryTree.getNode(data.category_id);
+        if (!node) {
+          console.error('Node not found for category_id:', data.category_id);
+          return;
+        }
+
+        // 保持父节点展开
+        const parentNode = node.parent;
+        if (parentNode && !this.expandedKeys.includes(parentNode.data.category_id)) {
+          this.expandedKeys.push(parentNode.data.category_id);
+        }
+
+        // 执行删除操作
+        this.$confirm("确定要删除这个分类吗?", "提示", { type: "warning" })
+          .then(() => {
+            API_Category.deleteCategory(data.category_id).then(() => {
+              this.$message.success("删除成功!");
+              this.GET_Category(); // 重新获取分类数据
+              // 重新设置展开的节点,以防止收缩
+              this.$nextTick(() => {
+                this.$refs.categoryTree.store.expandedKeys = this.expandedKeys;
+              });
+            });
+          })
+          .catch(() => { });
+      });
     },
     /** 添加类别 */
     handleAddCategary(category) {

+ 27 - 13
manager-admin/src/views/dashboard/index.vue

@@ -144,18 +144,24 @@
               <el-table-column prop="create_time" label="下单时间">
                 <template slot-scope="scope">{{ scope.row.create_time | unixToDate }}</template>
               </el-table-column>
+              <el-table-column label="操作">
+                <template slot-scope="scope">
+                  <el-button size="mini" @click="addWarehouse(scope.row)">发货</el-button>
+                </template>
+              </el-table-column>
             </el-table>
           </div>
         </el-card>
       </el-col>
       <el-col :span="8" v-if="checkIsauth('goods-understock')">
         <el-card class="box-card" style="height:350px;" shadow="never">
-          <div slot="header" class="clearfix" style="    display: flex;justify-content: space-between;align-items: center;">
+          <div slot="header" class="clearfix"
+            style="    display: flex;justify-content: space-between;align-items: center;">
             <span>库存预警</span>
             <!--  <router-link to="/stock/goods-understock">
               <el-button style="float: right; padding: 3px 0" type="text">查看更多</el-button>
             </router-link> -->
-            <el-select @change="cleanGoodsList" v-model="warehouse_id"  clearable style="width: 100px;">
+            <el-select @change="cleanGoodsList" v-model="warehouse_id" clearable style="width: 100px;">
               <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
             </el-select>
           </div>
@@ -270,8 +276,8 @@ export default {
       },
       menuList: [],
       routerLIst: [],
-      warehouseList:[],
-      warehouse_id:''
+      warehouseList: [],
+      warehouse_id: ''
     }
   },
   filters: {
@@ -311,9 +317,17 @@ export default {
     this.GET_OrderList()
     this.GET_GoodsLendList()
     this.GET_menus()
-   
+
   },
   methods: {
+    /* 发货 */
+    addWarehouse(row) {
+      this.$router.push({
+        name: "orderOutboundAdd",
+        params: { id: row.id },
+      });
+      // this.$router.params{ name: 'orderOutboundDetail', params: { id: scope.row.id } }
+    },
     warehouseName(val) {
       let name = [];
       this.warehouseList.map((el) => {
@@ -328,15 +342,15 @@ export default {
     wareName(val) {
       let name = ''
       this.warehouseList.map((el) => {
-          if (el.id == val) {
-            return name=el.name
-          }
+        if (el.id == val) {
+          return name = el.name
+        }
       });
       return name
     },
     /* 切换仓库 */
-    cleanGoodsList(val){
-      this.warehouse_id=val
+    cleanGoodsList(val) {
+      this.warehouse_id = val
       this.GET_WarningGoodsList()
     },
     generateTitle,
@@ -350,13 +364,13 @@ export default {
       }).then(response => {
         this.loading = false
         this.goodsLendListWaitReturnData = response
-      }).catch(() => {this.loading = false })
+      }).catch(() => { this.loading = false })
       /* API_GoodsLend.warehouseEntry(this.warehouse_id).then(response => {
         this.loading = false
         this.goodsLendListWaitReturnData = response
       }) */
     },
-      /** 获取待发货订单 */
+    /** 获取待发货订单 */
     GET_OrderList() {
       API_order.getOrderList({
         page_no: 1,
@@ -408,7 +422,7 @@ export default {
     },
     GET_WarehouseList() {
       API_BasicSetting.getWarehouseListAll().then((response) => {
-        this.warehouse_id=response[0].id
+        this.warehouse_id = response[0].id
         this.warehouseList = response;
         this.GET_WarningGoodsList()
       });

+ 89 - 117
manager-admin/src/views/setting/serialList.vue

@@ -5,22 +5,13 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="sku">
-              <el-input
-                v-model="advancedForm.sku"
-                placeholder="请输入内容"
-                clearable
-              ></el-input>
+              <el-input v-model="advancedForm.sku" placeholder="请输入内容" clearable></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="状态">
               <el-select v-model="advancedForm.status" clearable>
-                <el-option
-                  v-for="item in statusList"
-                  :key="item.id"
-                  :label="item.label"
-                  :value="item.value"
-                />
+                <el-option v-for="item in statusList" :key="item.id" :label="item.label" :value="item.value" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -36,20 +27,11 @@
       </el-form>
       <el-button @click="searchEvent"> 搜索 </el-button>
     </div>
-    <en-table-layout
-      :tableData="tableData.data"
-      :loading="loading"
-      @selection-change="handleSelectionChange"
-    >
+    <en-table-layout :tableData="tableData.data" :loading="loading" @selection-change="handleSelectionChange">
       <div slot="toolbar" class="inner-toolbar">
         <div class="toolbar-btns">
-          <el-button
-            size="mini"
-            v-if="checkPermission(['stock:add'])"
-            type="primary"
-            @click="handleAddWarehouse"
-            >新增</el-button
-          >
+          <el-button size="mini" v-if="checkPermission(['stock:add'])" type="primary"
+            @click="handleAddWarehouse">新增</el-button>
           <!--  <el-button
             size="mini"
             type="delect"
@@ -57,13 +39,8 @@
             @click="handleDelectWarehous"
             >删除</el-button
           > -->
-          <el-button
-            size="mini"
-            type="primary"
-            :disabled="multipleSelection.length === 0"
-            @click="batchPrint"
-            >批量打印</el-button
-          >
+          <el-button size="mini" type="primary" :disabled="multipleSelection.length === 0"
+            @click="batchPrint">批量打印</el-button>
         </div>
         <!--
         <div class="toolbar-search" style="display: flex; align-items: center">
@@ -90,14 +67,10 @@
         </el-table-column>
         <el-table-column prop="out_house_id" label="出库单编号" />
         <el-table-column prop="entry_house_id" label="入库单编号" />
-        <el-table-column label="操作" width="260">
+        <el-table-column label="操作" width="310">
           <template slot-scope="scope">
-            <el-button
-              size="mini"
-              v-if="checkPermission(['stock:edit'])"
-              @click="handleEditWarehouse(scope.$index, scope.row)"
-              >查看</el-button
-            >
+            <el-button size="mini" v-if="checkPermission(['stock:edit'])"
+              @click="handleEditWarehouse(scope.$index, scope.row)">查看</el-button>
             <!-- <el-button
               size="mini"
               v-if="checkPermission(['stock:del'])"
@@ -105,80 +78,44 @@
               @click="handleDeleteWarehouse(scope.$index, scope.row)"
               >删除</el-button
             > -->
-            <el-button size="mini" @click="PrintIng(scope.row)"
-              >打印序列号</el-button
-            >
+            <el-button size="mini" @click="editPrintIng(scope.row)">编辑序列号</el-button>
+            <el-button size="mini" @click="PrintIng(scope.row)">打印序列号</el-button>
           </template>
         </el-table-column>
       </template>
 
-      <el-pagination
-        v-if="tableData"
-        slot="pagination"
-        @size-change="handlePageSizeChange"
-        @current-change="handlePageCurrentChange"
-        :current-page="tableData.page_no"
-        :page-sizes="[10, 20, 50, 100]"
-        :page-size="tableData.page_size"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="tableData.data_total"
-      >
+      <el-pagination v-if="tableData" slot="pagination" @size-change="handlePageSizeChange"
+        @current-change="handlePageCurrentChange" :current-page="tableData.page_no" :page-sizes="[10, 20, 50, 100]"
+        :page-size="tableData.page_size" layout="total, sizes, prev, pager, next, jumper" :total="tableData.data_total">
       </el-pagination>
     </en-table-layout>
-    <el-dialog
-      :title="title"
-      :visible.sync="dialogVisible"
-      width="600px"
-      @open="handleDialogOpen"
-      :modal-append-to-body="false"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      @close="close"
-    >
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="600px" @open="handleDialogOpen"
+      :modal-append-to-body="false" :close-on-click-modal="false" :close-on-press-escape="false" @close="close">
       <div class="header">
         <span>商品编号/sku</span>
         <el-input v-model="stockForm.sn"></el-input>
         <el-button>搜索</el-button>
       </div>
       <div class="center">
-        <el-table
-          :data="snTableData.records"
-          border
-          ref="table"
-          style="width: 100%"
-          @selection-change="snHandleSelectionChange"
-        >
+        <el-table :data="snTableData.records" border ref="table" style="width: 100%"
+          @selection-change="snHandleSelectionChange">
           <el-table-column type="selection" width="55" />
           <el-table-column prop="goods_vo.sn" label="商品编号">
           </el-table-column>
           <el-table-column prop="goods_vo.name" label="商品名称" />
-          <el-table-column
-            prop="sku"
-            label="sku"
-            v-if="title !== '查看序列号'"
-          >
+          <el-table-column prop="sku" label="sku" v-if="title !== '查看序列号'">
           </el-table-column>
           <el-table-column prop="product_vo.sku" label="sku" v-else>
           </el-table-column>
-          <el-table-column
-            prop="spec_name"
-            label="规格型号"
-            v-if="title !== '查看序列号'"
-          >
+          <el-table-column prop="spec_name" label="规格型号" v-if="title !== '查看序列号'">
           </el-table-column>
           <el-table-column prop="product_vo.spec_name" label="规格型号" v-else>
           </el-table-column>
         </el-table>
       </div>
-      <el-pagination
-        @size-change="goodsPageSizeChange"
-        @current-change="goodsPageCurrentChange"
-        :current-page="snTableData.current"
-        :page-sizes="[10, 20, 50, 100]"
-        :page-size="snTableData.size"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="snTableData.total"
-      ></el-pagination>
+      <el-pagination @size-change="goodsPageSizeChange" @current-change="goodsPageCurrentChange"
+        :current-page="snTableData.current" :page-sizes="[10, 20, 50, 100]" :page-size="snTableData.size"
+        layout="total, sizes, prev, pager, next, jumper" :total="snTableData.total"></el-pagination>
       <!-- <el-form :model="stockForm" :rules="stockRules" ref="stockForm" label-width="120px">
         <el-form-item label="商品编码/条码">
           <span>
@@ -194,14 +131,8 @@
         </el-form-item>
       </el-form> -->
       <div class="dialog-footer">
-        <el-input
-          :disabled="title == '查看序列号'"
-          v-model="stockForm.qty"
-          placeholder="请输入要生成序列号的数量"
-        ></el-input>
-        <el-button :disabled="title == '查看序列号'" @click="saveQ"
-          >生成</el-button
-        >
+        <el-input :disabled="title == '查看序列号'" v-model="stockForm.qty" placeholder="请输入要生成序列号的数量"></el-input>
+        <el-button :disabled="title == '查看序列号'" @click="saveQ">生成</el-button>
         <!-- <el-button @click="dialogVisible = false">取 消</el-button>
         <el-button type="primary" @click="submitWarehouseForm">确 定</el-button> -->
       </div>
@@ -212,20 +143,8 @@
         </p>
       </div>
     </el-dialog>
-    <el-dialog
-      title="打印预览"
-      :visible.sync="PrintVisible"
-      width="940px"
-      center
-      @close="handleCancle"
-    >
-      <el-button
-        size="mini"
-        type="primary"
-        @click="handlePrintGoodsLend"
-        class="print"
-        >打印</el-button
-      >
+    <el-dialog title="打印预览" :visible.sync="PrintVisible" width="940px" center @close="handleCancle">
+      <el-button size="mini" type="primary" @click="handlePrintGoodsLend" class="print">打印</el-button>
       <div id="deliverySheet" style="width: 900px">
         <div class="tips-t" v-for="(item, index) in codeList" :key="index">
           <div>
@@ -234,12 +153,23 @@
 
             </div>
             <div style="margin-top: 10px; font-size: 20px; text-align: center">
-              <barcode :value="item"  format="CODE128"></barcode>
+              <barcode :value="item" format="CODE128"></barcode>
             </div>
           </div>
         </div>
       </div>
     </el-dialog>
+    <el-dialog title="修改序列号" :visible.sync="SKUVisible" width="30%" center @close="snCodeCancle" >
+      <el-form ref="SKUForm" :model="SKUForm" :rules="SKUFormRule" label-width="160px" inline class="change-form">
+        <el-form-item label="序列号" prop="snCode" class="change-form-item">
+          <el-input v-model="SKUForm.snCode" placeholder="请输入" style="width: 300px;"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer">
+        <el-button @click="snCodeCancle">取消</el-button>
+        <el-button @click="snCodeEdit">修改</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -291,6 +221,19 @@ export default {
       // 高级搜索数据
       advancedForm: {},
       barcodeValue: "",
+      SKUForm: {
+        snCode: '',
+        id: ''
+      },
+      SKUFormRule: {
+        snCode: [{
+          required: true,
+          message: '请输入序列号',
+          trigger: 'blur'
+        }
+        ],
+      },
+      SKUVisible: false
     };
   },
   mounted() {
@@ -301,23 +244,42 @@ export default {
   },
   watch: {
 
-},
+  },
   computed: {
     ...mapGetters(["user"]),
   },
   methods: {
+    snCodeCancle() {
+      this.SKUForm.id = ""
+      this.SKUForm.snCode = ""
+      this.SKUVisible = false
+    },
+    snCodeEdit() {
+      API_Setting.updateSnCode(this.SKUForm.id, this.SKUForm.snCode).then(res => {
+        this.$message.success('修改成功!')
+        this.SKUForm.id = ""
+        this.SKUForm.snCode = ""
+        this.SKUVisible = false
+        this.GET_WarehouseList();
+      })
+    },
+    editPrintIng(row) {
+      this.SKUForm.id = row.id
+      this.SKUForm.snCode = row.sn_code
+      this.SKUVisible = true
+    },
     /* 分页 */
-    goodsPageSizeChange(size){
+    goodsPageSizeChange(size) {
       this.params.page_size = size;
       API_Setting.getSnProduct(this.params).then((res) => {
         this.snTableData = res; //this.tableData.data
       });
     },
-    goodsPageCurrentChange(page){
+    goodsPageCurrentChange(page) {
       this.params.page_no = page;
       API_Setting.getSnProduct(this.params).then((res) => {
         this.snTableData = res; //this.tableData.data
-    
+
       });
 
     },
@@ -534,6 +496,7 @@ export default {
 .print {
   margin-left: 790px;
 }
+
 .face-image {
   display: block;
   width: 50px;
@@ -544,35 +507,42 @@ export default {
 /deep/ .el-dialog__body {
   padding: 10px 20px;
 }
+
 .header {
   display: flex;
   justify-content: flex-start;
   align-items: center;
+
   .el-input {
     width: 200px;
     margin: 15px;
   }
 }
+
 .dialog-footer {
   margin-top: 30px;
   margin-bottom: 20px;
   display: flex;
   justify-content: center;
+
   .el-input {
     width: 200px;
     margin-right: 15px;
   }
 }
+
 .info {
   text-align: center;
   color: #aaaaaa;
 }
+
 .search {
   display: flex;
   align-items: center;
   background: #fff;
   overflow: hidden;
   padding: 30px 10px 10px 10px;
+
   /deep/ .el-form-item {
     .el-form-item__content {
       .el-input {
@@ -580,13 +550,15 @@ export default {
       }
     }
   }
+
   .el-button {
     margin-top: -19px;
     margin-left: 20px;
   }
 }
+
 .numOrder {
-    display: flex;
-    justify-content: center;
-  }
+  display: flex;
+  justify-content: center;
+}
 </style>

+ 413 - 0
manager-admin/src/views/stock/freezeList.vue

@@ -0,0 +1,413 @@
+<template>
+    <div>
+       <!--  <div class="search">
+            <el-form ref="advancedForm" :model="advancedForm" label-width="160px">
+                <el-row>
+                    <el-col :span="12">
+                        <el-form-item label="仓库">
+                            <el-select v-model="advancedForm.out_warehouse_id">
+                                <el-option v-for="item in warehouseList" :key="item.id" :label="item.name"
+                                    :value="item.id" />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="商品编号/sku/序列号">
+                            <el-input v-model="advancedForm.input" placeholder="请输入内容" width="200px"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <el-button @click="advancedSearchEvent"> 搜索 </el-button>
+        </div> -->
+        <en-table-layout :tableData="tableData.data" ref="table" :loading="loading"
+            @selection-change="handleSelectionChange">
+            <div slot="toolbar" class="inner-toolbar">
+                <!--    <div class="toolbar-btns">
+        
+          </div> -->
+            </div>
+
+            <template slot="table-columns">
+                <el-table-column type="selection" width="55" />
+                <el-table-column prop="order_id" label="单据ID">
+                </el-table-column>
+                <el-table-column label="单据类型" prop="order_type">
+                </el-table-column>
+                <el-table-column label="是否默认解冻" prop="status">
+                </el-table-column>
+                <el-table-column prop="locked_num" label="冻结个数" />
+                <el-table-column prop="locked_time" label="冻结时间">
+                </el-table-column>
+                <el-table-column prop="un_locaked_num" label="解冻个数" />
+                <el-table-column prop="un_locaked_time" label="解冻时间" />
+                <!-- <el-table-column label="操作" width="250">
+            <template slot-scope="scope">
+              <el-button type="success1" size="mini" v-if="checkPermission(['goodsTransfer:submit'])"
+                @click="handleSubmitGoodsTransfer(scope.row)">设置预警库存</el-button>
+               <el-button type="success1" size="mini"
+                v-if="scope.row.allowable.submit && checkPermission(['goodsTransfer:submit'])"
+                @click="handleSubmitGoodsTransfer(scope.row)">提交</el-button>
+              <el-button type="danger" size="mini"
+                v-else-if="scope.row.allowable.withdraw && checkPermission(['goodsTransfer:withdraw'])"
+                @click="handleWithdrawGoodsTransfer(scope.row)">撤回</el-button> 
+              <el-button size="mini" @click="handleEditGoodsTransfer(scope.row)"
+                >查看</el-button
+              >
+              <el-button size="mini" @click="handleDelGoodsTransfer(scope.row)"
+                >删除</el-button
+              >
+              <el-button size="mini" v-if="scope.row.allowable.confirm && checkPermission(['goodsTransfer:confirm'])"
+                @click="handleSuccessGoodsTransfer(scope.row)" type="success">确认</el-button>
+              <el-button size="mini" v-if="scope.row.allowable.confirm && checkPermission(['goodsTransfer:return'])"
+                @click="handleRejectGoodsTransfer(scope.row)" type="danger">退回</el-button> 
+            </template>
+          </el-table-column>-->
+            </template>
+
+            <el-pagination v-if="tableData" slot="pagination" @size-change="handlePageSizeChange"
+                @current-change="handlePageCurrentChange" :current-page="tableData.page_no"
+                :page-sizes="[10, 20, 50, 100]" :page-size="tableData.page_size"
+                layout="total, sizes, prev, pager, next, jumper" :total="tableData.data_total">
+            </el-pagination>
+        </en-table-layout>
+       <!--  <el-dialog title="在途明细" :visible.sync="dialogVisible" append-to-body :close-on-click-modal="false"
+            :close-on-press-escape="false">
+            <el-table :data="transitDetails" border class="sku-table">
+                <el-table-column prop="order_sn" label="订单编号" />
+                <el-table-column prop="num" label="在途数量" />
+                <el-table-column prop="end_time" label="返回日期" />
+            </el-table>
+        </el-dialog>
+        <el-dialog title="设置预警数量" :visible.sync="numDialogVisible" append-to-body :close-on-click-modal="false"
+            :close-on-press-escape="false" width="30%">
+            <el-form ref="numAddForm" :model="numAddForm" :rules="numAddFormRule" label-width="160px" inline
+                class="change-form">
+                <el-form-item label="预警数量" prop="num" class="change-form-item">
+                    <el-input v-model="numAddForm.num" placeholder="请输入"></el-input>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="numDialogVisible = false">取 消</el-button>
+                <el-button @click="submitNum" type="primary">确 定</el-button>
+            </span>
+        </el-dialog> -->
+    </div>
+</template>
+
+<script>
+import * as API_GoodsTransfer from "@/api/goodsTransfer";
+import * as API_Setting from "@/api/setting";
+import * as API_BasicSetting from "@/api/basicSetting";
+import { mapGetters } from "vuex";
+export default {
+    name: "GoodsTransfer",
+    data() {
+        return {
+            warehouseList: [],
+            goodstransferType: [],
+            // 列表loading状态
+            loading: false,
+            // 列表参数
+            params: {
+                page_no: 1,
+                page_size: 10,
+            },
+            // 高级搜索数据
+            advancedForm: {},
+            // 列表数据
+            tableData: "",
+            // 当前已选择的行
+            multipleSelection: [],
+            GoodsTransferForm: {},
+            dialogVisible: false,
+            // 在途明细
+            transitDetails: [],
+            numDialogVisible: false,
+            numAddForm: {},
+            stockId: '',//选择的id
+            numAddFormRule: {
+                num: [{
+                    required: true,
+                    message: '请输入预警库存数量',
+                    trigger: 'blur'
+                },
+                {
+                    validator: (rule, value, callback) => {
+                        if (/^(?:[1-9]\d*)$/.test(value) == false) {
+                            callback(new Error("请输入正整数"));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: "blur",
+                },
+                ],
+            },
+            selectedRow: null, // 用于记录当前选中的行
+        };
+    },
+    mounted() {
+        this.GET_GoodsTransferList();
+        this.GET_DictDataInfo();
+        this.GET_WarehouseList();
+    },
+    watch: {
+        $route: function ({ query }) {
+            this.params.page_no = 1;
+            this.GET_GoodsTransferList();
+        },
+    },
+    computed: {
+        ...mapGetters(["user"]),
+    },
+    methods: {
+        /* 提交预警数量 */
+        submitNum() {
+            console.log(this.$refs["numAddForm"]);
+            this.$refs["numAddForm"].validate((valid) => {
+                if (valid) {
+                    API_GoodsTransfer.updateWarnStock(this.stockId, this.numAddForm.num).then(res => {
+                        this.numDialogVisible = false
+                        this.numAddForm = {}
+                        this.$message.success('预警库存设置成功!')
+                        this.GET_GoodsTransferList();
+                    })
+                }
+            })
+        },
+        // 删除
+        handleDelGoodsTransfer(row) {
+            this.$confirm("确定要删除这些库存吗?", "提示", { type: "warning" })
+                .then(() => {
+                    const ids = []
+                    ids.push(row.id)
+                    API_GoodsTransfer.deleteGoodsTransfer({ ids: ids }).then((res) => {
+                        this.$message.success("删除成功!");
+                        this.ids = []
+                        this.GET_GoodsTransferList();
+                    });
+                })
+                .catch(() => { });
+        },
+        // 导出
+        checkExport() { },
+        // 查看在途
+        lookTransit() {
+            if (!this.selectedRow) return this.$message.error('请先选择!')
+            API_GoodsTransfer.transitDetail(this.selectedRow.id).then(res => {
+                console.log(res);
+                this.dialogVisible = true;
+                this.transitDetails = res
+            })
+        },
+        handleSuccessGoodsTransfer(row) {
+            API_GoodsTransfer.successGoodsTransfer(row.id, {
+                in_handled_by_id: this.user.uid,
+                in_handled_by_name: this.user.username,
+            }).then(() => {
+                this.$message.success("确认成功!");
+                this.GET_GoodsTransferList();
+            });
+        },
+        handleRejectGoodsTransfer(row) {
+            API_GoodsTransfer.rejectGoodsTransfer(row.id, {
+                in_handled_by_id: this.user.uid,
+                in_handled_by_name: this.user.username,
+            }).then(() => {
+                this.$message.success("退回成功!");
+                this.GET_GoodsTransferList();
+            });
+        },
+        /** 获取仓库 */
+        GET_WarehouseList() {
+            API_BasicSetting.getWarehouseListAll().then((response) => {
+                this.warehouseList = response;
+            });
+        },
+        typeFilter(row) {
+            return this.goodstransferType.find((type) => type.value === row).label;
+        },
+        GET_DictDataInfo() {
+            API_Setting.getDictDataInfo("erp_goodstransfer_type").then((res) => {
+                this.goodstransferType = res;
+            });
+        },
+        handleSubmitGoodsTransfer(row) {
+            this.stockId = row.id
+            this.numDialogVisible = true
+            /* API_GoodsTransfer.submitGoodsTransfer(row.id).then(() => {
+              this.$message.success("提交成功!");
+              this.GET_GoodsTransferList();
+            }); */
+        },
+        handleWithdrawGoodsTransfer(row) {
+            API_GoodsTransfer.withdrawGoodsTransfer(row.id).then(() => {
+                this.$message.success("撤回成功!");
+                this.GET_GoodsTransferList();
+            });
+        },
+        /** 调拨单状态 */
+        statusFilter(val) {
+            switch (val) {
+                case "NotSubmit":
+                    return "未提交";
+                case "Submit":
+                    return "已提交";
+                case "Confirm":
+                    return "已确认";
+                case "AuditReject ":
+                    return "已退回";
+                default:
+                    return "";
+            }
+        },
+        handleDeleteGoodsTransfer() {
+            if (!this.multipleSelection || !this.multipleSelection.length)
+                return this.$message.error("请先选择!");
+            this.$confirm("确定要删除这些库存吗?", "提示", { type: "warning" })
+                .then(() => {
+                    const ids = this.multipleSelection.map((item) => item.id);
+                    API_GoodsTransfer.deleteGoodsTransfer({ ids: ids }).then(() => {
+                        this.$message.success("删除成功!");
+                        this.GET_GoodsTransferList();
+                    });
+                })
+                .catch(() => { });
+        },
+        /** 多选改变 */
+        handleSelectionChange(selection, row) {
+            if (selection.length > 0) {
+                const lastSelected = selection[selection.length - 1];
+                if (this.selectedRow && this.selectedRow !== lastSelected) {
+                    this.selectedRow = lastSelected;
+                } else {
+                    this.selectedRow = lastSelected;
+                }
+            } else {
+                this.selectedRow = null;
+            }
+        },
+        selectableRow(row, index) {
+            // 这个方法决定了哪些行是可选的
+            return !this.selectedRow || this.selectedRow === row;
+        },
+        /** 分页大小发生改变 */
+        handlePageSizeChange(size) {
+            this.params.page_size = size;
+            this.GET_GoodsTransferList();
+        },
+
+        /** 分页页数发生改变 */
+        handlePageCurrentChange(page) {
+            this.params.page_no = page;
+            this.GET_GoodsTransferList();
+        },
+
+        /** 添加商品调拨 */
+        handleAddGoodsTransfer() {
+            this.$router.push({
+                name: "goodsTransferAdd",
+                params: { callback: this.GET_GoodsTransferList },
+            });
+        },
+        /** 编辑商品调拨 */
+        handleEditGoodsTransfer(row) {
+            this.$router.push({
+                name: "goodsTransferDetail",
+                params: { id: row.id },
+            });
+        },
+        /** 搜索事件触发 */
+        searchEvent(data) {
+            this.params = {
+                ...this.params,
+                sn: data,
+            };
+            Object.keys(this.advancedForm).forEach((key) => delete this.params[key]);
+            this.params.page_no = 1;
+            this.GET_GoodsTransferList();
+        },
+        /** 高级搜索事件触发 */
+        advancedSearchEvent() {
+            this.params = {
+                ...this.params,
+                ...this.advancedForm,
+            };
+            delete this.params.start_time;
+            delete this.params.end_time;
+            if (this.advancedForm.purchasePlan_time_range) {
+                this.params.start_time = parseInt(
+                    Number(this.advancedForm.purchasePlan_time_range[0]) / 1000
+                );
+                this.params.end_time = parseInt(
+                    Number(this.advancedForm.purchasePlan_time_range[1]) / 1000
+                );
+            }
+            delete this.params.purchasePlan_time_range;
+            this.params.page_no = 1;
+            this.GET_GoodsTransferList();
+        },
+        /** 获取商品调拨列表 */
+        GET_GoodsTransferList() {
+            this.loading = true;
+            API_GoodsTransfer.productStock(this.params)
+                .then((response) => {
+                    this.loading = false;
+                    //this.tableData = response;
+                })
+                .catch(() => {
+                    this.loading = false;
+                });
+        },
+    },
+};
+</script>
+
+<style type="text/scss" lang="scss" scoped>
+.search {
+    display: flex;
+    align-items: center;
+    background: #fff;
+    overflow: hidden;
+    padding: 30px 10px 10px 10px;
+
+    /deep/ .el-form-item {
+        .el-form-item__content {
+            .el-input {
+                width: 200px;
+            }
+        }
+    }
+
+    .el-button {
+        margin-top: -19px;
+        margin-left: 20px;
+    }
+}
+
+.tips-t {
+    display: flex;
+    padding: 10px 0;
+
+    div {
+        flex: 1;
+        text-align: center;
+    }
+}
+
+.tips-f {
+    padding: 20px 0;
+}
+
+.face-image {
+    display: block;
+    width: 50px;
+    height: 50px;
+    margin: 0 auto;
+}
+
+/deep/ .el-dialog__body {
+    padding: 10px 20px;
+}
+</style>

+ 18 - 19
manager-admin/src/views/stock/goodsExchange/addInventory.vue

@@ -4,11 +4,10 @@
       label-width="160px" inline class="change-form">
       <el-form-item label="订单" prop="order_id" class="change-form-item">
         <span>
-          <el-input v-model="goodsExchangeAddForm.sn"  ref="order"
-            @keyup.enter.native="blurUsername()">
+          <el-input v-model="goodsExchangeAddForm.sn" ref="order" @keyup.enter.native="blurUsername()">
           </el-input>
-          <el-button  @click="blurUsername()">搜索</el-button>
-          <el-button  @click="orderBtn">订单列表</el-button>
+          <el-button @click="blurUsername()">搜索</el-button>
+          <el-button @click="orderBtn">订单列表</el-button>
         </span>
       </el-form-item>
       <el-form-item prop="warehouse_id" label="入库仓库" class="change-form-item">
@@ -19,7 +18,7 @@
       </el-form-item>
       <el-form-item label="类型" prop="type" class="change-form-item">
         <el-select v-model="goodsExchangeAddForm.type" filterable allow-create clearable default-first-option
-          :disabled="type === 'detail' || type === 'audit' || orderType ||goodsExchangeAddForm.type=='SALE_AFTER' ||goodsExchangeAddForm.type=='HAIL_ENTRY'">
+          :disabled="type === 'detail' || type === 'audit' || orderType || goodsExchangeAddForm.type == 'SALE_AFTER' || goodsExchangeAddForm.type == 'HAIL_ENTRY'">
           <el-option v-for="item in typeList" :key="item.id" :label="item.label" :value="item.value"
             :disabled="item.value == 'TRANSFER_ENTRY' || item.value == 'HAIL_ENTRY' || item.value == 'SALE_AFTER'" />
         </el-select>
@@ -60,9 +59,9 @@
             <el-table-column label="序列号">
               <template slot-scope="scope">
                 <div class="sn-code-container">
-                  <span v-for="(item, index) in scope.row.sn_code_list" :key="item.id"><span
-                      v-if="index !== 0">,</span>{{
-                        item.sn_code }}</span>
+                  <span v-for="item in scope.row.sn_code_list" :key="item.id">
+                    <p>{{ item.sn_code }}</p>
+                  </span>
                 </div>
               </template>
             </el-table-column>
@@ -106,7 +105,7 @@
               <template slot-scope="scope">
                 <span v-if="scope.row.order_num">{{
                   scope.row.num - scope.row.order_num || 0
-                  }}</span>
+                }}</span>
               </template>
             </el-table-column>
             <el-table-column width="200" label="操作" v-if="type !== 'detail' && type !== 'audit'">
@@ -116,7 +115,7 @@
                   @click="addSnCode(scope.row, scope.$index)"
                   >添加序列号</el-button
                 > -->
-                <el-button size="mini" type="danger"  @click="
+                <el-button size="mini" type="danger" @click="
                   goodsExchangeAddForm.product_list.splice(scope.$index, 1)
                   ">删除</el-button>
               </template>
@@ -213,7 +212,7 @@
         <el-table-column prop="order_time" label="下单时间">
           <template slot-scope="scope">{{
             scope.row.order_time | unixToDate
-            }}</template>
+          }}</template>
         </el-table-column>
         <el-table-column prop="" label="仓库名称">
           <template slot-scope="scope">
@@ -223,7 +222,7 @@
         <el-table-column prop="" label="配送方式">
           <template slot-scope="scope">{{
             deliveryType(scope.row.send_type)
-            }}</template>
+          }}</template>
         </el-table-column>
         <!-- <el-table-column prop="pay_type" label="付款方式">
           <template slot-scope="scope">{{
@@ -233,7 +232,7 @@
         <el-table-column prop="" label="实付金额">
           <template slot-scope="scope">{{
             "¥" + scope.row.pay_price
-            }}</template>
+          }}</template>
         </el-table-column>
         <!-- <el-table-column prop="" label="订单状态">
           <template slot-scope="scope">
@@ -684,10 +683,10 @@ export default {
               el.scan_order_id = res.id;
               if (res.scan_order_type == 'saleAfter') {
                 el.num = el.return_num
-                el.order_num=el.order_item_num
+                el.order_num = el.order_item_num
               } else {
                 el.order_num = el.num;
-                el.num=0
+                el.num = 0
               }
               el.sn_code_list = [];
             });
@@ -719,11 +718,11 @@ export default {
               el.scan_order_item_id = el.id;
               el.scan_order_id = res.id;
               if (res.scan_order_type == 'saleAfter') {
-                el.order_num=el.num
+                el.order_num = el.num
                 el.num = el.return_num
               } else {
                 el.order_num = el.num;
-                el.num=0
+                el.num = 0
               }
               el.sn_code_list = [];
             });
@@ -1220,7 +1219,7 @@ export default {
             this.goodsExchangeAddForm.change_time * 1000
           );
           response.product_list.map((el) => {
-            el.return_num=el.num
+            el.return_num = el.num
             if (!el.sn_code_list) {
               el.sn_code_list = [];
             }
@@ -1336,7 +1335,7 @@ export default {
 }
 
 .sn-code-container {
-  max-height: 150px;
+  max-height: 100px;
   /* 设置最大高度,超过这个高度将显示滚动条 */
   overflow-y: auto;
   /* 垂直方向上溢出时显示滚动条 */

+ 39 - 61
manager-admin/src/views/stock/goodsExchange/checkInventory.vue

@@ -8,27 +8,12 @@
       <div class="numOrder">
         <barcode :value="barcodeValue"></barcode>
       </div>
-      <el-form
-        ref="goodsExchangeAddForm"
-        :model="goodsExchangeAddForm"
-        :rules="goodsExchangeAddFormRule"
-        label-width="120px"
-        inline
-        class="change-form"
-      >
-        <el-form-item
-          label="订单:"
-          prop="sn"
-          class="change-form-item"
-          v-if="checkType == 'second'"
-        >
+      <el-form ref="goodsExchangeAddForm" :model="goodsExchangeAddForm" :rules="goodsExchangeAddFormRule"
+        label-width="120px" inline class="change-form">
+        <el-form-item label="订单:" prop="sn" class="change-form-item" v-if="checkType == 'second'">
           {{ goodsExchangeAddForm.sn }}
         </el-form-item>
-        <el-form-item
-          v-if="checkType == 'first'"
-          label="出库仓库:"
-          class="change-form-item"
-        >
+        <el-form-item v-if="checkType == 'first'" label="出库仓库:" class="change-form-item">
           {{ warehouseName(goodsExchangeAddForm.warehouse_id) }}
         </el-form-item>
         <el-form-item v-else label="入库仓库:" class="change-form-item">
@@ -37,29 +22,18 @@
         <el-form-item label="类型:" prop="type" class="change-form-item">
           {{ warehouseType(goodsExchangeAddForm.type) }}
         </el-form-item>
-        <el-form-item
-          label="备注:"
-          prop="memo"
-          class="change-form-item"
-          style="width: 61%"
-        >
-        <span v-if="checkType == 'first'">{{ goodsExchangeAddForm.notes}}</span>
-         <span v-else>{{ goodsExchangeAddForm.memo }}</span>
+        <el-form-item label="备注:" prop="memo" class="change-form-item" style="width: 61%">
+          <span v-if="checkType == 'first'">{{ goodsExchangeAddForm.notes }}</span>
+          <span v-else>{{ goodsExchangeAddForm.memo }}</span>
         </el-form-item>
         <div class="mx">
           <h3>商品明细</h3>
         </div>
         <div style="width: 100%; display: block">
           <el-form-item style="width: 100%">
-            <el-table
-              :data="goodsExchangeAddForm.product_list"
-              border
-              :cell-style="{ textAlign: 'center' }"
-              row-key="id"
-              :header-cell-style="{ textAlign: 'center' }"
-              class="draggable-table"
-              style="width: 100%; margin-top: 20px"
-            >
+            <el-table :data="goodsExchangeAddForm.product_list" border :cell-style="{ textAlign: 'center' }"
+              row-key="id" :header-cell-style="{ textAlign: 'center' }" class="draggable-table"
+              style="width: 100%; margin-top: 20px">
               <el-table-column label="商品编号">
                 <template slot-scope="scope">
                   {{ scope.row.goods_vo.sn }}
@@ -78,19 +52,21 @@
                 </template>
               </el-table-column>
               <el-table-column label="序列号">
-              <template slot-scope="scope">
-                <span v-for="item in scope.row.sn_code_list" :key="item.id">{{item.sn_code}},</span>
-                <!--<span v-if="id">{{ scope.row.product_vo.sn_code }}</span>
-                    <span v-else>{{ scope.row.sn_code }}</span> -->
-              </template>
-            </el-table-column>
+                <template slot-scope="scope">
+                  <div class="sn-code-container">
+                    <span v-for="item in scope.row.sn_code_list" :key="item.id">
+                      <p>{{ item.sn_code }}</p>
+                    </span>
+                  </div>
+                </template>
+              </el-table-column>
               <el-table-column prop="product_vo.spec_name" label="规格型号" v-if="id">
                 <!-- <template slot-scope="scope">
                   {{ scope.row.product_vo.spec_name.join("/") }}
                 </template> -->
               </el-table-column>
               <el-table-column prop="spec_name" label="规格型号" v-else>
-               <!--  <template slot-scope="scope">
+                <!--  <template slot-scope="scope">
                   {{ scope.row.spec_name.join("/") }}
                 </template> -->
               </el-table-column>
@@ -103,24 +79,21 @@
               <!-- <el-table-column label="订单数量"> </el-table-column> -->
               <el-table-column v-if="checkType == 'first'" label="出库数量">
                 <template slot-scope="scope">
-                  <el-input
-                    v-model="scope.row.out_num"
-                    type="number"
-                    :min="0"
-                    :maxlength="20"
-                    :disabled="true"
-                  ></el-input>
+                  {{ scope.row.out_num }}
+                  <!-- <el-input v-model="scope.row.out_num" type="number" :min="0" :maxlength="20"
+                    :disabled="true"></el-input> -->
                 </template>
               </el-table-column>
               <el-table-column v-else label="入库数量">
                 <template slot-scope="scope">
-                  <el-input
+                  {{ scope.row.num }}
+                  <!--  <el-input
                     v-model="scope.row.num"
                     type="number"
                     :min="0"
                     :maxlength="20"
                     :disabled="true"
-                  ></el-input>
+                  ></el-input> -->
                 </template>
               </el-table-column>
               <el-table-column label="库存数量" v-if="checkType == 'first'">
@@ -136,14 +109,9 @@
               </el-table-column>-->
               <el-table-column label="操作" v-if="false">
                 <template slot-scope="scope">
-                  <el-button
-                    size="mini"
-                    type="danger"
-                    @click="
-                      goodsExchangeAddForm.product_list.splice(scope.$index, 1)
-                    "
-                    >删除</el-button
-                  >
+                  <el-button size="mini" type="danger" @click="
+                    goodsExchangeAddForm.product_list.splice(scope.$index, 1)
+                    ">删除</el-button>
                 </template>
               </el-table-column>
             </el-table>
@@ -298,7 +266,7 @@ export default {
       });
     },
     // 打印功能
-    printIng() {},
+    printIng() { },
     /** 出入库单 */
     handlePrintGoodsLend() {
       // Print({
@@ -444,6 +412,7 @@ export default {
     border: none;
   }
 }
+
 /** 底部步骤 */
 .footer {
   width: 100%;
@@ -496,9 +465,11 @@ export default {
   background-color: #fff;
   margin: 10px;
   padding: 25px;
+
   .title {
     text-align: center;
   }
+
   .numOrder {
     display: flex;
     justify-content: center;
@@ -526,6 +497,13 @@ export default {
   }
 }
 
+.sn-code-container {
+  max-height: 100px;
+  /* 设置最大高度,超过这个高度将显示滚动条 */
+  overflow-y: auto;
+  /* 垂直方向上溢出时显示滚动条 */
+}
+
 /deep/ {
   .el-input--suffix .el-input__inner {
     padding-right: 10px;

+ 104 - 208
manager-admin/src/views/stock/goodsExchange/goodsExchangeAdd.vue

@@ -1,47 +1,18 @@
 <template>
   <div class="bg-in-stock">
-    <el-form
-      ref="goodsExchangeAddForm"
-      :model="goodsExchangeAddForm"
-      :rules="goodsExchangeAddFormRule"
-      label-width="160px"
-      inline
-      class="change-form"
-    >
-      <el-form-item
-        prop="warehouse_id"
-        label="出库仓库"
-        class="change-form-item"
-      >
-        <el-select
-          v-model="goodsExchangeAddForm.warehouse_id"
-          :disabled="type === 'detail' || type === 'audit'"
-        >
+    <el-form ref="goodsExchangeAddForm" :model="goodsExchangeAddForm" :rules="goodsExchangeAddFormRule"
+      label-width="160px" inline class="change-form">
+      <el-form-item prop="warehouse_id" label="出库仓库" class="change-form-item">
+        <el-select v-model="goodsExchangeAddForm.warehouse_id" :disabled="type === 'detail' || type === 'audit'">
           <!-- @change="handleChangeWareHouse" -->
-          <el-option
-            v-for="item in warehouseList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
+          <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="类型" prop="type" class="change-form-item">
-        <el-select
-          v-model="goodsExchangeAddForm.type"
-          filterable
-          allow-create
-          clearable
-          default-first-option
-          :disabled="type === 'detail' || type === 'audit'"
-        >
-          <el-option
-            v-for="item in typeList"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-            :disabled="item.value=='SALE_OUT' ||item.value=='HAIL_OUT'||item.value=='DAMAGE_OUT'"
-          />
+        <el-select v-model="goodsExchangeAddForm.type" filterable allow-create clearable default-first-option
+          :disabled="type === 'detail' || type === 'audit'">
+          <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value"
+            :disabled="item.value == 'SALE_OUT' || item.value == 'HAIL_OUT' || item.value == 'DAMAGE_OUT'" />
         </el-select>
       </el-form-item>
       <!-- <el-form-item label="订单" prop="order_sn" class="change-form-item">
@@ -52,21 +23,10 @@
         >
         </el-input>
       </el-form-item> -->
-      <el-form-item
-        label="备注"
-        prop="notes"
-        class="change-form-item"
-        style="width: 61%"
-      >
-        <el-input
-          style="flex: 1"
-          v-model="goodsExchangeAddForm.notes"
-          type="textarea"
-          :disabled="type === 'detail' || type === 'audit'"
-          maxlength="250"
-          :autosize="{ minRows: 3, maxRows: 4 }"
-          placeholder="请输入"
-        ></el-input>
+      <el-form-item label="备注" prop="notes" class="change-form-item" style="width: 61%">
+        <el-input style="flex: 1" v-model="goodsExchangeAddForm.notes" type="textarea"
+          :disabled="type === 'detail' || type === 'audit'" maxlength="250" :autosize="{ minRows: 3, maxRows: 4 }"
+          placeholder="请输入"></el-input>
       </el-form-item>
       <!--  <div class="mx">
         <h3>商品明细</h3>
@@ -79,80 +39,63 @@
               <template slot-scope="scope">
                 {{ scope.row.stock_sn }}
               </template>
-            </el-table-column>
-            <el-table-column label="商品编号">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="商品编号">
+  <template slot-scope="scope">
                 {{ scope.row.product_sn }}
               </template>
-            </el-table-column>
-            <el-table-column label="商品名称">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="商品名称">
+  <template slot-scope="scope">
                 {{ scope.row.product_name }}
               </template>
-            </el-table-column>
-            <el-table-column label="规格型号">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="规格型号">
+  <template slot-scope="scope">
                 {{ scope.row.specification }}
               </template>
-            </el-table-column>
-            <el-table-column label="单位">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="单位">
+  <template slot-scope="scope">
                 {{ scope.row.unit }}
               </template>
-            </el-table-column>
-            <el-table-column label="单价">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="单价">
+  <template slot-scope="scope">
                 ¥{{ scope.row.amount }}
               </template>
-            </el-table-column>
-            <el-table-column label="数量">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="数量">
+  <template slot-scope="scope">
                 <el-input v-model="scope.row.num" type="number" :min="0" :maxlength="20"
                   :disabled="type === 'detail' || type === 'audit'"></el-input>
               </template>
-            </el-table-column>
-            <el-table-column label="金额">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="金额">
+  <template slot-scope="scope">
                 {{ scope.row.num * scope.row.amount || 0 }}
               </template>
-            </el-table-column>
-            <el-table-column label="操作" v-if="type !== 'detail' && type !== 'audit'">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="操作" v-if="type !== 'detail' && type !== 'audit'">
+  <template slot-scope="scope">
                 <el-button size="mini" type="danger"
                   @click="goodsExchangeAddForm.return_list.splice(scope.$index, 1)">删除</el-button>
               </template>
-            </el-table-column>
-          </el-table>
-        </el-form-item>
-      </div> -->
+</el-table-column>
+</el-table>
+</el-form-item>
+</div> -->
       <div class="mx">
         <h3>商品明细</h3>
-        <el-button
-          class="button"
-          size="mini"
-          type="primary"
-          v-if="type !== 'detail' && type !== 'audit'"
-          @click="scanCode"
-          >扫码出库</el-button
-        >
-        <el-button
-          class="button"
-          size="mini"
-          type="primary"
-          v-if="type !== 'detail' && type !== 'audit'"
-          @click="handleSelectWarehouseEntryBatch"
-          >选择</el-button
-        >
+        <el-button class="button" size="mini" type="primary" v-if="type !== 'detail' && type !== 'audit'"
+          @click="scanCode">扫码出库</el-button>
+        <el-button class="button" size="mini" type="primary" v-if="type !== 'detail' && type !== 'audit'"
+          @click="handleSelectWarehouseEntryBatch">选择</el-button>
       </div>
       <div style="width: 100%; display: block">
         <el-form-item style="width: 100%">
-          <el-table
-            :data="goodsExchangeAddForm.product_list"
-            border
-            :cell-style="{ textAlign: 'center' }"
-            :header-cell-style="{ textAlign: 'center' }"
-            style="width: 100%; margin-top: 20px"
-          >
+          <el-table :data="goodsExchangeAddForm.product_list" border :cell-style="{ textAlign: 'center' }"
+            :header-cell-style="{ textAlign: 'center' }" style="width: 100%; margin-top: 20px">
             <el-table-column label="商品编号">
               <template slot-scope="scope">
                 <span v-if="id">{{ scope.row.goods_vo.sn }}</span>
@@ -173,23 +116,19 @@
             </el-table-column>
             <el-table-column label="序列号" v-if="sn_code_list">
               <template slot-scope="scope">
-                    <span v-for="(item,index) in scope.row.sn_code_list" :key="item.id"><span v-if="index!==0">,</span>{{ item.sn_code }}</span>
-                  </template>
+                <div class="sn-code-container">
+                  <span v-for="item in scope.row.sn_code_list" :key="item.id">
+                    <p>{{ item.sn_code }}</p>
+                  </span>
+                </div>
+              </template>
             </el-table-column>
-            <el-table-column
-              prop="product_vo.spec_name"
-              label="规格型号"
-              v-if="id"
-            >
+            <el-table-column prop="product_vo.spec_name" label="规格型号" v-if="id">
               <!--  <template slot-scope="scope">
                 {{ scope.row.product_vo.spec_name.join("/") }}
               </template> -->
             </el-table-column>
-            <el-table-column
-              prop="product_vo.spec_name"
-              label="规格型号"
-              v-else
-            >
+            <el-table-column prop="product_vo.spec_name" label="规格型号" v-else>
               <!--  <template slot-scope="scope">
                 {{ scope.row.product_vo.spec_name.join("/") }}
               </template> -->
@@ -202,13 +141,8 @@
             </el-table-column>
             <el-table-column label="出库数量">
               <template slot-scope="scope">
-                <el-input
-                  v-model="scope.row.out_num"
-                  type="number"
-                  :min="0"
-                  :maxlength="20"
-                  :disabled="type === 'detail' || type === 'audit'"
-                ></el-input>
+                <el-input v-model="scope.row.out_num" type="number" :min="0" :maxlength="20"
+                  :disabled="type === 'detail' || type === 'audit'"></el-input>
               </template>
             </el-table-column>
             <el-table-column label="库存数量">
@@ -222,25 +156,16 @@
                 {{ scope.row.usable_stock - scope.row.out_num || 0 }}
               </template>
             </el-table-column>
-            <el-table-column
-            width="200"
-              label="操作"
-              v-if="type !== 'detail' && type !== 'audit'"
-            >
+            <el-table-column width="200" label="操作" v-if="type !== 'detail' && type !== 'audit'">
               <template slot-scope="scope">
                 <!-- <el-button
                   size="mini"
                   @click="addSnCode(scope.row,scope.$index)"
                   >添加序列号</el-button
                 > -->
-                <el-button
-                  size="mini"
-                  type="danger"
-                  @click="
-                    goodsExchangeAddForm.product_list.splice(scope.$index, 1)
-                  "
-                  >删除</el-button
-                >
+                <el-button size="mini" type="danger" @click="
+                  goodsExchangeAddForm.product_list.splice(scope.$index, 1)
+                  ">删除</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -252,70 +177,35 @@
       </el-button>
       <el-button v-if="type === 'audit'" type="danger" @click="dialogVisible = true">审核驳回
       </el-button> -->
-      <el-button
-        v-if="type !== 'audit' && type !== 'detail'"
-        type="primary"
-        @click="saveGoodsExchangeAddForm"
-        >保存
+      <el-button v-if="type !== 'audit' && type !== 'detail'" type="primary" @click="saveGoodsExchangeAddForm">保存
       </el-button>
-      <el-button
-        v-if="type !== 'audit' && type !== 'detail'"
-        type="primary"
-        @click="submitGoodsExchangeAddForm"
-        >出库
+      <el-button v-if="type !== 'audit' && type !== 'detail'" type="primary" @click="submitGoodsExchangeAddForm">出库
       </el-button>
       <el-button @click="printIng" v-if="type == 'audit'">打印</el-button>
       <el-button @click="toBack()">返回</el-button>
     </div>
 
     <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
-      <el-form
-        ref="goodsExchangeAddForm"
-        :model="goodsExchangeAddForm"
-        label-width="120px"
-        inline
-        style="width: 900px"
-      >
+      <el-form ref="goodsExchangeAddForm" :model="goodsExchangeAddForm" label-width="120px" inline style="width: 900px">
         <el-form-item label="驳回原因" prop="reject_reason">
-          <el-input
-            v-model="goodsExchangeAddForm.reject_reason"
-            type="textarea"
-            :minlength="0"
-            :maxlength="100"
-          ></el-input>
+          <el-input v-model="goodsExchangeAddForm.reject_reason" type="textarea" :minlength="0"
+            :maxlength="100"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="handleRejectGoodsExchange()"
-          >确 定</el-button
-        >
+        <el-button type="primary" @click="handleRejectGoodsExchange()">确 定</el-button>
       </span>
     </el-dialog>
     <el-dialog title="扫码出库" :visible.sync="scanDialogVisible" width="30%" :close-on-click-modal="false">
-      <el-form
-        ref="scanGoodsForm"
-        :model="scanGoodsForm"
-        label-width="120px"
-        inline
-      >
+      <el-form ref="scanGoodsForm" :model="scanGoodsForm" label-width="120px" inline>
         <el-form-item label="sku" prop="bar_code">
-          <el-input
-            v-model="scanGoodsForm.bar_code"
-            ref="input"
-            @keyup.enter.native="toSearch()"
-            :minlength="0"
-            :maxlength="100"
-          ></el-input>
+          <el-input v-model="scanGoodsForm.bar_code" ref="input" @keyup.enter.native="toSearch()" :minlength="0"
+            :maxlength="100"></el-input>
         </el-form-item>
         <el-form-item label="序列号" prop="sn_code">
-          <el-input
-            v-model="sn_code"
-            ref="sn_input"
-            @keyup.enter.native="toSnCode()"
-            :minlength="0"
-            :maxlength="100"
-          ></el-input>
+          <el-input v-model="sn_code" ref="sn_input" @keyup.enter.native="toSnCode()" :minlength="0"
+            :maxlength="100"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -323,7 +213,7 @@
         <el-button type="primary" @click="handleRejectGoodsExchange()">确 定</el-button> -->
       </span>
     </el-dialog>
-  <!--   <el-dialog
+    <!--   <el-dialog
       title="序列号"
       :visible.sync="snCodeVisible"
       width="30%"
@@ -538,8 +428,8 @@ export default {
     ...mapGetters(["user"]),
   },
   methods: {
-     /* 返回出入明细 */
-     toBack() {
+    /* 返回出入明细 */
+    toBack() {
       this.$router.push({
         name: "goodsExchange",
         params: { type: "first" },
@@ -549,8 +439,8 @@ export default {
     toSnCode() {
       API_GoodsExchange.getSnCode("out", this.sku, this.sn_code.replace(/\s+/g, '')).then((res) => {
         this.sn_code = "";
-         // 假设res是一个对象,我们根据res的某个属性(如sn)来检查重复
-         let exists = this.goodsExchangeAddForm.product_list[
+        // 假设res是一个对象,我们根据res的某个属性(如sn)来检查重复
+        let exists = this.goodsExchangeAddForm.product_list[
           this.index
         ].sn_code_list.find(
           (item) => item.sn_code === res.sn_code && item.sku === res.sku
@@ -560,7 +450,7 @@ export default {
             res
           );
         }
-        this.goodsExchangeAddForm.product_list[this.index].out_num= this.goodsExchangeAddForm.product_list[this.index].sn_code_list.length
+        this.goodsExchangeAddForm.product_list[this.index].out_num = this.goodsExchangeAddForm.product_list[this.index].sn_code_list.length
         this.scanGoodsForm.bar_code = "";
         this.$nextTick(() => {
           this.$refs.input.focus();
@@ -612,14 +502,14 @@ export default {
         this.goodsVisible = false;
       },*/
     // 打印功能
-    printIng() {},
+    printIng() { },
     /* 出库扫码 */
     toSearch() {
       API_GoodsExchange.getProduct(
         this.goodsExchangeAddForm.warehouse_id,
         this.scanGoodsForm.bar_code.replace(/\s+/g, '')
       ).then((res) => {
-        res.sn_code_list=[]
+        res.sn_code_list = []
         this.sku = res.product_vo.sku;
         // 查找当前商品是否已存在于列表中
         const indexs = this.goodsExchangeAddForm.product_list.findIndex((el) => {
@@ -633,17 +523,17 @@ export default {
         });
         // 如果商品不存在,则添加到列表
         if (indexs === -1) {
-          this.index=this.goodsExchangeAddForm.product_list.length
+          this.index = this.goodsExchangeAddForm.product_list.length
           this.goodsExchangeAddForm.product_list.push(res);
         } else {
-           this.index=indexs
+          this.index = indexs
         }
         if (res.product_vo.have_sn) {
           this.$nextTick(() => {
             this.$refs.sn_input.focus();
           });
         } else {
-         // this.scanDialogVisible = false;
+          // this.scanDialogVisible = false;
         }
       });
     },
@@ -784,11 +674,11 @@ export default {
             return true
           });
           if (!isStockSufficient) {
-                return;
-              }
-          params.product_list.map(el=>{
-            el.product_stock_id=el.id
-            el.id=''
+            return;
+          }
+          params.product_list.map(el => {
+            el.product_stock_id = el.id
+            el.id = ''
           })
           if (this.$route.name === "goodsExchangeEdit") {
             API_GoodsExchange.editWarehouseOut(id, params).then((response) => {
@@ -843,9 +733,9 @@ export default {
             this.$message.error("请选择商品!");
             return;
           }
-           params.product_list.map(el=>{
-            el.product_stock_id=el.id
-            el.id=''
+          params.product_list.map(el => {
+            el.product_stock_id = el.id
+            el.id = ''
           })
           const isStockSufficient = params.product_list.map((el) => {
             if (el.out_num < el.usable_stock) {
@@ -855,8 +745,8 @@ export default {
             return true
           });
           if (!isStockSufficient) {
-                return;
-              }
+            return;
+          }
           if (this.$route.name === "goodsExchangeEdit") {
             API_GoodsExchange.editWarehouseOut(id, params).then((response) => {
               this.$message.success("修改成功!");
@@ -900,13 +790,13 @@ export default {
         //change_list
         selectedIds: this.id
           ? this.goodsExchangeAddForm.product_list &&
-            this.goodsExchangeAddForm.product_list.map((item) => item.id)
+          this.goodsExchangeAddForm.product_list.map((item) => item.id)
           : this.goodsExchangeAddForm.product_list.map((item) => item.id),
         purchasePlanApiParams: {
           warehouse_id: this.goodsExchangeAddForm.warehouse_id,
         },
       });
-      goodsData.purchasePlans.map(el=>{el.sn_code_list=[]})
+      goodsData.purchasePlans.map(el => { el.sn_code_list = [] })
       this.goodsExchangeAddForm.warehouse_id = goodsData.warehouse_id;
       this.goodsExchangeAddForm.product_list = goodsData.purchasePlans;
       console.log(this.goodsExchangeAddForm.product_list);/*.map(
@@ -987,9 +877,9 @@ export default {
           this.goodsExchangeAddForm.change_time = Math.floor(
             this.goodsExchangeAddForm.change_time * 1000
           );
-          response.product_list.map(el=>{
-            if(!el.sn_code_list){
-              el.sn_code_list=[]
+          response.product_list.map(el => {
+            if (!el.sn_code_list) {
+              el.sn_code_list = []
             }
           })
           this.goodsExchangeAddForm.distribution_name = response.staff_name;
@@ -1099,6 +989,12 @@ export default {
     }
   }
 }
+.sn-code-container {
+  max-height: 100px;
+  /* 设置最大高度,超过这个高度将显示滚动条 */
+  overflow-y: auto;
+  /* 垂直方向上溢出时显示滚动条 */
+}
 
 /deep/ {
   .el-input--suffix .el-input__inner {

+ 25 - 5
manager-admin/src/views/stock/goodsInventory/goodsInventoryAdd.vue

@@ -7,23 +7,27 @@
         <el-input v-model="goodsInventoryAddForm.sn" :disabled="true"></el-input>
       </el-form-item>
       <el-form-item label="盘点时间" prop="inventory_time" class="change-form-item">
-        <el-date-picker v-model="goodsInventoryAddForm.inventory_time" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+       <span v-if="id">{{ goodsInventoryAddForm.inventory_time }}</span> 
+        <el-date-picker v-else v-model="goodsInventoryAddForm.inventory_time" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
           :disabled="type === 'detail' || type === 'audit' || type==='check'" placeholder="选择日期时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="仓库" prop="warehouse_id" class="change-form-item">
-        <el-select v-model="goodsInventoryAddForm.warehouse_id" @change="handleChangeWareHouse"
+        <span v-if="id">{{ getWarehouse(goodsInventoryAddForm.warehouse_id)  }}</span> 
+        <el-select v-else v-model="goodsInventoryAddForm.warehouse_id" @change="handleChangeWareHouse"
           :disabled="type === 'detail' || type === 'audit' || type==='check'">
           <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="盘点人" prop="inventory_person_id" class="change-form-item">
-        <el-select @change="forceUpdate" v-model="goodsInventoryAddForm.inventory_person_id" :disabled="type === 'detail' || type === 'audit' || type==='check'">
+        <span v-if="id">{{ getadminList(goodsInventoryAddForm.inventory_person_id)  }}</span> 
+        <el-select v-else @change="forceUpdate" v-model="goodsInventoryAddForm.inventory_person_id" :disabled="type === 'detail' || type === 'audit' || type==='check'">
           <el-option v-for="item in adminList" :key="item.id" :label="item.real_name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="制单人" prop="creator_id" class="change-form-item">
-        <el-select
+        <span v-if="id">{{ getadminList(goodsInventoryAddForm.creator_id)  }}</span> 
+        <el-select v-else
           v-model="goodsInventoryAddForm.creator_id"
           :disabled="type === 'detail' || type === 'audit' || type==='check'"
           @change="forceUpdate">
@@ -31,7 +35,8 @@
         </el-select>
       </el-form-item>
       <el-form-item label="盘点类型" prop="inventory_type" class="change-form-item">
-        <el-select v-model="goodsInventoryAddForm.inventory_type" @change="handleChangeWareHouse"
+        <span v-if="id">{{ getRoleSplit(goodsInventoryAddForm.inventory_type)  }}</span> 
+        <el-select v-else v-model="goodsInventoryAddForm.inventory_type" @change="handleChangeWareHouse"
           :disabled="type === 'detail' || type === 'audit' || type==='check'">
            <el-option v-for="item in typeList" :key="item.id" :label="item.label" :value="item.id" />
         </el-select>
@@ -211,6 +216,21 @@ export default {
     this.GET_DeptList()
   },
   methods: {
+    getadminList(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.adminList.find(type => type.id === value);
+      return type ? type.name : '未知类型';
+    },
+    getRoleSplit(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.typeList.find(type => type.id === value);
+      return type ? type.label : '未知类型';
+    },
+    getWarehouse(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.WarehouseList.find(type => type.id === value);
+      return type ? type.name : '未知类型';
+    },
     // 打印功能
     printIng(){
 

+ 24 - 4
manager-admin/src/views/stock/goodsInventoryLoss/goodsInventoryLossAdd.vue

@@ -4,7 +4,8 @@
       label-width="120px" inline class="change-form">
       <h3 style="width: 100%;">库存报损</h3>
       <el-form-item label="报损时间" prop="report_time" class="change-form-item">
-        <el-date-picker v-model="goodsInventoryAddForm.report_time" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+        <span v-if="id">{{ goodsInventoryAddForm.report_time }}</span>
+        <el-date-picker v-else v-model="goodsInventoryAddForm.report_time" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
           :disabled="type === 'detail' || type === 'audit'" placeholder="选择日期时间">
         </el-date-picker>
       </el-form-item>
@@ -18,18 +19,21 @@
           }" clearable @change="changewarehouseList"></el-cascader>
       </el-form-item> -->
       <el-form-item label="仓库" prop="warehouse_id" class="change-form-item">
-        <el-select v-model="goodsInventoryAddForm.warehouse_id" @change="cleanGoodsList"
+        <span v-if="id">{{ getWarehouse(goodsInventoryAddForm.warehouse_id) }}</span>
+        <el-select v-else v-model="goodsInventoryAddForm.warehouse_id" @change="cleanGoodsList"
           :disabled="type === 'detail' || type === 'audit'">
           <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="报损类型" prop="damage_type_value"  class="change-form-item">
+        <span v-if="id">{{ getRoleSplit(goodsInventoryAddForm.damage_type_value) }}</span>
         <el-select v-model="goodsInventoryAddForm.damage_type_value" :disabled="type === 'detail' || type === 'audit'">
           <el-option v-for="item in roleSplit" :key="item.label" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
       <el-form-item label="制单人" prop="creator_id" class="change-form-item">
-        <el-select
+        <span v-if="id">{{ getadminList(goodsInventoryAddForm.creator_id) }}</span>
+        <el-select v-else
           v-model="goodsInventoryAddForm.creator_id"
           :disabled="type === 'detail' || type === 'audit'"
           @change="changeCreator">
@@ -37,7 +41,8 @@
         </el-select>
       </el-form-item>
       <el-form-item label="报损说明" prop="report_desc" class="change-form-item" style="width: 61%;">
-        <el-input style="flex: 1;" v-model="goodsInventoryAddForm.report_desc" type="textarea"
+        <span v-if="id">{{ goodsInventoryAddForm.report_desc }}</span>
+        <el-input style="flex: 1;" v-else v-model="goodsInventoryAddForm.report_desc" type="textarea"
           :disabled="type === 'detail' || type === 'audit'" :autosize="{ minRows: 3, maxRows: 4 }"
           placeholder="请输入报损说明"></el-input>
       </el-form-item>
@@ -214,6 +219,21 @@ export default {
     this.GET_DictDataInfo()
   },
   methods: {
+    getadminList(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.adminList.find(type => type.id === value);
+      return type ? type.name : '未知类型';
+    },
+    getRoleSplit(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.roleSplit.find(type => type.value === value);
+      return type ? type.label : '未知类型';
+    },
+    getWarehouse(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.WarehouseList.find(type => type.id === value);
+      return type ? type.name : '未知类型';
+    },
     // 打印功能
     printIng(){
 

+ 1 - 1
manager-admin/src/views/stock/goodsLend.vue

@@ -122,7 +122,7 @@
             statusFilter(scope.row.type)
           }}</template>
         </el-table-column>
-        <el-table-column prop="" label="已绑定SKU数" />
+        <el-table-column prop="bind_num" label="已绑定SKU数" />
          <!-- <el-table-column prop="intro" label="库位说明" />
        <el-table-column prop="lend_person" label="借出人" />
         <el-table-column prop="status" label="状态">

+ 7 - 3
manager-admin/src/views/stock/goodsTransfer.vue

@@ -69,7 +69,7 @@
         <el-table-column prop="goods_name" label="商品名称" />
        <el-table-column prop="type" label="sku">
         <template slot-scope="scope">
-          {{ scope.row.product_vo.sku }}
+          {{ scope.row.product_vo ? scope.row.product_vo.sku : ''  }}
         </template>
        </el-table-column>
              <!-- <el-table-column prop="product_vo.sku" label="库位号" />
@@ -84,7 +84,11 @@
             statusFilter(scope.row.status)
           }}</template>
         </el-table-column> -->
-        <el-table-column prop="actual_stock" label="实际库存" />
+        <el-table-column prop="actual_stock" label="实际库存" >
+          <template slot-scope="scope">
+           <span :style="scope.row.actual_stock<scope.row.warning_stock?'color:red':''">{{ scope.row.actual_stock }}</span> 
+          </template>
+        </el-table-column>
         <el-table-column prop="usable_stock" label="可用库存" />
         <el-table-column prop="transit_stock" label="在途库存" />
         <el-table-column prop="warning_stock" label="预警库存" />
@@ -133,7 +137,7 @@
       :close-on-press-escape="false" width="30%">
       <el-form ref="numAddForm" :model="numAddForm" :rules="numAddFormRule" label-width="160px" inline
         class="change-form">
-        <el-form-item label="分类名称" prop="num" class="change-form-item">
+        <el-form-item label="预警数量" prop="num" class="change-form-item">
           <el-input v-model="numAddForm.num" placeholder="请输入"></el-input>
         </el-form-item>
       </el-form>

+ 44 - 98
manager-admin/src/views/stock/goodsUnderstockAdd.vue

@@ -1,104 +1,54 @@
 <template>
   <div class="bg-in-stock">
-    <el-form
-      ref="GoodsTransferForm"
-      :model="GoodsTransferForm"
-      label-width="120px"
-      :rules="GoodsTransferFormRule"
-      inline
-    >
+    <el-form ref="GoodsTransferForm" :model="GoodsTransferForm" label-width="120px" :rules="GoodsTransferFormRule"
+      inline>
       <h3>调拨单</h3>
-      <el-form-item
-        label="调拨时间"
-        prop="transfer_time"
-        class="change-form-item"
-      >
-        <el-date-picker
-          v-model="GoodsTransferForm.transfer_time"
-          value-format="yyyy-MM-dd HH:mm:ss"
-          type="datetime"
-          :disabled="type === 'detail' || type === 'audit' || type === 'check'"
-          placeholder="选择日期时间"
-        >
+      <el-form-item label="调拨时间" prop="transfer_time" class="change-form-item">
+        <span v-if="type === 'detail'">{{ GoodsTransferForm.transfer_time }}</span>
+        <el-date-picker v-else v-model="GoodsTransferForm.transfer_time" value-format="yyyy-MM-dd HH:mm:ss"
+          type="datetime" :disabled="type === 'detail' || type === 'audit' || type === 'check'" placeholder="选择日期时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item prop="out_warehouse_id" label="调出仓库">
-        <el-select
-          @change="cleanGoodsList"
-          v-model="GoodsTransferForm.out_warehouse_id"
-          :disabled="type === 'detail'"
-        >
-          <el-option
-            v-for="item in WarehouseList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
+        <span v-if="type === 'detail'">{{getWarehouse(GoodsTransferForm.out_warehouse_id)  }}</span>
+        <el-select v-else @change="cleanGoodsList" v-model="GoodsTransferForm.out_warehouse_id"
+          :disabled="type === 'detail'">
+          <el-option v-for="item in WarehouseList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item prop="in_warehouse_id" label="调入仓库">
-        <el-select
-          v-model="GoodsTransferForm.in_warehouse_id"
-          :disabled="type === 'detail'"
-        >
-          <el-option
-            v-for="item in WarehouseList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
+        <span v-if="type === 'detail'">{{getWarehouse(GoodsTransferForm.out_warehouse_id)  }}</span>
+        <el-select v-else v-model="GoodsTransferForm.in_warehouse_id" :disabled="type === 'detail'">
+          <el-option v-for="item in WarehouseList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="配送方式" prop="send_type">
-        <el-select
-          v-model="GoodsTransferForm.send_type"
-          clearable
-          :disabled="type === 'detail'"
-        >
-          <el-option
-            v-for="item in deliveryTypeList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
+        <span v-if="type === 'detail'">{{ getdeliveryType(GoodsTransferForm.send_type) }}</span>
+        <el-select v-else v-model="GoodsTransferForm.send_type" clearable :disabled="type === 'detail'">
+          <el-option v-for="item in deliveryTypeList" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="备注" prop="remark">
-        <el-input
-          :disabled="type === 'detail'"
-          type="textarea"
-          :rows="2"
-          placeholder="请输入内容"
-          v-model="GoodsTransferForm.remark"
-        >
+        <span v-if="type === 'detail'">{{ GoodsTransferForm.remark }}</span>
+        <el-input v-else :disabled="type === 'detail'" type="textarea" :rows="2" placeholder="请输入内容"
+          v-model="GoodsTransferForm.remark">
         </el-input>
       </el-form-item>
       <div class="mx">
         <h3>商品明细</h3>
-        <el-button
+        <!-- <el-button
           class="button"
           size="mini"
           type="primary"
           v-if="type !== 'detail'"
           >扫码出库</el-button
-        >
-        <el-button
-          class="button"
-          size="mini"
-          type="primary"
-          v-if="type !== 'detail'"
-          @click="handleSelectWarehouseEntryBatch"
-          >选择</el-button
-        >
+        > -->
+        <el-button class="button" size="mini" type="primary" v-if="type !== 'detail'"
+          @click="handleSelectWarehouseEntryBatch">选择</el-button>
       </div>
       <div style="display: block">
-        <el-table
-          :data="GoodsTransferForm.product_list"
-          border
-          :cell-style="{ textAlign: 'center' }"
-          :header-cell-style="{ textAlign: 'center' }"
-          style="width: 85%; margin-top: 20px"
-        >
+        <el-table :data="GoodsTransferForm.product_list" border :cell-style="{ textAlign: 'center' }"
+          :header-cell-style="{ textAlign: 'center' }" style="width: 85%; margin-top: 20px">
           <el-table-column label="商品编号">
             <template slot-scope="scope">
               <span v-if="id"> {{ scope.row.goods_vo.sn }}</span>
@@ -145,36 +95,22 @@
           </el-table-column>
           <el-table-column label="调拨数量">
             <template slot-scope="scope">
-              <el-input
-                v-model="scope.row.num"
-                type="number"
-                :min="0"
-                :maxlength="20"
-                :disabled="
-                  type === 'detail' || type === 'audit' || type === 'check'
-                "
-              ></el-input>
+              <span v-if="type === 'detail'">{{ scope.row.num }}</span>
+              <el-input v-else v-model="scope.row.num" type="number" :min="0" :maxlength="20" :disabled="type === 'detail' || type === 'audit' || type === 'check'
+                "></el-input>
             </template>
           </el-table-column>
           <el-table-column label="操作" v-if="type !== 'detail'">
             <template slot-scope="scope">
-              <el-button
-                size="mini"
-                type="danger"
-                @click="GoodsTransferForm.product_list.splice(scope.$index, 1)"
-                >删除</el-button
-              >
+              <el-button size="mini" type="danger"
+                @click="GoodsTransferForm.product_list.splice(scope.$index, 1)">删除</el-button>
             </template>
           </el-table-column>
         </el-table>
       </div>
     </el-form>
     <div class="footer">
-      <el-button
-        v-if="type !== 'detail'"
-        type="primary"
-        @click="submitGoodsTransferForm"
-        >保存
+      <el-button v-if="type !== 'detail'" type="primary" @click="submitGoodsTransferForm">保存
       </el-button>
       <el-button @click="printIng">打印</el-button>
       <el-button @click="roBack()">返回 </el-button>
@@ -259,8 +195,18 @@ export default {
     this.GET_ExpressList();
   },
   methods: {
+    getdeliveryType(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.deliveryTypeList.find(type => type.id === value);
+      return type ? type.name : '未知类型';
+    },
+    getWarehouse(value) {
+      // Access orderTypeList directly from the component's data
+      const type = this.WarehouseList.find(type => type.id === value);
+      return type ? type.name : '未知类型';
+    },
     // 打印功能
-    printIng() {},
+    printIng() { },
     /** 切换调出部门 */
     changeDept() {
       this.GET_WarehouseList("outWarehouseList");
@@ -301,7 +247,7 @@ export default {
         warehouseList: this.outWarehouseList,
         selectedIds: this.id
           ? this.GoodsTransferForm.product_list &&
-            this.GoodsTransferForm.product_list.map((item) => item.id)
+          this.GoodsTransferForm.product_list.map((item) => item.id)
           : this.GoodsTransferForm.product_list.map((item) => item.id),
         purchasePlanApiParams: {
           warehouse_id: this.GoodsTransferForm.out_warehouse_id,
@@ -335,7 +281,7 @@ export default {
               num: item.num,
               use_able_num: Number(item.usable_stock),
               product_id: item.product_id,
-              product_stock_id:item.id
+              product_stock_id: item.id
             };
             return query;
           });

+ 5 - 10
manager-admin/src/views/stock/order.vue

@@ -262,14 +262,6 @@ export default {
       orderType: [],
       collectingAccountList: [], // 支付方式列表
       deliveryTypeList: [
-        {
-          code: "express",
-          name: "快递配送",
-        },
-        {
-          code: "self_pick",
-          name: "门店自提",
-        },
       ],
       customerList: [],
     };
@@ -320,8 +312,8 @@ export default {
     deliveryType(val) {
       let name = "";
       this.deliveryTypeList.map((el) => {
-        if (el.code == val) {
-          return (name = el.name);
+        if (el.value == val) {
+          return (name = el.label);
         }
       });
       return name;
@@ -388,6 +380,9 @@ export default {
       API_Setting.getPage({ dictType: "order_status" }).then((res) => {
         this.orderType = res.data;
       });
+      API_Setting.getPage({ dictType: "order_send_type" }).then((res) => {
+        this.deliveryTypeList = res.data;
+      });
     },
     /** 计算高度 */
     countTableHeight() {

+ 57 - 41
manager-admin/src/views/stock/orderAdd.vue

@@ -34,11 +34,11 @@
         </el-col>
         <el-col :span="10">
           <el-form-item label="起始时间:" prop="time" :rules="rules.start_time" v-if="OrderForm.type == 'TO_C'">
-            <el-date-picker v-model="OrderForm.start_time" type="datetime" placeholder="选择日期时间"
+            <!-- <el-date-picker v-model="OrderForm.start_time" type="datetime" placeholder="选择日期时间"
               :disabled="type == 'pone'" :picker-options="pickerOptions" value-format="yyyy-MM-dd HH:mm:ss">
-            </el-date-picker>
+            </el-date-picker> -->
 
-            <!-- <el-date-picker v-model="time" type="daterange" align="center" @change='timeChange' :editable="false"
+            <el-date-picker v-model="time" type="daterange" align="center" @change='timeChange' :editable="false"
               unlink-panels :clearable="false" :default-time="['00:00:00', '23:59:59']" range-separator="-"
               start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd hh:mm:ss" :picker-options="{
                 disabledDate(time) {
@@ -54,7 +54,7 @@
                 },
                 shortcuts: MixinPickerShortcuts,
               }">
-            </el-date-picker> -->
+            </el-date-picker>
           </el-form-item>
         </el-col>
         <el-col :span="10">
@@ -74,7 +74,7 @@
         <el-col :span="10">
           <el-form-item label="配送方式:" prop="send_type" :rules="rules.send_type">
             <el-select v-model="OrderForm.send_type" clearable :disabled="type == 'pone'">
-              <el-option v-for="item in deliveryTypeList" :key="item.code" :label="item.name" :value="item.code" />
+              <el-option v-for="item in deliveryTypeList" :key="item.value" :label="item.label" :value="item.value" />
             </el-select>
           </el-form-item>
         </el-col>
@@ -189,18 +189,18 @@
               {{ scope.row.usable_stock }}
             </template>
           </el-table-column>
-          <!-- <el-table-column label="天数" width="200" v-if="OrderForm.type == 'TO_C'">
+          <el-table-column label="租赁天数" v-if="OrderForm.type == 'TO_C'">
             <template slot-scope="scope">
-              <el-input v-model="scope.row.num" type="number" :min="0" :maxlength="20"></el-input>
+              <el-input v-model="scope.row.day_num" type="number" :min="0" :maxlength="20"></el-input>
             </template>
-          </el-table-column> -->
-          <el-table-column label="结束时间" width="200" v-if="OrderForm.type == 'TO_C'">
+          </el-table-column>
+          <!-- <el-table-column label="结束时间" width="200" v-if="OrderForm.type == 'TO_C'">
             <template slot-scope="scope">
               <el-date-picker style="width: 170px;" v-model="scope.row.end_time" type="datetime" placeholder="选择日期时间"
                 :picker-options="pickerOptionsEnd" value-format="yyyy-MM-dd HH:mm:ss">
               </el-date-picker>
             </template>
-          </el-table-column> 
+          </el-table-column>  -->
           <!-- <el-table-column label="差异">
             <template slot-scope="scope">
               {{ scope.row.usable_stock - scope.row.num || 0 }}
@@ -429,7 +429,7 @@ const initOrderForm = {
   discount_price: 0,
   pay_price: 0,
   deposit_price: 0,
-  send_type: "express",
+  send_type: "INTRA_CITY_SERVICE",
   subtract_stock: false,
   payment_status: "NOT_PAY",
   start_time: null,
@@ -450,14 +450,14 @@ export default {
       collectingAccountList: [], // 支付方式列表
       fileList: [],
       deliveryTypeList: [
-        {
+        /* {
           code: "express",
           name: "快递配送",
         },
         {
           code: "self_pick",
           name: "门店自提",
-        },
+        }, */
       ],
       id: "",
       /** 订单表单*/
@@ -684,7 +684,7 @@ export default {
         size: 10
       },//商品分页
       orderType: '',//条形码查看类型
-      
+      monthDiff: 0
     };
   },
   computed: {
@@ -700,7 +700,7 @@ export default {
     this.GET_CollectingAccountList();
     // 获取客户列表
     this.GET_CustomerList();
-    this.OrderForm.marketing_id=JSON.parse(JSON.parse(localStorage.getItem("admin_user")).data).uid
+    this.OrderForm.marketing_id = JSON.parse(JSON.parse(localStorage.getItem("admin_user")).data).uid
   },
   methods: {
     // 租赁时间
@@ -708,7 +708,10 @@ export default {
       let start = new Date(val[1]); // 将起始日期字符串转换为Date对象
       let end = new Date(val[0]); // 将结束日期字符串转换为Date对象
       let timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
-      let monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000));
+      this.monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000));
+      this.OrderForm.product_list.map(el => {
+        el.day_num = this.monthDiff
+      })
     },
     selMember(val) {
       API_BasicSetting.getCustomer(val).then(res => {
@@ -735,6 +738,9 @@ export default {
       if (this.goodsList.length >= 1) {
         API_productClass.getProductByGroup(this.OrderForm.warehouse_id, this.goodsList[0].id).then(res => {
           res.map(el => {
+            if (this.OrderForm.type == 'TO_C') {
+              el.day_num = this.monthDiff
+            }
             this.OrderForm.product_list.push(el)
           })
           this.goodsVisible = false;
@@ -890,6 +896,9 @@ export default {
       API_Setting.getPage({ dictType: "order_type" }).then((res) => {
         this.orderTypeList = res.data;
       });
+      API_Setting.getPage({ dictType: "order_send_type" }).then((res) => {
+        this.deliveryTypeList = res.data;
+      });
     },
     /** 获取会员列表 */
     GET_MemberList() {
@@ -961,7 +970,7 @@ export default {
 
       });
       goodsData.map(el => {
-        el.end_time = ''
+        el.day_num = this.monthDiff
         console.log(el);
       })
       this.OrderForm.product_list = goodsData;
@@ -1115,6 +1124,13 @@ export default {
         el.goods_id = el.id;
         el.id = "";
       });*/
+      delete this.OrderForm.start_time;
+      delete this.OrderForm.end_time;
+      if (this.time) {
+        this.OrderForm.start_time = this.time[0];
+        this.OrderForm.end_time = this.time[1];
+      }
+      delete this.time;
       params.pay_price = this.price;
       params.real_price = Number(params.real_price);
       /*  params.product_list.map((el) => {
@@ -1161,13 +1177,13 @@ export default {
       }
       const { id } = this.OrderForm;
       //设置时间
-      /*    delete this.OrderForm.start_time;
-         delete this.OrderForm.end_time;
-         if (this.time) {
-           this.OrderForm.start_time = this.time[0];
-           this.OrderForm.end_time = this.time[1];
-         }
-         delete this.time; */
+      /*  */  delete this.OrderForm.start_time;
+      delete this.OrderForm.end_time;
+      if (this.time) {
+        this.OrderForm.start_time = this.time[0];
+        this.OrderForm.end_time = this.time[1];
+      }
+      delete this.time;
       var loc = "";
       for (let i = 0; i < this.selectedOptions.length; i++) {
         loc += codeToText[this.selectedOptions[i]] + ",";
@@ -1314,20 +1330,20 @@ export default {
         if (!this.OrderForm.product_list) return
         if (!this.id) {
           if (this.OrderForm.type == "TO_C") {
-             var start = new Date(this.OrderForm.start_time); // 将起始日期字符串转换为Date对象
-              this.OrderForm.product_list.map((item) => {
-                var end = new Date(item.end_time); // 将结束日期字符串转换为Date对象
-                var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
-                var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
-                total += item.product_vo.day_price * item.num * monthDiff;
-              }); 
-             /* var start = new Date(this.time[1]); // 将起始日期字符串转换为Date对象
+            /*   var start = new Date(this.OrderForm.start_time); // 将起始日期字符串转换为Date对象
+                this.OrderForm.product_list.map((item) => {
+                  var end = new Date(item.end_time); // 将结束日期字符串转换为Date对象
+                  var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
+                  var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
+                  total += item.product_vo.day_price * item.num * monthDiff;
+                }); */
+            var start = new Date(this.time[1]); // 将起始日期字符串转换为Date对象
             var end = new Date(this.time[0]); // 将结束日期字符串转换为Date对象
             var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
             var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
             this.OrderForm.product_list.map((item) => {
-              total += item.product_vo.day_price * item.num * monthDiff;
-            });*/
+              total += item.product_vo.day_price * item.num * item.day_num;
+            });
             return total;
           } else {
             this.OrderForm.product_list.map((item) => {
@@ -1337,13 +1353,13 @@ export default {
           }
         } else {
           if (this.OrderForm.type == "TO_C") {
-            var start = new Date(this.OrderForm.start_time); // 将起始日期字符串转换为Date对象
-              this.OrderForm.product_list.map((item) => {
-                var end = new Date(item.end_time); // 将结束日期字符串转换为Date对象
-                var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
-                var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
-                total += item.product_vo.day_price * item.num * monthDiff;
-              }); 
+            var start = new Date(this.time[1]); // 将起始日期字符串转换为Date对象
+            var end = new Date(this.time[0]); // 将结束日期字符串转换为Date对象
+            var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
+            var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
+            this.OrderForm.product_list.map((item) => {
+              total += item.product_vo.day_price * item.num * item.day_num;
+            });
             return total;
           } else {
             this.OrderForm.product_list.map((item) => {

+ 48 - 22
manager-admin/src/views/stock/orderCheck.vue

@@ -36,22 +36,22 @@
                         {{ getPayType(OrderForm.pay_type) }}
                     </el-form-item>
                 </el-col>
-                <el-col :span="10">
+                <!-- <el-col :span="10">
                     <el-form-item label="应付金额:" prop="pay_price" :rules="rules.pay_price">
                         <span>{{ "¥" + price }}</span>
                     </el-form-item>
                 </el-col>
-                <!-- <el-col :span="10">
+                <el-col :span="10">
                     <el-form-item label="折扣:" prop="">
                         <el-input placeholder="请输入" v-model="discount" @blur="handleBlur"
                             :disabled="type == 'pone'"></el-input>
                     </el-form-item>
-                </el-col> -->
+                </el-col> 
                 <el-col :span="10">
                     <el-form-item label="实付金额:" prop="real_price" :rules="rules.pay_price">
                         {{ "¥" + OrderForm.real_price }}
                     </el-form-item>
-                </el-col>
+                </el-col>-->
                 <el-col :span="10">
                     <el-form-item label="销售人员:" prop="marketing_id" :rules="rules.marketing_id">
                         {{ getMarketingName(OrderForm.marketing_id) }}
@@ -69,7 +69,7 @@
                 </el-col>
                 <el-col :span="10">
                     <el-form-item label="返回仓库:" prop="return_warehouse_id" :rules="rules.return_warehouse_id">
-                        {{warehouseName(OrderForm.return_warehouse_id)}}
+                        {{ warehouseName(OrderForm.return_warehouse_id) }}
                     </el-form-item>
                 </el-col>
                 <el-col :span="10">
@@ -77,7 +77,7 @@
                         {{ OrderForm.province_city_area_address }}
                     </el-form-item>
                 </el-col>
-               <!--  <el-col :span="10">
+                <!--  <el-col :span="10">
                     <el-form-item label="允许负库存:">
                         <el-radio-group v-model="OrderForm.subtract_stock" :disabled="type == 'pone'">
                             <el-radio :label="false">禁止</el-radio>
@@ -138,7 +138,7 @@
                         </template>
                     </el-table-column>
                     <el-table-column prop="product_vo.spec_name" label="规格型号">
-                       <!--  <template slot-scope="scope">
+                        <!--  <template slot-scope="scope">
                             <span v-if="!id">{{ scope.row.product_vo.spec_name }}</span>
                             <span v-else>{{ scope.row.product_vo.spec_name }}</span>
                         </template> -->
@@ -151,7 +151,7 @@
                     </el-table-column>
                     <el-table-column label="订单数量">
                         <template slot-scope="scope">
-                            {{  scope.row.num}}
+                            {{ scope.row.num }}
                         </template>
                     </el-table-column>
                     <el-table-column label="库存数量">
@@ -164,14 +164,19 @@
                             {{ scope.row.return_num }}
                         </template>
                     </el-table-column>
-                    <el-table-column label="结束时间" width="200" v-if="OrderForm.type == 'TO_C'">
+                    <el-table-column label="租赁天数" v-if="OrderForm.type == 'TO_C'">
+                        <template slot-scope="scope">
+                            {{ scope.row.day_num }}
+                        </template>
+                    </el-table-column>
+                    <!-- <el-table-column label="结束时间" width="200" v-if="OrderForm.type == 'TO_C'">
                         <template slot-scope="scope">
                             <el-date-picker style="width: 170px;" v-model="scope.row.end_time" type="datetime"
                                 placeholder="选择日期时间" :picker-options="pickerOptionsEnd"
                                 value-format="yyyy-MM-dd HH:mm:ss">
                             </el-date-picker>
                         </template>
-                    </el-table-column>
+                    </el-table-column> -->
                     <el-table-column label="操作" v-if="!isDetail && type !== 'pone'">
                         <template slot-scope="scope">
                             <el-button size="mini" type="danger"
@@ -181,6 +186,20 @@
                     </el-table-column>
                 </el-table>
             </div>
+            <el-row style="margin-top: 15px;margin-bottom: 20px;">
+                <el-col :span="12">
+                    <el-form-item label="应付金额:" prop="pay_price" :rules="rules.pay_price">
+                        <span>{{ "¥" + price }}</span>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="实付金额:" prop="real_price" :rules="rules.pay_price">
+                        {{ OrderForm.real_price }}
+                        <!-- <el-input v-model="OrderForm.real_price" placeholder="请输入"
+                            :disabled="type == 'pone'"></el-input> -->
+                    </el-form-item>
+                </el-col>
+            </el-row>
             <div class="footer">
                 <el-button type="primary" @click="submit" v-if="!isDetail && type == 'pone'"
                     :loading="formLoading">确认</el-button>
@@ -554,7 +573,6 @@ export default {
         //获取仓库名称
         warehouseNames(val) {
             let name = [];
-            console.log(val);
             this.warehouseList.map((el) => {
                 val.map((e) => {
                     if (el.id == e) {
@@ -567,8 +585,8 @@ export default {
         //配送方式
         getSendType(value) {
             // Access orderTypeList directly from the component's data
-            const type = this.deliveryTypeList.find(type => type.code === value);
-            return type ? type.name : '未知类型';
+            const type = this.deliveryTypeList.find(type => type.value === value);
+            return type ? type.label : '未知类型';
         },
         //销售人员
         getMarketingName(value) {
@@ -687,7 +705,7 @@ export default {
                     return name = el.name
                 }
             })
-            
+
             return name
         },
         /** dialog打开后重置form表单校验结果 */
@@ -752,6 +770,9 @@ export default {
             API_Setting.getPage({ dictType: "order_type" }).then((res) => {
                 this.orderTypeList = res.data;
             });
+            API_Setting.getPage({ dictType: "order_send_type" }).then((res) => {
+                this.deliveryTypeList = res.data;
+            });
         },
         /** 获取会员列表 */
         GET_MemberList() {
@@ -815,7 +836,6 @@ export default {
             });
             goodsData.map(el => {
                 el.end_time = ''
-                console.log(el);
             })
             this.OrderForm.product_list = goodsData;
         },
@@ -1127,12 +1147,19 @@ export default {
                 if (!this.OrderForm.product_list) return
                 if (!this.id) {
                     if (this.OrderForm.type == "TO_C") {
-                        var start = new Date(this.OrderForm.start_time); // 将起始日期字符串转换为Date对象
+                        /* var start = new Date(this.OrderForm.start_time); // 将起始日期字符串转换为Date对象
                         this.OrderForm.product_list.map((item) => {
                             var end = new Date(item.end_time); // 将结束日期字符串转换为Date对象
                             var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
                             var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
                             total += item.product_vo.day_price * item.num * monthDiff;
+                        }); */
+                        var start = new Date(this.time[1]); // 将起始日期字符串转换为Date对象
+                        var end = new Date(this.time[0]); // 将结束日期字符串转换为Date对象
+                        var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
+                        var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
+                        this.OrderForm.product_list.map((item) => {
+                            total += item.product_vo.day_price * item.num * item.day_num;
                         });
                         return total;
                     } else {
@@ -1143,14 +1170,13 @@ export default {
                     }
                 } else {
                     if (this.OrderForm.type == "TO_C") {
-                        var start = new Date(this.OrderForm.start_time); // 将起始日期字符串转换为Date对象
+                        var start = new Date(this.time[1]); // 将起始日期字符串转换为Date对象
+                        var end = new Date(this.time[0]); // 将结束日期字符串转换为Date对象
+                        var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
+                        var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
                         this.OrderForm.product_list.map((item) => {
-                            var end = new Date(item.end_time); // 将结束日期字符串转换为Date对象
-                            var timeDiff = Math.abs(end.getTime() - start.getTime()); // 获取时间差(单位:毫秒)
-                            var monthDiff = Math.ceil(timeDiff / (24 * 60 * 60 * 1000)); // 根据每个月平均天数进行近似计算
-                            total += item.product_vo.day_price * item.num * monthDiff;
+                            total += item.product_vo.day_price * item.num * item.day_num;
                         });
-                        console.log("total", total);
                         return total;
                     } else {
                         this.OrderForm.product_list.map((item) => {

+ 195 - 98
manager-admin/src/views/stock/orderOutbound.vue

@@ -24,23 +24,25 @@
           <el-row>
             <el-col :span="12">
               <el-form-item label="发货人姓名:" prop="sender.name">
-                <!-- {{ deliveryForms.sender.name }}-->
-                 <el-input v-model="deliveryForms.sender.name" :minlength="1" :maxlength="20" placeholder="请输入发货人姓名"
-                  :disabled="true"></el-input> 
+                {{ deliveryForms.sender.name }}
+                <!--   <el-input v-model="deliveryForms.sender.name" :minlength="1" :maxlength="20" placeholder="请输入发货人姓名"
+                  :disabled="true"></el-input>  -->
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="手机号:" prop="sender.phone">
-               <!-- {{ deliveryForms.sender.phone }}-->
-                 <el-input v-model="deliveryForms.sender.phone" :minlength="1" :maxlength="20" :disabled="true"
-                  placeholder="请输入手机号"></el-input>  </el-form-item></el-col>
+                {{ deliveryForms.sender.phone }}
+                <!--  <el-input v-model="deliveryForms.sender.phone" :minlength="1" :maxlength="20" :disabled="true"
+                  placeholder="请输入手机号"></el-input>  --> </el-form-item></el-col>
             <el-col :span="12">
               <el-form-item label="发货地址:" prop="sender.address">
-                <!-- {{ deliveryForms.sender.province_name }} -->
-                <el-cascader size="large" :options="options" clearable :disabled="true" v-model="selectedOptions"
+                {{
+                  fullSenderAddress
+                }}
+                <!-- <el-cascader size="large" :options="options" clearable :disabled="true" v-model="selectedOptions"
                   @change="sendHandleChange">
                 </el-cascader>
-                <el-input :disabled="true" v-model="deliveryForms.sender.address" placeholder="请输入"></el-input>
+                <el-input :disabled="true" v-model="deliveryForms.sender.address" placeholder="请输入"></el-input> -->
               </el-form-item></el-col>
             <!--    <el-col :span="12">
               <el-form-item label="配送仓库:" prop="freight_price">
@@ -72,37 +74,28 @@
           <!-- --><el-row>
             <el-col :span="12">
               <el-form-item label="收货人姓名:" prop="receiver.name">
-                <el-input v-model="deliveryForms.receiver.name" :minlength="1" :maxlength="20" :disabled="true"
-                  placeholder="请输入收货人姓名"></el-input>
+                {{ deliveryForms.receiver.name }}
+                <!-- <el-input v-model="deliveryForms.receiver.name" :minlength="1" :maxlength="20" :disabled="true"
+                  placeholder="请输入收货人姓名"></el-input> -->
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="手机号:" prop="receiver.phone">
-                <el-input v-model="deliveryForms.receiver.phone" :minlength="1" :maxlength="20" :disabled="true"
-                  placeholder="请输入手机号"></el-input> </el-form-item></el-col>
+                {{ deliveryForms.receiver.phone }}
+                <!--  <el-input v-model="deliveryForms.receiver.phone" :minlength="1" :maxlength="20" :disabled="true"
+                  placeholder="请输入手机号"></el-input>  --></el-form-item></el-col>
             <el-col :span="12">
               <el-form-item label="配送地址:" prop="receiver.address">
-                <el-cascader size="large" :options="options" clearable :disabled="true" v-model="receiverOptions"
+                {{
+                  fullReceiverAddress
+                }}
+                <!--  <el-cascader size="large" :options="options" clearable :disabled="true" v-model="receiverOptions"
                   @change="receiverChange">
                 </el-cascader>
                 <el-input v-model="deliveryForms.receiver.address" size="medium" :disabled="true"
-                  placeholder="请输入"></el-input> </el-form-item></el-col>
+                  placeholder="请输入"></el-input> --> </el-form-item></el-col>
           </el-row>
-          <el-divider></el-divider>
-          <!--  <el-row  :gutter="20">
-              <el-col :span="8" :offset="6">
-              <el-form-item label="物流单号:" prop="tracking_number">
-                <el-input
-                  v-model="tracking_number"
-                  :minlength="1"
-                  :maxlength="20"
-                  clearable
-                  placeholder="请输入物流单号"
-                ></el-input>
-                <el-button>自动获取单号</el-button>
-                </el-form-item
-            ></el-col>
-          </el-row> -->
+          <!-- <el-divider></el-divider>
           <h3>商品信息:</h3>
           <el-table :data="product_list" border :cell-style="{ textAlign: 'center' }"
             :header-cell-style="{ textAlign: 'center' }" style="width: 100%">
@@ -111,55 +104,54 @@
               <template slot-scope="scope">
                 {{ scope.row.goods_vo.sn }}
               </template>
-            </el-table-column>
-            <el-table-column label="商品名称">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="商品名称">
+  <template slot-scope="scope">
                 {{ scope.row.goods_vo.name }}
               </template>
-            </el-table-column>
-            <el-table-column label="sku">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="sku">
+  <template slot-scope="scope">
                 {{ scope.row.product_vo.sku }}
               </template>
-            </el-table-column>
-            <el-table-column label="序列号" v-if="sn_code_list">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="序列号" v-if="sn_code_list">
+  <template slot-scope="scope">
                 <span v-for="(item, index) in scope.row.sn_code_list" :key="item.id"><span v-if="index !== 0">,</span>{{
                   item.sn_code }}</span>
               </template>
-            </el-table-column>
-            <el-table-column label="规格型号">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="规格型号">
+  <template slot-scope="scope">
                 {{ scope.row.product_vo.spec_name }}
               </template>
-            </el-table-column>
-            <el-table-column label="单位">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="单位">
+  <template slot-scope="scope">
                 {{ scope.row.product_vo.unit }}
               </template>
-            </el-table-column>
-            <el-table-column label="订单数量">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="订单数量">
+  <template slot-scope="scope">
                 {{ scope.row.num }}
               </template>
-            </el-table-column>
-            <el-table-column label="可用库存">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="可用库存">
+  <template slot-scope="scope">
                 {{ scope.row.use_able_stock }}
               </template>
-            </el-table-column>
-            <el-table-column label="实际库存">
-              <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="实际库存">
+  <template slot-scope="scope">
                 {{ scope.row.actual_stock }}
               </template>
-            </el-table-column>
-          </el-table>
+</el-table-column>
+</el-table> -->
           <el-divider></el-divider>
-          <h3>出库明细</h3>
+          <h3>商品明细</h3>
           <el-button class="button" size="mini" type="primary" @click="scanCode"
             :disabled="disabledType">扫码出库</el-button>
           <div style="width: 100%; display: block">
-            <!--    //  -->
             <el-table border :data="goodsExchangeAddForm.product_list" :cell-style="{ textAlign: 'center' }"
               :header-cell-style="{ textAlign: 'center' }" style="width: 100%; margin-top: 20px">
               <el-table-column label="商品编号">
@@ -179,8 +171,11 @@
               </el-table-column>
               <el-table-column label="序列号" v-if="sn_code_list">
                 <template slot-scope="scope">
-                  <span v-for="(item, index) in scope.row.sn_code_list" :key="item.id"><span
-                      v-if="index !== 0">,</span>{{ item.sn_code }}</span>
+                  <div class="sn-code-container">
+                  <span v-for="item in scope.row.sn_code_list" :key="item.id">
+                    <p>{{ item.sn_code }}</p>
+                  </span>
+                </div>
                 </template>
               </el-table-column>
               <el-table-column prop="product_vo.spec_name" label="规格型号">
@@ -196,10 +191,15 @@
                   <!--  <el-input v-model="scope.row.out_num" type="number" :min="0" :maxlength="20"></el-input> -->
                 </template>
               </el-table-column>
+              <el-table-column label="订单数量">
+                <template slot-scope="scope">
+                  {{ scope.row.orderNum }}
+                </template>
+              </el-table-column>
               <el-table-column label="实际库存">
                 <template slot-scope="scope">
-                  <span v-if="!disabledType">{{ scope.row.usable_stock }}</span>
-                  <span v-else>{{ scope.row.use_able_stock }}</span>
+                  <span>{{ scope.row.actual_stock }}</span>
+                  <!-- <span>{{ scope.row.use_able_stock }}</span> -->
                 </template>
               </el-table-column>
               <el-table-column width="200" label="操作" v-if="!disabledType">
@@ -250,12 +250,16 @@
           <el-divider></el-divider>
           <el-row :gutter="20">
             <el-col :span="8" :offset="6">
-              <el-form-item label="物流单号:" prop="tracking_number">
+              <el-form-item label="物流单号:" prop="tracking_number" v-if="deliveryForms.send_type !== 'SELF_PICKUP'">
                 <el-input v-model="kdnCode" :minlength="1" :maxlength="20" :disabled="true"
                   placeholder="请输入物流单号"></el-input>
                 <el-button @click="obtainOrder" v-if="kdnCode == '' || kdnCode == undefined"
                   :disabled="btnType">获取单号</el-button>
-              </el-form-item></el-col>
+              </el-form-item>
+              <el-form-item label="自提单号:" prop="tracking_number" v-else>
+                {{ deliveryForms.selfPickupNum }}
+              </el-form-item>
+            </el-col>
           </el-row>
         </el-form>
       </div>
@@ -491,7 +495,8 @@
       </el-form> -->
       <div class="footer">
         <!-- <el-button type="primary"> 获取全部单号 </el-button> -->
-        <el-button type="primary" @click="saveErpWarehouseOut" :disabled="outType == 'check'" v-if="kdnCode !== ''">发货
+        <el-button type="primary" @click="saveErpWarehouseOut" :disabled="outType == 'check'"
+          v-if="kdnCode !== '' || deliveryForms.send_type == 'SELF_PICKUP'">发货
         </el-button>
         <el-button @click="roBack2()">保存</el-button>
       </div>
@@ -542,6 +547,8 @@ export default {
       adminList: [],
       kdnCode: "",
       deliveryForms: {
+        send_type: '',
+        selfPickupNum: '',
         remark: "",
         declared_value: "",
         appointment_type: 0,
@@ -659,6 +666,7 @@ export default {
   },
   computed: {
     ...mapGetters(["user"]),
+
     activeStep() {
       // 定义步骤数组,每个元素对应一个步骤的条件
       const steps = [
@@ -677,6 +685,14 @@ export default {
 
       // 如果没有任何步骤是激活的,返回-1或者你可以选择返回0显示第一步
       return -1;
+    },
+    fullSenderAddress() {
+      const { province_name, city_name, area_name, address } = this.deliveryForms.sender;
+      return [province_name, city_name, area_name, address].filter(Boolean).join("");
+    },
+    fullReceiverAddress() {
+      const { province_name, city_name, area_name, address } = this.deliveryForms.receiver;
+      return [province_name, city_name, area_name, address].filter(Boolean).join("");
     }
   },
   mounted() {
@@ -700,7 +716,6 @@ export default {
           return (
             el.goods_id === res.goods_id &&
             el.product_id === res.product_id &&
-            el.warehouse_id === res.warehouse_id &&
             el.product_vo.sku === res.product_vo.sku
           );
         });
@@ -867,29 +882,53 @@ export default {
       });
     },
     saveErpWarehouseOut() {
-      const params = this.goodsExchangeAddForm
-      params.order_item_vos = params.product_list
-      API_order.outOrderSend(this.id, params).then((res) => {
-        this.$router.push({ name: "warehouseOut" });
-      });
-      return;
-      /* {
-        send_address: this.send_address,
-        receive_address: this.receive_address,
-      } */
-      API_order.addErpWarehouseOut({
-        order_list: this.orderOutboundInfo.order_list,
-        warehouse_consignee_id: this.orderOutboundInfo.warehouse_consignee_id,
-        out_time: this.orderOutboundInfo.out_time / 1000,
-      }).then((response) => {
-        this.$message.success("出库成功!");
-        const { callback } = this.$route.params;
-        if (typeof callback === "function") callback();
-        this.$store.dispatch("delCurrentViews", {
-          view: this.$route,
-          $router: this.$router,
-        });
-        this.$router.push({ name: "order" });
+      this.$refs["ruleForm"].validate((valid) => {
+        if (valid) {
+          this.btnType = true;
+          const params = this.MixinClone(this.deliveryForms);
+          //发货详细地址
+          params.receiver.province_city_area_address =
+            params.receiver.province_name +
+            params.receiver.city_name +
+            params.receiver.area_name +
+            params.receiver.address;
+          //收货详细地址
+          params.sender.province_city_area_address =
+            params.sender.province_name +
+            params.sender.city_name +
+            params.sender.area_name +
+            params.sender.address;
+          //商品信息
+          const item = {};
+          this.product_list.map((el) => {
+            item.goods_name = el.goods_vo.name;
+            /* item.goods_price = el.product_vo.price; */
+            item.quantity = el.num;
+            item.unit = el.product_vo.unit;
+            return params.goods_list.push(item);
+          });
+          params.goods_num = this.product_list.reduce(
+            (sum, e) => sum + Number(e.num || 0),
+            0
+          );
+          params.total_weight = Number(params.total_weight);
+          params.total_volume = Number(params.total_volume);
+          params.declared_value = Number(params.declared_value);
+          //地址
+          params.send_address = this.send_address;
+          params.receive_address = this.receive_address;
+          params.order_code = this.id;
+          if (this.goodsExchangeAddForm.product_list.length == 0) {
+            return this.$message.error("请录入出库商品")
+          }
+          params.order_item_vos = this.goodsExchangeAddForm.product_list
+          API_order.outOrderSend(this.id, params).then((res) => {
+            this.$router.push({ name: "warehouseOut" });
+          });
+        } else {
+          this.$message.error("表单填写有误,请检查")
+          return false;
+        }
       });
     },
     // 选择批次
@@ -912,13 +951,53 @@ export default {
       });
     },
     roBack2() {
-      const { callback } = this.$route.params;
-      if (typeof callback === "function") callback();
-      this.$store.dispatch("delCurrentViews", {
-        view: this.$route,
-        $router: this.$router,
+      this.btnType = true;
+      const params = this.MixinClone(this.deliveryForms);
+      //发货详细地址
+      params.receiver.province_city_area_address =
+        params.receiver.province_name +
+        params.receiver.city_name +
+        params.receiver.area_name +
+        params.receiver.address;
+      //收货详细地址
+      params.sender.province_city_area_address =
+        params.sender.province_name +
+        params.sender.city_name +
+        params.sender.area_name +
+        params.sender.address;
+      //商品信息
+      const item = {};
+      this.product_list.map((el) => {
+        item.goods_name = el.goods_vo.name;
+        /* item.goods_price = el.product_vo.price; */
+        item.quantity = el.num;
+        item.unit = el.product_vo.unit;
+        return params.goods_list.push(item);
+      });
+      params.goods_num = this.product_list.reduce(
+        (sum, e) => sum + Number(e.num || 0),
+        0
+      );
+      params.total_weight = Number(params.total_weight);
+      params.total_volume = Number(params.total_volume);
+      params.declared_value = Number(params.declared_value);
+      //地址
+      params.send_address = this.send_address;
+      params.receive_address = this.receive_address;
+      params.order_code = this.id;
+      params.order_item_vos = this.goodsExchangeAddForm.product_list
+      API_order.saveOrderSend(this.id, params).then((res) => {
+        this.$router.push({ name: "warehouseOut" });
       });
-      this.$router.push({ name: "warehouseOut" });
+      /*  const { callback } = this.$route.params;
+       if (typeof callback === "function") callback();
+       this.$store.dispatch("delCurrentViews", {
+         view: this.$route,
+         $router: this.$router,
+       });
+       this.$router.push({ name: "warehouseOut" }); */
+
+
     },
     roBack() {
       const { callback } = this.$route.params;
@@ -934,8 +1013,14 @@ export default {
       API_order.getSendOrderDetail(this.id).then((res) => {
         res.product_list = res.order_item_vos;
         this.product_list = res.order_item_vos;
-        this.selectedOptions = res.warehouse_vo.ware_pro_city_area.split(",")
-        this.receiverOptions = res.order_vo.province_city_area.split(",");
+        this.deliveryForms.send_type = res.order_vo.send_type
+        this.deliveryForms.selfPickupNum = res.self_pickup_num
+        if (res.warehouse_vo && res.warehouse_vo.ware_pro_city_area) {
+          this.selectedOptions = res.warehouse_vo.ware_pro_city_area.split(",");
+        }
+        if (res.order_vo && res.order_vo.province_city_area) {
+          this.receiverOptions = res.order_vo.province_city_area.split(",");
+        }
         if (this.outType !== undefined || res.kdn_order_code !== undefined) {
           this.goodsExchangeAddForm.product_list = res.order_item_vos
           this.disabledType = true;
@@ -991,12 +1076,19 @@ export default {
 
         }
         res.order_item_vos.map((el) => {
+          el.orderNum = el.num
+          el.num = 0
+          if(!el.sn_code_list){
+             el.sn_code_list = []
+          }
+         
           this.deliveryForms.total_weight = Number(
             el.product_vo.weight * el.num
           );
         });
         this.deliveryForms.warehouse_id = res.warehouse_id
         this.deliveryForms.declared_value = Number(res.order_vo.real_price);
+        this.goodsExchangeAddForm.product_list = res.order_item_vos
         /* if (res.send_address && res.receiver_address) {
           this.selectedOptions = res.send_address.split(",");
           this.receiverOptions = res.receive_address.split(",");
@@ -1083,7 +1175,12 @@ export default {
 .order-item {
   margin-top: 30px;
 }
-
+.sn-code-container {
+  max-height: 100px;
+  /* 设置最大高度,超过这个高度将显示滚动条 */
+  overflow-y: auto;
+  /* 垂直方向上溢出时显示滚动条 */
+}
 .footer {
   width: 100%;
   padding: 10px;

+ 6 - 5
manager-admin/src/views/stock/warehouseList.vue

@@ -59,14 +59,15 @@
         <el-form-item label="仓库名称" prop="name">
           <el-input v-model="stockForm.name" :minlength="2" :maxlength="20" clearable placeholder="请输入仓库名称"></el-input>
         </el-form-item>
-        <el-form-item label="负责人姓名" prop="">
-          <el-select v-model="stockForm.admin_id" clearable @change="selUser">
+        <el-form-item label="发货人姓名" prop="">
+          <el-input v-model="stockForm.user_name" :minlength="2" :maxlength="20" clearable placeholder="请输入发货人姓名"></el-input>
+          <!-- <el-select v-model="stockForm.admin_id" clearable @change="selUser">
             <el-option v-for="item in marketingList" :key="item.id" :label="item.real_name" :value="item.id" />
-          </el-select>
+          </el-select> -->
         </el-form-item>
-        <el-form-item label="负责人电话" prop="phone">
+        <el-form-item label="发货人电话" prop="phone">
           <el-input v-model="stockForm.phone" :minlength="2" :maxlength="20" clearable
-            placeholder="请输入负责人电话"></el-input>
+            placeholder="请输入发货人电话"></el-input>
         </el-form-item>
         <el-form-item label="仓库地址" prop="">
           <el-cascader size="large" :options="options" clearable v-model="selectedOptions" >

+ 2 - 0
manager-admin/src/views/stock/warehouseLocation.vue

@@ -12,6 +12,8 @@
 
       <template slot="table-columns">
         <el-table-column type="selection" width="55" />
+        <el-table-column prop="code" label="区域编号">
+        </el-table-column>
         <el-table-column prop="name" label="名称">
         </el-table-column>
         <el-table-column prop="remark" label="备注">

+ 249 - 248
manager-admin/src/views/stock/warehouseOut.vue

@@ -48,7 +48,8 @@
       </el-form>
       <el-button @click="advancedSearchEvent"> 搜索 </el-button>
     </div>
-    <en-table-layout :tableData="tableData.records" :loading="loading" @selection-change="handleSelectionChange" :row-style="changRed">
+    <en-table-layout :tableData="tableData.records" :loading="loading" @selection-change="handleSelectionChange"
+      :row-style="changRed">
       <div slot="toolbar" class="inner-toolbar">
         <div class="toolbar-btns">
           <span v-if="params.selectType == 'sending'">已发货:{{ tableData.total }}</span>
@@ -60,7 +61,7 @@
       </div>
       <template slot="table-columns">
         <el-table-column type="selection" width="55" />
-        <el-table-column prop="" label="订单编号" >
+        <el-table-column prop="" label="订单编号">
           <template slot-scope="scope">
             {{ scope.row.order_vo.sn }}
           </template>
@@ -78,7 +79,7 @@
         <el-table-column prop="order_time" label="下单时间">
           <template slot-scope="scope">{{
             scope.row.order_vo.order_time | unixToDate
-            }}</template>
+          }}</template>
         </el-table-column>
         <el-table-column prop="warehouse_name" label="仓库名称">
           <template slot-scope="scope">
@@ -88,19 +89,19 @@
         <el-table-column prop="" label="配送方式">
           <template slot-scope="scope">{{
             deliveryType(scope.row.order_vo.send_type)
-            }}</template>
+          }}</template>
         </el-table-column>
         <!--        <el-table-column prop="distribution_name" label="销售经理" />-->
         <el-table-column prop="" label="付款方式">
           <template slot-scope="scope">
-            {{ deliveryType(scope.row.order_vo.send_type) }}
+            {{ payType(scope.row.order_vo.pay_type) }}
           </template>
         </el-table-column>
         <!--        <el-table-column prop="audit_by" label="审核人" />-->
         <el-table-column prop="status" label="状态">
           <template slot-scope="scope">{{
             typeName(scope.row.status)
-            }}</template>
+          }}</template>
         </el-table-column>
         <!-- <el-table-column prop="status" label="发货状态">
           <template slot-scope="scope">{{ statusFilter(scope.row.status) }}</template>
@@ -187,7 +188,7 @@
         <el-form-item label="订单编号:" prop="sn">
           <span v-if="warehouseOutForms.order_sn_list">{{
             formatFilter(warehouseOutForms.order_sn_list)
-            }}</span>
+          }}</span>
         </el-form-item>
         <el-form-item label="配送方式:" prop="category_id">
           <el-radio v-model="warehouseOutForms.delivery_type" :label="'express'" :disabled="true">物流配送</el-radio>
@@ -251,6 +252,7 @@ import Print from "print-js";
 import * as API_Setting from "@/api/setting";
 import { Foundation } from "~/ui-utils";
 import * as API_BasicSetting from "@/api/basicSetting";
+import * as API_CollectingAccount from "@/api/collectingAccount";
 export default {
   name: "warehouseOut",
   data() {
@@ -284,16 +286,7 @@ export default {
       // 审核状态
       auditStatus: "AUDIT_PASS",
       activeShipped: "unShipped",
-      deliveryTypeList: [
-        {
-          code: "express",
-          name: "快递配送",
-        },
-        {
-          code: "self_pick",
-          name: "门店自提",
-        },
-      ],
+      deliveryTypeList: [],
       collectingAccountList: [], // 支付方式列表
       customerList: [],
     };
@@ -303,6 +296,7 @@ export default {
     this.GET_DeptList();
     this.GET_ExpressCompanyList();
     this.GET_WarehouseList();
+    this.GET_CollectingAccountList();
   },
   watch: {
     $route: function ({ query }) {
@@ -311,6 +305,16 @@ export default {
     },
   },
   methods: {
+      /** 获取支付方式列表 */
+      GET_CollectingAccountList() {
+      API_CollectingAccount.getList({
+        page_no: 1,
+        page_size: -1,
+        enable_flag: true,
+      }).then((response) => {
+        this.collectingAccountList = response.data;
+      });
+    },
     changRed({ row }) {
       if (row.subtract_stock) { // 变颜色的条件
         return {
@@ -318,253 +322,250 @@ export default {
         }
       }
     },
-      memberType(val) {
-        let name = "";
-        this.customerList.map((el) => {
+    memberType(val) {
+      let name = "";
+      this.customerList.map((el) => {
+        if (el.id == val) {
+          return (name = el.name);
+        }
+      });
+      return name;
+    },
+    //获取付款方式
+    payType(val) {
+      let name = "";
+        this.collectingAccountList.map((el) => {
           if (el.id == val) {
             return (name = el.name);
           }
         });
         return name;
-      },
-      //获取付款方式
-      payType(val) {
-        let name = "";
-        API_CollectingAccount.getList({
-          page_no: 1,
-          page_size: -1,
-          enable_flag: true,
-        }).then((response) => {
-          this.collectingAccountList = response.data;
-          this.collectingAccountList.map((el) => {
-            if (el.id == val) {
-              return (name = el.name);
-            }
-          });
-          return name;
-        });
-      },
-      //配送方式查看
-      deliveryType(val) {
-        let name = "";
-        this.deliveryTypeList.map((el) => {
-          if (el.code == val) {
-            return (name = el.name);
-          }
-        });
-        return name;
-      },
-      //获取仓库名称
-      warehouseName(val) {
-        let name = [];
-        this.warehouseList.map((el) => {
-          val.map((e) => {
-            if (el.id == e) {
-              return name.push(el.name);
-            }
-          });
-        });
-        return name.join("/");
-      },
-      //获取订单状态大小写转换.toUpperCase()
-      typeName(val) {
-        let name = "";
-        this.orderType.map((el) => {
-          if (el.value == val) {
-            return (name = el.label);
-          }
-        });
-        return name;
-      },
-      /* 切换发货列表 */
-      handleClick(tab, event) {
-        if (tab.name == "to_be_send") {
-          this.params.selectType = tab.name;
-          this.GET_WarehouseOutList();
-        } else {
-          this.params.selectType = tab.name;
-          this.GET_WarehouseOutList();
+    },
+    //配送方式查看
+    deliveryType(val) {
+      let name = "";
+      this.deliveryTypeList.map((el) => {
+        if (el.value == val) {
+          return (name = el.label);
         }
-      },
-      addWarehouse(row) {
-        this.$router.push({
-          name: "orderOutboundAdd",
-          params: { id: row.id },
-        });
-        // this.$router.params{ name: 'orderOutboundDetail', params: { id: scope.row.id } }
-      },
-      /** 查看 */
-      handleAuditDialog(row) {
-        this.$router.push({
-          name: "orderOutboundAdd",
-          params: { id: row.id, type: "check" },
-        });
-      },
-      /** 审核提交 */
-      handleAuditWarehouseOut() {
-        API_Order.handleAuditWarehouseOut(this.auditId, {
-          status: this.auditStatus,
-        }).then((response) => {
-          this.$message.success("提交成功!");
-          this.auditVisible = false;
-          this.GET_WarehouseOutList();
-        });
-      },
-      GET_ExpressCompanyList() {
-        API_Order.getExpressCompanyList({ page_no: 1, page_size: 9999 }).then(
-          (response) => {
-            this.expressCompanyList = response.data;
+      });
+      return name;
+    },
+    //获取仓库名称
+    warehouseName(val) {
+      let name = [];
+      this.warehouseList.map((el) => {
+        val.map((e) => {
+          if (el.id == e) {
+            return name.push(el.name);
           }
-        );
-      },
-      warehouseOutShip() {
-        API_Order.warehouseOutShip(this.warehouseOutForms).then((response) => {
-          this.$message.success("发货成功!");
-          this.GET_WarehouseOutList();
-          this.dialogSendVisible = false;
         });
-      },
-      formatFilter(val) {
-        return val.join(",");
-      },
-      /** 出库单状态 */
-      statusFilter(val) {
-        switch (val) {
-          case "WAIT_SHIP":
-            return "待发货";
-          case "WAIT_AUDIT":
-            return "待发货";
-          case "SHIP":
-            return "已发货";
-          default:
-            return "";
+      });
+      return name.join("/");
+    },
+    //获取订单状态大小写转换.toUpperCase()
+    typeName(val) {
+      let name = "";
+      this.orderType.map((el) => {
+        if (el.value == val) {
+          return (name = el.label);
         }
-      },
-      /** 获取仓库 */
-      GET_WarehouseList() {
-        API_BasicSetting.getWarehouseListAll().then((response) => {
-          this.warehouseList = response;
-        });
-        API_BasicSetting.customer(this.params).then((response) => {
-          this.customerList = response.data;
-        });
-      },
-      /** 获取部门 */
-      GET_DeptList() {
-        API_Setting.getDeptList().then((response) => {
-          this.deptList = Foundation.buildTree(response, "0");
-        });
-        API_Setting.getPage({ dictType: "Sale_order_send_status" }).then((res) => {
-          this.orderType = res.data;
-        });
-      },
-      /** 打印对账详情 */
-      handlePrintWarehouseOut() {
-        Print({
-          printable: "deliverySheet",
-          type: "html",
-          targetStyles: ["*"],
-          ignoreElements: ["no-logs", "goods-image", "no-btn"],
-        });
-      },
-      handleDeleteWarehouseOut() {
-        this.$confirm("确定要删除这些出库单吗?", "提示", { type: "warning" })
-          .then(() => {
-            const ids = this.multipleSelection.map((item) => item.id);
-            API_Order.deleteWarehouseOut(ids).then(() => {
-              this.$message.success("删除成功!");
-              this.GET_WarehouseOutList();
-            });
-          })
-          .catch(() => { });
-      },
-      /** 多选改变 */
-      handleSelectionChange(val) {
-        this.multipleSelection = val;
-      },
-      /** 分页大小发生改变 */
-      handlePageSizeChange(size) {
-        this.params.page_size = size;
+      });
+      return name;
+    },
+    /* 切换发货列表 */
+    handleClick(tab, event) {
+      if (tab.name == "to_be_send") {
+        this.params.selectType = tab.name;
         this.GET_WarehouseOutList();
-      },
-
-      /** 分页页数发生改变 */
-      handlePageCurrentChange(page) {
-        this.params.page_no = page;
+      } else {
+        this.params.selectType = tab.name;
         this.GET_WarehouseOutList();
-      },
-
-      /** 发货 */
-      handleSendWarehouseOut(row) {
-        this.warehouseOutForms = row;
-        // this.dialogSendVisible = trueorderOutboundDetail
-        this.$router.push({
-          name: "orderOutboundAdd",
-          params: { id: row.id },
-        });
-      },
-      /** 打印出库单 */
-      handlePrintWarehouseOutDialog(row) {
-        this.GET_WarehouseOutDetail(row.id);
-      },
-      /** 获取出库单详情页面数据 */
-      GET_WarehouseOutDetail(id) {
-        API_Order.getWarehouseOutInfo(id).then((response) => {
-          this.warehouseOutForm = response;
-          if (response.product_list && response.product_list.length) {
-            var str = "";
-            response.product_list.forEach(function (i) {
-              str += i.product_name + "、";
-            });
-          }
-          this.warehouseOutForm.illustrate = str;
-          this.dialogVisible = true;
-        });
-      },
-      /** 搜索事件触发 */
-      searchEvent(data) {
-        this.params = {
-          ...this.params,
-          sn: data,
-        };
-        Object.keys(this.advancedForm).forEach((key) => delete this.params[key]);
-        this.params.page_no = 1;
+      }
+    },
+    addWarehouse(row) {
+      this.$router.push({
+        name: "orderOutboundAdd",
+        params: { id: row.id },
+      });
+      // this.$router.params{ name: 'orderOutboundDetail', params: { id: scope.row.id } }
+    },
+    /** 查看 */
+    handleAuditDialog(row) {
+      this.$router.push({
+        name: "orderOutboundAdd",
+        params: { id: row.id, type: "check" },
+      });
+    },
+    /** 审核提交 */
+    handleAuditWarehouseOut() {
+      API_Order.handleAuditWarehouseOut(this.auditId, {
+        status: this.auditStatus,
+      }).then((response) => {
+        this.$message.success("提交成功!");
+        this.auditVisible = false;
         this.GET_WarehouseOutList();
-      },
-      /** 高级搜索事件触发 */
-      advancedSearchEvent() {
-        this.params = {
-          ...this.params,
-          ...this.advancedForm,
-        };
-        delete this.params.start_time;
-        delete this.params.end_time;
-        if (this.advancedForm.warehouseOut_time_range) {
-          this.params.start_time = parseInt(
-            Number(this.advancedForm.warehouseOut_time_range[0]) / 1000
-          );
-          this.params.end_time = parseInt(
-            Number(this.advancedForm.warehouseOut_time_range[1]) / 1000
-          );
+      });
+    },
+    GET_ExpressCompanyList() {
+      API_Order.getExpressCompanyList({ page_no: 1, page_size: 9999 }).then(
+        (response) => {
+          this.expressCompanyList = response.data;
         }
-        delete this.params.warehouseOut_time_range;
-        this.params.page_no = 1;
+      );
+    },
+    warehouseOutShip() {
+      API_Order.warehouseOutShip(this.warehouseOutForms).then((response) => {
+        this.$message.success("发货成功!");
         this.GET_WarehouseOutList();
-      },
-      /** 获取出库单列表 */
-      GET_WarehouseOutList() {
-        this.loading = true;
-        API_Order.getSaleOrderOutList(this.params)
-          .then((response) => {
-            this.loading = false;
-            this.tableData = response;
-          })
-          .catch(() => {
-            this.loading = false;
+        this.dialogSendVisible = false;
+      });
+    },
+    formatFilter(val) {
+      return val.join(",");
+    },
+    /** 出库单状态 */
+    statusFilter(val) {
+      switch (val) {
+        case "WAIT_SHIP":
+          return "待发货";
+        case "WAIT_AUDIT":
+          return "待发货";
+        case "SHIP":
+          return "已发货";
+        default:
+          return "";
+      }
+    },
+    /** 获取仓库 */
+    GET_WarehouseList() {
+      API_BasicSetting.getWarehouseListAll().then((response) => {
+        this.warehouseList = response;
+      });
+      API_BasicSetting.customer(this.params).then((response) => {
+        this.customerList = response.data;
+      });
+      API_Setting.getPage({ dictType: "order_send_type" }).then((res) => {
+        this.deliveryTypeList = res.data;
+      });
+    },
+    /** 获取部门 */
+    GET_DeptList() {
+      API_Setting.getDeptList().then((response) => {
+        this.deptList = Foundation.buildTree(response, "0");
+      });
+      API_Setting.getPage({ dictType: "Sale_order_send_status" }).then((res) => {
+        this.orderType = res.data;
+      });
+    },
+    /** 打印对账详情 */
+    handlePrintWarehouseOut() {
+      Print({
+        printable: "deliverySheet",
+        type: "html",
+        targetStyles: ["*"],
+        ignoreElements: ["no-logs", "goods-image", "no-btn"],
+      });
+    },
+    handleDeleteWarehouseOut() {
+      this.$confirm("确定要删除这些出库单吗?", "提示", { type: "warning" })
+        .then(() => {
+          const ids = this.multipleSelection.map((item) => item.id);
+          API_Order.deleteWarehouseOut(ids).then(() => {
+            this.$message.success("删除成功!");
+            this.GET_WarehouseOutList();
           });
-      },
+        })
+        .catch(() => { });
+    },
+    /** 多选改变 */
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
     },
-  };
+    /** 分页大小发生改变 */
+    handlePageSizeChange(size) {
+      this.params.page_size = size;
+      this.GET_WarehouseOutList();
+    },
+
+    /** 分页页数发生改变 */
+    handlePageCurrentChange(page) {
+      this.params.page_no = page;
+      this.GET_WarehouseOutList();
+    },
+
+    /** 发货 */
+    handleSendWarehouseOut(row) {
+      this.warehouseOutForms = row;
+      // this.dialogSendVisible = trueorderOutboundDetail
+      this.$router.push({
+        name: "orderOutboundAdd",
+        params: { id: row.id },
+      });
+    },
+    /** 打印出库单 */
+    handlePrintWarehouseOutDialog(row) {
+      this.GET_WarehouseOutDetail(row.id);
+    },
+    /** 获取出库单详情页面数据 */
+    GET_WarehouseOutDetail(id) {
+      API_Order.getWarehouseOutInfo(id).then((response) => {
+        this.warehouseOutForm = response;
+        if (response.product_list && response.product_list.length) {
+          var str = "";
+          response.product_list.forEach(function (i) {
+            str += i.product_name + "、";
+          });
+        }
+        this.warehouseOutForm.illustrate = str;
+        this.dialogVisible = true;
+      });
+    },
+    /** 搜索事件触发 */
+    searchEvent(data) {
+      this.params = {
+        ...this.params,
+        sn: data,
+      };
+      Object.keys(this.advancedForm).forEach((key) => delete this.params[key]);
+      this.params.page_no = 1;
+      this.GET_WarehouseOutList();
+    },
+    /** 高级搜索事件触发 */
+    advancedSearchEvent() {
+      this.params = {
+        ...this.params,
+        ...this.advancedForm,
+      };
+      delete this.params.start_time;
+      delete this.params.end_time;
+      if (this.advancedForm.warehouseOut_time_range) {
+        this.params.start_time = parseInt(
+          Number(this.advancedForm.warehouseOut_time_range[0]) / 1000
+        );
+        this.params.end_time = parseInt(
+          Number(this.advancedForm.warehouseOut_time_range[1]) / 1000
+        );
+      }
+      delete this.params.warehouseOut_time_range;
+      this.params.page_no = 1;
+      this.GET_WarehouseOutList();
+    },
+    /** 获取出库单列表 */
+    GET_WarehouseOutList() {
+      this.loading = true;
+      API_Order.getSaleOrderOutList(this.params)
+        .then((response) => {
+          this.loading = false;
+          this.tableData = response;
+        })
+        .catch(() => {
+          this.loading = false;
+        });
+
+    },
+  },
+};
 </script>
 
 <style type="text/scss" lang="scss" scoped>