peng
2025-09-10 bd26bb7a8827d792e84e05ac2ebd6e81aad82873
manager/src/views/goods/goods-info/goods.vue
@@ -76,6 +76,12 @@
          icon="ios-search"
          >搜索</Button
        >
        <Button
          @click="queryExportGoods"
          class="search-btn"
          type="primary"
        >导出商品清单</Button
        >
      </Form>
      <Table
        :loading="loading"
@@ -100,30 +106,47 @@
            <div style="margin-left: 13px">
              <div class="div-zoom">
                <a @click="linkTo(row.id, row.skuId)">{{ row.goodsName }}</a>
                {{ row.goodsName }}
              </div>
              <Poptip trigger="hover" title="扫码在手机中查看" transfer>
                <div slot="content">
                  <vue-qr
                    :text="wapLinkTo(row.id, row.skuId)"
                    :margin="0"
                    colorDark="#000"
                    colorLight="#fff"
                    :size="150"
                  ></vue-qr>
                </div>
                <img
                  src="../../../assets/qrcode.svg"
                  class="hover-pointer"
                  width="20"
                  height="20"
                  alt=""
                />
              </Poptip>
            </div>
          </div>
        </template>
      </Table>
      <Modal
        v-model="showUpdateTag"
        title="标签"
        width="800"
        :mask-closable="false"
      >
        <Select v-model="tagForm.selectTagIds" multiple filterable :loading="selectLoading" style="width:200px;">
          <Option v-for="item in options" :key="item.id" :label="item.tagName" :value="item.id"></Option>
        </Select>
        <div slot="footer">
          <Button type="error" @click="saveTag">保存</Button>
          <!--          <Button type="primary" @click="generalQrCode">确认</Button>-->
        </div>
      </Modal>
      <Modal
        v-model="showGeneralQrCode"
        title="二维码"
        width="800"
        :mask-closable="false"
        :loading="codeLoading"
      >
        <vue-qr
          :text="QRCodeUrl"
          :margin="0"
          colorDark="#000"
          colorLight="#fff"
          :size="150"
        ></vue-qr>
        <div slot="footer">
          <Button type="text" @click="closeGeneralQrCode">关闭</Button>
          <!--          <Button type="primary" @click="generalQrCode">确认</Button>-->
        </div>
      </Modal>
      <Row type="flex" justify="end" class="mt_10">
        <Page
          :current="searchForm.pageNumber"
@@ -157,13 +180,35 @@
        >
      </div>
    </Modal>
    <Modal
      title="设置商品排序"
      v-model="showSort"
      :mask-closable="false"
      :width="500"
    >
      <Form ref="underForm" :model="sortForm" :label-width="100">
        <FormItem label="商品排序" prop="reason">
          <InputNumber v-model="sortForm.sort" :min="0" :max="999" clearable style="width: 100%" />
        </FormItem>
      </Form>
      <div slot="footer">
        <Button type="text" @click="showSort= false">取消</Button>
        <Button type="primary" :loading="submitLoading" @click="submitSort"
        >提交</Button
        >
      </div>
    </Modal>
  </div>
</template>
<script>
import { getGoodsListData, upGoods, lowGoods } from "@/api/goods";
import { getGoodsListData, upGoods, lowGoods ,getGoodsFirstSkuId,queryExportGoods,goodsSort } from "@/api/goods";
import {getSts} from '@/api/file'
import vueQr from "vue-qr";
import {getTags} from "@/api/tag";
import {addOrUpDateTag,getGoodSTagById} from "@/api/goods-tag"
export default {
  components: {
    "vue-qr": vueQr,
@@ -171,6 +216,29 @@
  name: "goods",
  data() {
    return {
      sortForm:{
        goodsId:'',
        sort:0
      },
      showSort:false,
      tagForm:{
        selectTagIds:[],
        goodsId:'',
        createType:'MANAGER',
      },
      selectLoading: false,
      options: [],
      showUpdateTag:false,
      showGeneralQrCode:false,
      QRCodeUrl:'',
      codeUrl: this.QRcodeBaseUrl+ '/scanpage/goods',
      codeLoading:false,
      id: "", //要操作的id
      loading: true, // 表单加载状态
      modalVisible: false, // 添加或编辑显示
@@ -216,6 +284,8 @@
              return h("Tag", { props: { color: "orange" } }, "零售");
            } else if (params.row.salesModel === "WHOLESALE") {
              return h("Tag", { props: { color: "magenta" } }, "批发");
            } else if (params.row.salesModel === "PRESALE") {
              return h("Tag", { props: { color: "magenta" } }, "预售");
            } else {
              return h("Tag", { props: { color: "volcano" } }, "其他类型");
            }
@@ -272,7 +342,7 @@
          key: "action",
          align: "center",
          fixed: "right",
          width: 150,
          width: 400,
          render: (h, params) => {
            if (params.row.marketEnable == "DOWN") {
              return h("div", [
@@ -297,6 +367,9 @@
                h(
                  "Button",
                  {
                    style: {
                      marginRight: "5px",
                    },
                    props: {
                      size: "small",
                    },
@@ -308,6 +381,42 @@
                  },
                  "查看"
                ),
                h(
                  "Button",
                  {
                    style: {
                      marginRight: "5px",
                    },
                    props: {
                      type: "info",
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.generalQrCode(params.row);
                      },
                    },
                  },
                  "生成二维码"
                ),
                h(
                  "Button",
                  {
                    style: {
                      marginLeft: "5px",
                      marginTop: "5px",
                    },
                    props: {
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.openTagsModal(params.row);
                      },
                    },
                  },
                  "编辑标签"
                )
              ]);
            } else {
              return h("div", [
@@ -332,6 +441,9 @@
                h(
                  "Button",
                  {
                    style: {
                      marginRight: "5px",
                    },
                    props: {
                      size: "small",
                    },
@@ -343,6 +455,55 @@
                  },
                  "查看"
                ),
                h(
                  "Button",
                  {
                    style: {
                      marginRight: "5px",
                    },
                    props: {
                      type: "error",
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.generalQrCode(params.row);
                      },
                    },
                  },
                  "生成二维码"
                ),                h(
                  "Button",
                  {
                    props: {
                      type: "error",
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.goodsSort(params.row);
                      },
                    },
                  },
                  "设置商品排序"
                ),h(
                  "Button",
                  {
                    style: {
                      marginLeft: "5px",
                      marginTop: "5px",
                    },
                    props: {
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.openTagsModal(params.row);
                      },
                    },
                  },
                  "编辑标签"
                )
              ]);
            }
          },
@@ -353,6 +514,93 @@
    };
  },
  methods: {
    cancelSort(){
      console.log('点击了取消')
      this.showSort = false;
    },
   async submitSort(){
    const response =  await goodsSort(this.sortForm)
    console.log(response)
     this.showSort = false;
     this.getDataList();
    },
    goodsSort(row){
      // this.sortForm = {
      //
      // }
      this.sortForm.goodsId = row.id;
      this.sortForm.sort = row.goodsSort
      this.showSort = true;
    },
    saveTag(){
      this.showUpdateTag = false;
      const form = {
        tagIds:this.tagForm.selectTagIds,
        createType:this.tagForm.createType,
        goodsId:this.tagForm.goodsId
      }
      addOrUpDateTag(form).then(res =>{
        console.log(res)
      })
    },
    openTagsModal(row){
      this.showUpdateTag = true;
      this.tagForm.selectTagIds = [];
      this.tagForm.goodsId = "";
      getGoodSTagById(row.id).then(res =>{
        if(res.code === 200){
          this.tagForm.goodsId = row.id;
          res.data.forEach(item =>{
            this.tagForm.selectTagIds.push(item.tagId);
          })
        }
        console.log(this.tagForm)
      })
    },
    queryExportGoods(){
        queryExportGoods(this.searchForm).then(res =>{
          const blob = new Blob([res], {
            type: "application/vnd.ms-excel;charset=utf-8",
          });
          //对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性
          //IE10以上支持blob但是依然不支持download
          if ("download" in document.createElement("a")) {
            //支持a标签download的浏览器
            const link = document.createElement("a"); //创建a标签
            link.download = "商品清单.xlsx"; //a标签添加属性
            link.style.display = "none";
            link.href = URL.createObjectURL(blob);
            document.body.appendChild(link);
            link.click(); //执行下载
            URL.revokeObjectURL(link.href); //释放url
            document.body.removeChild(link); //释放标签
          } else {
            navigator.msSaveBlob(blob, fileName);
          }
        })
    },
    closeGeneralQrCode(){
      this.showGeneralQrCode = false;
    },
    generalQrCode(row){
      this.QRCodeUrl = '';
      this.showGeneralQrCode = true
      this.codeLoading = true;
      //获得商品对应的第一个skuid
      getGoodsFirstSkuId(row.id).then(res =>{
        this.codeLoading = false;
        if (res.code){
          this.QRCodeUrl = this.codeUrl + "?id="+ res.result +"&goodsId=" + row.id
        }
      })
    },
    // 初始化数据
    init() {
      this.getDataList();
@@ -443,9 +691,24 @@
        query: { id: id },
      })
    },
    remoteMethod(query) {
      this.selectLoading = true;
      var params = {
        "tagTypeKey": "GOODS",
        "pageNumber": 1,
        "pageSize": 500
      }
      getTags(params).then(res => {
        this.options = res.data;
        this.selectLoading = false;
      });
    },
  },
  mounted() {
    this.init();
    this.remoteMethod("")
  },
};
</script>