소스 검색

feat:库存统计添加供应商负责人、仓库负责人

snow 1 년 전
부모
커밋
a14fb023da

+ 4 - 4
src/config/env.development.js

@@ -3,10 +3,10 @@ module.exports = {
   title: '采销平台',
   baseUrl: 'http://wx.wxhr.sit.futurelab.tv',
   api: {
-    baseApi: 'http://stock.api.caixiao365.com/'
+    baseApi: 'http://stocknew.test241.wanyuhengtong.com/'
     // baseApi: 'http://stockwm.test241.wanyuhengtong.com/'
   },
-  webUrl: 'http://project.web.caixiao365.com/#/good-share?id=',
+  webUrl: 'http://project.web.caixiao365.com/#/test-good-share?id=',
   fileURL: `https://api2.edu.futurelab.tv`,
   shareWebUrl: 'http://post.web.caixiao365.com/?prod=1&outCode=',
   // 分仓
@@ -21,9 +21,9 @@ module.exports = {
   // 结算平台url
   // settlementPlatformUrl: 'http://127.0.0.1:8848',
   // 结算平台url
-  settlementPlatformUrl: 'http://fin.caixiao365.com/',
+  settlementPlatformUrl: 'http://webcx.test241.wanyuhengtong.com/',
   // 工单管理系统url
-  GDUrl: 'http://bug.caixiao365.com/',
+  GDUrl: 'http://http://bugweb.test241.wanyuhengtong.com/',
   // token加密key
   secretKey: 'key123',
   loginTitle: '',

+ 75 - 0
src/views/dataDashboard/stockCount/components/dataWeido/columns.js

@@ -0,0 +1,75 @@
+export default [
+  {
+    type: 'expand',
+    _slot_: 'expand',
+    label: ''
+  },
+  {
+    prop: 'company_no',
+    label: '仓库业务公司编码',
+    width: '150'
+  },
+  {
+    prop: 'company_name',
+    label: '仓库业务公司名称',
+    'min-width': '180'
+  },
+  {
+    prop: 'supplier_code',
+    label: '仓库所在公司编码',
+    width: '150'
+  },
+  {
+    prop: 'supplier_name',
+    label: '仓库所在公司名称',
+    'min-width': '180'
+  },
+  {
+    prop: 'contactor_name',
+    label: '供应商负责人',
+    'min-width': '100'
+  },
+  {
+    prop: 'wsm_code',
+    label: '仓库编码',
+    width: '180'
+  },
+  {
+    prop: 'wsm_name',
+    label: '仓库名称',
+    'min-width': '100'
+  },
+  {
+    prop: 'person',
+    label: '仓库负责人',
+    'min-width': '100'
+  },
+  {
+    prop: 'total_stock',
+    label: '当前库存'
+  },
+  {
+    prop: 'wait_in_stock',
+    label: '待入库'
+  },
+  {
+    prop: 'wait_out_stock',
+    label: '待出库',
+    width: '80px'
+  },
+  {
+    prop: 'usable_stock',
+    label: '可用库存'
+    // ,
+  },
+  {
+    prop: 'intra_stock',
+    label: '在途库存'
+    // ,
+  }
+  // {
+  //   prop: "warn_stock",
+  //   label: "预警库存",
+  // },
+
+]

+ 342 - 0
src/views/dataDashboard/stockCount/components/dataWeido/index.vue

@@ -0,0 +1,342 @@
+<template>
+  <div class="dataWeido pagePadding" style="padding: 0">
+    <div v-if="powers.some((i) => i == '001')">
+      <ex-table
+        ref="table"
+        v-loading="loading"
+        :table="table"
+        :data="tableData"
+        :columns="columns"
+        :page="pageInfo"
+        :size="size"
+        row-key="wsm_code"
+        :expand-row-keys="expandKeys"
+        @expand-change="handleExpandChange"
+        @page-curr-change="handlePageChange"
+        @page-size-change="handleSizeChange"
+        @screen-reset="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchChange();
+        "
+        @screen-submit="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+      >
+        <template #table-header="{}">
+          <div style="width: 100%">
+            <el-row style="padding: 0 0 0 80px">
+              <el-col :span="24">
+                <el-col :span="12" style="width: 200px; padding-left: 10px">
+                  <search-stock
+                    :isDetail="true"
+                    :size="searchSize"
+                    :value="parmValue.stock_code"
+                    :disabled="parmValue.companyNo === ''"
+                    :placeholder="'出库仓库'"
+                    :isRelation="true"
+                    :companyNo="parmValue.companyNo"
+                    :names="''"
+                    @searchChange="selectStock"
+                  />
+                </el-col>
+                <!-- 搜索 -->
+                <el-col :span="4" style="width: 54px">
+                  <el-button
+                    :size="searchSize"
+                    type="primary"
+                    class="fr"
+                    icon="el-icon-search"
+                    label=""
+                    @click="searchList"
+                  ></el-button>
+                </el-col>
+                <!-- 重置 -->
+                <el-col :span="4" style="width: 54px; margin-left: 10px" class="mr5">
+                  <el-button
+                    :size="searchSize"
+                    class="fr"
+                    type="warning"
+                    @click="restSearch"
+                    >重置</el-button>
+                </el-col>
+              </el-col>
+            </el-row>
+          </div>
+        </template>
+        <template #expand="{ scope }">
+          <el-table
+            v-loading="scope.row.loading"
+            :data="scope.row.child"
+            style="width: 100%; paddind: 20px"
+            border
+            size="small"
+          >
+            <el-table-column
+              label="商品编码"
+              prop="spuCode"
+              width="190"
+            >
+              <template slot-scope="scope">
+                <div style="display:flex; align-items:center">
+                  <el-tooltip placement="top" content="查看商品详情" v-if="goodCostPremission.includes('007')">
+                     <i @click="linkToGoodDetail(scope.row)" class="el-icon-link" style="cursor:pointer;margin-right:5px;font-size:16px" />
+                  </el-tooltip>
+                  <p>{{scope.row.spuCode}}</p>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="商品名称"
+              prop="good_name"
+              min-width="120"
+              show-overflow-tooltip
+            ></el-table-column>
+            <el-table-column
+              label="规格"
+              prop="attribute"
+              show-overflow-tooltip
+              min-width="120"
+            >
+              <template slot-scope="scope">
+                <span
+                  v-for="(si, sii) in scope.row.specinfo"
+                  :key="sii + si.spec_value_id"
+                  >{{ sii === 0 ? "" : "-" }}{{ si.spec_name }}[{{
+                    si.spec_value_name
+                  }}]</span
+                >
+              </template>
+            </el-table-column>
+            <el-table-column label="分类" min-width="120" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span v-for="(si, sii) in scope.row.can" :key="sii + si.spec_value_id">
+                  {{ sii === 0 ? "" : "_" }}{{ si.name }}
+                </span>
+              </template></el-table-column
+            >
+          <el-table-column
+              label="品牌"
+              prop="brand_name"
+              show-overflow-tooltip
+              width="100"
+            ></el-table-column>
+            <el-table-column
+              label="单位"
+              prop="unit"
+              show-overflow-tooltip
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="当前库存"
+              show-overflow-tooltip
+              prop="total_stock"
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="待入库存"
+              show-overflow-tooltip
+              prop="wait_in_stock"
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="待出库存"
+              show-overflow-tooltip
+              prop="wait_out_stock"
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="可用库存"
+              show-overflow-tooltip
+              prop="usable_stock"
+              width="80"
+            ></el-table-column>
+            <el-table-column
+              label="在途库存"
+              show-overflow-tooltip
+              prop="intra_stock"
+              width="80"
+            ></el-table-column>
+          </el-table>
+        </template>
+      </ex-table>
+      <add-edit
+        :id="modelId"
+        :sitem="sitem"
+        :show-model="showModel"
+        :is-detail="isDetail"
+        @refresh="searchList"
+        @cancel="showModel = false"
+      />
+    </div>
+    <div v-else>
+      <no-auth></no-auth>
+    </div>
+  </div>
+</template>
+<script>
+import mixinPage from "@/mixins/elPaginationHandle";
+import resToken from "@/mixins/resToken";
+import asyncRequest from "@/apis/service/stock/dataWeido";
+import companyHelper from "@/mixins/companyHelper";
+import columns from "./columns";
+import { mapGetters } from "vuex";
+
+export default {
+  name: "dataWeido",
+  mixins: [mixinPage, resToken, companyHelper],
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      const tran = this.$store.getters.btnList.find((item) => item.menu_route == "stockCount") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    },
+    goodCostPremission(){
+      const tran = this.$store.getters.btnList.find((item) => item.menu_route == "goodsCost") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      loadingRows: {},
+      stock_code: "",
+      supplier_code: "",
+      parmValue: {
+        companyNo: "",
+        supplier_code: [],
+        stock_code: [],
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      },
+      expandKeys: [],
+
+      // 表格 - 数据
+      tableData: [],
+      // 表格 - 参数
+      table: {
+        stripe: true,
+        border: true,
+        _defaultHeader_: ["setcol"],
+      },
+      // 表格 - 分页
+      pageInfo: {
+        size: 15,
+        curr: 1,
+        total: 0,
+      },
+      // 表格 - 列参数
+      columns: columns,
+    };
+  },
+  mounted() {
+    this.onCompanyChange()
+    this.searchList();
+  },
+  methods: {
+    onCompanyChange(){
+      console.log(this.currentCompany)
+      this.parmValue.companyNo = this.currentCompany
+    },
+    //业务公司选择
+    async supplierChange(e) {
+      const { code } = e;
+      this.parmValue.companyNo = code || ""; //业务公司编码
+      this.parmValue.supplier_code = [];
+      this.supplier_code = "";
+      this.parmValue.stock_code = [];
+      this.stock_code = "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    // 选择供应商仓库
+    async selectStock(e) {
+      const { code } = e;
+      this.parmValue.stock_code = code ? [code] : [];
+      this.stock_code = code || "";
+      // this.parmValue.stock_code = [];
+      // this.stock_code = "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    // 选择供应商
+    async selectSupplier(e) {
+      const { code } = e;
+      this.parmValue.supplier_code = code ? [code] : [];
+      this.supplier_code = code || "";
+      this.parmValue.stock_code = [];
+      this.stock_code = "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    linkToGoodDetail(row){
+      // console.log(row)
+      // http://localhost:8081/#/goodStore/goodsCostDetail?id=SKU2305311527349138&type=view
+      this.$router.push(`/goodStore/goodsCostDetail?id=${row.spuCode}&type=view`)
+    },
+    restSearch() {
+      // 表格 - 分页
+      this.pageInfo = {
+        size: 15,
+        curr: 1,
+        total: 0,
+      };
+      this.parmValue = {
+        companyNo: "",
+        supplier_code: [],
+        stock_code: [], //仓库编码
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      };
+      this.searchList();
+    },
+    async handleExpandChange(row) {
+      if (!row.expand) {
+        row.loading = true;
+        const { data } = await asyncRequest.listChild({ wsm_code: row.wsm_code });
+        row.loading = false;
+        this.expandKeys.push(row.expand);
+        row.child = data;
+        row.expand = true;
+      }
+    },
+    async searchList() {
+      this.loading = true;
+      let model = JSON.parse(JSON.stringify(this.parmValue));
+      model.supplierNo = model.supplier_code.toString() || "";
+      model.wsm_code = model.stock_code.toString() || "";
+      delete model["supplier_code"];
+      delete model["stock_code"];
+
+      const res = await asyncRequest.list({
+        ...model,
+        needRela: true,
+      });
+
+      if (res && res.code === 0 && res.data) {
+        const _list = res.data.list;
+        this.tableData = _list.map((item) => ({
+          ...item,
+          child: [],
+          expand: false,
+          loading: false,
+        }));
+        this.pageInfo.total = Number(res.data.count);
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.tableData = [];
+        this.pageInfo.total = 0;
+      }
+      this.loading = false;
+    },
+  },
+};
+</script>

+ 0 - 0
src/views/dataDashboard/stockCount/components/dataWeido/仓库维度


+ 71 - 0
src/views/dataDashboard/stockCount/components/productWeido/columns.js

@@ -0,0 +1,71 @@
+export default [
+  {
+    type: 'expand',
+    _slot_: 'expand',
+    label: ''
+  },
+  {
+    prop: 'good_code',
+    label: '商品编码',
+    width: '185',
+    _slot_: 'good_code'
+  },
+  // {
+  //   prop: "type_code",
+  //   label: "属性编码",
+  //   width: "150",
+  // },
+  {
+    prop: 'good_name',
+    label: '商品名称',
+    'min-width': '150'
+  },
+  {
+    prop: 'specinfo',
+    label: '规格',
+    'min-width': '150',
+    _slot_: 'specinfo'
+  },
+  {
+    prop: 'sort_f',
+    label: '分类',
+    width: '155'
+  },
+  {
+    prop: 'brand_name',
+    label: '品牌',
+    width: '85'
+  },
+
+  {
+    prop: 'unit',
+    label: '单位',
+    width: '50'
+  },
+  {
+    prop: 'total_stock',
+    label: '当前库存',
+    width: '80'
+  },
+  {
+    prop: 'wait_in_stock',
+    label: '待入库',
+    width: '80'
+  },
+  {
+    prop: 'wait_out_stock',
+    label: '待出库',
+    width: '80'
+  },
+  {
+    prop: 'usable_stock',
+    label: '可用库存',
+    width: '80'
+  },
+  {
+    prop: 'intra_stock',
+    label: '在途库存',
+    width: '80'
+  }
+
+]

+ 291 - 0
src/views/dataDashboard/stockCount/components/productWeido/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="productWeido pagePadding" style="padding: 0">
+    <div v-if="powers.some((i) => i == '001')">
+      <ex-table
+        v-loading="loading"
+        :table="table"
+        :data="tableData"
+        :columns="columns"
+        :page="pageInfo"
+        :size="size"
+        @page-curr-change="handlePageChange"
+        @page-size-change="handleSizeChange"
+        @screen-reset="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+        @screen-submit="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+      >
+        <template #table-header="{}">
+          <div style="width: 100%">
+            <el-row style="padding: 0 0 0 80px" gutter="10">
+              <el-col :span="24">
+                <el-col :span="7">
+                  <el-input
+                    v-model="parmValue.type_code"
+                    :size="searchSize"
+                    maxlength="40"
+                    placeholder="sku编码"
+                  />
+                </el-col>
+                <el-col :span="7">
+                  <el-input
+                    v-model="parmValue.good_name"
+                    :size="searchSize"
+                    maxlength="40"
+                    placeholder="商品名称"
+                  />
+                </el-col>
+                <!-- 搜索 -->
+                <el-col :span="4" style="width: 54px">
+                  <el-button
+                    :size="searchSize"
+                    type="primary"
+                    class="fr"
+                    icon="el-icon-search"
+                    label=""
+                    @click="searchList"
+                  />
+                </el-col>
+                <!-- 重置 -->
+                <el-col :span="4" style="width: 56px; margin-left: 10px" class="mr5">
+                  <el-button
+                    :size="searchSize"
+                    class="fr"
+                    type="warning"
+                    @click="restSearch"
+                    >重置</el-button>
+                </el-col>
+              </el-col>
+            </el-row>
+          </div>
+        </template>
+
+        <template #good_code="{ scope }">
+          <div style="display:flex;align-items:center">
+            <el-tooltip placement="top" content="查看商品详情" v-if="goodCostPremission.includes('007')">
+               <i @click="linkToGoodDetail(scope.row)" class="el-icon-link" style="cursor:pointer;margin-right:5px;font-size:16px" />
+            </el-tooltip>
+            <p>{{scope.row.good_code}}</p>
+          </div>
+        </template>
+        
+        <template #expand="{ scope }">
+          <el-table
+            :data="scope.row.child"
+            style="width: 100%; paddind: 20px"
+            border
+            size="small"
+          >
+            <el-table-column
+              label="仓库名称"
+              prop="wsm_name"
+              show-overflow-tooltip
+              width="150"
+            />
+            <el-table-column 
+              label="仓库负责人"
+              prop="contactor_name"
+              show-overflow-tooltip
+              width="120"
+            />
+            <el-table-column
+              label="仓库编码"
+              prop="wsm_code"
+              show-overflow-tooltip
+              width="170"
+            ></el-table-column>
+            <el-table-column
+              label="仓库所在公司名称"
+              prop="supplierName"
+              show-overflow-tooltip
+              width="150"
+            />
+            <el-table-column
+              label="供应商负责人"
+              prop="person"
+              show-overflow-tooltip
+              width="120"
+            />
+            <el-table-column
+              label="仓库所在公司编码"
+              prop="supplierNo"
+              show-overflow-tooltip
+              width="160"
+            ></el-table-column>
+            <el-table-column
+              label="仓库业务公司名称"
+              prop="company"
+              show-overflow-tooltip
+              width="150"
+            ></el-table-column>
+            <el-table-column
+              label="仓库业务公司编码"
+              prop="companyNo"
+              show-overflow-tooltip
+              width="160"
+            ></el-table-column>
+            <el-table-column
+              label="当前库存"
+              width="100"
+              show-overflow-tooltip
+              prop="total_stock"
+            ></el-table-column>
+            <el-table-column
+              label="待入库"
+              width="100"
+              show-overflow-tooltip
+              prop="wait_in_stock"
+            ></el-table-column>
+            <el-table-column
+              label="待出库"
+              width="100"
+              show-overflow-tooltip
+              prop="wait_out_stock"
+            ></el-table-column>
+            <el-table-column
+              label="可用库存"
+              width="100"
+              show-overflow-tooltip
+              prop="usable_stock"
+            ></el-table-column>
+            <el-table-column
+              label="在途库存"
+              width="100"
+              show-overflow-tooltip
+              prop="intra_stock"
+            ></el-table-column>
+          </el-table>
+        </template>
+        <template #specinfo="{ scope }">
+          <span v-for="(si, sii) in scope.row.specinfo" :key="sii + si.spec_value_id"
+            >{{ sii === 0 ? "" : "-" }}{{ si.spec_name }}[{{ si.spec_value_name }}]</span
+          >
+        </template>
+      </ex-table>
+      <add-edit
+        :id="modelId"
+        :sitem="sitem"
+        :show-model="showModel"
+        :is-detail="isDetail"
+        @refresh="searchList"
+        @cancel="showModel = false"
+      />
+    </div>
+    <div v-else>
+      <no-auth></no-auth>
+    </div>
+  </div>
+</template>
+<script>
+import mixinPage from "@/mixins/elPaginationHandle";
+import resToken from "@/mixins/resToken";
+import { statusList } from "@/assets/js/statusList";
+import asyncRequest from "@/apis/service/stock/productWeido";
+import companyHelper from "@/mixins/companyHelper";
+import { mapGetters } from "vuex";
+import columns from "./columns";
+
+export default {
+  name: "productWeido",
+  mixins: [mixinPage, resToken, companyHelper],
+  components: {},
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      const tran =
+        this.$store.getters.btnList.find((item) => item.menu_route == "stockCount") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    },
+    goodCostPremission(){
+      const tran = this.$store.getters.btnList.find((item) => item.menu_route == "goodsCost") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    }
+  },
+  data() {
+    return {
+      statusList: statusList,
+      loading: true,
+      showModel: false,
+      isDetail: false,
+      modelId: 0,
+      //入参参数
+      parmValue: {
+        type_code: "", //商品属性编码
+        good_name: "", //商品名称
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      },
+      tableData: [], //渲染表格数据
+      // 表格 - 参数
+      table: {
+        stripe: true,
+        border: true,
+        _defaultHeader_: ["setcol"],
+      },
+      // 表格 - 分页
+      pageInfo: {
+        size: 15,
+        curr: 1,
+        total: 0,
+      },
+      // 表格 - 列参数
+      columns: columns,
+    };
+  },
+  mounted() {
+    this.searchList();
+  },
+
+  methods: {
+    linkToGoodDetail(row){
+      // console.log(row)
+      // http://localhost:8081/#/goodStore/goodsCostDetail?id=SKU2305311527349138&type=view
+      this.$router.push(`/goodStore/goodsCostDetail?id=${row.good_code}&type=view`)
+    },
+    //重置参数
+    restSearch() {
+      // 表格 - 分页
+      this.pageInfo = {
+        size: 15,
+        curr: 1,
+        total: 0,
+      };
+      this.parmValue = {
+        type_code: "",
+        good_name: "", //商品名称
+        size: 15,
+        curr: 1,
+      };
+      this.searchList();
+    },
+    //获取列表功能
+    async searchList() {
+      this.loading = true;
+      const res = await asyncRequest.list({
+        ...this.parmValue,
+        companyNo: this.currentCompany,
+        needRela: true,
+      });
+
+      if (res && res.code === 0 && res.data) {
+        this.tableData = res.data.list;
+        this.pageInfo.total = Number(res.data.count);
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.tableData = [];
+        this.pageInfo.total = 0;
+      }
+      this.loading = false;
+    },
+  },
+};
+</script>

+ 0 - 0
src/views/dataDashboard/stockCount/components/productWeido/商品维度


+ 90 - 0
src/views/dataDashboard/stockCount/components/spaceCount/columns.js

@@ -0,0 +1,90 @@
+export default [
+  {
+    prop: 'company_no',
+    label: '仓库业务公司编码',
+    width: '150'
+  },
+  {
+    prop: 'company_name',
+    label: '仓库业务公司名称',
+    'min-width': '180'
+  },
+  {
+    prop: 'supplier_code',
+    label: '仓库所在公司编码',
+    width: '150'
+  },
+  {
+    prop: 'supplier_name',
+    label: '仓库所在公司名称',
+    'min-width': '180'
+  },
+  {
+    prop: 'wsm_code',
+    label: '仓库编码',
+    width: '180'
+  },
+  {
+    prop: 'wsm_name',
+    label: '仓库名称',
+    'min-width': '100'
+  },
+  {
+    prop: 'good_code',
+    label: '商品编码',
+    width: '160'
+  },
+  // {
+  //   prop: "type_code",
+  //   label: "属性编码",
+  //   width: "150",
+  // },
+  {
+    prop: 'good_name',
+    label: '商品名称',
+    'min-width': '150'
+  },
+  {
+    prop: 'specinfo',
+    label: '规格',
+    'min-width': '150',
+    _slot_: 'specinfo'
+  },
+  {
+    prop: 'can',
+    label: '分类',
+    _slot_: 'can',
+    width: '155'
+  },
+  {
+    prop: 'brand_name',
+    label: '品牌',
+    width: '85'
+  },
+
+  {
+    prop: 'unit',
+    label: '单位',
+    width: '50'
+  },
+  {
+    prop: 'usable_stock',
+    label: '当前库存',
+    width: '80'
+  },
+  {
+    prop: 'wait_in_stock',
+    label: '待入库',
+    width: '80'
+  },
+  {
+    prop: 'wait_out_stock',
+    label: '待出库',
+    width: '80'
+  },
+  {
+    prop: 'intra_stock',
+    label: '在途库存',
+    width: '80'
+  }
+]

+ 269 - 0
src/views/dataDashboard/stockCount/components/spaceCount/index.vue

@@ -0,0 +1,269 @@
+<template>
+  <div class="spaceCount pagePadding" style="padding: 0">
+    <div v-if="powers.some((i) => i == '001')">
+      <ex-table
+        v-loading="loading"
+        :table="table"
+        :data="tableData"
+        :columns="columns"
+        :page="pageInfo"
+        :size="size"
+        @page-curr-change="handlePageChange"
+        @page-size-change="handleSizeChange"
+        @screen-reset="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+        @screen-submit="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+      >
+        <template #table-header="{}">
+          <div style="width: 100%" class="min">
+            <el-row style="padding: 0 0 0 80px">
+              <!-- <el-col :span="12" style="width: 300px">
+                <search-work-company
+                  :value="parmValue.companyNo"
+                  :names="''"
+                  :size="searchSize"
+                  :is-detail="id !== 'add'"
+                  :placeholder="'业务公司'"
+                  @searchChange="supplierChange"
+                />
+              </el-col> -->
+              <el-col :span="10" style="width: 330px; padding: 0 0 0 10px">
+                <el-input
+                  v-model="parmValue.type_code"
+                  :size="searchSize"
+                  maxlength="40"
+                  placeholder="商品属性编码"
+                />
+              </el-col>
+
+              <el-col :span="12" style="width: 330px; padding: 0 0 0 10px">
+                <search-stock
+                  :isDetail="true"
+                  :size="searchSize"
+                  :value="parmValue.stock_code"
+                  :disabled="parmValue.companyNo === ''"
+                  :placeholder="'出库仓库'"
+                  :isRelation="true"
+                  :companyNo="parmValue.companyNo"
+                  :names="''"
+                  @searchChange="selectStock"
+                />
+              </el-col>
+
+              <!-- 重置 -->
+              <el-col :span="4" style="width: 66px" class="fr">
+                <el-button
+                  :size="searchSize"
+                  class="fl"
+                  type="warning"
+                  @click="restSearch"
+                  >重置</el-button
+                >
+              </el-col>
+
+              <el-col :span="4" style="width: 66px" class="fr">
+                <el-button :size="searchSize" type="primary" label="" @click="searchList"
+                  >刷新</el-button
+                >
+              </el-col>
+            </el-row>
+            <el-row style="padding: 10px 0 0 0">
+              <!-- <el-col :span="12" style="width: 380px">
+                <search-supplier
+                  :size="searchSize"
+                  :placeholder="'供应商公司'"
+                  :disabled="parmValue.companyNo === ''"
+                  :value="parmValue.supplier_code"
+                  @searchChange="selectSupplier"
+                />
+              </el-col> -->
+
+              <!-- 刷新 -->
+            </el-row>
+          </div>
+        </template>
+        <template #specinfo="{ scope }">
+          <span v-for="(si, sii) in scope.row.specinfo" :key="sii + si.spec_value_id"
+            >{{ sii === 0 ? "" : "-" }}{{ si.spec_name }}[{{ si.spec_value_name }}]</span
+          >
+        </template>
+        <template #can="{ scope }">
+          <span v-for="(si, sii) in scope.row.cat_info" :key="sii + si.id"
+            >{{ sii === 0 ? "" : "-" }}{{ si.name }}</span
+          >
+        </template>
+      </ex-table>
+    </div>
+    <div v-else>
+      <no-auth></no-auth>
+    </div>
+  </div>
+</template>
+<script>
+import mixinPage from "@/mixins/elPaginationHandle";
+import resToken from "@/mixins/resToken";
+import asyncRequest from "@/apis/service/stock/spaceCount";
+import companyHelper from "@/mixins/companyHelper";
+import columns from "./columns";
+import { mapGetters } from "vuex";
+export default {
+  name: "spaceCount",
+  mixins: [mixinPage, resToken, companyHelper],
+  components: {},
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      const tran =
+        this.$store.getters.btnList.find((item) => item.menu_route == "stockCount") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    },
+  },
+  data() {
+    return {
+      stock_code: "",
+      supplier_code: "",
+      parmValue: {
+        supplier_code: [], //供应商编码
+        stock_code: [], //仓库编码
+        companyNo: "",
+        start: "",
+        end: "",
+        type_code: "", //商品编码
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      },
+      loading: true,
+      // 表格 - 数据
+      tableData: [],
+      // 表格 - 参数
+      table: {
+        stripe: true,
+        border: true,
+        _defaultHeader_: ["setcol"],
+      },
+      // 表格 - 分页
+      pageInfo: {
+        size: 15,
+        curr: 1,
+        total: 0,
+      },
+      // 表格 - 列参数
+      columns: columns,
+    };
+  },
+  mounted() {
+    // this.onCompanyChange() MARK
+    this.searchList();
+  },
+  watch: {
+    currentCompany: {
+      handler(newVal) {
+        this.parmValue.companyNo = newVal;
+      },
+      immediate: true,
+    },
+  },
+  methods: {
+    //业务公司选择
+    async supplierChange(e) {
+      const { code } = e;
+      this.parmValue.companyNo = code || ""; //业务公司编码
+      this.parmValue.supplier_code = [];
+      this.supplier_code = "";
+      this.parmValue.stock_code = [];
+      this.stock_code = "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    // 选择时间操作
+    async handleTime(e) {
+      this.parmValue.start = e.startTime || "";
+      this.parmValue.end = e.endTime || "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    // 选择供应商仓库
+    async selectStock(e) {
+      const { code } = e;
+      this.parmValue.stock_code = code ? [code] : [];
+      this.stock_code = code || "";
+      // this.parmValue.stock_code = [];
+      // this.stock_code = "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    // 选择供应商
+    async selectSupplier(e) {
+      const { code } = e;
+      this.parmValue.supplier_code = code ? [code] : [];
+      this.supplier_code = code || "";
+      this.parmValue.stock_code = [];
+      this.stock_code = "";
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    restSearch() {
+      // 表格 - 分页
+      this.pageInfo = {
+        size: 15,
+        curr: 1,
+        total: 0,
+      };
+      this.parmValue = {
+        start: "",
+        end: "",
+        companyNo: this.currentCompany,
+        type_code: "", //商品编码
+        supplier_code: [],
+        stock_code: [], //仓库编码
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      };
+      this.searchList();
+    },
+
+    async searchList() {
+      this.loading = true;
+      let model = JSON.parse(JSON.stringify(this.parmValue));
+      model.supplierNo = model.supplier_code.toString() || "";
+      model.wsm_code = model.stock_code.toString() || "";
+      delete model["supplier_code"];
+      delete model["stock_code"];
+      const res = await asyncRequest.list({
+        ...model,
+        needRela: true,
+        companyNo: this.currentCompany,
+      });
+      if (res && res.code === 0 && res.data) {
+        this.tableData = res.data.list;
+        this.tableData.forEach((e) => {
+          e.supplier_wsm_name =
+            e.supplier_name === e.wsm_name
+              ? e.supplier_name
+              : e.supplier_name + "/" + e.wsm_name;
+        });
+
+        this.pageInfo.total = Number(res.data.count);
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.tableData = [];
+        this.pageInfo.total = 0;
+      }
+      this.loading = false;
+    },
+  },
+};
+</script>

+ 0 - 0
src/views/dataDashboard/stockCount/components/spaceCount/区间统计


+ 66 - 0
src/views/dataDashboard/stockCount/index.vue

@@ -0,0 +1,66 @@
+<template>
+  <div class="nowCount pagePadding">
+    <div
+      v-if=" powers.some((i) => i == '001')"
+    >
+      <div style="width: 100%">
+        <el-row>
+          <el-col>
+            <el-tabs v-model="activeName">
+              <el-tab-pane label="商品维度" name="productWeido">
+                <product-weido/>
+              </el-tab-pane>
+              <el-tab-pane label="仓库维度" name="dataWeido">
+                <data-weido />
+              </el-tab-pane>
+               <!-- <el-tab-pane label="区间统计" name="count">
+                <space-count
+              /></el-tab-pane> -->
+            </el-tabs>
+          </el-col>
+        </el-row>
+      </div>
+    </div>
+
+    <div v-else>
+      <no-auth />
+    </div>
+  </div>
+</template>
+<script>
+import mixinPage from "@/mixins/elPaginationHandle";
+import resToken from "@/mixins/resToken";
+import DataWeido from "./components/dataWeido";
+import ProductWeido from "./components/productWeido";
+import SpaceCount from "./components/spaceCount";
+
+import { mapGetters } from "vuex";
+
+export default {
+  name: "stockCount",
+  mixins: [mixinPage, resToken],
+  components: {
+    DataWeido,
+    ProductWeido,
+    SpaceCount,
+  },
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      const tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "stockCount"
+        ) || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    },
+  },
+  data() {
+    return {
+      activeName: "productWeido", //默认选中的区间统计选项
+    };
+  },
+  methods: {},
+};
+</script>
+   

+ 0 - 0
src/views/dataDashboard/stockCount/库存统计


+ 74 - 64
src/views/stock/stockCount/components/dataWeido/columns.js

@@ -1,65 +1,75 @@
 export default [
-    {
-          type: "expand",
-          _slot_: "expand",
-          label: "",
-        },
-        {
-          prop: "company_no",
-          label: "仓库业务公司编码",
-          width: "150",
-        },
-        {
-          prop: "company_name",
-          label: "仓库业务公司名称",
-          'min-width':"180"
-        },
-        {
-          prop: "supplier_code",
-          label: "仓库所在公司编码",
-          width: "150",
-        },
-        {
-          prop: "supplier_name",
-          label: "仓库所在公司名称",
-          'min-width':"180"
-        },
-        {
-          prop: "wsm_code",
-          label: "仓库编码",
-          width:'180'
-        },
-        {
-          prop: "wsm_name",
-          label: "仓库名称",
-          'min-width':"100"
-        },
-        {
-          prop: "total_stock",
-          label: "当前库存",
-        },
-        {
-          prop: "wait_in_stock",
-          label: "待入库",
-        },
-        {
-          prop: "wait_out_stock",
-          label: "待出库",
-          width: "80px",
-        },
-        {
-          prop: "usable_stock",
-          label: "可用库存",
-          // ,
-        },
-        {
-          prop: "intra_stock",
-          label: "在途库存",
-          // ,
-        },
-        // {
-        //   prop: "warn_stock",
-        //   label: "预警库存",
-        // },
-      
-]
+  {
+    type: 'expand',
+    _slot_: 'expand',
+    label: ''
+  },
+  {
+    prop: 'company_no',
+    label: '仓库业务公司编码',
+    width: '150'
+  },
+  {
+    prop: 'company_name',
+    label: '仓库业务公司名称',
+    'min-width': '180'
+  },
+  {
+    prop: 'supplier_code',
+    label: '仓库所在公司编码',
+    width: '150'
+  },
+  {
+    prop: 'supplier_name',
+    label: '仓库所在公司名称',
+    'min-width': '180'
+  },
+  {
+    prop: 'contactor_name',
+    label: '供应商负责人',
+    'min-width': '100'
+  },
+  {
+    prop: 'wsm_code',
+    label: '仓库编码',
+    width: '180'
+  },
+  {
+    prop: 'wsm_name',
+    label: '仓库名称',
+    'min-width': '100'
+  },
+  {
+    prop: 'person',
+    label: '仓库负责人',
+    'min-width': '100'
+  },
+  {
+    prop: 'total_stock',
+    label: '当前库存'
+  },
+  {
+    prop: 'wait_in_stock',
+    label: '待入库'
+  },
+  {
+    prop: 'wait_out_stock',
+    label: '待出库',
+    width: '80px'
+  },
+  {
+    prop: 'usable_stock',
+    label: '可用库存'
+    // ,
+  },
+  {
+    prop: 'intra_stock',
+    label: '在途库存'
+    // ,
+  }
+  // {
+  //   prop: "warn_stock",
+  //   label: "预警库存",
+  // },
+
+]

+ 28 - 12
src/views/stock/stockCount/components/dataWeido/index.vue

@@ -17,7 +17,7 @@
         @screen-reset="
           pageInfo.curr = 1;
           parmValue.page = 1;
-          searchList();
+          searchChange();
         "
         @screen-submit="
           pageInfo.curr = 1;
@@ -60,8 +60,7 @@
                     class="fr"
                     type="warning"
                     @click="restSearch"
-                    >重置</el-button
-                  >
+                    >重置</el-button>
                 </el-col>
               </el-col>
             </el-row>
@@ -78,9 +77,17 @@
             <el-table-column
               label="商品编码"
               prop="spuCode"
-              width="170"
-            ></el-table-column>
-
+              width="190"
+            >
+              <template slot-scope="scope">
+                <div style="display:flex; align-items:center">
+                  <el-tooltip placement="top" content="查看商品详情" v-if="goodCostPremission.includes('007')">
+                     <i @click="linkToGoodDetail(scope.row)" class="el-icon-link" style="cursor:pointer;margin-right:5px;font-size:16px" />
+                  </el-tooltip>
+                  <p>{{scope.row.spuCode}}</p>
+                </div>
+              </template>
+            </el-table-column>
             <el-table-column
               label="商品名称"
               prop="good_name"
@@ -105,12 +112,12 @@
             </el-table-column>
             <el-table-column label="分类" min-width="120" show-overflow-tooltip>
               <template slot-scope="scope">
-                <span v-for="(si, sii) in scope.row.can" :key="sii + si.spec_value_id"
-                  >{{ sii === 0 ? "" : "_" }}{{ si.name }}</span
-                >
+                <span v-for="(si, sii) in scope.row.can" :key="sii + si.spec_value_id">
+                  {{ sii === 0 ? "" : "_" }}{{ si.name }}
+                </span>
               </template></el-table-column
             >
-            <el-table-column
+          <el-table-column
               label="品牌"
               prop="brand_name"
               show-overflow-tooltip
@@ -183,11 +190,15 @@ export default {
   computed: {
     ...mapGetters(["tablebtnSize", "searchSize", "size"]),
     powers() {
-      const tran =
-        this.$store.getters.btnList.find((item) => item.menu_route == "stockCount") || {};
+      const tran = this.$store.getters.btnList.find((item) => item.menu_route == "stockCount") || {};
       const { action } = tran ?? {};
       return action ?? [];
     },
+    goodCostPremission(){
+      const tran = this.$store.getters.btnList.find((item) => item.menu_route == "goodsCost") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    }
   },
   data() {
     return {
@@ -265,6 +276,11 @@ export default {
       this.pageInfo.curr = 1;
       await this.searchList();
     },
+    linkToGoodDetail(row){
+      // console.log(row)
+      // http://localhost:8081/#/goodStore/goodsCostDetail?id=SKU2305311527349138&type=view
+      this.$router.push(`/goodStore/goodsCostDetail?id=${row.spuCode}&type=view`)
+    },
     restSearch() {
       // 表格 - 分页
       this.pageInfo = {

+ 40 - 39
src/views/stock/stockCount/components/productWeido/columns.js

@@ -1,13 +1,14 @@
 export default [
   {
-    type: "expand",
-    _slot_: "expand",
-    label: "",
+    type: 'expand',
+    _slot_: 'expand',
+    label: ''
   },
   {
-    prop: "good_code",
-    label: "商品编码",
-    width: "160",
+    prop: 'good_code',
+    label: '商品编码',
+    width: '185',
+    _slot_: 'good_code'
   },
   // {
   //   prop: "type_code",
@@ -15,56 +16,56 @@ export default [
   //   width: "150",
   // },
   {
-    prop: "good_name",
-    label: "商品名称",
-    "min-width": "150",
+    prop: 'good_name',
+    label: '商品名称',
+    'min-width': '150'
   },
   {
-    prop: "specinfo",
-    label: "规格",
-    "min-width": "150",
+    prop: 'specinfo',
+    label: '规格',
+    'min-width': '150',
     _slot_: 'specinfo'
   },
   {
-    prop: "sort_f",
-    label: "分类",
-    width: "155",
+    prop: 'sort_f',
+    label: '分类',
+    width: '155'
   },
   {
-    prop: "brand_name",
-    label: "品牌",
-    width: "85",
+    prop: 'brand_name',
+    label: '品牌',
+    width: '85'
   },
-  
+
   {
-    prop: "unit",
-    label: "单位",
-    width: "50",
+    prop: 'unit',
+    label: '单位',
+    width: '50'
   },
   {
-    prop: "total_stock",
-    label: "当前库存",
-    width: "80",
+    prop: 'total_stock',
+    label: '当前库存',
+    width: '80'
   },
   {
-    prop: "wait_in_stock",
-    label: "待入库",
-    width: "80",
+    prop: 'wait_in_stock',
+    label: '待入库',
+    width: '80'
   },
   {
-    prop: "wait_out_stock",
-    label: "待出库",
-    width: "80",
+    prop: 'wait_out_stock',
+    label: '待出库',
+    width: '80'
   },
   {
-    prop: "usable_stock",
-    label: "可用库存",
-    width: "80",
+    prop: 'usable_stock',
+    label: '可用库存',
+    width: '80'
   },
   {
-    prop: "intra_stock",
-    label: "在途库存",
-    width: "80",
-  },
+    prop: 'intra_stock',
+    label: '在途库存',
+    width: '80'
+  }
 
-]
+]

+ 36 - 5
src/views/stock/stockCount/components/productWeido/index.vue

@@ -50,7 +50,7 @@
                     icon="el-icon-search"
                     label=""
                     @click="searchList"
-                  ></el-button>
+                  />
                 </el-col>
                 <!-- 重置 -->
                 <el-col :span="4" style="width: 56px; margin-left: 10px" class="mr5">
@@ -59,13 +59,22 @@
                     class="fr"
                     type="warning"
                     @click="restSearch"
-                    >重置</el-button
-                  >
+                    >重置</el-button>
                 </el-col>
               </el-col>
             </el-row>
           </div>
         </template>
+
+        <template #good_code="{ scope }">
+          <div style="display:flex;align-items:center">
+            <el-tooltip placement="top" content="查看商品详情" v-if="goodCostPremission.includes('007')">
+               <i @click="linkToGoodDetail(scope.row)" class="el-icon-link" style="cursor:pointer;margin-right:5px;font-size:16px" />
+            </el-tooltip>
+            <p>{{scope.row.good_code}}</p>
+          </div>
+        </template>
+        
         <template #expand="{ scope }">
           <el-table
             :data="scope.row.child"
@@ -78,7 +87,13 @@
               prop="wsm_name"
               show-overflow-tooltip
               width="150"
-            ></el-table-column>
+            />
+            <el-table-column 
+              label="仓库负责人"
+              prop="contactor_name"
+              show-overflow-tooltip
+              width="120"
+            />
             <el-table-column
               label="仓库编码"
               prop="wsm_code"
@@ -90,7 +105,13 @@
               prop="supplierName"
               show-overflow-tooltip
               width="150"
-            ></el-table-column>
+            />
+            <el-table-column
+              label="供应商负责人"
+              prop="person"
+              show-overflow-tooltip
+              width="120"
+            />
             <el-table-column
               label="仓库所在公司编码"
               prop="supplierNo"
@@ -182,6 +203,11 @@ export default {
       const { action } = tran ?? {};
       return action ?? [];
     },
+    goodCostPremission(){
+      const tran = this.$store.getters.btnList.find((item) => item.menu_route == "goodsCost") || {};
+      const { action } = tran ?? {};
+      return action ?? [];
+    }
   },
   data() {
     return {
@@ -219,6 +245,11 @@ export default {
   },
 
   methods: {
+    linkToGoodDetail(row){
+      // console.log(row)
+      // http://localhost:8081/#/goodStore/goodsCostDetail?id=SKU2305311527349138&type=view
+      this.$router.push(`/goodStore/goodsCostDetail?id=${row.good_code}&type=view`)
+    },
     //重置参数
     restSearch() {
       // 表格 - 分页

+ 11 - 10
src/views/stock/stockCount/index.vue

@@ -7,26 +7,27 @@
         <el-row>
           <el-col>
             <el-tabs v-model="activeName">
-               <el-tab-pane label="商品维度" name="productWeido"
-                ><product-weido
-              /></el-tab-pane>
-             <el-tab-pane label="仓库维度" name="dataWeido">
-                <data-weido
-              /></el-tab-pane>
-               <el-tab-pane label="区间统计" name="count">
+              <el-tab-pane label="商品维度" name="productWeido">
+                <product-weido/>
+              </el-tab-pane>
+              <el-tab-pane label="仓库维度" name="dataWeido">
+                <data-weido />
+              </el-tab-pane>
+               <!-- <el-tab-pane label="区间统计" name="count">
                 <space-count
-              /></el-tab-pane>
+              /></el-tab-pane> -->
             </el-tabs>
           </el-col>
         </el-row>
       </div>
     </div>
+
     <div v-else>
-      <no-auth></no-auth>
+      <no-auth />
     </div>
   </div>
 </template>
-   <script>
+<script>
 import mixinPage from "@/mixins/elPaginationHandle";
 import resToken from "@/mixins/resToken";
 import DataWeido from "./components/dataWeido";