| | |
| | | icon="ios-search" |
| | | >搜索</Button |
| | | > |
| | | <Button |
| | | @click="queryExportGoods" |
| | | class="search-btn" |
| | | type="primary" |
| | | >导出商品清单</Button |
| | | > |
| | | </Form> |
| | | <Table |
| | | :loading="loading" |
| | |
| | | <template slot="goodsSlot" slot-scope="{ row }"> |
| | | <div style="margin: 5px 0px; height: 80px; display: flex"> |
| | | <div style=""> |
| | | <img |
| | | <img v-if="row.original" |
| | | :src="row.original" |
| | | style="height: 60px; margin-top: 1px; width: 60px" |
| | | /> |
| | | <video v-else |
| | | :src="row.goodsVideo" style="height: 60px; margin-top: 1px; width: 60px" |
| | | /> |
| | | </div> |
| | | |
| | | <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" |
| | |
| | | > |
| | | </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, |
| | |
| | | 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, // 添加或编辑显示 |
| | |
| | | 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" } }, "其他类型"); |
| | | } |
| | |
| | | key: "action", |
| | | align: "center", |
| | | fixed: "right", |
| | | width: 150, |
| | | width: 400, |
| | | render: (h, params) => { |
| | | if (params.row.marketEnable == "DOWN") { |
| | | return h("div", [ |
| | |
| | | h( |
| | | "Button", |
| | | { |
| | | style: { |
| | | marginRight: "5px", |
| | | }, |
| | | props: { |
| | | size: "small", |
| | | }, |
| | |
| | | }, |
| | | "查看" |
| | | ), |
| | | 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", [ |
| | |
| | | h( |
| | | "Button", |
| | | { |
| | | style: { |
| | | marginRight: "5px", |
| | | }, |
| | | props: { |
| | | size: "small", |
| | | }, |
| | |
| | | }, |
| | | "查看" |
| | | ), |
| | | 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); |
| | | }, |
| | | }, |
| | | }, |
| | | "编辑标签" |
| | | ) |
| | | ]); |
| | | } |
| | | }, |
| | |
| | | }; |
| | | }, |
| | | 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(); |
| | |
| | | this.loading = false; |
| | | if (res.success) { |
| | | this.data = res.result.records; |
| | | getSts().then(res => { |
| | | const endpoint = res.data.endpoint |
| | | this.data.forEach(item => { |
| | | if (item.goodsVideo != null && item.goodsVideo.indexOf('http')===-1) { |
| | | item.goodsVideo = endpoint + '/' + item.goodsVideo; |
| | | } |
| | | if (item.original !=null && item.original.indexOf('http') ===-1) { |
| | | item.original = endpoint + '/' + item.original; |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | this.total = res.result.total; |
| | | } |
| | | }); |
| | |
| | | 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> |