Commit 3d5918c8 authored by 王伟's avatar 王伟

发布商品

parent d23b951c
...@@ -9,16 +9,15 @@ ...@@ -9,16 +9,15 @@
<label>{{ title }}</label> <label>{{ title }}</label>
</div> </div>
<base-info :data="form.baseInfo" :isDetail="isDetail" :isEdit="isEdit" :isAgain="isAgain"/> <base-info :data="form.baseInfo" :isDetail="isDetail" :isEdit="isEdit" :isAgain="isAgain"/>
<!-- <sale-info <decipt-info :data="form.deciptInfo" :isDetail="isDetail" :status="status"/>
<sale-info
:data="form.saleInfo" :data="form.saleInfo"
:isDetail="isDetail" :isDetail="isDetail"
:isEdit="isEdit" :isEdit="isEdit"
:isAgain="isAgain" :isAgain="isAgain"
:isSelf="isSelf" :isSelf="isSelf"
:status="status" :status="status"
v-if="form.baseInfo.type!=6 && form.baseInfo.type!=5" />
/> -->
<decipt-info :data="form.deciptInfo" :isDetail="isDetail" :status="status"/>
<info-con title="资源信息" class="base-info-con" v-if="form.baseInfo.type==5"> <info-con title="资源信息" class="base-info-con" v-if="form.baseInfo.type==5">
<div class="series-info"> <div class="series-info">
<label class="label">打包价格:</label> <label class="label">打包价格:</label>
...@@ -91,7 +90,7 @@ ...@@ -91,7 +90,7 @@
<Input v-model="form.packageDTO.stock" :disabled='isDetail' placeholder="请输入库存" style="width: 400px" @on-blur="stockBlur(form.packageDTO.stock)"/> <Input v-model="form.packageDTO.stock" :disabled='isDetail' placeholder="请输入库存" style="width: 400px" @on-blur="stockBlur(form.packageDTO.stock)"/>
</div> </div>
</info-con> </info-con>
<info-con title="规格信息" class="base-info-con" v-if="form.baseInfo.type==6"> <!-- <info-con title="规格信息" class="base-info-con" v-if="form.baseInfo.type==6">
<div class="series-info"> <div class="series-info">
<label class="label">商品价格:</label> <label class="label">商品价格:</label>
<Input v-model="form.nftdto.price" :readonly="isDetail" placeholder="请输入商品价格" style="width: 400px" /> <Input v-model="form.nftdto.price" :readonly="isDetail" placeholder="请输入商品价格" style="width: 400px" />
...@@ -133,7 +132,7 @@ ...@@ -133,7 +132,7 @@
> >
</Select> </Select>
</div> </div>
</info-con> </info-con> -->
<info-con title="销售信息:" class="base-info-con"> <info-con title="销售信息:" class="base-info-con">
<div class="series-info" v-if="(form.baseInfo.type==1||form.baseInfo.type==3)&&form.saleInfo.commodityPass!=0"> <div class="series-info" v-if="(form.baseInfo.type==1||form.baseInfo.type==3)&&form.saleInfo.commodityPass!=0">
<label class="label">是否允许延后提货:</label> <label class="label">是否允许延后提货:</label>
...@@ -308,7 +307,13 @@ export default { ...@@ -308,7 +307,13 @@ export default {
saleInfo: { saleInfo: {
sku: [], sku: [],
imgObj: {}, imgObj: {},
commodityPass: '' commodityPass: '',
number: '', // 发行数量:只有商户选择“可拷贝”时,才会出现
price: '', // 商品价格
type: '', // NFT类型(1.单个,不可考贝 2.可拷贝)
tzType: '', // 1.内部发行 2.外部绑定
tokenId: '', // 绑定的外部通证id
salesType: ''// 销售模式
// statu:this.status // statu:this.status
}, },
deciptInfo: { deciptInfo: {
...@@ -355,7 +360,6 @@ export default { ...@@ -355,7 +360,6 @@ export default {
tzType: '', // 1.内部发行 2.外部绑定 tzType: '', // 1.内部发行 2.外部绑定
tokenId: '' // 绑定的外部通证id tokenId: '' // 绑定的外部通证id
} }
}, },
skuNumber: '', skuNumber: '',
loading: true, loading: true,
...@@ -1096,7 +1100,7 @@ export default { ...@@ -1096,7 +1100,7 @@ export default {
}, },
mounted () { mounted () {
this.getNftList() // this.getNftList()
this.requestOptionData() this.requestOptionData()
this.initData() this.initData()
this.getDelayDelivery() this.getDelayDelivery()
......
<template> <template>
<info-con title="规格信息:" class="sale-info-con"> <info-con title="规格信息:" class="sale-info-con">
<div <!-- <div
class="item" class="item"
v-for="(pItem, pIndex) of propList" v-for="(pItem, pIndex) of propList"
:key="'prop-item-' + pIndex" :key="'prop-item-' + pIndex"
...@@ -56,30 +56,78 @@ ...@@ -56,30 +56,78 @@
@click="delProp(pIndex)" @click="delProp(pIndex)"
v-if="!isDetail && !isEdit" v-if="!isDetail && !isEdit"
/> />
</div> </div> -->
<div class="item"> <!-- <div class="item">
<div class="empty" /> <div class="empty" />
<div class="opt-btn" v-if="!isDetail && !isEdit"> <div class="opt-btn" v-if="!isDetail && !isEdit">
<Button type="info" @click="addProp" v-show="propList.length < 3" <Button type="info" @click="addProp" v-show="propList.length < 3"
>+ 添加属性</Button >+ 添加属性</Button
> >
</div> </div>
</div> -->
<div class="item">
<label class="label">销售模式:</label>
<RadioGroup v-model="data.salesType">
<Radio :label="1" style="width:200px" :disabled="isDetail || isEdit">普通</Radio>
<Radio :label="2" style="width:200px" :disabled="isDetail || isEdit">盲盒</Radio>
</RadioGroup>
</div>
<div class="item">
<label class="label">商品价格:</label>
<Input v-model="data.price" :readonly="isDetail" placeholder="请输入商品价格" style="width: 400px" />
</div> </div>
<div class="item"> <div class="item">
<label class="label">商品通证:</label> <label class="label">商品通证:</label>
<RadioGroup v-model="data.tzType" @on-change="changeTzType">
<Radio label="1" :disabled="isDetail||isEdit||isAgain" style="width:200px;">内部发行</Radio>
<Radio label="2" :disabled="isDetail||isEdit||isAgain" style="width:200px;">外部绑定</Radio>
</RadioGroup>
</div>
<div class="item" v-if="data.tzType==1">
<label class="label">NFT类型:</label>
<RadioGroup v-model="data.type" @on-change="changeType">
<Radio label="1" :disabled="isDetail||isEdit||isAgain" style="width:200px;">单个,不可拷贝</Radio>
<Radio label="2" :disabled="isDetail||isEdit||isAgain" style="width:200px;">可拷贝</Radio>
</RadioGroup>
</div>
<div class="item" v-if="data.type==2">
<label class="label">发行数量:</label>
<Input v-model="data.number" :readonly="isDetail||isEdit||isAgain" placeholder="请输入发行数量,正整数" style="width: 400px" />
</div>
<div class="item" v-if="data.tzType==2">
<label class="label">绑定NFT:</label>
<Input v-model="data.tokenId" v-if="isDetail||isEdit||isAgain" :readonly="isDetail||isEdit||isAgain" style="width: 400px" />
<Select
v-else
placeholder="请选择NFT TOKENID"
transfer
v-model="data.tokenId"
style="width: 200px"
>
<Option
:value="item.labelName"
v-for="(item, index) of nftList"
:key="`rate-option-${index}`"
@click.native="handleNFT(item)"
>{{ item.labelName }}</Option
>
</Select>
</div>
<!-- <div class="item">
<label class="label">商品通证:</label>
<RadioGroup v-model="data.commodityPass"> <RadioGroup v-model="data.commodityPass">
<!-- <Radio :label="0" style="width:200px" :disabled="isDetail || isEdit"></Radio> --> <Radio :label="0" style="width:200px" :disabled="isDetail || isEdit"></Radio>
<Radio :label="1" style="width:200px" :disabled="isDetail || isEdit">是,自动生成Token</Radio> <Radio :label="1" style="width:200px" :disabled="isDetail || isEdit">是,自动生成Token</Radio>
<Radio :label="2" style="width:200px" :disabled="isDetail || isEdit">是,使用外部既有Token</Radio> <Radio :label="2" style="width:200px" :disabled="isDetail || isEdit">是,使用外部既有Token</Radio>
</RadioGroup> </RadioGroup>
</div> </div> -->
<div class="item" style="text-align:center"> <div class="item" style="text-align:center">
<Button type="primary" style="margin:auto" @click="genSkuTable">生成价目表</Button> <Button type="primary" style="margin:auto" @click="genSkuTable">生成价目表</Button>
</div> </div>
<div class="tip" v-if="!isDetail && !isEdit"> <!-- <div class="tip" v-if="!isDetail && !isEdit">
提示:如修改上述基本属性后,需重新生成价目表!缩略图建议尺寸100 * 提示:如修改上述基本属性后,需重新生成价目表!缩略图建议尺寸100 *
100,大小不得超过6MB 100,大小不得超过6MB
</div> </div> -->
<Table v-if="showTable" border :columns="columns" :data="data.sku"> <Table v-if="showTable" border :columns="columns" :data="data.sku">
<template slot-scope="{ row, index }" slot="originalPrice"> <template slot-scope="{ row, index }" slot="originalPrice">
<span v-if="isDetail">{{ row.originalPrice }}</span> <span v-if="isDetail">{{ row.originalPrice }}</span>
...@@ -176,24 +224,28 @@ ...@@ -176,24 +224,28 @@
<Button type="error" size="small" @click="delSku(index)">删除</Button> <Button type="error" size="small" @click="delSku(index)">删除</Button>
</template> </template>
</Table> </Table>
<div class="item" style="margin-top:40px;">
<label class="label">难度系数:</label>
<Slider v-model="value" :tip-format="format" style="width:500px;"></Slider>
</div>
</info-con> </info-con>
</template> </template>
<script> <script>
import InfoCon from './info-con' import InfoCon from './info-con'
import FileUpload from '_c/file-upload' import FileUpload from '_c/file-upload'
import config from '@/config'
import axios from 'axios'
const baseUrl =
process.env.NODE_ENV === 'development'
? config.baseUrl.dev
: config.baseUrl.pro
export default { export default {
props: { props: {
data: { data: {
type: Object, // type: Object,
default: { sku: [] }, default: { sku: [] },
commodityPass: '' commodityPass: '',
number: '', // 发行数量:只有商户选择“可拷贝”时,才会出现
price: '', // 商品价格
type: '', // NFT类型(1.单个,不可考贝 2.可拷贝)
tzType: '', // 1.内部发行 2.外部绑定
tokenId: '', // 绑定的外部通证id
salesType: ''// 销售模式
}, },
isDetail: { isDetail: {
type: Boolean, type: Boolean,
...@@ -203,10 +255,6 @@ export default { ...@@ -203,10 +255,6 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
// isSelf: {
// type: Boolean,
// default: false
// },
isAgain: { isAgain: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -229,8 +277,10 @@ export default { ...@@ -229,8 +277,10 @@ export default {
}], }],
name: '', name: '',
tokenNumber: '', tokenNumber: '',
numberStock: '' numberStock: '',
// rateList: [3, 4, 5, 6, 9, 10, 11, 13] // rateList: [3, 4, 5, 6, 9, 10, 11, 13],
value: 3,
nftList: []
} }
}, },
computed: { computed: {
...@@ -241,6 +291,7 @@ export default { ...@@ -241,6 +291,7 @@ export default {
mounted () { mounted () {
this.genPropList(this.data.sku) this.genPropList(this.data.sku)
this.genColumn() this.genColumn()
this.getNftList()
if (!this.platform) { if (!this.platform) {
this.getMerchantPrefixInfo() this.getMerchantPrefixInfo()
} }
...@@ -262,6 +313,27 @@ export default { ...@@ -262,6 +313,27 @@ export default {
}) })
}, },
methods: { methods: {
changeTzType () {
this.data.type = ''
this.data.number = ''
this.data.tokenId = ''
},
changeType () {
this.data.number = ''
},
getNftList () {
// 获取外部NFT
this.api({
apiName: 'externnftlist',
success: (res) => {
// console.log('333', this.nftList)
this.nftList = res.data
}
})
},
format (val) {
return '难度系数: ' + val + '%'
},
getMoreParams (val, index) { getMoreParams (val, index) {
val = JSON.parse(val) val = JSON.parse(val)
this.tokenNumber = val.availableNumber this.tokenNumber = val.availableNumber
...@@ -342,36 +414,6 @@ export default { ...@@ -342,36 +414,6 @@ export default {
delSku (index) { delSku (index) {
this.data.sku.splice(index, 1) this.data.sku.splice(index, 1)
}, },
exportCer (row) {
if (row.stock == 0) {
return this.$Notice.warning({ title: '当前库存为0,无法导出!' })
}
let skuId = row.skuId
axios({
method: 'GET',
url: `${baseUrl}/goods/exportCert`,
params: { skuId },
responseType: 'blob'
}).then((res) => {
let content = res.data
let blob = new Blob([content])
let fileName = 'test.xls'
if ('download' in document.createElement('a')) {
let link = document.createElement('a')
link.download = fileName
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(link.href)
document.body.removeChild(link)
} else {
navigator.msSaveBlob(blob, fileName)
}
})
},
genPropList (sku) { genPropList (sku) {
if (sku && sku.length !== 0) { if (sku && sku.length !== 0) {
let propHashTable = {} let propHashTable = {}
...@@ -401,83 +443,83 @@ export default { ...@@ -401,83 +443,83 @@ export default {
}, },
genSkuTable () { genSkuTable () {
let check = true // let check = true
let title = '' // let title = ''
if (!this.propList || this.propList.length === 0) { // if (!this.propList || this.propList.length === 0) {
check = false // check = false
title = '请添加属性!' // title = '请添加属性!'
} // }
let propNameHashTable = {} // let propNameHashTable = {}
this.propList.find((pItem) => { // this.propList.find((pItem) => {
let propName = pItem.name // let propName = pItem.name
if (!propName) { // if (!propName) {
title = '属性名称不能为空!' // title = '属性名称不能为空!'
check = false // check = false
return true // return true
} // }
if (propNameHashTable[propName]) { // if (propNameHashTable[propName]) {
title = '属性名称不能重复!' // title = '属性名称不能重复!'
check = false // check = false
return true // return true
} // }
if ( // if (
[ // [
'originalPrice', // 'originalPrice',
'stock', // 'stock',
'coinName', // 'coinName',
'image', // 'image',
'imageList', // 'imageList',
'defaultImgList', // 'defaultImgList',
'propertyList' // 'propertyList'
].includes(propName) // ].includes(propName)
) { // ) {
title = '属性名称不符合规范!' // title = '属性名称不符合规范!'
check = false // check = false
return true // return true
} // }
propNameHashTable[propName] = true // propNameHashTable[propName] = true
if (!pItem.valList || pItem.valList.length === 0) { // if (!pItem.valList || pItem.valList.length === 0) {
title = '属性值不能为空!' // title = '属性值不能为空!'
check = false // check = false
return true // return true
} // }
pItem.valList.find((vItem) => { // pItem.valList.find((vItem) => {
if (!vItem.val) { // if (!vItem.val) {
title = '属性值不能为空!' // title = '属性值不能为空!'
check = false // check = false
return true // return true
} // }
}) // })
for (var i = 0; i < pItem.valList.length - 1; i++) { // for (var i = 0; i < pItem.valList.length - 1; i++) {
for (var j = i + 1; j < pItem.valList.length; j++) { // for (var j = i + 1; j < pItem.valList.length; j++) {
if (pItem.valList[i].val === pItem.valList[j].val) { // if (pItem.valList[i].val === pItem.valList[j].val) {
title = '属性值不能重复!' // title = '属性值不能重复!'
check = false // check = false
return true // return true
} // }
} // }
} // }
}) // })
if (!check) { // if (!check) {
this.$Notice.warning({ title }) // this.$Notice.warning({ title })
} else { // } else {
// console.log(typeof this.data.commodityPass) // // console.log(typeof this.data.commodityPass)
if (typeof this.data.commodityPass !== 'number') { // if (typeof this.data.commodityPass !== 'number') {
return this.$Notice.warning({ title: '请先选择商品通证' }) // return this.$Notice.warning({ title: '请先选择商品通证' })
} // }
this.genColumn() this.genColumn()
this.genSku() this.genSku()
this.showTable = true this.showTable = true
} // }
}, },
genColumn () { genColumn () {
let columns = [] let columns = []
this.propList.forEach((pItem) => { this.propList.forEach((pItem) => {
columns.push({ columns.push({
title: pItem.name, title: '规格名称',
minWidth: 120, minWidth: 120,
key: pItem.name, slot: 'name',
align: 'center' align: 'center'
}) })
}) })
......
...@@ -45,11 +45,9 @@ module.exports = { ...@@ -45,11 +45,9 @@ module.exports = {
pathRewrite: { pathRewrite: {
'^/root': '/' '^/root': '/'
}, },
// target: 'http://146.56.197.85:12023',
// target: 'http://172.22.17.174:8088' target: 'http://172.22.17.174:8088'
target: 'http://172.22.17.108:8088' // target: 'http://172.22.17.108:8088'
// target: 'http://10.144.38.159:8088'
// target: 'http://10.144.156.186:8088'
}, },
'/contact': { '/contact': {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment