peng
2025-09-11 30dbe5b15902d90a5ca41e77ccd7d399d6c9578d
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"
@@ -106,6 +112,22 @@
          </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="二维码"
@@ -180,9 +202,13 @@
</template>
<script>
import { getGoodsListData, upGoods, lowGoods ,getGoodsFirstSkuId ,goodsSort} 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,
@@ -195,6 +221,19 @@
        sort:0
      },
      showSort:false,
      tagForm:{
        selectTagIds:[],
        goodsId:'',
        createType:'MANAGER',
      },
      selectLoading: false,
      options: [],
      showUpdateTag:false,
      showGeneralQrCode:false,
      QRCodeUrl:'',
      codeUrl: this.QRcodeBaseUrl+ '/scanpage/goods',
@@ -349,6 +388,7 @@
                      marginRight: "5px",
                    },
                    props: {
                      type: "info",
                      size: "small",
                    },
                    on: {
@@ -358,6 +398,24 @@
                    },
                  },
                  "生成二维码"
                ),
                h(
                  "Button",
                  {
                    style: {
                      marginLeft: "5px",
                      marginTop: "5px",
                    },
                    props: {
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.openTagsModal(params.row);
                      },
                    },
                  },
                  "编辑标签"
                )
              ]);
            } else {
@@ -428,6 +486,23 @@
                    },
                  },
                  "设置商品排序"
                ),h(
                  "Button",
                  {
                    style: {
                      marginLeft: "5px",
                      marginTop: "5px",
                    },
                    props: {
                      size: "small",
                    },
                    on: {
                      click: () => {
                        this.openTagsModal(params.row);
                      },
                    },
                  },
                  "编辑标签"
                )
              ]);
            }
@@ -456,6 +531,56 @@
      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;
@@ -566,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>