Ver Fonte

处理bug,添加按钮标识

yangg há 1 ano atrás
pai
commit
e4c7768385
41 ficheiros alterados com 585 adições e 265 exclusões
  1. 1 1
      manager-admin/src/api/category.js
  2. 2 2
      manager-admin/src/api/collectingAccount.js
  3. 11 0
      manager-admin/src/api/goodsInventoryLoss.js
  4. 3 3
      manager-admin/src/api/goodsTransfer.js
  5. 2 2
      manager-admin/src/api/member.js
  6. 1 1
      manager-admin/src/api/menus.js
  7. 2 2
      manager-admin/src/api/order.js
  8. 1 1
      manager-admin/src/api/spec.js
  9. 2 2
      manager-admin/src/components/SkuEditor/src/main.vue
  10. 6 5
      manager-admin/src/router/index.js
  11. 1 0
      manager-admin/src/store/modules/permission.js
  12. 5 1
      manager-admin/src/store/modules/user.js
  13. 3 1
      manager-admin/src/views/basicSetting/brand.vue
  14. 2 2
      manager-admin/src/views/basicSetting/enterprise/index.vue
  15. 1 1
      manager-admin/src/views/basicSetting/goods/editForm/index.vue
  16. 5 5
      manager-admin/src/views/basicSetting/goods/index.vue
  17. 3 3
      manager-admin/src/views/basicSetting/kdnStore.vue
  18. 3 3
      manager-admin/src/views/basicSetting/productClass.vue
  19. 2 2
      manager-admin/src/views/basicSetting/skuSort.vue
  20. 1 1
      manager-admin/src/views/basicSetting/specList.vue
  21. 5 5
      manager-admin/src/views/finance/financeIncomeList/index.vue
  22. 141 41
      manager-admin/src/views/layout/components/Navbar.vue
  23. 2 2
      manager-admin/src/views/setting/serialList.vue
  24. 1 1
      manager-admin/src/views/setting/tool-manage/menuManage.vue
  25. 4 4
      manager-admin/src/views/stock/channelSettings.vue
  26. 2 2
      manager-admin/src/views/stock/goodsExchange/addInventory.vue
  27. 12 2
      manager-admin/src/views/stock/goodsExchange/goodsExchange.vue
  28. 2 2
      manager-admin/src/views/stock/goodsExchange/goodsExchangeAdd.vue
  29. 1 1
      manager-admin/src/views/stock/goodsInventory/goodsInventory.vue
  30. 1 1
      manager-admin/src/views/stock/goodsInventory/goodsInventoryAdd.vue
  31. 36 39
      manager-admin/src/views/stock/goodsInventoryLoss/goodsInventoryLoss.vue
  32. 282 89
      manager-admin/src/views/stock/goodsInventoryLoss/goodsInventoryLossAdd.vue
  33. 3 3
      manager-admin/src/views/stock/goodsLend.vue
  34. 18 17
      manager-admin/src/views/stock/goodsTransfer.vue
  35. 1 1
      manager-admin/src/views/stock/goodsUnderstock.vue
  36. 8 8
      manager-admin/src/views/stock/order.vue
  37. 1 1
      manager-admin/src/views/stock/orderAdd.vue
  38. 2 2
      manager-admin/src/views/stock/orderReturn.vue
  39. 2 2
      manager-admin/src/views/stock/warehouseList.vue
  40. 3 3
      manager-admin/src/views/stock/warehouseLocation.vue
  41. 1 1
      manager-admin/src/views/stock/warehouseOut.vue

+ 1 - 1
manager-admin/src/api/category.js

@@ -45,7 +45,7 @@ export function editCategory(id, params) {
  */
 export function updateCategorySpecs(category_id, choose_specs) {
   return request({
-    url: `admin/goods/categories/${category_id}/specs`,
+    url: `admin/goods/categories/specs/${category_id}`,
     method: 'put',
     data: { choose_specs }
   })

+ 2 - 2
manager-admin/src/api/collectingAccount.js

@@ -72,7 +72,7 @@ export function del(id) {
  */
 export function updateEnableFlag(id, enable_flag) {
   return request({
-    url: `admin/erp/collectingAccount/${id}/enableFlag`,
+    url: `admin/erp/collectingAccount/enableFlag/${id}`,
     method: 'put',
     params: { enable_flag }
   })
@@ -84,7 +84,7 @@ export function updateEnableFlag(id, enable_flag) {
  */
 export function updateDefault(id) {
   return request({
-    url: `admin/erp/collectingAccount/${id}/default`,
+    url: `admin/erp/collectingAccount/default/${id}`,
     method: 'put'
   })
 }

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

@@ -147,3 +147,14 @@ export function getSyncStock(ids) {
     method: 'post',
   })
 }
+
+/* 
+/admin/stock/damage/report/submit/{id} */
+export function submit(id,params) {
+  return request({
+    url: `/admin/stock/damage/report/submit/${id}`,
+    method: 'post',
+    headers: { 'Content-Type': 'application/json' },
+    data:params
+  })
+}

+ 3 - 3
manager-admin/src/api/goodsTransfer.js

@@ -177,12 +177,12 @@ export function get_withdraw(id) {
 }
 /* /admin/erp/product/updateWarnStock/{stockId}/{warnNum} */
 
-export function updateWarnStock(stockId,warnNum) {
+export function updateWarnStock(parmas) {
   return request({
-    url: `/admin/erp/product/updateWarnStock/${stockId}/${warnNum}`,
+    url: `/admin/erp/product/updateWarnStock`,
     method: 'post',
     headers: { 'Content-Type': 'application/json' },
-
+    data:parmas
   })
 }
 

+ 2 - 2
manager-admin/src/api/member.js

@@ -73,7 +73,7 @@ export function deleteMember(id) {
  */
 export function disableMember(id) {
   return request({
-    url: `admin/erp/member/${id}/disable`,
+    url: `admin/erp/member/disable/${id}`,
     method: 'put'
   })
 }
@@ -84,7 +84,7 @@ export function disableMember(id) {
  */
 export function enableMember(id) {
   return request({
-    url: `admin/erp/member/${id}/enable`,
+    url: `admin/erp/member/enable/${id}`,
     method: 'put'
   })
 }

+ 1 - 1
manager-admin/src/api/menus.js

@@ -10,7 +10,7 @@ import request from '@/utils/request'
  */
 export function getMenusChildren(parent_id = 0) {
   return request({
-    url: `admin/systems/menus/${parent_id}/children`,
+    url: `admin/systems/menus/children/${parent_id}`,
     method: 'get',
     params: { parent_id }
   })

+ 2 - 2
manager-admin/src/api/order.js

@@ -217,7 +217,7 @@ export function syncLogAgain(id) {
  */
 export function submit(id) {
   return request({
-    url: `admin/erp/order/${id}/submit`,
+    url: `admin/erp/order/submit/${id}`,
     method: 'post'
   })
 }
@@ -317,7 +317,7 @@ export function queryLogistics(param) {
 /* /admin/erp/order/{id}/revoke */
 export function orderRevoke(id) {
   return request({
-    url: `/admin/erp/order/${id}/revoke`,
+    url: `/admin/erp/order/revoke/${id}`,
     method: 'post',
     headers: { 'Content-Type': 'application/json' },
   })

+ 1 - 1
manager-admin/src/api/spec.js

@@ -75,7 +75,7 @@ export function getSpecValues(spec_id) {
  */
 export function saveSpecValues(spec_id, value_list) {
   return request({
-    url: `admin/goods/specs/${spec_id}/values`,
+    url: `admin/goods/specs/values/${spec_id}`,
     method: 'post',
     data: { value_list }
   })

+ 2 - 2
manager-admin/src/components/SkuEditor/src/main.vue

@@ -218,13 +218,11 @@ export default {
       handler(val) {
         if (val) {
           this.skuForm.skuList = [{}]
-          console.log(this.skuForm.skuList);
         } else {
           this.$nextTick(() => {
             this.skuForm.skuList = [{ sku: this.basicInfoData + '0000' }];
           })
 
-          console.log(this.skuForm.skuList);
         }
         this.skuForm.selectedSpecs = [];
         this.skuForm.skuList = [];
@@ -509,7 +507,9 @@ export default {
           this.skuForm.skuList.map(el => {
             el.have_sn = this.haveSn
           })
+          
           const skus = Helper.cloneJson(this.skuForm.skuList);
+          console.log(skus);
           resolve(skus);
           // try {
           //   await Helper.saveGoodsSkus(this.goodsId, skus)

+ 6 - 5
manager-admin/src/router/index.js

@@ -224,13 +224,13 @@ const asyncRouters = [
     },
     children: [
       { path: 'supplier', component: () => import('@/views/basicSetting/supplier'), name: 'supplier', meta: { title: 'supplier' } },
-      { path: 'enterprise', component: () => import('@/views/basicSetting/enterprise'), name: 'enterprise', meta: { title: 'enterprise' } },
+      { path: 'enterprise', component: () => import('@/views/basicSetting/enterprise'), name: 'enterprise',hidden:true, meta: { title: 'enterprise' } },
       { path: 'marketing-manager', component: () => import('@/views/basicSetting/marketingManager'), name: 'marketingManager', meta: { title: 'marketingManager' } },
       { path: 'warehouse', component: () => import('@/views/basicSetting/warehouse'), name: 'warehouse', meta: { title: 'warehouse' } },
-      { path: 'number-rule', component: () => import('@/views/basicSetting/numberRule'), name: 'numberRule', meta: { title: 'numberRule' } },
-      { path: 'member', component: () => import('@/views/basicSetting/member/member'), name: 'member', meta: { title: 'member' } },
+      { path: 'number-rule', component: () => import('@/views/basicSetting/numberRule'), name: 'numberRule',hidden:true, meta: { title: 'numberRule' } },
+      { path: 'member', component: () => import('@/views/basicSetting/member/member'), name: 'member',hidden:true, meta: { title: 'member' } },
       { path: 'collecting-account', component: () => import('@/views/basicSetting/collectingAccount'), name: 'collectingAccount', meta: { title: 'collectingAccount' } },
-      { path: 'regional-management', component: () => import('@/views/setting/payment-and-delivery/regionalManagement'), name: 'regionalManagementSettings', meta: { title: 'regionalManagement' } },
+      { path: 'regional-management', component: () => import('@/views/setting/payment-and-delivery/regionalManagement'), name: 'regionalManagementSettings',hidden:true, meta: { title: 'regionalManagement' } },
       { path: 'express', component: () => import('@/views/setting/payment-and-delivery/express'), name: 'expressSettings', meta: { title: 'expressSettings' } },
       { path: 'store', component: () => import('@/views/basicSetting/store'), name: 'store', meta: { title: 'store' } },
       { path: 'freight-template', component: () => import('@/views/basicSetting/freightTemplate'), name: 'freightTemplate', meta: { title: 'freightTemplate' }},
@@ -268,7 +268,8 @@ const asyncRouters = [
         component: () => import('@/views/setting/shop-settings/index'),
         redirect: '/setting/oauth2/client',
         name: 'oauth2',
-        meta: { title: 'oauth2' },
+         hidden: true,
+        meta: { title: 'oauth2'},
         children: [
           { path: 'client', component: () => import('@/views/setting/oauth2/client'), name: 'oauth2Client', meta: { title: 'oauth2Client' } },
           { path: 'token', component: () => import('@/views/setting/oauth2/token'), name: 'oauth2Token', meta: { title: 'oauth2Token' } }

+ 1 - 0
manager-admin/src/store/modules/permission.js

@@ -32,6 +32,7 @@ const permission = {
           resolve()
         } else {
           getUserRolesPermissions(role_id).then(response => {
+            console.log('权限',response);
             let accessedRouters = filterRoleRouter(asyncRouterMap, response)
             commit('SET_ROUTERS_ALL', response)
             commit('SET_ROUTERS', accessedRouters)

+ 5 - 1
manager-admin/src/store/modules/user.js

@@ -136,5 +136,9 @@ export const actions = {
     commit('REMOVE_USER')
     commit('REMOVE_ACCESS_TOKEN')
     commit('REMOVE_REFRESH_TOKEN')
-  }
+  },
+  /* 个人信息更新 */
+  updateUserAction({ commit }, user){
+    commit('SET_USER', user);
+  },
 }

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

@@ -9,7 +9,7 @@
             icon="el-icon-circle-plus-outline"
             @click="handleAddBrand"
             v-if="checkPermission(['brand:add'])">添加</el-button>
-            <el-button type="danger" size="mini" @click="deleteTheSpecs">删除选中</el-button>
+            <el-button type="danger" size="mini"  v-if="checkPermission(['brand:delete'])" @click="deleteTheSpecs">删除选中</el-button>
         </div>
         <div class="toolbar-search">
           <en-table-search @search="searchEvent" placeholder="请输入品牌名称" />
@@ -33,10 +33,12 @@
             <el-button
               size="mini"
               type="primary"
+              v-if="checkPermission(['brand:edit'])"
               @click="handleEditBrand(scope.$index, scope.row)">编辑</el-button>
             <el-button
               size="mini"
               type="danger"
+              v-if="checkPermission(['brand:delete'])"
               @click="handleDeleteBrand(scope.$index, scope.row)">删除</el-button>
           </template>
         </el-table-column>

+ 2 - 2
manager-admin/src/views/basicSetting/enterprise/index.vue

@@ -37,10 +37,10 @@
         <el-table-column prop="remark" label="备注" />
         <el-table-column label="操作" width="200px">
           <template slot-scope="scope">
-            <el-button size="mini" type="primary" v-if="checkPermission(['enterprise:edit'])"
+            <el-button size="mini" type="primary" v-if="checkPermission(['enterprise:update'])"
               @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
             <el-button size="mini" type="danger"
-              v-if="checkPermission(['enterprise:delete'])"
+              v-if="checkPermission(['enterprise:del'])"
               @click="handleDelete(scope.$index, scope.row)">删除</el-button>
           </template>
         </el-table-column>

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

@@ -66,7 +66,6 @@ export default {
   },
   methods: {
     handleBasicInfoUpdate(data) {
-      console.log(data);
       this.basicInfoData = data;
     },
     tabChange(val) {
@@ -86,6 +85,7 @@ export default {
     /** 查询商品详情 */
     async GET_GoodsDetail() {
       this.formData = await API_Goods.getGoodsInfo(this.id);
+      console.log("formData:",this.formData);
       /* this.formData.image_list=this.formData.images.split(',') */
       this.formData.haveSpec = this.formData.spec;
       this.formData.haveSn = this.formData.have_sn;

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

@@ -44,11 +44,11 @@
             <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"
+              <el-button size="mini" v-if="checkPermission(['goods:add'])" type="primary"
                 @click="handleAddGoods('hire')">新增租赁商品</el-button>
             </div>
-            <div class="toolbar-search" style="display: flex; align-items: center">
-              <span>商品编号/sku/序列号:</span>
+            <div class="toolbar-search" style="display: flex; align-items: center;">
+              <span style=" white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">商品编号/sku/序列号:</span>
               <en-table-search @search="searchEvent" placeholder="请输入关键字搜索" />
               <el-button @click="refresh" icon="el-icon-refresh" type="info" plain></el-button>
             </div>
@@ -73,7 +73,7 @@
 
             <!-- <el-table-column prop="price" label="价格" :formatter="MixinFormatPrice"/>
             <el-table-column prop="label_names" label="商品标签"/> -->
-            <el-table-column label="上架" key="market_enable">
+            <el-table-column label="上架" key="market_enable" v-if="checkPermission(['goods:update'])">
               <template slot-scope="scope">
                 <el-switch v-model="scope.row.market_enable" active-color="#13ce66" inactive-color="#ff4949"
                   @change="switchVal($event, scope.row)">
@@ -85,7 +85,7 @@
               <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"
+                <el-button size="mini" v-if="checkPermission(['goods:delete'])" type="danger"
                   @click="handleDeleteGoods(scope.row)">删除</el-button>
               </template>
             </el-table-column>

+ 3 - 3
manager-admin/src/views/basicSetting/kdnStore.vue

@@ -3,7 +3,7 @@
         <en-table-layout :tableData="tableData.records" :loading="loading">
             <div slot="toolbar" class="inner-toolbar">
                 <div class="toolbar-btns">
-                    <el-button size="mini" type="primary" v-if="checkPermission(['store:add'])"
+                    <el-button size="mini" type="primary" v-if="checkPermission(['createStore:add'])"
                         @click="handleAdd">添加</el-button>
                 </div>
                 <div class="toolbar-search">
@@ -36,8 +36,8 @@
                 <el-table-column label="操作" width="300">
                     <template slot-scope="scope">
                         <el-button size="mini" type="primary" @click="handleEdit(scope.row)"
-                            v-if="checkPermission(['store:edit'])">编辑</el-button>
-                        <el-button size="mini" v-if="checkPermission(['store:delete'])"
+                            v-if="checkPermission(['updateStore:update'])">编辑</el-button>
+                        <el-button size="mini" v-if="checkPermission(['selectAudit:query'])"
                             @click="synchronization(scope.row)">同步
                         </el-button>
                         <!-- <el-button size="mini" type="danger" v-if="checkPermission(['store:delete'])"

+ 3 - 3
manager-admin/src/views/basicSetting/productClass.vue

@@ -4,7 +4,7 @@
             <div slot="toolbar" class="inner-toolbar">
                 <div class="toolbar-btns">
                     <el-button size="mini" type="primary" icon="el-icon-circle-plus-outline" @click="handleAddBrand"
-                        v-if="checkPermission(['brand:add'])">添加</el-button>
+                        v-if="checkPermission(['productGroup:add'])">添加</el-button>
                 </div>
                 <div class="toolbar-search">
                     <en-table-search @search="searchEvent" placeholder="请输入品牌名称" />
@@ -22,9 +22,9 @@
                     <template slot-scope="scope">
                         <el-button size="mini" 
                             @click="handleEditBrand('check', scope.row)">查看</el-button>
-                        <el-button size="mini" type="primary"
+                        <el-button size="mini" type="primary" v-if="checkPermission(['product:update'])"
                             @click="handleEditBrand('edit', scope.row)">编辑</el-button>
-                        <el-button size="mini" type="danger"
+                        <el-button size="mini" type="danger" v-if="checkPermission(['product:remove'])"
                             @click="handleDeleteBrand(scope.$index, scope.row)">删除</el-button>
                     </template>
                 </el-table-column>

+ 2 - 2
manager-admin/src/views/basicSetting/skuSort.vue

@@ -64,11 +64,11 @@
         <!-- <el-table-column label="条码" align="center">
           <template slot-scope="scope">{{ scope.row.bar_code }}</template>
         </el-table-column> -->
-        <el-table-column prop="sort" label="排序号">
+        <!-- <el-table-column prop="sort" label="排序号">
           <template slot-scope="scope">
             <span class="selectable">{{ scope.row.sort }}</span>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column label="操作" width="310">
           <template slot-scope="scope">
             <el-button size="mini" @click="PrintIng(scope.row)">打印SKU</el-button>

+ 1 - 1
manager-admin/src/views/basicSetting/specList.vue

@@ -33,7 +33,7 @@
             <el-button
               size="mini"
               type="primary"
-              @click="handleEditSpecVal(scope.$index, scope.row)" v-if="checkPermission(['specList:edit'])">编辑规格值</el-button>
+              @click="handleEditSpecVal(scope.$index, scope.row)" v-if="checkPermission(['specValue:add'])">编辑规格值</el-button>
             <el-button
               size="mini"
               type="danger"

+ 5 - 5
manager-admin/src/views/finance/financeIncomeList/index.vue

@@ -4,16 +4,16 @@
       <div class="toolbar-btns">
         <el-button
           size="mini"
-          v-if="checkPermission(['supplier:add'])"
+          v-if="checkPermission(['finance-income:add'])"
           type="primary"
           @click="handleAddSupplier"
           >新增</el-button
         >
-        <el-button size="mini" type="primary">删除</el-button>
+        <el-button size="mini" type="primary"  v-if="checkPermission(['finance-income:delete'])">删除</el-button>
       </div>
       <div class="toolbar-menu">
         <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
-          <el-tab-pane label="全部" name="CUSTOMER_ALL"></el-tab-pane>
+          <el-tab-pane label="销售和租赁" name="CUSTOMER_ALL"></el-tab-pane>
           <el-tab-pane label="销售客户" name="CUSTOMER_SALE"></el-tab-pane>
           <el-tab-pane label="租赁客户" name="CUSTOMER_LEASE"></el-tab-pane>
         </el-tabs>
@@ -38,13 +38,13 @@
           <template slot-scope="scope">
             <el-button
               size="mini"
-              v-if="checkPermission(['supplier:edit'])"
+              v-if="checkPermission(['customer:update'])"
               @click="handleEditSupplier(scope.$index, scope.row)"
               >编辑</el-button
             >
             <el-button
               size="mini"
-              v-if="checkPermission(['supplier:del'])"
+              v-if="checkPermission(['finance-income:delete'])"
               type="danger"
               @click="handleDeleteSupplier(scope.$index, scope.row)"
               >删除</el-button

+ 141 - 41
manager-admin/src/views/layout/components/Navbar.vue

@@ -1,17 +1,8 @@
 <template>
   <div class="navbar-wrap">
-    <el-menu
-      class="navbar"
-      :class="[isFloor && 'tabs-box']"
-      mode="horizontal"
-      background-color="#fff"
-    >
+    <el-menu class="navbar" :class="[isFloor && 'tabs-box']" mode="horizontal" background-color="#fff">
       <div class="navbar-left">
-        <hamburger
-          class="hamburger-container"
-          :toggleClick="toggleSideBar"
-          :isActive="sidebar.opened"
-        ></hamburger>
+        <hamburger class="hamburger-container" :toggleClick="toggleSideBar" :isActive="sidebar.opened"></hamburger>
         <!--        <breadcrumb class="breadcrumb-container"></breadcrumb>-->
         <!-- <tags-view></tags-view> -->
         <div class="menu_cards">
@@ -67,10 +58,15 @@
         <!--        <el-tooltip effect="dark" content="全屏" placement="bottom">-->
         <!--          <screenfull class="screenfull right-menu-item"></screenfull>-->
         <!--        </el-tooltip>-->
-
+        <div>
+          当前登录人:<span>{{nickname}}</span>
+        </div>
         <el-dropdown class="avatar-container right-menu-item" trigger="click">
           <div class="avatar-wrapper">
-            <div class="user-name">{{ user.username[0] }}</div>
+            <div class="user-name">
+              <span v-if="user.face==''"> {{ user.username[0] }}</span>
+              <img v-else :src="user.face" alt="" width="40px">
+            </div>
             <i class="el-icon-caret-bottom"></i>
           </div>
 
@@ -78,6 +74,9 @@
             <router-link to="/">
               <el-dropdown-item> 首页 </el-dropdown-item>
             </router-link>
+            <span @click="changePersonal">
+              <el-dropdown-item>个人信息</el-dropdown-item>
+            </span>
             <span @click="changePassword">
               <el-dropdown-item>修改密码</el-dropdown-item>
             </span>
@@ -88,36 +87,17 @@
         </el-dropdown>
       </div>
     </el-menu>
-    <el-dialog
-      title="修改密码"
-      :visible.sync="dialogVisible"
-      width="500px"
-      append-to-body
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
+    <el-dialog title="修改密码" :visible.sync="dialogVisible" width="500px" append-to-body :close-on-click-modal="false"
+      :close-on-press-escape="false">
       <el-form :model="form" :rules="formRules" ref="form" label-width="100px">
         <el-form-item label="原密码" prop="old_passwprd">
-          <el-input
-            v-model="form.old_passwprd"
-            placeholder="不修改则不填"
-          ></el-input>
+          <el-input v-model="form.old_passwprd" placeholder="不修改则不填"></el-input>
         </el-form-item>
         <el-form-item label="新密码" prop="password">
-          <el-input
-            type="password"
-            autocompete="off"
-            v-model="form.password"
-            placeholder="不修改则不填"
-          ></el-input>
+          <el-input type="password" autocompete="off" v-model="form.password" placeholder="不修改则不填"></el-input>
         </el-form-item>
         <el-form-item label="确认密码" prop="rep_password">
-          <el-input
-            type="password"
-            autocompete="off"
-            v-model="form.rep_password"
-            placeholder="不修改则不填"
-          ></el-input>
+          <el-input type="password" autocompete="off" v-model="form.rep_password" placeholder="不修改则不填"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -125,6 +105,31 @@
         <el-button type="primary" @click="submitForm">确 定</el-button>
       </span>
     </el-dialog>
+    <el-dialog title="个人信息" :visible.sync="PersonalVisible" width="500px" append-to-body :close-on-click-modal="false"
+      :close-on-press-escape="false">
+      <el-form :model="PersonalForm" :rules="PersonalRules" ref="Personalform" label-width="100px">
+        <el-form-item label="昵称:" prop="nickname">
+          <el-input v-model="PersonalForm.nickname" placeholder="请输入昵称"></el-input>
+        </el-form-item>
+        <el-form-item label="联系方式:" prop="phone">
+          <el-input v-model="PersonalForm.phone" placeholder="请输入联系方式"></el-input>
+        </el-form-item>
+        <el-form-item label="邮箱:" prop="email">
+          <el-input v-model="PersonalForm.email" placeholder="请输入邮箱"></el-input>
+        </el-form-item>
+        <el-form-item label="头像:" prop="face">
+          <el-upload class="avatar-uploader" :action="MixinUploadApi" :show-file-list="false"
+            :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
+            <img v-if="PersonalForm.face" :src="PersonalForm.face" class="avatar">
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="PersonalVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitPersona">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -201,6 +206,17 @@ export default {
       },
       isFloor: false,
       times: "", //格式化之后的当前时间
+      PersonalVisible: false,
+      PersonalForm: {
+        nickname: '',
+        phone: "",
+        email: '',
+        face: ''
+      },
+      PersonalRules: {
+
+      },
+      nickname:"",
     };
   },
   computed: {
@@ -239,7 +255,54 @@ export default {
       clearInterval(this.getTimesInterval);
     }
   },
+  mounted(){
+    API_Auth.getAdministratorDetail(this.$store.getters.user.uid).then(res => {
+      this.nickname=res.nickname
+    })
+  },
   methods: {
+    /* 提交个人信息 */
+    submitPersona() {
+      API_Auth.editAdministrator(this.PersonalForm.uid, this.PersonalForm).then(res => {
+        this.$message.success('修改成功!')
+        this.PersonalForm = {}
+        this.PersonalVisible = false
+        API_Auth.getAdministratorDetail(this.$store.getters.user.uid).then(res => {
+          res.uid=res.id 
+          res.dept_id=res.dept_id
+          this.$store.dispatch('updateUserAction', res)
+          location.reload();
+
+        })
+        //
+      })
+    },
+    handleAvatarSuccess(res, file) {
+      this.PersonalForm.face = file.response.url
+      // this.reimburForm.file_url = URL.createObjectURL(file.raw);
+    },
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === 'image/jpeg';
+      const isLt2M = file.size / 1024 / 1024 < 2;
+
+      if (!isJPG) {
+        this.$message.error('上传头像图片只能是 JPG 格式!');
+      }
+      if (!isLt2M) {
+        this.$message.error('上传头像图片大小不能超过 2MB!');
+      }
+      return isJPG && isLt2M;
+    },
+    /* 修改个人信息 */
+    changePersonal() {
+      API_Auth.getAdministratorDetail(this.$store.getters.user.uid).then(res => {
+        res.uid=res.id 
+        res.dept_id=res.dept_id
+        this.PersonalForm = res
+         this.PersonalVisible = true
+      })
+     
+    },
     getTimes() {
       setInterval(this.getTimesInterval, 1000);
     },
@@ -313,7 +376,7 @@ export default {
             location.replace(route.href); // 为了重新实例化vue-router对象 避免bug
           });
         })
-        .catch(() => {});
+        .catch(() => { });
     },
   },
 };
@@ -325,7 +388,9 @@ export default {
 .el-dropdown-menu--small .el-dropdown-menu__item {
   min-width: 90px;
 }
-
+/deep/.el-menu::after, .el-menu::before {
+   display: none;
+}
 .navbar-wrap {
   // height: 60px;
   position: relative;
@@ -340,6 +405,8 @@ export default {
 }
 
 .navbar {
+  display: flex;
+  justify-content: space-between;
   height: 60px;
   border-radius: 0 !important;
   //border-bottom: 1px solid #e9edf0;
@@ -355,32 +422,37 @@ export default {
     display: flex;
     height: 100%;
     align-items: center;
-    width: 94%;
+   /*  width: 85%; */
     padding-left: 20px;
   }
 
   .hamburger-container {
     padding: 0 10px;
   }
+
   .menu_cards {
     width: 100%;
     display: flex;
     justify-content: space-between;
   }
+
   .menu_card {
     display: flex;
+
     .dropdown {
       width: 40px;
       height: 40px;
       margin-left: 8px;
       background-color: rgba(224, 230, 237, 0.4);
       border-radius: 50%;
+
       img {
         width: 20px;
         height: 20px;
         margin: 10px 10px;
       }
     }
+
     .time {
       margin-left: 30px;
     }
@@ -406,6 +478,7 @@ export default {
     align-items: center;
     //float: right;
     height: 100%;
+    justify-content: space-between;
 
     /deep/ svg {
       fill: $nav_text_active !important;
@@ -456,7 +529,7 @@ export default {
           width: 40px;
           height: 40px;
           border-radius: 50%;
-          background: #409eff;
+          /* background: #409eff; */
           font-size: 30px;
           line-height: 1.1;
           text-align: center;
@@ -477,4 +550,31 @@ export default {
     }
   }
 }
+
+/deep/.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+
+.avatar-uploader .el-upload:hover {
+  border-color: #409EFF;
+}
+
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  line-height: 178px;
+  text-align: center;
+}
+
+.avatar {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
 </style>

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

@@ -30,7 +30,7 @@
     <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"
+          <el-button size="mini" v-if="checkPermission(['createSnCode:add'])" type="primary"
             @click="handleAddWarehouse">新增</el-button>
           <!--  <el-button
             size="mini"
@@ -85,7 +85,7 @@
               @click="handleDeleteWarehouse(scope.$index, scope.row)"
               >删除</el-button
             > -->
-            <el-button size="mini" @click="editPrintIng(scope.row)">编辑序列号</el-button>
+            <el-button size="mini" v-if="checkPermission(['updateSnCode:update'])" @click="editPrintIng(scope.row)">编辑序列号</el-button>
             <el-button size="mini" @click="PrintIng(scope.row)">打印序列号</el-button>
           </template>
         </el-table-column>

+ 1 - 1
manager-admin/src/views/setting/tool-manage/menuManage.vue

@@ -36,7 +36,7 @@
           </el-upload>
         </el-form-item>
          <!-- @change="switchVal($event,scope.row,)" -->
-        <el-form-item label="首页显示" prop="show_home" v-if="iconShow !== '0'">
+        <el-form-item label="首页显示" prop="show_home" v-if="iconShow !== '0'&&checkPermission(['UserMenu:get'])">
           <el-switch v-model="menuForm.show_home" :active-value=1 :inactive-value=2 @change="switchVal($event)"></el-switch>
         </el-form-item>
       </el-form>

+ 4 - 4
manager-admin/src/views/stock/channelSettings.vue

@@ -3,9 +3,9 @@
     <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(['goodsLend:add'])" type="primary"
+          <el-button size="mini" v-if="checkPermission(['channel:add'])" type="primary"
             @click="handleAddGoodsLend">新增</el-button>
-          <el-button size="mini" v-if="checkPermission(['goodsLend:del'])" @click="handleDeleteGoodsLend()" type="danger"
+          <el-button size="mini" v-if="checkPermission(['channel:delete'])" @click="handleDeleteGoodsLend()" type="danger"
             :disabled="multipleSelection.length === 0">删除</el-button>
 
         </div>
@@ -62,10 +62,10 @@
         <el-table-column prop="bonus" label="渠道佣金比例" />
         <el-table-column label="操作" width="250">
           <template slot-scope="scope">
-            <el-button size="mini" v-if="checkPermission(['goodsLend:edit'])"
+            <el-button size="mini" v-if="checkPermission(['channel:update'])"
               @click="handleEditGoodsLend(scope.row)">编辑</el-button>
             <el-button type="success" size="mini"
-              v-if="checkPermission(['goodsLend:del'])"
+              v-if="checkPermission(['channel:delete'])"
               @click="handleReturnGoodsLend(scope.row)">删除</el-button>
           </template>
         </el-table-column>

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

@@ -129,9 +129,9 @@
       </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' && checkPermission(['warehouseEntry2:add'])" 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' && checkPermission(['warehouseEntry:update'])" type="primary" @click="submitgoodsExchangeAddForm">入库
       </el-button>
       <el-button @click="printIng" v-if="type == 'audit'">打印</el-button>
       <el-button @click="toBack()">返回</el-button>

+ 12 - 2
manager-admin/src/views/stock/goodsExchange/goodsExchange.vue

@@ -79,7 +79,7 @@
           <el-button
             size="mini"
             v-if="
-              checkPermission(['goodsExchange:add']) && activeName == 'second'
+              checkPermission(['querOutIn:query']) && activeName == 'second'
             "
             type="primary"
             @click="handleAddGoodsExchange"
@@ -88,7 +88,7 @@
           <el-button
             size="mini"
             v-if="
-              checkPermission(['goodsExchange:add']) && activeName == 'first'
+              checkPermission(['querOutIn:query']) && activeName == 'first'
             "
             type="primary"
             @click="handleShiftGoodsExchange"
@@ -136,6 +136,11 @@
             <span >{{  entryName(scope.row.type)  }}</span>
           </template>
         </el-table-column>
+        <el-table-column prop="memo" label="入库时间" v-if="activeName=='second'">
+          <template slot-scope="scope">
+            <span >{{ scope.row.create_time | unixToDate }}</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="order_id_list" label="订单编号" />
         <el-table-column  label="状态">
           <template slot-scope="scope">
@@ -143,6 +148,11 @@
             <span v-else>{{  scope.row.has_submit=='Y'?'已入库':'未入库'  }}</span>
           </template>
         </el-table-column>
+        <el-table-column prop="memo" label="出库时间" v-if="activeName=='first'">
+          <template slot-scope="scope">
+            <span >{{ scope.row.create_time | unixToDate }}</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="memo" label="备注">
           <template slot-scope="scope">
             <span v-if="activeName=='first'">{{  scope.row.notes  }}</span>

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

@@ -186,9 +186,9 @@
       </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' && checkPermission(['warehouseOut2:add'])" 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' && checkPermission(['warehouseOut:update'])" type="primary" @click="submitGoodsExchangeAddForm">出库
       </el-button>
       <el-button @click="printIng" v-if="type == 'audit'">打印</el-button>
       <el-button @click="toBack()">返回</el-button>

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

@@ -87,7 +87,7 @@
         <el-table-column label="操作" width="450">
           <template slot-scope="scope">
             <el-button size="mini" @click="handleCheckGoodsInventory(scope.row)">查看</el-button>
-            <el-button type="mini" size="mini" v-if="scope.row.status == 'NOT_HANDLE'"
+            <el-button type="mini" size="mini" v-if="scope.row.status == 'NOT_HANDLE' && checkPermission(['syncStock:update'])"
               @click="handleSubmitGoodsInventory(scope.row)">同步</el-button>
             <!-- <el-button v-if="scope.row.allowable.allow_audit && checkPermission(['goodsInventory:audit'])" type="mini"
               size="mini" @click="handleAuditGoodsInventory(scope.row)">审核</el-button>

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

@@ -111,7 +111,7 @@
             </el-table-column>
             <el-table-column label="差异">
               <template slot-scope="scope">
-                {{ scope.row.actual_stock - scope.row.inventory_num || 0 }}
+                {{scope.row.inventory_num - scope.row.actual_stock  || 0 }}
               </template>
             </el-table-column>
             <!-- <el-table-column label="备注">

+ 36 - 39
manager-admin/src/views/stock/goodsInventoryLoss/goodsInventoryLoss.vue

@@ -2,36 +2,27 @@
   <div>
     <div class="search">
       <el-form ref="advancedForm" :model="advancedForm" label-width="160px">
-        <el-row >
+        <el-row>
           <el-col :span="8">
-             <el-form-item label="报损日期">
-                  <el-date-picker v-model="advancedForm.goodsInventory_time_range" type="daterange" align="center"
-                    :editable="false" unlink-panels :clearable="false" :default-time="['00:00:00', '23:59:59']"
-                    range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" value-format="timestamp"
-                    :picker-options="{ disabledDate(time) { return time.getTime() - 1 >= new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime() + 86400000 - 1 }, shortcuts: MixinPickerShortcuts }">
-                  </el-date-picker>
-                </el-form-item>
+            <el-form-item label="报损日期">
+              <el-date-picker v-model="advancedForm.goodsInventory_time_range" type="daterange" align="center"
+                :editable="false" unlink-panels :clearable="false" :default-time="['00:00:00', '23:59:59']"
+                range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" value-format="timestamp"
+                :picker-options="{ disabledDate(time) { return time.getTime() - 1 >= new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime() + 86400000 - 1 }, shortcuts: MixinPickerShortcuts }">
+              </el-date-picker>
+            </el-form-item>
 
           </el-col>
           <el-col :span="8">
-             <el-form-item label="仓库">
+            <el-form-item label="仓库">
               <el-select v-model="advancedForm.warehouse_id">
-                <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-col>
           <el-col :span="8">
             <el-form-item label="报损人">
-              <el-input
-                v-model="advancedForm.creator"
-                placeholder="请输入内容"
-                width="200px"
-              ></el-input>
+              <el-input v-model="advancedForm.creator" placeholder="请输入内容" width="200px"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
@@ -60,16 +51,16 @@
               :to="{ name: 'goodsInventoryLossDetail', params: { id: scope.row.id } }">
               {{ scope.row.sn }}
             </router-link> -->
-            <span >{{scope.row.sn}}</span>
+            <span>{{ scope.row.sn }}</span>
           </template>
         </el-table-column>
         <!-- <el-table-column prop="report_time" label="报损日期">
           <template slot-scope="scope">{{ scope.row.report_time }}</template>
         </el-table-column> -->
-        <el-table-column  label="仓库" >
+        <el-table-column label="仓库">
           <template slot-scope="scope">{{ warehouseName(scope.row.warehouse_id) }}</template>
         </el-table-column>
-         <!--<el-table-column prop="creator" label="报损人" />
+        <!--<el-table-column prop="creator" label="报损人" />
         <el-table-column prop="damage_type_key" label="审核人" /> -->
         <el-table-column prop="status" label="状态">
           <template slot-scope="scope">{{ statusFilter(scope.row.status) }}</template>
@@ -78,11 +69,10 @@
         <el-table-column prop="report_desc" label="报损说明" />
         <el-table-column label="操作" width="450">
           <template slot-scope="scope">
-            <el-button  type="mini"
-              size="mini" @click="handleDetailGoodsInventoryLoss(scope.row)">查看</el-button>
-              <!-- <el-button type="mini"
-              size="mini" v-if="scope.row.status=='NOT_HANDLE'" @click="handleSubmitGoodsInventoryLoss(scope.row)">处理</el-button>
-            <el-button v-if="scope.row.allowable.allow_audit && checkPermission(['goodsInventoryLoss:audit'])" type="mini"
+            <el-button type="mini" size="mini" @click="handleDetailGoodsInventoryLoss(scope.row)">查看</el-button>
+            <el-button type="mini" size="mini" v-if="scope.row.status == 'NOT_HANDLE' && checkPermission(['goodsInventoryLoss:submit'])"
+              @click="handleSubmitGoodsInventoryLoss(scope.row)">审核</el-button>
+            <!--<el-button v-if="scope.row.allowable.allow_audit && checkPermission(['goodsInventoryLoss:audit'])" type="mini"
               size="mini" @click="handleAuditGoodsInventoryLoss(scope.row)">审核</el-button>
 
             <el-button v-if="scope.row.allowable.allow_cancel && checkPermission(['goodsInventoryLoss:cancel'])" type="mini"
@@ -136,26 +126,26 @@ export default {
     this.GET_WarehouseList()
   },
   watch: {
-    $route: function({ query }) {
+    $route: function ({ query }) {
       this.params.page_no = 1
       this.GET_GoodsInventoryLossList()
     }
   },
   methods: {
     // 查看
-    handleDetailGoodsInventoryLoss(row){
+    handleDetailGoodsInventoryLoss(row) {
       this.$router.push({
         name: 'goodsInventoryLossDetail',
         params: { id: row.id }
       })
     },
     //获取仓库名称
-    warehouseName(val){
-      let name=''
-      this.warehouseList.map(el=>{
-       if(el.id==val) {
-        return name=el.name
-       }
+    warehouseName(val) {
+      let name = ''
+      this.warehouseList.map(el => {
+        if (el.id == val) {
+          return name = el.name
+        }
       })
       return name
     },
@@ -179,11 +169,15 @@ export default {
         params: { id: row.id }
       })
     },
-    /** 提交 */
+    /** 处理 */
     handleSubmitGoodsInventoryLoss(row) {
-      API_GoodsInventoryLoss.getSyncStock(row.id).then(() => {
+      /* API_GoodsInventoryLoss.getSyncStock(row.id).then(() => {
         this.$message.success('处理成功!')
         this.GET_GoodsInventoryLossList()
+      }) */
+      this.$router.push({
+        name: 'goodsInventoryLossEdit',
+        params: { id: row.id }
       })
     },
     /** 撤回 */
@@ -311,6 +305,7 @@ export default {
   background: #fff;
   overflow: hidden;
   padding: 30px 10px 10px 10px;
+
   /deep/ .el-form-item {
     .el-form-item__content {
       .el-input {
@@ -318,11 +313,13 @@ export default {
       }
     }
   }
-  .el-button{
+
+  .el-button {
     margin-top: -19px;
     margin-left: 20px;
   }
 }
+
 .print {
   margin-left: 790px;
 }

+ 282 - 89
manager-admin/src/views/stock/goodsInventoryLoss/goodsInventoryLossAdd.vue

@@ -4,9 +4,9 @@
       label-width="120px" inline class="change-form">
       <h3 style="width: 100%;">库存报损</h3>
       <el-form-item label="报损时间" prop="report_time" class="change-form-item">
-        <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="选择日期时间">
+        <span v-if="type == 'detail'">{{ 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>
       <!-- <el-form-item label="所属部门" prop="dept_id" class="change-form-item">
@@ -19,35 +19,36 @@
           }" clearable @change="changewarehouseList"></el-cascader>
       </el-form-item> -->
       <el-form-item label="仓库" prop="warehouse_id" class="change-form-item">
-        <span v-if="id">{{ getWarehouse(goodsInventoryAddForm.warehouse_id) }}</span>
+        <span v-if="type == 'detail'">{{ 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-form-item label="报损类型" prop="damage_type_value" class="change-form-item">
+        <span v-if="type == 'detail'">{{ getRoleSplit(goodsInventoryAddForm.damage_type_value) }}</span>
+        <el-select v-else 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">
-        <span v-if="id">{{ getadminList(goodsInventoryAddForm.creator_id) }}</span>
-        <el-select v-else
-          v-model="goodsInventoryAddForm.creator_id"
-          :disabled="type === 'detail' || type === 'audit'"
+        <span v-if="type == 'detail'">{{ getadminList(goodsInventoryAddForm.creator_id) }}</span>
+        <el-select v-else v-model="goodsInventoryAddForm.creator_id" :disabled="type === 'detail' || type === 'audit'"
           @change="changeCreator">
           <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="report_desc" class="change-form-item" style="width: 61%;">
-        <span v-if="id">{{ goodsInventoryAddForm.report_desc }}</span>
-        <el-input style="flex: 1;" v-else v-model="goodsInventoryAddForm.report_desc" type="textarea"
+        <span v-if="type == 'detail'">{{ goodsInventoryAddForm.report_desc }}</span>
+        <el-input v-else style="flex: 1;" v-model="goodsInventoryAddForm.report_desc" type="textarea"
           :disabled="type === 'detail' || type === 'audit'" :autosize="{ minRows: 3, maxRows: 4 }"
           placeholder="请输入报损说明"></el-input>
       </el-form-item>
       <div class="mx">
         <h3>报损商品明细</h3>
+        <el-button v-if=" type == 'edit'" class="button" size="mini" type="primary"
+          @click="scanCode">录入SKU</el-button>
         <el-button v-if="type !== 'detail'" class="button" size="mini" type="primary"
           @click="handleSelectWarehouseEntryBatch">选择</el-button>
       </div>
@@ -59,8 +60,8 @@
               <template slot-scope="scope">
                 {{ scope.row.stock_sn }}
               </template>
-            </el-table-column> -->
-          <el-table-column label="商品编号">
+</el-table-column> -->
+            <el-table-column label="商品编号">
               <template slot-scope="scope">
                 <span v-if="id"> {{ scope.row.goods_vo.sn }}</span>
                 <span v-else>{{ scope.row.goods_vo.sn }}</span>
@@ -72,6 +73,20 @@
                 <span v-else>{{ scope.row.goods_vo.name }}</span>
               </template>
             </el-table-column>
+            <el-table-column label="sku">
+              <template slot-scope="scope">
+                <span>{{ scope.row.product_vo.sku }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="序列号" v-if="sn_code_list">
+              <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="规格型号">
               <!-- <template slot-scope="scope">
                 <span v-if="!id">{{ scope.row.product_vo.spec_name.join("/") }}</span>
@@ -81,7 +96,7 @@
             <el-table-column label="单位">
               <template slot-scope="scope">
                 <span v-if="!id"> {{ scope.row.product_vo.unit }}</span>
-              <span v-else> {{ scope.row.product_vo.unit }}</span>
+                <span v-else> {{ scope.row.product_vo.unit }}</span>
               </template>
             </el-table-column>
             <el-table-column label="库存数量">
@@ -99,10 +114,16 @@
             </el-table-column> -->
             <el-table-column label="报损数量">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.report_num" type="number" :min="0" :maxlength="20"
+                <span v-if="type == 'edit'">{{ scope.row.num }}</span>
+                <el-input v-else 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="录入数量" v-if="type == 'edit'">
+              <template slot-scope="scope">
+                <span>{{ scope.row.report_num }}</span>
+              </template>
+            </el-table-column>
             <!-- <el-table-column label="调整说明">
               <template slot-scope="scope">
                 <el-input v-model="scope.row.report_remark" :min="0" :maxlength="50"
@@ -124,15 +145,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="submitGoodsInventoryAddForm">保存
+      <el-button v-if="type !== 'edit'&& type !== 'audit' && type !== 'detail' && checkPermission(['goodsInventoryLoss:submit'])"
+        type="primary" @click="submitGoodsInventoryAddForm">保存
+      </el-button>
+      <el-button v-if="type === 'edit' && checkPermission(['goodsInventoryLoss:submit'])"
+        type="primary" @click="submitcont">确认
       </el-button>
-      <el-button @click="printIng" v-if="type=='detail'">打印</el-button>
+      <el-button @click="printIng" v-if="type == 'detail'">打印</el-button>
       <el-button @click="$router.back()">返回
       </el-button>
     </div>
-
+    <el-dialog title="扫码出库" :visible.sync="scanDialogVisible" width="30%" :close-on-click-modal="false">
+      <el-form ref="scanGoodsForm" :model="scanGoodsForm" 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-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-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> -->
+      </span>
+    </el-dialog>
     <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
-      <el-form ref="goodsInventoryAddForm" :model="goodsInventoryAddForm" label-width="120px" inline style="width:900px">
+      <el-form ref="goodsInventoryAddForm" :model="goodsInventoryAddForm" label-width="120px" inline
+        style="width:900px">
         <el-form-item label="驳回原因" prop="reject_reason">
           <el-input v-model="goodsInventoryAddForm.reject_reason" type="textarea" :minlength="0"
             :maxlength="100"></el-input>
@@ -150,6 +191,7 @@
 import { mapGetters } from 'vuex'
 import { Foundation, RegExp } from '~/ui-utils'
 import * as API_GoodsInventoryLossLoss from '@/api/goodsInventoryLoss'
+import * as API_GoodsExchange from "@/api/goodsExchange";
 import * as API_Setting from '@/api/setting'
 import * as API_BasicSetting from '@/api/basicSetting'
 import * as API_Erp from '@/api/erp'
@@ -189,7 +231,13 @@ export default {
         dept_id: { required: true, message: '请选择所属部门', trigger: 'change' },
         creator_id: { required: true, message: '请选择制单人', trigger: 'change' }
       },
-      warehouseProduct: null
+      warehouseProduct: null,
+      scanDialogVisible: false,
+      sn_code: "",
+      sku: "",
+      sn_code_list: [],
+      index: "",
+      scanGoodsForm: {},
     }
   },
   computed: {
@@ -197,12 +245,14 @@ export default {
   },
   mounted() {
     if (this.$route.name === 'goodsInventoryLossEdit') {
+      console.log(112);
       this.type = 'edit'
     } else if (this.$route.name === 'goodsInventoryLossAudit') {
       this.type = 'audit'
     } else if (this.$route.name === 'goodsInventoryLossReturn') {
       this.type = 'return'
     } else if (this.$route.name === 'goodsInventoryLossAdd') {
+      this.type = 'add'
       this.goodsInventoryAddForm.creator_id = this.user.uid
       this.goodsInventoryAddForm.dept_id = this.user.dept_id
       this.GET_WarehouseList({ dept_id: this.user.dept_id })
@@ -214,15 +264,151 @@ export default {
       this.id = this.$route.params.id
       this.GET_goodsInventoryAddDetail()
     }
-    this.GET_AdministratorList()
     this.GET_DeptList()
     this.GET_DictDataInfo()
+    this.GET_WarehouseList({ dept_id: this.user.dept_id })
+    this.GET_AdministratorList()
   },
   methods: {
+    // 扫码出库
+    scanCode() {
+      this.scanDialogVisible = true;
+      this.$nextTick(() => {
+        this.$refs.input.focus();
+      });
+    },
+    /* 出库扫码 */
+    toSearch() {
+      API_GoodsExchange.getProduct(
+        this.goodsInventoryAddForm.warehouse_id,
+        this.scanGoodsForm.bar_code.replace(/\s+/g, '')
+      ).then((res) => {
+        res.sn_code_list = []
+        this.sku = res.product_vo.sku;
+        // 查找当前商品是否已存在于列表中
+        const indexs = this.goodsInventoryAddForm.product_list.findIndex((el) => {
+          return (
+            el.goods_vo.id === res.goods_id &&
+            el.product_id === res.product_id &&
+            el.product_vo.sku === res.product_vo.sku
+          );
+        });
+        // 如果商品不存在,则添加到列表
+        if (indexs === -1) {
+          // 检查是否有相同商品在product_list中
+          const existingProduct = this.goodsInventoryAddForm.product_list.find(el => (
+            el.goods_vo.id === res.goods_id &&
+            el.product_id === res.product_id &&
+            el.product_vo.sku === res.product_vo.sku
+          ));
+
+          if (!existingProduct) {
+            this.$message.error('订单内没有该商品,请重新录入');
+            this.$nextTick(() => {
+              this.$refs.input.focus();
+            });
+            return; // 退出函数,不继续执行
+          }
+          this.index = this.goodsInventoryAddForm.product_list.length
+          this.goodsInventoryAddForm.product_list.push(res);
+        } else {
+          this.index = indexs
+        }
+        if (res.product_vo.have_sn) {
+          this.$nextTick(() => {
+            this.$refs.sn_input.focus();
+          });
+        } else {
+          this.goodsInventoryAddForm.product_list[this.index].report_num += 1
+          if( this.goodsInventoryAddForm.product_list[this.index].report_num==this.goodsInventoryAddForm.product_list[this.index].num){
+             this.scanDialogVisible = false;
+          }
+        }
+      });
+    },
+    //扫序列号goodsInventoryAddForm.product_list[this.index].sn_code_list
+    toSnCode() {
+      if (this.sku == '') return this.$message.error('请录入正确的sku')
+      API_GoodsExchange.getSnCode("out", this.sku, this.sn_code.replace(/\s+/g, '')).then((res) => {
+        this.sn_code = "";
+        // 假设res是一个对象,我们根据res的某个属性(如sn)来检查重复
+        let exists = this.goodsInventoryAddForm.product_list[
+          this.index
+        ].sn_code_list.find(
+          (item) => item.sn_code === res.sn_code && item.sku === res.sku
+        );
+        if (!exists) {
+          this.goodsInventoryAddForm.product_list[this.index].sn_code_list.push(
+            res
+          );
+        }
+        this.goodsInventoryAddForm.product_list[this.index].report_num = this.goodsInventoryAddForm.product_list[this.index].sn_code_list.length
+        const indexs = this.product_list.findIndex((el) => {
+          return (
+            el.goods_id === res.goods_id &&
+            el.product_id === res.product_id &&
+            el.product_vo.sku === res.sku
+          );
+        });
+        this.goodsInventoryAddForm.product_list[this.index].id = this.product_list[indexs].id
+        if (this.goodsInventoryAddForm.product_list[this.index].report_num == this.product_list[indexs].report_num) {
+          this.scanGoodsForm.bar_code = "";
+          this.scanDialogVisible = false;
+        } else {
+          this.scanGoodsForm.bar_code = "";
+          this.$nextTick(() => {
+            this.$refs.input.focus();
+          });
+        }
+
+      });
+    },
+
+    /* 确认 */
+    submitcont(){
+      this.$refs['goodsInventoryAddForm'].validate(valid => {
+        if (valid) {
+          const { id } = this.goodsInventoryAddForm
+          const params = this.MixinClone(this.goodsInventoryAddForm)
+          if (params.dept_id) {
+            params.dept_name = this.deptListAll.find(dept => dept.id === params.dept_id).name
+          }
+          if (params.warehouse_id) {
+            params.warehouse_name = this.warehouseList.find(ware => ware.id === params.warehouse_id).name
+          }
+          /* params.report_time = Math.floor(params.report_time / 1000) */
+          if (params.damage_type_value) {
+            params.damage_type_key = this.roleSplit.find(ware => ware.value === params.damage_type_value).label
+          }
+          if (params.creator_id) {
+            params.creator = this.adminList.find(admin => admin.id === params.creator_id).real_name
+          }
+          params.product_list = params.product_list.map(item => {
+            const query = {
+              report_num: item.report_num,
+              product_id: item.product_id,
+              product_stock_id: item.product_stock_id
+            }
+            return query
+          })
+            API_GoodsInventoryLossLoss.submit(id, params).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: 'goodsInventoryLoss' })
+            })
+        }
+      })
+    },
+
     getadminList(value) {
       // Access orderTypeList directly from the component's data
       const type = this.adminList.find(type => type.id === value);
-      return type ? type.name : '未知类型';
+      return type ? type.real_name : '未知类型';
     },
     getRoleSplit(value) {
       // Access orderTypeList directly from the component's data
@@ -231,11 +417,11 @@ export default {
     },
     getWarehouse(value) {
       // Access orderTypeList directly from the component's data
-      const type = this.WarehouseList.find(type => type.id === value);
+      const type = this.warehouseList.find(type => type.id === value);
       return type ? type.name : '未知类型';
     },
     // 打印功能
-    printIng(){
+    printIng() {
 
     },
     /** 修改报单人 */
@@ -301,7 +487,7 @@ export default {
     },
     /** 获取仓库 */
     GET_WarehouseList(e) {
-      API_BasicSetting.getWarehouseListAll(e).then(response => {
+      API_BasicSetting.getWarehouseListAll().then(response => {
         this.warehouseList = response
       })
     },
@@ -325,9 +511,9 @@ export default {
           }
           params.product_list = params.product_list.map(item => {
             const query = {
-              report_num:item.report_num,
+              report_num: item.num,
               product_id: item.product_id,
-              product_stock_id:item.id
+              product_stock_id: item.id
             }
             return query
           })
@@ -371,26 +557,26 @@ export default {
       })
       this.goodsInventoryAddForm.warehouse_id = goodsData.warehouse_id
       this.goodsInventoryAddForm.product_list = goodsData.purchasePlans
-     /*  .map(item => {
-        const query = {
-          stock_sn: item.warehouse_id,
-          product_sn: item.product_sn,
-          product_name: item.product_name,
-          specification: item.warehouse_id,
-          unit: item.product_unit,
-          stock_num: item.remain_num,
-          price: item.entry_price,
-          cost_price: item.product_cost_price,
-          tax_rate: item.tax_rate,
-          batch_id: item.id,
-          goods_id: item.goods_id,
-          product_id: item.product_id,
-          batch_sn: item.sn,
-          category_id: item.category_id,
-          category_name: item.category_name
-        }
-        return query
-      }) */
+      /*  .map(item => {
+         const query = {
+           stock_sn: item.warehouse_id,
+           product_sn: item.product_sn,
+           product_name: item.product_name,
+           specification: item.warehouse_id,
+           unit: item.product_unit,
+           stock_num: item.remain_num,
+           price: item.entry_price,
+           cost_price: item.product_cost_price,
+           tax_rate: item.tax_rate,
+           batch_id: item.id,
+           goods_id: item.goods_id,
+           product_id: item.product_id,
+           batch_sn: item.sn,
+           category_id: item.category_id,
+           category_name: item.category_name
+         }
+         return query
+       }) */
     },
     /** 获取部门 */
     GET_DeptList() {
@@ -402,51 +588,58 @@ export default {
     /** 获取详情页面数据 */
     GET_goodsInventoryAddDetail() {
       API_GoodsInventoryLossLoss.getGoodsInventoryLossInfo(this.id).then(response => {
+        response.product_list.map(el => {
+          el.num = el.report_num
+          if (this.type == 'edit') {
+            el.report_num = 0
+          }
+
+        })
         this.goodsInventoryAddForm = response
-        this.GET_WarehouseList({ dept_id: response.dept_id })
+        /*  this.GET_WarehouseList({ dept_id: response.dept_id }) */
         /* this.goodsInventoryAddForm.report_time = Math.floor(this.goodsInventoryAddForm.report_time * 1000) */
         this.goodsInventoryAddForm.distribution_name = response.staff_name
-          /*this.goodsInventoryAddForm.product_list = this.goodsInventoryAddForm.product_list.map(el => {
-         item.product_specification = item.specification
-          item.product_unit = item.unit
-          item.remain_num = item.stock_num
+        /*this.goodsInventoryAddForm.product_list = this.goodsInventoryAddForm.product_list.map(el => {
+       item.product_specification = item.specification
+        item.product_unit = item.unit
+        item.remain_num = item.stock_num
 
-            el.allow_sn=el.goods_vo.allow_sn
-            el.bar_code=el.goods_vo.bar_code
-            el.brand_id=el.goods_vo.brand_id
-            el.brand_name=el.goods_vo.brand_name
-            el.category_id=el.goods_vo.category_id
-            el.category_ids=el.goods_vo.category_ids
-            el.category_name=el.goods_vo.category_name
-            el.cost_price=el.goods_vo.cost_price
-            el.create_time=el.goods_vo.create_time
-            el.creator=el.goods_vo.creator
-            el.description=el.goods_vo.description
-            el.en_name=el.goods_vo.en_name
-            el.freight_template_id=el.goods_vo.freight_template_id
-            el.goods_style=el.goods_vo.goods_style
-            el.goods_unit=el.goods_vo.goods_unit
-            el.goods_unit=el.goods_vo.goods_unit
-            el.have_spec=el.goods_vo.have_spec
-            el.hire_or_sail=el.goods_vo.hire_or_sail
-            el.image=el.goods_vo.image
-            el.image_list=el.goods_vo.image_list
-            el.label_names=el.goods_vo.label_names
-            el.market_enable=el.goods_vo.market_enable
-            el.mkt_price=el.goods_vo.mkt_price
-            el.name=el.goods_vo.name
-            el.params_list=el.goods_vo.params_list
-            el.price=el.goods_vo.price
-            el.sn=el.goods_vo.sn
-            el.sn_code=el.goods_vo.sn_code
-            el.sort=el.goods_vo.sort
-            el.update_time=el.goods_vo.update_time
-            el.updater=el.goods_vo.updater
-            el.usable_stock=el.goods_vo.usable_stock
-            el.video=el.goods_vo.video
+          el.allow_sn=el.goods_vo.allow_sn
+          el.bar_code=el.goods_vo.bar_code
+          el.brand_id=el.goods_vo.brand_id
+          el.brand_name=el.goods_vo.brand_name
+          el.category_id=el.goods_vo.category_id
+          el.category_ids=el.goods_vo.category_ids
+          el.category_name=el.goods_vo.category_name
+          el.cost_price=el.goods_vo.cost_price
+          el.create_time=el.goods_vo.create_time
+          el.creator=el.goods_vo.creator
+          el.description=el.goods_vo.description
+          el.en_name=el.goods_vo.en_name
+          el.freight_template_id=el.goods_vo.freight_template_id
+          el.goods_style=el.goods_vo.goods_style
+          el.goods_unit=el.goods_vo.goods_unit
+          el.goods_unit=el.goods_vo.goods_unit
+          el.have_spec=el.goods_vo.have_spec
+          el.hire_or_sail=el.goods_vo.hire_or_sail
+          el.image=el.goods_vo.image
+          el.image_list=el.goods_vo.image_list
+          el.label_names=el.goods_vo.label_names
+          el.market_enable=el.goods_vo.market_enable
+          el.mkt_price=el.goods_vo.mkt_price
+          el.name=el.goods_vo.name
+          el.params_list=el.goods_vo.params_list
+          el.price=el.goods_vo.price
+          el.sn=el.goods_vo.sn
+          el.sn_code=el.goods_vo.sn_code
+          el.sort=el.goods_vo.sort
+          el.update_time=el.goods_vo.update_time
+          el.updater=el.goods_vo.updater
+          el.usable_stock=el.goods_vo.usable_stock
+          el.video=el.goods_vo.video
 
-          return el
-        })*/
+        return el
+      })*/
       })
     }
   }

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

@@ -132,13 +132,12 @@
           <template slot-scope="scope">
             <el-button
               size="mini"
-              v-if="checkPermission(['goodsLend:edit'])"
               @click="introGoodsLend(scope.row)"
               >查看</el-button
             >
             <el-button
               size="mini"
-              v-if="checkPermission(['goodsLend:edit'])"
+              v-if="checkPermission(['bindAreaStock:update'])"
               @click="AddGoodsLend(scope.row)"
               >绑定商品</el-button
             >
@@ -156,9 +155,10 @@
               @click="handleReturnGoodsLend(scope.row)"
               >删除</el-button
             >
+             <!-- v-if="checkPermission(['goodsLend:print'])" -->
             <el-button
               type="primary"
-              v-if="checkPermission(['goodsLend:print'])"
+             
               size="mini"
               @click="handlePrintGoodsLendDialog(scope.row)"
               >打印</el-button

+ 18 - 17
manager-admin/src/views/stock/goodsTransfer.vue

@@ -25,7 +25,7 @@
         <div class="toolbar-btns">
           <!-- <el-button
             size="mini"
-            v-if="checkPermission(['goodsTransfer:add'])"
+            v-if=""
             type="primary"
             @click="handleAddGoodsTransfer"
             >新增</el-button
@@ -38,7 +38,7 @@
             :disabled="multipleSelection.length === 0"
             >删除</el-button
           > -->
-          <el-button size="mini" type="primary" @click="lookTransit">查看在途</el-button>
+          <el-button size="mini" type="primary" v-if="checkPermission(['goodsTransfer:add'])" @click="handleSubmitGoodsTransfer">设置预警库存</el-button>
           <el-button size="mini" type="primary" @click="checkExport">导出</el-button>
         </div>
       </div>
@@ -95,8 +95,8 @@
         <el-table-column prop="warning_stock" 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="checkPermission(['updateWarnStock:update']) && scope.row.transit_stock>0"
+              @click="lookTransit(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>
@@ -118,7 +118,7 @@
       </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]"
+        @current-change="handlePageCurrentChange" :current-page="tableData.page_no" :page-sizes="[50, 100]"
         :page-size="tableData.page_size" layout="total, sizes, prev, pager, next, jumper" :total="tableData.data_total">
       </el-pagination>
     </en-table-layout>
@@ -166,7 +166,7 @@ export default {
       // 列表参数
       params: {
         page_no: 1,
-        page_size: 10,
+        page_size: 50,
       },
       // 高级搜索数据
       advancedForm: {},
@@ -180,7 +180,7 @@ export default {
       transitDetails: [],
       numDialogVisible: false,
       numAddForm: {},
-      stockId: '',//选择的id
+      stockListId: [],//选择的id
       numAddFormRule: {
         num: [{
           required: true,
@@ -219,10 +219,9 @@ export default {
   methods: {
     /* 提交预警数量 */
     submitNum() {
-      console.log(this.$refs["numAddForm"]);
       this.$refs["numAddForm"].validate((valid) => {
         if (valid) {
-          API_GoodsTransfer.updateWarnStock(this.stockId, this.numAddForm.num).then(res => {
+          API_GoodsTransfer.updateWarnStock({stock_id:this.stockListId, warn_num:this.numAddForm.num}).then(res => {
             this.numDialogVisible = false
             this.numAddForm = {}
             this.$message.success('预警库存设置成功!')
@@ -248,10 +247,8 @@ export default {
     // 导出
     checkExport() { },
     // 查看在途
-    lookTransit() {
-      if (!this.selectedRow) return this.$message.error('请先选择!')
-      API_GoodsTransfer.transitDetail(this.selectedRow.id).then(res => {
-        console.log(res);
+    lookTransit(row) {
+      API_GoodsTransfer.transitDetail(row.id).then(res => {
         this.dialogVisible = true;
         this.transitDetails = res
       })
@@ -289,7 +286,8 @@ export default {
       });
     },
     handleSubmitGoodsTransfer(row) {
-      this.stockId = row.id
+      if(this.stockListId.length==0) return this.$message.error("请选择")
+      /* this.stockId = row.id */
       this.numDialogVisible = true
       /* API_GoodsTransfer.submitGoodsTransfer(row.id).then(() => {
         this.$message.success("提交成功!");
@@ -331,8 +329,11 @@ export default {
         .catch(() => { });
     },
     /** 多选改变 */
-    handleSelectionChange(selection, row) {
-      if (selection.length > 0) {
+    handleSelectionChange(row) {
+      this.stockListId=row.map(el=>{
+        return el.id
+      })
+      /* if (selection.length > 0) {
         const lastSelected = selection[selection.length - 1];
         if (this.selectedRow && this.selectedRow !== lastSelected) {
           this.selectedRow = lastSelected;
@@ -341,7 +342,7 @@ export default {
         }
       } else {
         this.selectedRow = null;
-      }
+      } */
     },
     selectableRow(row, index) {
       // 这个方法决定了哪些行是可选的

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

@@ -51,7 +51,7 @@
     <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(['goodsTransfer:add'])" type="primary"
+          <el-button size="mini" v-if="checkPermission(['goodsUnderstock:add'])" type="primary"
             @click="handleAddGoodsUnderstock">新增</el-button>
          <!--  <el-button size="mini" v-if="checkPermission(['goodsTransfer:del'])" @click="handleDeleteGoodsTransfer()"
             type="danger" :disabled="multipleSelection.length === 0">删除</el-button> -->

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

@@ -1,8 +1,8 @@
 <template>
   <div>
-    <div class="btn">
+  <!--   <div class="btn">
       <el-button type="primary">同步订单</el-button>
-    </div>
+    </div> -->
     <div class="search">
       <el-form ref="advancedForm" :model="advancedForm" label-width="160px">
         <el-row>
@@ -158,21 +158,21 @@
         <el-table-column label="操作" width="300">
           <template slot-scope="scope">
             <el-button size="mini" @click="handleAudit(scope.row)">查看</el-button>
-            <el-button size="mini" type="success" v-if="scope.row.status === 'TO_BE_COMMIT'"
-              @click="handleSubmit(scope.row.id)">确认</el-button>
+            <!-- <el-button size="mini" type="success" v-if="scope.row.status === 'TO_BE_COMMIT'"
+              @click="handleSubmit(scope.row.id)">确认</el-button> -->
             <el-button size="mini" @click="handleEdit(scope.row)"
-              v-if="scope.row.status === 'TO_BE_COMMIT' || scope.row.status === 'TO_BE_SEND'">编辑</el-button>
-            <el-button size="mini" type="danger" v-if="scope.row.type === 'TO_C'"
+              v-if="(scope.row.status === 'TO_BE_COMMIT' || scope.row.status === 'TO_BE_SEND') && checkPermission(['order:edit'])">编辑</el-button>
+            <el-button size="mini" type="danger" v-if="scope.row.type === 'TO_C' && checkPermission(['extension:update'])"
               @click="handleWithdraw(scope.row.id)">延期</el-button>
             <el-button size="mini" type="primary" v-if="!scope.row.has_pay_return"
               @click="payTypes(scope.row)">支付</el-button>
             <el-button size="mini" type="primary" v-if="!scope.row.has_pay_return && scope.row.type === 'TO_C'"
               @click="reimbursement(scope.row)">交通费</el-button>
             <el-button size="mini" type="danger" style="margin-top: 5px;"
-              v-if="scope.row.status !== 'TO_BE_SEND' && checkPermission(['order:payment'])"
+              v-if="scope.row.status !== 'TO_BE_SEND' && checkPermission(['orderReturn2:add'])"
               @click="afterSales(scope.row.id)">售后</el-button>
             <el-button size="mini" @click="handleRevoke(scope.row)" style="margin-top: 5px;"
-              v-if="scope.row.status === 'TO_BE_COMMIT' || scope.row.status === 'TO_BE_SEND'">撤销</el-button>
+              v-if="(scope.row.status === 'TO_BE_COMMIT' || scope.row.status === 'TO_BE_SEND') && checkPermission(['order:withdraw'])">撤销</el-button>
           </template>
 
         </el-table-column>

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

@@ -1356,7 +1356,7 @@ export default {
           .then((res) => {
             /*  this.$message.success("添加成功!"); */
             API_Order.submit(res).then((res) => {
-              this.$message.success("订单已确认");
+              this.$message.success("订单已确认!");
               this.backOrderList();
             });
           })

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

@@ -1,8 +1,8 @@
 <template>
   <div>
-    <div class="btn">
+    <!-- <div class="btn">
       <el-button type="primary">同步售后订单</el-button>
-    </div>
+    </div> -->
     <div class="search">
       <el-form ref="advancedForm" :model="advancedForm" label-width="160px">
         <el-row>

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

@@ -3,7 +3,7 @@
     <en-table-layout :tableData="tableData.data" :loading="loading">
       <div slot="toolbar" class="inner-toolbar">
         <div class="toolbar-btns">
-          <el-button size="mini" v-if="checkPermission(['stock:add'])" type="primary"
+          <el-button size="mini" v-if="checkPermission(['warehouse:add'])" type="primary"
             @click="handleAddWarehouse">新增</el-button>
         </div>
         <div class="toolbar-search">
@@ -31,7 +31,7 @@
         <el-table-column prop="description" label="仓库说明" />
         <el-table-column label="操作">
           <template slot-scope="scope">
-            <el-button size="mini" v-if="checkPermission(['stock:edit'])"
+            <el-button size="mini" v-if="checkPermission(['warehouse:edit'])"
               @click="handleEditWarehouse(scope.$index, scope.row)">编辑</el-button>
             <!-- <el-button
               size="mini"

+ 3 - 3
manager-admin/src/views/stock/warehouseLocation.vue

@@ -3,7 +3,7 @@
     <en-table-layout :tableData="tableData" :loading="loading" @selection-change="handleSelectionChange">
       <div slot="toolbar" class="inner-toolbar">
         <div class="toolbar-btns">
-          <el-button size="mini" v-if="checkPermission(['goodsLend:add'])" type="primary"
+          <el-button size="mini" v-if="checkPermission(['createAreaType:add'])" type="primary"
             @click="handleAddGoodsLend">新增</el-button>
         </div>
         <div class="toolbar-search">
@@ -20,10 +20,10 @@
           </el-table-column>
         <el-table-column label="操作" width="250">
           <template slot-scope="scope">
-            <el-button size="mini" v-if="checkPermission(['goodsLend:edit'])"
+            <el-button size="mini" v-if="checkPermission(['updateAreaType:update'])"
               @click="handleEditGoodsLend(scope.row)">编辑</el-button>
             <el-button type="success" size="mini"
-              v-if="checkPermission(['goodsLend:del'])"
+              v-if="checkPermission(['removeAreaType:delete'])"
               @click="handleReturnGoodsLend(scope.row)">删除</el-button>
           </template>
         </el-table-column>

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

@@ -113,7 +113,7 @@
             <!---->
             <!--  <el-button size="mini" v-if="scope.row.allowable.ship && checkPermission(['warehouseOut:send'])" type="success"
               @click="handleSendWarehouseOut(scope.row)">发货</el-button> -->
-            <el-button v-if="scope.row.status == 'TO_BE_SEND'" size="mini"
+            <el-button v-if="scope.row.status == 'TO_BE_SEND' && checkPermission(['orderSend'])" size="mini"
               @click="addWarehouse(scope.row)">发货</el-button>
             <!-- <el-button type="primary" size="mini" @click="handlePrintWarehouseOutDialog(scope.row)">删除</el-button> -->
           </template>