Commit 48f6ef1f authored by verestrasz's avatar verestrasz

update

parent 8c210e14
// 类目-列表查询
export const helpCategoryList = {
url: '/help/category/list',
method: 'GET',
dealReqData: ({ pageNum, pageSize }) => {
return { pageNum, pageSize }
}
}
// 类目-列表查询
export const helpInfoList = {
url: '/help/info/list',
method: 'GET',
dealReqData: ({ pageNum, pageSize, keyWord }) => {
return { pageNum, pageSize, keyWord }
}
}
// 帮助中心-帮助-新增
export const addHelp = {
url: '/help/info/save',
method: 'POST',
dealReqData: (saveDTO) => {
return saveDTO
}
}
// 帮助中心-帮助-新增
export const addCategory = {
url: '/help/category/save',
method: 'POST',
dealReqData: (saveDTO) => {
return saveDTO
}
}
// 帮助中心-帮助-主键查询
export const searchInfoId = {
url: `/help/info`,
method: 'GET',
dealUrl: (url, infoId) => {
return `${url}/${infoId}`
}
}
// 帮助中心-帮助-删除
export const deleteInfoId = {
url: `/help/info/delete`,
method: 'DELETE',
dealUrl: (url, infoId) => {
return `${url}/${infoId}`
}
}
// 帮助中心-帮助-编辑
export const updateHelp = {
url: '/help/info/update',
method: 'PUT',
dealReqData: ({ detail, helpCategoryId, infoId, title, updateTime }) => {
return { detail, helpCategoryId, infoId, title, updateTime }
}
}
......@@ -79,7 +79,8 @@ export default {
vKey: ''
},
codeSrc: '',
appid: '2094772907',
// appid: '2094772907',
appid: '2031161403',
loginLoading: false
}
},
......
......@@ -120,25 +120,50 @@ export const TradTypeObj = {
[TradType.GoodsSales]: '商品销售',
[TradType.GoodsRefund]: '商品退货'
}
export const ShopType = {
export const SalesType = {
ORDINARY: 1,
PRE_SALE: 2,
AUCTION: 3,
PACK: 5,
NFT: 6
BLINDBOX: 4,
FREE: 5
}
export const ShopTypeObj = {
[ShopType.ORDINARY]: {
export const SalesTypeObj = {
[SalesType.ORDINARY]: {
label: '普通',
color: 'default'
},
[ShopType.PRE_SALE]: {
[SalesType.PRE_SALE]: {
label: '预售',
color: 'default'
},
[ShopType.AUCTION]: {
label: '竞拍',
[SalesType.AUCTION]: {
label: '拍卖',
color: 'default'
},
[SalesType.BLINDBOX]: {
label: '盲盒',
color: 'default'
},
[SalesType.FREE]: {
label: '免费领取',
color: 'default'
}
}
export const ShopType = {
ORDINARY: 1,
FICTITIOUS: 2,
PACK: 3,
NFT: 4
}
export const ShopTypeObj = {
[ShopType.ORDINARY]: {
label: '普通',
color: 'default'
},
[ShopType.FICTITIOUS]: {
label: '虚拟',
color: 'default'
},
[ShopType.PACK]: {
......
export function deepCopy (oldObj) {
let typeString = obj => {
var cons = Object.prototype.toString.call(obj).slice(8, -1)
return (cons === 'Array' || cons === 'Object')
}
if (typeString(oldObj)) {
var newObj = oldObj.constructor()
for (let i in oldObj) {
if (oldObj.hasOwnProperty(i)) {
newObj[i] = typeString(oldObj[i]) ? deepCopy(oldObj[i]) : oldObj[i]
}
}
return newObj
} else {
return oldObj
}
}
......@@ -3,8 +3,8 @@
<div class="item">
<label class="label">商品通证:</label>
<!-- <RadioGroup v-model="data.useNft">
<Radio label="0" :disabled="isDetail || isEdit || isAgain" class="ivu-radio"></Radio>
<Radio label="1" :disabled="isDetail || isEdit || isAgain" class="ivu-radio"></Radio>
<Radio label="0" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio"></Radio>
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio"></Radio>
</RadioGroup> -->
<span>{{data.coinName}}</span>
</div>
......@@ -23,13 +23,12 @@
</div>
<div class="item">
<label class="label">商品类型:</label>
<RadioGroup v-model="data.type">
<!-- <Radio label="1" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">普通</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">虚拟(不支持提货)</Radio> -->
<!-- <Radio label="3" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">打包</Radio> -->
<!-- <Radio label="5" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">打包</Radio> -->
<!-- <Radio label="6" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">NFT</Radio> -->
<span style="font-size:15px;">NFT</span>
<RadioGroup v-model="data.type" :readonly="isDetail || isEdit">
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">普通</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">虚拟(不支持提货)</Radio>
<!-- <Radio label="3" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">打包</Radio> -->
<!-- <Radio label="5" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">打包</Radio> -->
<!-- <Radio label="6" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">NFT</Radio> -->
</RadioGroup>
</div>
<div class="item">
......@@ -39,7 +38,7 @@
:rows="5"
placeholder="请填写商品描述"
v-model="data.description"
:readonly="isDetail||isEdit"
:readonly="isDetail"
:maxlength="250"
/>
</div>
......@@ -100,15 +99,15 @@
<!-- <div class="item">
<label class="label">应用NFT:</label>
<RadioGroup v-model="data.useNft">
<Radio label="0" :disabled="isDetail || isEdit || isAgain" class="ivu-radio"></Radio>
<Radio label="1" :disabled="isDetail || isEdit || isAgain" class="ivu-radio"></Radio>
<Radio label="0" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio"></Radio>
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio"></Radio>
</RadioGroup>
</div> -->
<!-- <div class="item">
<label class="label">正品认证:</label>
<RadioGroup v-model="data.type">
<Radio label="1" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">申请</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">不申请</Radio>
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">申请</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">不申请</Radio>
</RadioGroup>
</div> -->
</info-con>
......@@ -143,6 +142,10 @@ export default {
isAgain: {
type: Boolean,
default: false
},
isDraft: {
type: Boolean,
default: false
}
},
data () {
......
......@@ -9,13 +9,13 @@
:maxNum="5"
v-model="data.detailPictures"
:defaultList="data.defaultDetailPicture"
:readonly="isDetail"
:readonly="isDetail "
showWatch
/>
<div class="tip" v-if="!isDetail">提示:最多可上传5张,建议尺寸375 * 365,大小不得超过6MB。</div>
</div>
</div>
<div class="item" v-show="!isDetail || !!data.video">
<div class="item" v-show="(!isDetail&&!isEdit) || !!data.video">
<label class="label">商品视频:</label>
<div class="upload-con">
<file-upload
......@@ -29,7 +29,7 @@
:readonly="isDetail"
showWatch
/>
<div class="tip" v-if="!isDetail">提示:仅可上传一张,商品宣传视频,用于详情页展示,建议尺寸375 * 365,大小不得超过50MB。(非必传)</div>
<div class="tip" v-if="!isDetail">提示:仅可上传一张,商品宣传视频,用于详情页展示,建议尺寸375 * 365,大小不得超过50MB(非必传)。</div>
</div>
</div>
<div class="item">
......@@ -41,30 +41,13 @@
:maxNum="1"
v-model="data.thumbList"
:defaultList="data.defaultThumbList"
:readonly="isDetail"
:readonly="isDetail "
showWatch
/>
<div class="tip" v-if="!isDetail">提示:仅可上传一张,建议尺寸100 * 100,大小不得超过6MB。</div>
<!-- {{data.thumbList}} -->
</div>
</div>
<div class="item" v-show="!isDetail || !!data.nftFile">
<label class="label">NFT附件:</label>
<div class="upload-con">
<file-upload
type="NFT"
:width="150"
:iconSize="26"
:maxNum="1"
:maxSize="100"
v-model="data.nftEnclosureList"
:defaultList="data.defaultNftEnclosureList"
:readonly="isDetail"
showWatch
/>
<div class="tip" v-if="!isDetail">提示:仅可上传一份附件,大小不得超过100MB。(非必传)</div>
</div>
</div>
<div class="item">
<label class="label">详情描述:</label>
<div class="editor-con">
......@@ -125,7 +108,6 @@ export default {
default: {
video: '',
videoList: [],
nftFile: '',
videoThumb: '',
videoThumbList: [],
thumb: '',
......@@ -135,15 +117,17 @@ export default {
defaultDetailPicture: [],
defaultVideoList: [],
defaultVideoThumbList: [],
defaultThumbList: [],
nftEnclosureList: [],
defaultNftEnclosureList: []
defaultThumbList: []
}
},
isDetail: {
type: Boolean,
default: false
},
isEdit: {
type: Boolean,
default: false
},
status: ''
},
computed: {
......
This diff is collapsed.
<template>
<info-con title="销售信息:" class="sale-info-con">
<div class="item">
<label class="label">销售模式:</label>
<RadioGroup v-model="data.salesType">
<Radio :label="1" style="width:200px" :disabled="isDetail || isEdit || isDraft">普通</Radio>
<Radio :label="2" style="width:200px" :disabled="isDetail || isEdit || isDraft || packType">预售</Radio>
<!-- <Radio :label="3" style="width:200px" :disabled="isDetail || isEdit || isDraft || packType">拍卖</Radio> -->
<Radio :label="5" style="width: 200px" :disabled="isDetail || isEdit || isDraft ">免费领取</Radio>
</RadioGroup>
</div>
<div class="item" v-if="shopStatus != 4">
<label class="label">限购数量:</label>
<Input
v-model.number="data.purchaseLimit"
type="number"
:disabled="isDetail"
placeholder="请输入限购数量"
style="width: 400px"
/>
</div>
<div class="item" v-if="data.salesType==2">
<label class="label">预售价格:</label>
<Input v-model="data.originalPrice" :readonly='isDetail' type="number" style="width: 400px;">
</Input>
</div>
<div class="item" v-if="data.salesType==2">
<label class="label">预售时间:</label>
<Row class="time">
<Col>
<DatePicker type="date" :options="startOption" :readonly="isDetail" v-model="data.saleStartTime" placeholder="请选择开始时间" style="width: 200px"></DatePicker>
</Col>
<span></span>
<Col>
<DatePicker type="date" :options="endOption" :readonly="isDetail" v-model="data.saleEndTime" placeholder="请选择结束时间" style="width: 200px"></DatePicker>
</Col>
</Row>
</div>
<div class="item" v-if="data.salesType==2">
<label class="label">预计提货时间:</label>
<Row class="time">
<Col>
<DatePicker type="date" :options="drawStartOption" :readonly="isDetail" v-model="data.drawStartTime" placeholder="请选择开始时间" style="width: 200px"></DatePicker>
</Col>
<span></span>
<Col>
<DatePicker type="date" :options="drawEndOption" :readonly="isDetail" v-model="data.drawEndTime" placeholder="请选择结束时间" style="width: 200px"></DatePicker>
</Col>
</Row>
</div>
<div class="item" v-if="data.salesType==2">
<label class="label">预售定金:</label>
<RadioGroup v-model="data.depositType">
<Radio label="1" :disabled="isDetail" class="ivu-radio" style="width: 260px;">
<span>固定比例</span>
<Input v-model="data.fixedProportion" :disabled="isDetail" style="width: 100px"/>
<span>%</span>
</Radio>
<Radio label="2" :disabled="isDetail" class="ivu-radio" style="width: 260px">
<span>固定金额</span>
<Input v-model="data.fixedAmount" :disabled="isDetail" style="width: 100px"/>
<span></span>
</Radio>
</RadioGroup>
</div>
<div class="item" v-if="data.salesType==3">
<label class="label">起拍价:</label>
<Input v-model="data.startPrice" :readonly='isDetail' type="number" style="width: 400px;">
</Input>
</div>
<div class="item" v-if="data.salesType==3">
<label class="label">拍卖保证金:</label>
<Input v-model="data.buyerDeposit" :readonly='isDetail' type="number" style="width: 400px;">
</Input>
</div>
<div class="item" v-if="data.salesType==3">
<label class="label">出价最小增幅:</label>
<Input v-model="data.priceIncrease" :readonly='isDetail' type="number" style="width: 400px;">
</Input>
</div>
<div class="item" v-if="data.salesType==3">
<label class="label">竞拍结束时间:</label>
<DatePicker type="date" :options="buyEndOption" :readonly="isDetail" v-model="data.endTime" placeholder="请选择结束时间" style="width: 400px"></DatePicker>
</div>
<div class="item" v-if="data.salesType==3">
<label class="label">付款结束时间:</label>
可以延后
<Input v-model="data.delayPayTime" :readonly='isDetail' type="number" style="width: 150px;">
</Input>
天付款
</div>
<div class="item" v-if="data.salesType==1 ||data.salesType==5 ">
<label class="label">销售价格:</label>
<Input v-model="data.originalPrice" :readonly='isDetail' type="number" style="width: 400px;">
</Input>
</div>
<!-- <div class="item">
<div class="item" v-if="shopStatus == 1">
<label class="label">商品重量:</label>
<Input v-model="data.weight" :readonly='isDetail' type="number" style="width: 400px;">
</Input>
</div> -->
</div>
<div class="item">
<label class="label">NFT销售方式:</label>
<RadioGroup v-model="data.nftSalesType">
<Radio :label="1" style="width:200px" :disabled="isDetail || isEdit || isAgain">原商品销售</Radio>
<Radio :label="2" style="width:200px" :disabled="isDetail || isEdit || isAgain">使用权销售</Radio>
<Radio :label="1" style="width:200px" :disabled="isDetail || isEdit || isDraft || isAgain">原商品销售</Radio>
<Radio :label="2" style="width:200px" :disabled="isDetail || isEdit || isDraft || isAgain|| availableNumber != 1">使用权销售</Radio>
</RadioGroup>
</div>
<div class="item" v-if="data.nftSalesType==2">
<label class="label">拷贝数量:</label>
<Input v-model="data.stock" :readonly='isDetail || isEdit|| isAgain' style="width: 400px;">
<Input v-model="data.stock" :readonly='isDetail || isAgain' :maxlength="6" style="width: 400px;">
</Input>
</div>
<div class="item">
<label class="label">溯源哈希:</label>
<Input v-model="data.hash" :readonly='isDetail' style="width: 400px;" />
</div>
</info-con>
</template>
......@@ -29,7 +122,7 @@
import InfoCon from './info-con'
import FileUpload from '_c/file-upload'
import config from '@/config'
// import { deepCopy } from '@/utils/common'
import { deepCopy } from '@/utils/common'
import axios from 'axios'
const baseUrl =
process.env.NODE_ENV === 'development'
......@@ -40,11 +133,26 @@ export default {
data: {
type: Object,
default: { sku: [] },
commodityPass: 3,
commodityPass: '',
saleStartTime: '',
saleEndTime: '',
drawStartTime: '',
drawEndTime: '',
fixedProportion: '',
fixedAmount: '',
depositType: '',
price: '',
startPrice: '',
buyerDeposit: '',
priceIncrease: '',
delayPayTime: '',
endTime: '',
stock: '',
salesType: 1,
originalPrice: '',
// weight: '',
weight: '',
nftSalesType: '',
stock: ''
purchaseLimit:0
},
isDetail: {
type: Boolean,
......@@ -62,7 +170,12 @@ export default {
type: Boolean,
default: false
},
status: ''
isDraft: {
type: Boolean,
default: false
},
shopStatus: '',
availableNumber: ''
},
watch: {
......@@ -72,7 +185,7 @@ export default {
// this.propList = [{ outToken: '', valList: [{ val: '' }] }]
// }
// },
// status (val) {
// shopStatus (val) {
// // console.log('111', val)
// if (val == 3 || val == 2) {
// this.data.salesType = 1
......@@ -85,14 +198,46 @@ export default {
},
data () {
return {
propList: [{ outToken: '', valList: [{ val: '' }] }],
showTable: false,
columns: []
drawStartOption: {
// 指定开始限制时间
disabledDate: (date) => {
return date && date.valueOf() < Date.now() - 86400000
}
},
drawEndOption: {
// 指定终止日期
disabledDate: (date) => {
return date && date.valueOf() < Date.now() - 86400000
}
},
startOption: {
// 指定开始限制时间
disabledDate: (date) => {
return date && date.valueOf() < Date.now() - 86400000
}
},
endOption: {
// 指定终止日期
disabledDate: (date) => {
return date && date.valueOf() < Date.now() - 86400000
}
},
buyEndOption: {
// 指定终止日期
disabledDate: (date) => {
return date && date.valueOf() < Date.now() - 86400000
}
}
// rateList: [3, 4, 5, 6, 9, 10, 11, 13]
}
},
computed: {
platform () {
return this.$store.state.admin.type == 1 || this.$store.state.admin.type == 4
},
packType () {
return this.shopStatus == 3
}
},
mounted () {
......@@ -101,6 +246,11 @@ export default {
})
},
methods: {
// changeSalesType(val){
// this.$set(this.data,'salesType',val)
// this.data.salesType=val
// console.log(this.data)
// }
}
}
</script>
......
......@@ -5,19 +5,17 @@
<Input
placeholder="请填写商品名称"
v-model="data.name"
:readonly="isDetail || isEdit"
:readonly="isDetail || isEdit || isDraft|| isAgain"
:maxlength="30"
/>
</div>
<div class="item">
<label class="label">商品类型:</label>
<RadioGroup v-model="data.type">
<!-- <Radio label="1" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">普通</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">预售</Radio>
<Radio label="3" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">拍卖</Radio>
<Radio label="5" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">打包</Radio> -->
<!-- <Radio label="6" :disabled="isDetail || isEdit || isAgain" class="ivu-radio">NFT</Radio> -->
<span style="font-size:15px;">NFT</span>
<RadioGroup v-model="data.type" @on-change="changeType" :readonly="isDetail || isEdit || isDraft|| isAgain">
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">普通</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">虚拟(不支持提货)</Radio>
<!-- <Radio label="3" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">打包</Radio> -->
<Radio label="4" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">NFT</Radio>
</RadioGroup>
</div>
<div class="item">
......@@ -69,8 +67,8 @@
shape="circle"
size="small"
@click="addProp"
v-if="!isDetail"
>+ 添加属性值</Button
v-if="!isDetail "
>+ 添加属性值(非必填)</Button
>
</div>
</div>
......@@ -80,10 +78,25 @@
<Input
v-if="isDetail"
v-model="data.categoryId"
:readonly="isDetail"
:readonly="isDetail|| isEdit"
style="width:400px;"
/>
<Cascader v-else :data="categoryList" v-model="data.categoryId" @on-change="handleChange"></Cascader>
<Cascader v-else style="width:400px;" :disabled="isEdit" :data="categoryList" v-model="data.categoryId" @on-change="handleChange"></Cascader>
</div>
<!-- <div class="item">
<label class="label">应用NFT:</label>
<RadioGroup v-model="data.useNft">
<Radio label="0" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio"></Radio>
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio"></Radio>
</RadioGroup>
</div> -->
<!-- <div class="item">
<label class="label">正品认证:</label>
<RadioGroup v-model="data.type">
<Radio label="1" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">申请</Radio>
<Radio label="2" :disabled="isDetail || isEdit || isDraft|| isAgain" class="ivu-radio">不申请</Radio>
</RadioGroup>
</div> -->
</info-con>
</template>
......@@ -96,10 +109,11 @@ export default {
default: {
name: '',
description: '',
prop: [{ name: '', val: '' }],
prop: [],
// rate: '',
// typeCode: '',
type: '',
useNft: '',
categoryId: []
}
},
......@@ -114,13 +128,32 @@ export default {
isAgain: {
type: Boolean,
default: false
}
},
isDraft: {
type: Boolean,
default: false
},
clearForm: Function
},
data () {
return {
categoryList: []
}
},
// watch: {
// 'data.type' (newVal, oldVal) {
// console.log('oldVal', oldVal)
// console.log('newVal', newVal)
// if (oldVal != newVal) {
// this.data = {
// description: '',
// prop: [],
// useNft: '',
// categoryId: []
// }
// }
// }
// },
components: {
InfoCon
},
......@@ -138,6 +171,11 @@ export default {
// this.text = selectedData.map(o => o.label).join(', ')
// console.log('value', value)
},
changeType () {
// console.log(this.$parent)
this.clearForm()
// this.$parent.clearForm()
},
getCategory () {
// 获取商品类目
this.api({
......@@ -187,7 +225,7 @@ export default {
align-items: center;
margin-bottom: 10px;
.ivu-radio{
width: 100px;
width: 200px;
}
}
.item .label {
......
<template>
<info-con title="图文描述:" class="decipt-info-con">
<div class="item">
<div class="item" v-show="shopStatus!=4">
<label class="label">商品图片:</label>
<div class="upload-con">
<file-upload
......@@ -15,7 +15,7 @@
<div class="tip" v-if="!isDetail">提示:最多可上传5张,建议尺寸375 * 365,大小不得超过6MB。</div>
</div>
</div>
<div class="item" v-show="!isDetail || !!data.video">
<div class="item" v-show="(!isDetail&&!isEdit && shopStatus!=4) || !!data.video">
<label class="label">商品视频:</label>
<div class="upload-con">
<file-upload
......@@ -29,7 +29,7 @@
:readonly="isDetail"
showWatch
/>
<div class="tip" v-if="!isDetail">提示:仅可上传一张,商品宣传视频,用于详情页展示,建议尺寸375 * 365,大小不得超过50MB。(非必传)</div>
<div class="tip" v-if="!isDetail">提示:仅可上传一张,商品宣传视频,用于详情页展示,建议尺寸375 * 365,大小不得超过50MB(非必传)。</div>
</div>
</div>
<div class="item">
......@@ -48,23 +48,6 @@
<!-- {{data.thumbList}} -->
</div>
</div>
<div class="item" v-show="!isDetail || !!data.nftFile">
<label class="label">NFT附件:</label>
<div class="upload-con">
<file-upload
type="NFT"
:width="150"
:iconSize="26"
:maxNum="1"
:maxSize="100"
v-model="data.nftEnclosureList"
:defaultList="data.defaultNftEnclosureList"
:readonly="isDetail"
showWatch
/>
<div class="tip" v-if="!isDetail">提示:仅可上传一份附件,大小不得超过100MB。(非必传)</div>
</div>
</div>
<div class="item">
<label class="label">详情描述:</label>
<div class="editor-con">
......@@ -125,7 +108,6 @@ export default {
default: {
video: '',
videoList: [],
nftFile: '',
videoThumb: '',
videoThumbList: [],
thumb: '',
......@@ -135,16 +117,18 @@ export default {
defaultDetailPicture: [],
defaultVideoList: [],
defaultVideoThumbList: [],
defaultThumbList: [],
nftEnclosureList: [],
defaultNftEnclosureList: []
defaultThumbList: []
}
},
isDetail: {
type: Boolean,
default: false
},
status: ''
isEdit: {
type: Boolean,
default: false
},
shopStatus: ''
},
computed: {
editor () {
......
This diff is collapsed.
This diff is collapsed.
......@@ -46,7 +46,7 @@
type="number"
placeholder="请输入库存量"
v-model="form.stock"
style="width:400px;"
style="width:400px;"
/>
</div>
<div class="item">
......@@ -55,7 +55,7 @@
type="number"
placeholder="请输入该商品兑换所需积分"
v-model="form.pnum"
style="width:400px;"
style="width:400px;"
/>
</div>
</info-con>
......
......@@ -28,6 +28,13 @@
:defaultList="this.defaultThumb"
/>
</FormItem>
<FormItem label="广告图:" prop="adThumb" class="shopList">
<file-upload
v-model="advertisingthum"
:maxNum="1"
:defaultList="this.defaultAdvertisingthum"
/>
</FormItem>
</Form>
<div slot="footer">
......@@ -50,6 +57,13 @@
:model="eidtCate"
:label-width="120"
>
<FormItem label="类目ID:" prop="categoryId" class="shopList">
<Input
v-model="eidtCate.categoryId"
:maxlength="60"
disabled
/>
</FormItem>
<FormItem label="类目名称:" prop="name" class="shopList">
<Input
placeholder="请输入类目名称"
......@@ -65,6 +79,13 @@
:defaultList="this.defaultThumb"
/>
</FormItem>
<FormItem label="广告图:" prop="adThumb" class="shopList">
<file-upload
v-model="advertisingthum"
:maxNum="1"
:defaultList="this.defaultAdvertisingthum"
/>
</FormItem>
</Form>
<div slot="footer">
......@@ -147,6 +168,7 @@ export default {
console.log('data', data)
this.modal10 = true
this.thum = []
this.advertisingthum = []
this.type = 1
this.addCate.categoryId = data.categoryId
this.addCate.level = data.level
......@@ -174,16 +196,20 @@ export default {
categoryId: '',
level: 0,
name: '',
thumb: ''
thumb: '',
adThumb: ''
},
eidtCate: {
categoryId: '',
updateTime: '',
name: '',
thumb: ''
thumb: '',
adThumb: ''
},
defaultThumb: [],
thum: [],
advertisingthum: [],
defaultAdvertisingthum: [],
type: 1
}
......@@ -219,6 +245,7 @@ export default {
}
}, data.thumb),
h('span', data.title)
// h('span', `${data.title} (类目ID:${data.categoryId})`)
]),
h('span', {
style: {
......@@ -238,12 +265,14 @@ export default {
},
on: {
click: () => {
console.log('data', data)
// console.log('data', data)
this.thum = []
this.advertisingthum = []
this.type = 2
this.modal10 = true
this.eidtCate.name = data.title
this.thum.push(data.thumb)
this.advertisingthum = data.adThumb ? [data.adThumb] : []
this.eidtCate.categoryId = data.categoryId
this.eidtCate.updateTime = data.updateTime
}
......@@ -262,9 +291,10 @@ export default {
on: {
click: () => {
// console.log('data', data)
console.log('this.eidtCate.name', this.eidtCate.name)
// console.log('this.eidtCate.name', this.eidtCate.name)
this.modal10 = true
this.thum = []
this.advertisingthum = []
this.type = 1
this.addCate.categoryId = data.categoryId
this.addCate.level = data.level
......@@ -326,19 +356,24 @@ export default {
},
// 添加商品目录
updateCategory () {
if (!this.addCate.name) {
this.$Message.warning(`请填写类目名称!`)
if (this.thum.length == 0 || !this.addCate.name) {
this.$Message.warning(`所有项均为必填项哦!`)
return
}
// this.updatePwdLoading = true
this.addCate.thumb = this.thum[0]
// console.log('addCate',this.addCate)
if (this.advertisingthum.length != 0) {
this.addCate.adThumb = this.advertisingthum[0]
}
// console.log('addCate', this.addCate)
this.api({
apiName: 'categorySave',
postdata: this.addCate,
success: (res) => {
// console.log('res',res.data)
this.thum = []
this.advertisingthum = []
this.addCate.name = ''
this.modal10 = false
this.categoryList()
......@@ -347,13 +382,20 @@ export default {
},
// 修改商品类目
eidotCategory () {
if (!this.eidtCate.name) {
this.$Message.warning(`请填写类目名称!`)
if (this.thum.length == 0 || !this.eidtCate.name) {
this.$Message.warning(`所有项均为必填项哦!`)
return
}
// this.updatePwdLoading = true
this.eidtCate.thumb = this.thum[0]
// console.log('addCate', this.eidtCate)
if (this.advertisingthum.length != 0) {
// console.log('1111111111')
this.eidtCate.adThumb = this.advertisingthum[0]
} else {
// console.log('1111111111', this.advertisingthum.length)
this.eidtCate.adThumb = ''
}
// console.log('eidtCate', this.eidtCate)
this.api({
apiName: 'categoryUpdate',
postdata: this.eidtCate,
......@@ -381,7 +423,8 @@ export default {
categoryId: tmp.categoryId,
level: tmp.level,
clazzId: tmp.clazzId,
thumb: tmp.thumb,
thumb: tmp.thumb ? tmp.thumb : [],
adThumb: tmp.adThumb,
updateTime: tmp.updateTime
}
}
......
......@@ -304,6 +304,8 @@ export default {
methods: {
requestData () {
this.loading = true
this.searchContent.goodsId = this.searchContent.goodsId.replace(/\s+/g, '')
this.searchContent.goodsName = this.searchContent.goodsName.replace(/\s+/g, '')
this.api({
apiName: 'getGoodCheckList',
postdata: this.searchContent,
......@@ -315,6 +317,7 @@ export default {
return item.status === 5
})
this.totalSize = res.data.total
// console.log('111', this.totalSize)
}
})
},
......
......@@ -11,7 +11,6 @@
</div>
<div class="right">
<label class="label">地址二维码:</label>
<img :src="tokenImgData.qrUrl" alt="" @click="clickImg" style="width:40px;height:40px ">
</div>
</div>
......@@ -91,10 +90,10 @@ export default {
pageSize: 10
},
columns: [
{ title: '编号', key: 'commodityPassId', minWidth: 120, align: 'center' },
{ title: '标识名称', key: 'labelName', width: 120, align: 'center' },
{ title: '通证哈希', key: 'hash', width: 120, align: 'center' },
{ title: '绑定商品编号', key: 'goodsId', minWidth: 180, align: 'center' },
{ title: '编号', key: 'commodityPassId', minWidth: 180, align: 'left' },
{ title: '标识名称', key: 'labelName', width: 120, align: 'left' },
{ title: '通证名称', key: 'name', width: 120, align: 'center' },
{ title: '绑定商品编号', key: 'goodsId', minWidth: 180, align: 'left' },
{ title: '绑定商品名称', key: 'goodsName', minWidth: 150, align: 'center' },
{ title: '可用数量', key: 'availableNumber', minWidth: 100, align: 'center' },
{ title: '状态',
......@@ -114,8 +113,9 @@ export default {
}
},
{ title: '操作',
key: 'goodsId',
width: 200,
align: 'center',
align: 'left',
fixed: 'right',
render: (h, params) => {
let recordsBtn = h(
......@@ -147,7 +147,7 @@ export default {
style: {
margin: '5px',
// display: this.isBrand ? 'inline-block' : 'none'
display: params.row.status === 0 ? 'inline-block' : 'none'
display: (params.row.status === 0 && params.row.availableNumber>0) ? 'inline-block' : 'none'
}
},
'发布商品'
......@@ -217,6 +217,7 @@ export default {
},
handleAdd (row) {
return () => {
// console.log(row)
let query = { labelName: row.labelName, commodityPassId: row.commodityPassId, availableNumber: row.availableNumber }
this.$router.push({ name: 'commodity_add_good', query })
}
......
......@@ -421,6 +421,8 @@ export default {
},
requestData () {
this.loading = true
this.searchContent.goodsId = this.searchContent.goodsId.replace(/\s+/g, '')
this.searchContent.goodsName = this.searchContent.goodsName.replace(/\s+/g, '')
this.api({
apiName: 'getGoodsCommentList',
postdata: this.searchContent,
......
This diff is collapsed.
This diff is collapsed.
<template>
<li style="list-style-type:none;">
<div class="operation-main-title">
<h3 class="info-title">{{infoDetail.title}}</h3>
<div class="btn" >
<Button type="primary" @click="updateHelp(infoDetail.infoId)" v-if="platform" style="margin-right:10px;">编辑</Button>
<Button type="error" @click="detaleHelp(infoDetail.infoId)" v-if="platform"> 删除</Button>
</div>
</div>
<div
:class="[isHide ? 'operation-main-info' : '']">
<p v-html="infoDetail.detail"></p>
</div>
<div style="text-align:right;margin:20px 0">
<Button v-if="isHide" @click="isOpen()">展开</Button>
<Button v-if="!isHide" @click="isPutaway()">收起</Button>
</div>
</li>
</template>
<script>
export default {
props: {
infoDetail: {
type: Object
}
// isHide: {
// type: Boolean,
// default: true
// }
},
data () {
return {
isHide: true
}
},
computed:{
platform () {
return this.$store.state.admin.type == 1 ||this.$store.state.admin.type == 4
}
},
methods: {
isOpen () {
this.isHide = false
},
isPutaway () {
this.isHide = true
},
updateHelp (infoId) {
let query = { infoId: infoId }
this.$router.push({ name: 'edit_help', query })
},
detaleHelp (infoId) {
// this.api({
// apiName: 'deleteInfoId',
// postdata: infoId,
// complete: () => {
// // this.loading = false
// },
// success: (res) => {
// this.listInfo()
// }
// })
this.$Modal.confirm({
title: '提示',
content: `您确定删除 “${this.infoDetail.title}” 吗?`,
onOk: () => {
this.api({
apiName: 'deleteInfoId',
postdata: infoId,
success: (res) => {
console.log('res', res)
this.$Message.info('删除成功')
this.$emit('listInfo')
}
})
},
onCancel: () => {
this.$Message.info('取消')
}
})
}
}
}
</script>
<style scoped lang="less">
.operation-main-title{
margin: 20px 0;
width: 100%;
display: flex;
justify-content:space-between;
.info-title{
font-size: 25px;
line-height: 30px;
font-weight:800;
}
// .btn{
// width: 28%;
// display: flex;
// justify-content:space-between;
// }
}
.operation-main-info{
width: 100%;
word-break: break-all;
overflow: hidden;
white-space:normal;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
height: 80px;
}
</style>
<template>
<div class="help-info">
<Card v-if="helpCategoryNameList.length==0" class="help-tips">
<p class="tips-info">暂无数据~</p>
</Card>
<Card v-else style="min-height:90%">
<div style="text-align:center;margin:20px 0">
<Input v-model="keyWord" placeholder="请输入检索关键字" style="width: 400px" search @on-search="searchHelpInfo"/>
</div>
<div class="main-page">
<Row>
<Col span="8">
<Menu :theme="theme2"
:active-name="helpCategoryNameList[0].infoList[0].infoId"
:open-names="[helpCategoryNameList[0].helpCategoryName]"
@on-select="changeMenu"
>
<Submenu
:name="name_item.helpCategoryName"
v-for="(name_item,i) in helpCategoryNameList"
:key="i">
<template slot="title">
{{name_item.helpCategoryName}}
</template>
<MenuItem
:name="title_item.infoId"
v-for="(title_item,i) in name_item.infoList"
:key="i"
>{{title_item.title}}</MenuItem>
</Submenu>
</Menu>
</Col>
</Row>
<br>
<div class="operation-info">
<ul v-for="(item_detail,i) in detilList" :key="i">
<help-info :infoDetail="item_detail" @listInfo="listInfo"></help-info>
</ul>
</div>
</div>
</Card>
</div>
</template>
<script>
import HelpInfo from './help-info'
export default {
components: {
HelpInfo
},
data () {
return {
theme2: 'light',
category: {
pageNum: '',
pageSize: ''
},
keyWord: '',
helpCategoryNameList: [],
titleList: [],
detilList: [],
isHide: true
}
},
methods: {
searchHelpInfo () {
let { keyWord } = this
this.detilList = []
this.api({
apiName: 'helpInfoList',
postdata: { keyWord },
complete: () => {
this.loading = false
},
success: (res) => {
res.data.forEach(item => {
item.infoList.forEach(itemb => {
this.detilList.push(itemb)
})
})
}
})
},
changeMenu (infoId) {
this.detilList = []
this.api({
apiName: 'searchInfoId',
postdata: infoId,
success: (res) => {
this.detilList.push(res.data)
}
})
},
listInfo () {
this.detilList = []
this.api({
apiName: 'helpInfoList',
postdata: this.keyWord,
complete: () => {
// this.loading = false
},
success: (res) => {
if (res.data.length != 0) {
this.helpCategoryNameList = res.data
this.detilList.push(res.data[0].infoList[0])
}
}
})
}
},
created () {
this.listInfo()
}
}
</script>
<style scoped lang="less">
.help-info{
width: 100%;
height:100%;
position: relative;
.help-tips{
min-height:90%;
.tips-info{
font-size: 25px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
}
.main-page{
width: 100%;
display: flex;
// justify-content:space-around;
.operation-info{
width: 60%;
.operation-main-title{
margin: 20px 0;
width: 100%;
display: flex;
justify-content:space-between;
.info-title{
font-size: 25px;
line-height: 30px;
font-weight:800;
}
// .btn{
// width: 28%;
// display: flex;
// justify-content:space-between;
// }
}
}
.operation-main-info{
width: 100%;
word-break: break-all;
overflow: hidden;
white-space:normal;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
height: 80px;
}
}
}
</style>
......@@ -49,7 +49,7 @@ module.exports = {
// target: 'http://172.22.17.174:8088'
// target: 'http://172.22.17.108:8088'
target: 'https://testadminym.8n.cn/root'
target: 'https://testadminslg.8n.cn/root'
},
'/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