Browse Source

新增路由商品库存查询,新增同样页面

lucky 2 years ago
parent
commit
69224e47c5

+ 40 - 0
src/apis/service/goodStore/goodsRepertory/index.js

@@ -0,0 +1,40 @@
+// 物业管理员
+import http from "@/apis/axios";
+const api = "admin/";
+export default {
+  //价格区间筛选列表
+  listbyladder: (data, params) => http(api + "goodlistbyladder", data, "post", params),
+  // 分页查询
+  list: (data, params) => http(api + "goodlist", data, "post", params),
+  // 添加
+  add: (data, params) => http(api + "gooduponline", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "goodinfo", data, "post", params),
+  // 产品部门审核
+  goodupexam: (data, params) => http(api + "goodupexam", data, "post", params),
+  // 更新状态
+  status: (data, params) => http(api + "goodupexam", data, "post", params),
+
+  // 定价岗定价
+  ladderOne: (data, params) => http(api + "goodupeditladder", data, "post", params),
+  // 删除
+  delete: (data, params) => http(api + "gooddel", data, "post", params),
+  // 重新发起审核流程
+  againonline: (data, params) => http(api + "againonline", data, "post", params),
+  // 获取系统售价
+  goodupprice: (data, params) => http(api + "goodupprice", data, "post", params),
+
+  // 复制
+  copy: (data, params) => http(api + "goodcopy", data, "post", params),
+  // 获取全部分类
+  catAll: (data, params) => http(api + "catAll", data, "post", params),
+  // 获取全部品牌
+  brandAll: (data, params) => http(api + "brandall", data, "post", params),
+  // 获取全部供应商账号
+  supplierAll: (data, params) => http(api + "supplierall", data, "post", params),
+  // 商品种类ID换取规格值
+  specByCat: (data, params) => http(api + "SpecByCat", data, "post", params),
+  // 规格属性值新建
+  specinfoadd: (data, params) => http(api + "specinfoadd", data, "post", params),
+
+};

+ 173 - 0
src/views/goodStore/goodsRepertory/columns.js

@@ -0,0 +1,173 @@
+
+//是否定制
+const options1 = [
+  { id: "0", name: "否" },
+  { id: "1", name: "是" },
+]
+//专属类型
+const options2 = [
+  { id: "0", name: "非泰康" },
+  { id: "1", name: "泰康" },
+]
+//销售权限
+const options3 = [
+  { id: "0", name: "无销售权限" },
+  { id: "1", name: "有销售权限" },
+]
+
+//是否库存品
+const options4 = [
+  { id: "0", name: "非库存品" },
+  { id: "1", name: "库存品" },
+]
+//是否启用实时金价
+const options5 = [
+  { id: "0", name: "否" },
+  { id: "1", name: "是" },
+]
+//供货区域
+const options6 = [
+  { id: "1", name: "全国" },
+  { id: "2", name: "全国除偏远" },
+]
+//是否启用阶梯
+const options7 = [
+  { id: "0", name: "否" },
+  { id: "1", name: "是" },
+]
+const options8 = [
+  // { id: "0", name: "待提交" },
+  { id: "1", name: "待完善成本" },
+  { id: "2", name: "待产品审核" },
+  { id: "3", name: "待财务定价" },
+  { id: "4", name: "待财务审核定价" },
+  { id: "5", name: "待上线" },
+  { id: "6", name: "上线成功" },
+  { id: "7", name: "审核失败" },
+  { id: "8", name: "已下线" },
+]
+const listCol = [
+  {
+    prop: "skuCode",
+    label: "编号",
+    fixed: "left",
+    width: "160px",
+  },
+  {
+    prop: "good_thumb_img",
+    label: "图片",
+    _slot_: "good_thumb_img",
+    width: "45px",
+  },
+  {
+    prop: "good_name",
+    label: "名称",
+    "min-width": "160px",
+  },
+  // {
+  //   prop: "platform_code_en",
+  //   label: "平台编号",
+  //   width: "170px",
+  // },
+  {
+    prop: "platform_name",
+    label: "平台名称",
+    width: "100px",
+  },
+
+  {
+    prop: "status",
+    label: "状态",
+    _slot_: "status",
+    width: "118px",
+  },
+  {
+    prop: "cat_name",
+    label: "分类",
+    width: "118px",
+  },
+  {
+    prop: "good_type",
+    label: "是否定制",
+    _slot_: "good_type",
+    width: "70px",
+  },
+  {
+    prop: "brand_name",
+    label: "品牌",
+  },
+  {
+    prop: "companyNo",
+    label: "业务公司编号",
+    width: "160px",
+  },
+  {
+    prop: "company",
+    label: "业务公司名称",
+    width: "150px",
+  },
+  {
+    prop: "plat_code",
+    label: "平台商品编号",
+    width: "150px",
+  },
+  {
+    prop: "plat_code",
+    label: "起订量",
+    width: "70px",
+  },
+  {
+    prop: "plat_code",
+    label: "售价",
+    width: "70px",
+  },
+  {
+    prop: "purchase",
+    label: "采购员",
+    width: "70px",
+  },
+  {
+    prop: "creater",
+    label: "创建人",
+    width: "70px",
+  },
+  {
+    prop: "addtime",
+    label: "创建时间",
+    width: "140px",
+  },
+  {
+    prop: "",
+    label: "操作",
+    fixed: "right",
+    _noset_: true,
+    width: "50px",
+    _slot_: "operation",
+  },
+]
+const rules = {
+  platform: [
+    {
+      required: true,
+      message: "请选择所属平台",
+      trigger: "change",
+    },
+  ],
+  online_reason: [
+    {
+      required: true,
+      message: "上线原因不能为空",
+      trigger: "blur",
+    },
+  ],
+  online_remark: [
+    {
+      required: true,
+      message: "上线备注不能为空",
+      trigger: "blur",
+    },
+  ],
+
+}
+
+export { options1, options2, options3, options4, options5, options6, options7, options8, listCol, rules }

+ 587 - 0
src/views/goodStore/goodsRepertory/index.vue

@@ -0,0 +1,587 @@
+<template>
+  <div class="goodsOnline pagePadding">
+    <ex-table
+      v-loading="loading"
+      v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
+      :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 10px 80px">
+            <el-col :span="4" style="width: 120px">
+              <el-select
+                v-model="parmValue.good_type"
+                filterable
+                clearable
+                :size="searchSize"
+                placeholder="是否定制"
+                style="width: 100%"
+                @change="
+                  pageInfo.curr = 1;
+                  parmValue.page = 1;
+                  searchList();
+                "
+              >
+                <el-option
+                  v-for="item in options1"
+                  :key="'good_type' + item.id"
+                  :label="item.name"
+                  :value="item.id"
+                />
+              </el-select>
+            </el-col>
+            <el-col :span="6" style="width: 303px; padding: 0 0 0 10px">
+              <period-date-picker
+                :type="1"
+                :width="'135px'"
+                :size="searchSize"
+                :start="parmValue.start"
+                :end="parmValue.end"
+                @timeReturned="handleTime"
+              />
+            </el-col>
+
+            <el-col :span="6" style="width: 310px; padding: 0 0 0 10px">
+              <good-class
+                :value="parmValue.cat_id"
+                @handleChange="goods_class_change"
+                :disabled="false"
+                :size="searchSize"
+                :isDetail="false"
+                :placeholder="'分类'"
+              />
+            </el-col>
+
+            <el-col
+              :span="3"
+              class="fr"
+              style="width: 66px; padding: 0 0 0 10px"
+            >
+              <el-button type="primary" :size="searchSize" @click="searchList">
+                刷新
+              </el-button>
+            </el-col>
+            <el-col
+              :span="3"
+              class="fr"
+              style="width: 66px; padding: 0 0 0 10px"
+            >
+              <el-button type="warning" :size="searchSize" @click="restSearch">
+                重置
+              </el-button>
+            </el-col>
+          </el-row>
+
+          <el-row>
+            <el-col :span="4" style="width: 200px">
+              <el-select
+                v-model="parmValue.exam_status"
+                filterable
+                clearable
+                :size="searchSize"
+                placeholder="状态"
+                style="width: 100%"
+                @change="
+                  pageInfo.curr = 1;
+                  parmValue.page = 1;
+                  searchList();
+                "
+              >
+                <el-option
+                  v-for="item in options8"
+                  :key="'status' + item.id"
+                  :label="item.name"
+                  :value="item.id"
+                />
+              </el-select>
+            </el-col>
+            <el-col :span="4" style="width: 240px; padding: 0 0 0 10px">
+              <search-brand
+                :value="brandid"
+                :disabled="type === 'view' || type === 'editCoin'"
+                :size="'mini'"
+                :isDetail="type !== 'add'"
+                :names="brand_name"
+                :placeholder="'商品品牌'"
+                @searchChange="brandidsearchChange"
+              />
+            </el-col>
+
+            <el-col :span="4" style="width: 470px; padding: 0 0 0 10px">
+              <el-input
+                :size="searchSize"
+                v-model="sinput"
+                :maxlength="40"
+                @blur="
+                  pageInfo.curr = 1;
+                  parmValue.page = 1;
+                  searchList();
+                "
+                placeholder="关键字"
+                ><el-select
+                  v-model="select"
+                  slot="prepend"
+                  :size="searchSize"
+                  style="width: 140px"
+                  placeholder="关键字类型"
+                >
+                  <el-option label="商品名称" value="1" />
+                  <el-option label="商品编号" value="2" />
+                  <!-- <el-option label="平台编号" value="3" /> -->
+                  <!-- <el-option label="供应商编号" value="4" /> -->
+                  <el-option label="业务企业编号" value="5" />
+                  <el-option label="平台商品编号" value="6" />
+                  <el-option label="创建人" value="7" /> </el-select
+              ></el-input>
+            </el-col>
+            <el-col
+              :span="3"
+              class="fr"
+              style="width: 66px; padding: 0 0 0 10px"
+              v-if="powers.some((item) => item == '003')"
+            >
+              <el-button
+                :size="searchSize"
+                type="success"
+                style="float: right"
+                @click="routeGoto('goodsOnlineAdd', {})"
+              >
+                添加
+              </el-button>
+            </el-col>
+          </el-row>
+        </div></template
+      >
+      <template #good_thumb_img="{ scope }">
+        <div
+          v-if="scope.row.good_thumb_img"
+          style="width: 20px; height: 20px"
+          class="hover"
+          v-viewer
+        >
+          <img
+            :src="scope.row.good_thumb_img"
+            style="display: inline-block; width: 100%; height: 100%"
+            alt=""
+          />
+        </div>
+      </template>
+      <template #status="{ scope }">
+        <el-tag
+          :size="tablebtnSize"
+          :type="
+            scope.row.status == '6'
+              ? ''
+              : scope.row.status == '7'
+              ? 'danger'
+              : 'warning'
+          "
+          v-text="
+            (options8.find((item) => item.id == scope.row.status) || {}).name ||
+            '--'
+          "
+        ></el-tag>
+      </template>
+      <template #good_type="{ scope }">
+        <el-tag
+          :size="tablebtnSize"
+          :type="scope.row.good_type == '0' ? 'warning' : ''"
+          v-text="
+            (options1.find((item) => item.id == scope.row.good_type) || {})
+              .name || '--'
+          "
+        ></el-tag>
+      </template>
+
+      <template #operation="{ scope }">
+        <el-tooltip
+          v-if="powers.some((item) => item == '007')"
+          effect="dark"
+          content="详情"
+          placement="top"
+        >
+          <i
+            class="el-icon-view tb-icon"
+            @click="openDilog(scope.row)"
+          ></i>
+        </el-tooltip>
+        <el-tooltip
+          v-if="
+            powers.some((item) => item == '078') &&
+            (scope.row.status === '7' || scope.row.status === '8')
+          "
+          effect="dark"
+          content="重新发起上线流程"
+          placement="top"
+        >
+          <i
+            class="el-icon-upload tb-icon"
+            @click="get_againonline(scope.row.skuCode)"
+          ></i>
+        </el-tooltip>
+      </template>
+    </ex-table>
+    <no-auth v-else></no-auth>
+    <!-- 弹窗 新增/修改 -->
+    <add-edit
+      :id="modelId"
+      :show-model="showModel"
+      :sitem="sitem"
+      @refresh="searchList"
+      @cancel="showModel = false"
+    />
+
+
+    <el-dialog title="详细信息" :visible.sync="visible">
+        <show-goods-data-table
+          :newTime="row.newTime"
+          v-if="row.newTime !== ''"
+          type="1"
+          :skucode="row.skuCode"
+          :spucode="row.spuCode"
+          :iscgd="false"
+        >
+        </show-goods-data-table>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import asyncRequest from "@/apis/service/goodStore/goodsRepertory";
+import mixinPage from "@/mixins/elPaginationHandle";
+import { mapGetters } from "vuex";
+import resToken from "@/mixins/resToken";
+import { listCol, options1, options8 } from "./columns";
+export default {
+  name: "goodsOnline",
+  mixins: [mixinPage, resToken],
+  computed: {
+    //组件SIZE设置
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "goodsOnline"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    return {
+        row:{},
+        visible:false,
+      options1: options1,
+      options8: options8,
+      loading: false,
+      parmValue: {
+        good_name: "", //商品名称
+        spucode: "", //商品编号
+        cat_id: "", //商品分类
+        start: "", //开始日期
+        end: "", //结束日期
+        platform_code: "", //平台编码
+        is_stock: "", //是否库存品
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+        supplierNo: "", //供应商编号
+        good_type: "", //是否定制
+        brand_id: "", //品牌
+        companyNo: "", //业务企业编号
+        exam_status: "", //审核状态
+        plat_code: "", //平台商品编号
+        creater: "", //
+      },
+
+      // 表格 - 数据
+      tableData: [],
+      // 表格 - 参数
+      table: {
+        stripe: true,
+        border: true,
+        _defaultHeader_: ["setcol"],
+      },
+      // 表格 - 分页
+      pageInfo: {
+        size: 15,
+        curr: 1,
+        total: 0,
+      },
+      // 表格 - 列参数
+      columns: listCol,
+      cat_id: [],
+      brandid: [],
+      select: "1",
+      sinput: "",
+    };
+  },
+  mounted() {
+    this.cat_id = [];
+    this.brandid = [];
+    this.searchList();
+  },
+  methods: {
+    //打开弹窗
+      openDilog(row){
+          this.visible = true;
+          this.row = row
+          console.log(this.row)
+      },
+
+    restSearch() {
+      this.cat_id = [];
+      this.brandid = [];
+      // 表格 - 分页
+      this.pageInfo = {
+        size: 15,
+        curr: 1,
+        total: 0,
+      };
+      this.parmValue = {
+        good_name: "", //商品名称
+        spucode: "", //商品编号
+        cat_id: "", //商品分类
+        start: "", //开始日期
+        end: "", //结束日期
+        platform_code: "", //平台编码
+        is_stock: "", //是否库存品
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+        supplierNo: "", //供应商编号
+        good_type: "", //是否定制
+        brand_id: "", //品牌
+        companyNo: "", //业务企业编号
+        exam_status: "", //审核状态
+        plat_code: "", //平台商品编号
+        creater: "", //
+      };
+      this.searchList();
+    },
+    //商品品牌选择
+    async brandidsearchChange(e) {
+      const { id, code, label } = e;
+      if (id) {
+        this.brandid = [id];
+      } else {
+        this.brandid = [];
+      }
+      this.parmValue.brand_id = this.brandid.toString();
+      this.pageInfo.curr = 1;
+      this.parmValue.page = 1;
+      await this.searchList();
+    },
+    // 时间
+    async handleTime(e) {
+      this.parmValue.start = e.startTime || "";
+      this.parmValue.end = e.endTime || "";
+      if (
+        (this.parmValue.start !== "" && this.parmValue.end !== "") ||
+        (this.parmValue.start === "" && this.parmValue.end === "")
+      ) {
+        this.pageInfo.curr = 1;
+        this.parmValue.page = 1;
+        await this.searchList();
+      }
+    },
+    /**
+     * 商品重新上线
+     * @param {String} id id
+     * @param {String} status 0-禁用 1-启用
+     */
+    async get_againonline(skuCode) {
+      await this.$confirm(`确定要重新发起上线流程?`, {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          this.loading = true;
+          const model = {
+            skuCode: skuCode,
+          };
+          const res = await asyncRequest.againonline(model);
+          if (res && res.code === 0) {
+            this.loading = false;
+            this.$notify.success({
+              title: "重新发起上线流程成功!",
+              message: "",
+            });
+            await this.searchList();
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.loading = false;
+            this.$message.warning(res.message);
+          }
+        })
+        .catch(() => {
+          console.log("取消");
+        });
+    },
+    /**
+     * 商品下线
+     * @param {String} id id
+     * @param {String} status 0-禁用 1-启用
+     */
+    async get_donline(skuCode) {
+      await this.$confirm(`确定要下线商品?`, {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          this.loading = true;
+          const model = {
+            skuCode: skuCode,
+            exam_status: "8",
+          };
+          const res = await asyncRequest.status(model);
+          if (res && res.code === 0) {
+            this.loading = false;
+            this.$notify.success({
+              title: "下线商品成功!",
+              message: "",
+            });
+            await this.searchList();
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.loading = false;
+            this.$message.warning(res.message);
+          }
+        })
+        .catch(() => {
+          console.log("取消");
+        });
+    },
+    /**
+     * 启用/禁用
+     * @param {String} id id
+     * @param {String} status 0-禁用 1-启用
+     */
+    async changeStatus(id, status) {
+      await this.$confirm(`确定要改为${status === "1" ? "禁用" : "启用"}?`, {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          this.loading = true;
+          const model = {
+            id: id,
+            status: status === "1" ? "0" : "1",
+          };
+          const res = await asyncRequest.status(model);
+          if (res && res.code === 0) {
+            this.loading = false;
+            this.$notify.success({
+              title: "状态修改成功!",
+              message: "",
+            });
+            await this.searchList();
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.loading = false;
+            this.$message.warning(res.message);
+          }
+        })
+        .catch(() => {
+          console.log("取消");
+        });
+    },
+    async deleteItem(code) {
+      await this.$confirm("确定要删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          const model = {
+            codes: [code],
+          };
+          const res = await asyncRequest.delete(model);
+          if (res && res.code === 0) {
+            this.$notify.success({
+              title: "删除成功",
+              message: "",
+            });
+            this.searchList();
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        .catch(() => {
+          console.log("取消");
+        });
+    },
+    // 刷新表格
+    async searchList() {
+      this.loading = true;
+      let model = JSON.parse(JSON.stringify(this.parmValue));
+      model.good_name = this.select === "1" ? this.sinput : ""; //商品名称
+      model.spucode = this.select === "2" ? this.sinput : ""; //商品编号
+      // model.platform_code = this.select === "1" ? this.sinput : ""; //平台编码
+      // model.supplierNo = this.select === "1" ? this.sinput : ""; //供应商编号
+      model.companyNo = this.select === "5" ? this.sinput : ""; //业务企业编号
+      // model.exam_status = this.select === "1" ? this.sinput : ""; //审核状态
+      model.plat_code = this.select === "6" ? this.sinput : ""; //平台商品编号
+      model.creater = this.select === "7" ? this.sinput : ""; //
+      const res = await asyncRequest.list(model);
+      if (res && res.code === 0 && res.data) {
+        this.tableData = res.data.list;
+        this.tableData.forEach((a) => {
+          a.cat_name = "";
+          let list = a.cat_info || [];
+          list.forEach((b, i) => {
+            a.cat_name += i == 0 ? b.name : "/" + b.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;
+    },
+    //商品分类选择
+    async goods_class_change(e) {
+      this.cat_id = e;
+      this.parmValue.cat_id =
+        this.cat_id.length === 0 ? "" : this.cat_id[this.cat_id.length - 1];
+      this.pageInfo.curr = 1;
+      this.parmValue.page = 1;
+      await this.searchList();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+/deep/ .el-dialog{
+  width: 1024px;
+}
+</style>
+

+ 0 - 0
src/views/goodStore/goodsRepertory/商品库存查询