Commit 1ccd9c22 authored by 332784038@qq.com's avatar 332784038@qq.com

Merge branch 'dev' into test

# Conflicts:
#	src/views/ecw/order/index.vue
parents 0b11ea75 39da2846
...@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站 ...@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境 # 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://apitest.groupage.cn' VUE_APP_BASE_API = 'https://devapi.jd.qipx.top'
# VUE_APP_BASE_API = 'http://110.41.143.128:48080' # VUE_APP_BASE_API = 'http://110.41.143.128:48080'
# VUE_APP_BASE_API = 'http://127.0.0.1:48080' # VUE_APP_BASE_API = 'http://127.0.0.1:48080'
......
import request from '@/utils/request' import request from "@/utils/request"
// 创建跟进 // 创建跟进
export function createCustomerFollow(data) { export function createCustomerFollow(data) {
return request({ return request({
url: '/ecw/customer-follow/create', url: "/ecw/customer-follow/create",
method: 'post', method: "post",
data: data data: data
}) })
} }
...@@ -12,8 +12,8 @@ export function createCustomerFollow(data) { ...@@ -12,8 +12,8 @@ export function createCustomerFollow(data) {
// 更新跟进 // 更新跟进
export function updateCustomerFollow(data) { export function updateCustomerFollow(data) {
return request({ return request({
url: '/ecw/customer-follow/update', url: "/ecw/customer-follow/update",
method: 'put', method: "put",
data: data data: data
}) })
} }
...@@ -21,31 +21,31 @@ export function updateCustomerFollow(data) { ...@@ -21,31 +21,31 @@ export function updateCustomerFollow(data) {
// 删除跟进 // 删除跟进
export function deleteCustomerFollow(id) { export function deleteCustomerFollow(id) {
return request({ return request({
url: '/ecw/customer-follow/delete?id=' + id, url: "/ecw/customer-follow/delete?id=" + id,
method: 'delete' method: "delete"
}) })
} }
// 获得跟进 // 获得跟进
export function getCustomerFollow(id) { export function getCustomerFollow(id) {
return request({ return request({
url: '/ecw/customer-follow/get?id=' + id, url: "/ecw/customer-follow/get?id=" + id,
method: 'get' method: "get"
}) })
} }
// 获得跟进分页 // 获得跟进分页
export function getCustomerFollowPage(query) { export function getCustomerFollowPage(query) {
return request({ return request({
url: '/customer/detail/infoList/followPage', url: "/customer/detail/infoList/followPage",
method: 'get', method: "get",
params: query params: query
}) })
} }
export function getCustomerFollowPage2(query) { export function getCustomerFollowPage2(query) {
return request({ return request({
url: '/ecw/customer-follow/page', url: "/ecw/customer-follow/page",
method: 'get', method: "get",
params: query params: query
}) })
} }
...@@ -53,50 +53,56 @@ export function getCustomerFollowPage2(query) { ...@@ -53,50 +53,56 @@ export function getCustomerFollowPage2(query) {
// 导出跟进 Excel // 导出跟进 Excel
export function exportCustomerFollowExcel(query) { export function exportCustomerFollowExcel(query) {
return request({ return request({
url: '/ecw/customer-follow/export-excel', url: "/ecw/customer-follow/export-excel",
method: 'get', method: "get",
params: query, params: query,
responseType: 'blob' responseType: "blob"
}) })
} }
export function getCustomerFollowList(params) { export function getCustomerFollowList(params) {
return request({ return request({
url: '/customer/followup/page', url: "/customer/followup/page",
method: 'get', method: "get",
params params
}) })
} }
export function getCustomerFollowDetail(params) { export function getCustomerFollowDetail(params) {
return request({ return request({
url: '/customer/followup/get', url: "/customer/followup/get",
method: 'get', method: "get",
params params
}) })
} }
export function addCustomerFollow(data) { export function addCustomerFollow(data) {
return request({ return request({
url: '/customer/followup/create', url: "/customer/followup/create",
method: 'post', method: "post",
data data
}) })
} }
export function editCustomerFollow(data) { export function editCustomerFollow(data) {
return request({ return request({
url: '/customer/followup/update', url: "/customer/followup/update",
method: 'put', method: "put",
data data
}) })
} }
export function exportCustomerFollow(params) { export function exportCustomerFollow(params) {
return request({ return request({
url: '/customer/followup/export-excel', url: "/customer/followup/export-excel",
method: 'get', method: "get",
params params
}) })
} }
export function getFollowupNewNumber() {
return request({
url: "/customer/followup/getFollowupNewNumber",
method: "get"
})
}
This diff is collapsed.
...@@ -324,8 +324,17 @@ ...@@ -324,8 +324,17 @@
<!-- />--> <!-- />-->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('客户经理')" align="center" prop="customerServiceName"></el-table-column> <el-table-column
<el-table-column :label="$t('国籍')" align="center" prop="country" :formatter="countryFormatter"></el-table-column> :label="$t('客户经理')"
align="center"
prop="customerServiceName"
></el-table-column>
<el-table-column
:label="$t('国籍')"
align="center"
prop="country"
:formatter="countryFormatter"
></el-table-column>
<el-table-column :label="$t('出货渠道')" align="center"> <el-table-column :label="$t('出货渠道')" align="center">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
{{ channel(row.transportType) }} {{ channel(row.transportType) }}
...@@ -414,7 +423,12 @@ ...@@ -414,7 +423,12 @@
<span>{{ parseTime(scope.row.updateTime) }}</span> <span>{{ parseTime(scope.row.updateTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="200px" :label="$t('操作')" align="center" fixed="right"> <el-table-column
width="200px"
:label="$t('操作')"
align="center"
fixed="right"
>
<template slot-scope="scope"> <template slot-scope="scope">
<!-- <el-button size="mini" type="text" v-show="'development' === env && scope.row.isInOpenSea" @click="seasPond(scope.row)"--> <!-- <el-button size="mini" type="text" v-show="'development' === env && scope.row.isInOpenSea" @click="seasPond(scope.row)"-->
<!-- v-hasPermi="['ecw:customer:query']">{{$t('掉入公海池')}}</el-button>--> <!-- v-hasPermi="['ecw:customer:query']">{{$t('掉入公海池')}}</el-button>-->
...@@ -965,22 +979,22 @@ export default { ...@@ -965,22 +979,22 @@ export default {
} }
}, },
combinedQueryParams() { combinedQueryParams() {
let queryParams = {} let queryParams = {};
if (this.enterOpenSeaTime && this.enterOpenSeaTime.length == 2) { if (this.enterOpenSeaTime && this.enterOpenSeaTime.length == 2) {
queryParams.beginEnterOpenSeaTime = this.enterOpenSeaTime[0] queryParams.beginEnterOpenSeaTime = this.enterOpenSeaTime[0];
queryParams.endEnterOpenSeaTime = this.enterOpenSeaTime[1] queryParams.endEnterOpenSeaTime = this.enterOpenSeaTime[1];
} }
if (this.customerServiceConfirmedTime && this.customerServiceConfirmedTime.length == 2) { if (this.customerServiceConfirmedTime && this.customerServiceConfirmedTime.length == 2) {
queryParams.beginCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[0] queryParams.beginCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[0]
queryParams.endCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[1] queryParams.endCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[1]
} }
if (this.dateRangeCreateTime && this.dateRangeCreateTime.length == 2) { if (this.dateRangeCreateTime && this.dateRangeCreateTime.length == 2) {
queryParams.beginCreateTime = this.dateRangeCreateTime[0] queryParams.beginCreateTime = this.dateRangeCreateTime[0];
queryParams.endCreateTime = this.dateRangeCreateTime[1] queryParams.endCreateTime = this.dateRangeCreateTime[1];
} }
if (this.firstDealTime && this.firstDealTime.length == 2) { if (this.firstDealTime && this.firstDealTime.length == 2) {
queryParams.beginFirstDealTime = this.firstDealTime[0] queryParams.beginFirstDealTime = this.firstDealTime[0];
queryParams.endFirstDealTime = this.firstDealTime[1] queryParams.endFirstDealTime = this.firstDealTime[1];
} }
if (this.weightYearly.value) { if (this.weightYearly.value) {
let key = "eqWeightYearly" let key = "eqWeightYearly"
...@@ -1420,12 +1434,12 @@ export default { ...@@ -1420,12 +1434,12 @@ export default {
const strArr = [] const strArr = []
this.countryList.forEach((item) => { this.countryList.forEach((item) => {
if (idsArr.includes(item.id.toString())) { if (idsArr.includes(item.id.toString())) {
strArr.push(this.isChinese ? item.nameZh : item.nameEn) strArr.push(this.isChinese ? item.nameZh : item.nameEn);
} }
}) })
return strArr.length > 0 ? strArr.join(",") : null return strArr.length > 0 ? strArr.join(",") : null
} else { } else {
return null return null;
} }
}, },
getPickupPointNames(ids) { getPickupPointNames(ids) {
...@@ -1434,7 +1448,7 @@ export default { ...@@ -1434,7 +1448,7 @@ export default {
const strArr = [] const strArr = []
this.getNodeLists.forEach((item) => { this.getNodeLists.forEach((item) => {
if (idsArr.includes(item.id.toString())) { if (idsArr.includes(item.id.toString())) {
strArr.push(this.isChinese ? item.titleZh : item.titleEn) strArr.push(this.isChinese ? item.titleZh : item.titleEn);
} }
}) })
return strArr.length > 0 ? strArr.join(",") : null return strArr.length > 0 ? strArr.join(",") : null
...@@ -1453,7 +1467,7 @@ export default { ...@@ -1453,7 +1467,7 @@ export default {
}) })
return strArr.length > 0 ? strArr.join(",") : null return strArr.length > 0 ? strArr.join(",") : null
} else { } else {
return null return null;
} }
}, },
getProductTypeNames(ids) { getProductTypeNames(ids) {
...@@ -1462,12 +1476,12 @@ export default { ...@@ -1462,12 +1476,12 @@ export default {
const strArr = [] const strArr = []
this.productTypeList.forEach((item) => { this.productTypeList.forEach((item) => {
if (idsArr.includes(item.id.toString())) { if (idsArr.includes(item.id.toString())) {
strArr.push(this.isChinese ? item.titleZh : item.titleEn) strArr.push(this.isChinese ? item.titleZh : item.titleEn);
} }
}) })
return strArr.length > 0 ? strArr.join(",") : null return strArr.length > 0 ? strArr.join(",") : null
} else { } else {
return null return null;
} }
}, },
getPromoterName(id) { getPromoterName(id) {
...@@ -1475,13 +1489,13 @@ export default { ...@@ -1475,13 +1489,13 @@ export default {
let strName = "" let strName = ""
for (const item of this.customerSelectFn) { for (const item of this.customerSelectFn) {
if (item.id == id) { if (item.id == id) {
strName = item.name strName = item.name;
break break;
} }
} }
return strName return strName;
} else { } else {
return null return null;
} }
} }
} }
......
This diff is collapsed.
...@@ -25,14 +25,15 @@ ...@@ -25,14 +25,15 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10" v-for="(item, index) in queryParams.nodeIds"> <el-row :gutter="10" v-for="(item, index) in queryParams.nodeIds" :key="item.id">
<el-col :span="6"> <el-col :span="6">
<el-form-item v-if="title == 3" :label="$t('提货点')" :prop="`nodeIds[${index}].wareHouses`" :rules="rules.nodeIds.wareHouses"> <el-form-item v-if="title == 3" :label="$t('提货点')" :prop="`nodeIds[${index}].wareHouses`" :rules="rules.nodeIds.wareHouses">
<el-select v-model="item.wareHouses" :placeholder="$t('请选择提货点')" :disabled="isDisable" clearable multiple filterable remote reserve-keyword :remote-method="handleWarehouseList" @visible-change="changeWarehouseList" :loading="loading" size="small"> <el-select v-model="item.wareHouses" :placeholder="$t('请选择提货点')" :disabled="isDisable" clearable multiple filterable remote reserve-keyword :remote-method="handleWarehouseList" @visible-change="changeWarehouseList" :loading="loading" size="small">
<el-option v-for="nodeItem in warehouseList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" /> <el-option v-for="nodeItem in warehouseList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-else :label="$t('提货点')" :prop="`nodeIds[${index}].wareHouses`" :rules="rules.nodeIds.wareHouses"> <!-- 编辑对应单个提货点 逻辑显示-->
<el-form-item v-else :label="$t('提货点')" :prop="`nodeId`">
<el-select v-model="queryParams.nodeId" :placeholder="$t('请选择提货点')" :disabled="isDisable" clearable filterable remote reserve-keyword :remote-method="handleWarehouseList" @visible-change="changeWarehouseList" :loading="loading" size="small"> <el-select v-model="queryParams.nodeId" :placeholder="$t('请选择提货点')" :disabled="isDisable" clearable filterable remote reserve-keyword :remote-method="handleWarehouseList" @visible-change="changeWarehouseList" :loading="loading" size="small">
<el-option v-for="nodeItem in warehouseList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" /> <el-option v-for="nodeItem in warehouseList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" />
</el-select> </el-select>
...@@ -175,9 +176,16 @@ export default { ...@@ -175,9 +176,16 @@ export default {
this.queryParams = deepClone(newVal) this.queryParams = deepClone(newVal)
this.$set(this.queryParams, "dateRangeCreateTime", [parseTime(newVal.startTime), parseTime(newVal.endTime)]) this.$set(this.queryParams, "dateRangeCreateTime", [parseTime(newVal.startTime), parseTime(newVal.endTime)])
this.queryParams.pickMethod = newVal.pickMethod.split(",") this.queryParams.pickMethod = newVal.pickMethod.split(",")
this.$nextTick(() => {
this.$refs["queryForm"].clearValidate()
})
} else { } else {
this.resetFormQuery() this.resetFormQuery()
this.$nextTick(() => {
this.$refs["queryForm"].resetFields() this.$refs["queryForm"].resetFields()
this.$refs["queryForm"].clearValidate()
})
console.log("Prop is empty") console.log("Prop is empty")
} }
} }
...@@ -190,11 +198,10 @@ export default { ...@@ -190,11 +198,10 @@ export default {
endTime: null, endTime: null,
imgEn: null, imgEn: null,
imgZh: null, imgZh: null,
nodeIds: [{ wareHouses: "", points: "", quantityRemain: null }], nodeIds: [{ wareHouses: [], points: "", quantityRemain: null, id: 0 }],
nodeId: null, nodeId: null,
pickMethod: null, pickMethod: [],
pointsRequire: null, pointsRequire: null,
remarkEn: null, remarkEn: null,
remarkFr: null, remarkFr: null,
remarkZh: null, remarkZh: null,
...@@ -233,6 +240,13 @@ export default { ...@@ -233,6 +240,13 @@ export default {
trigger: "blur" trigger: "blur"
} }
], ],
nodeId: [
{
required: true,
message: this.$t("请选择提货点"),
trigger: "change"
}
],
nodeIds: { nodeIds: {
wareHouses: [ wareHouses: [
{ {
...@@ -303,9 +317,7 @@ export default { ...@@ -303,9 +317,7 @@ export default {
this.handleWarehouseList() this.handleWarehouseList()
}, },
methods: { methods: {
dataTimeFunc(e) { dataTimeFunc(e) {},
console.log("5555", e)
},
changeWarehouseList(e) { changeWarehouseList(e) {
if (e) { if (e) {
this.handleWarehouseList() this.handleWarehouseList()
...@@ -319,7 +331,7 @@ export default { ...@@ -319,7 +331,7 @@ export default {
}, },
handleOrderVRule(item, index) { handleOrderVRule(item, index) {
if (index == "0") { if (index == "0") {
this.queryParams.nodeIds.push({ nodeId: "", points: "" }) this.queryParams.nodeIds.push({ wareHouses: [], quantityRemain: null, points: "", id: index + 1 })
} else { } else {
this.queryParams.nodeIds.splice(index, 1) this.queryParams.nodeIds.splice(index, 1)
} }
...@@ -329,7 +341,9 @@ export default { ...@@ -329,7 +341,9 @@ export default {
params.startTime = this.queryParams?.dateRangeCreateTime?.[0] params.startTime = this.queryParams?.dateRangeCreateTime?.[0]
params.endTime = this.queryParams?.dateRangeCreateTime?.[1] params.endTime = this.queryParams?.dateRangeCreateTime?.[1]
params.pickMethod = this.queryParams.pickMethod.toString() params.pickMethod = this.queryParams.pickMethod.toString()
if (this.title != 3) {
params.nodeIds[0].wareHouses[0] = params.nodeId params.nodeIds[0].wareHouses[0] = params.nodeId
}
this.$refs["queryForm"].validate((valid) => { this.$refs["queryForm"].validate((valid) => {
if (valid) { if (valid) {
if (this.title == "2") { if (this.title == "2") {
...@@ -360,11 +374,11 @@ export default { ...@@ -360,11 +374,11 @@ export default {
this.queryParams = { this.queryParams = {
allowCount: null, allowCount: null,
endTime: null, endTime: null,
nodeIds: [{ wareHouses: "", points: "", quantityRemain: null }], nodeIds: [{ wareHouses: [], points: "", quantityRemain: null, id: 0 }],
imgEn: null, imgEn: null,
imgZh: null, imgZh: null,
nodeId: null, nodeId: null,
pickMethod: null, pickMethod: [],
pointsRequire: null, pointsRequire: null,
remarkEn: null, remarkEn: null,
remarkFr: null, remarkFr: null,
......
...@@ -1100,6 +1100,9 @@ export default { ...@@ -1100,6 +1100,9 @@ export default {
if (this.form.offerId != this.$route.query.id) { if (this.form.offerId != this.$route.query.id) {
this.getOffer() this.getOffer()
} }
if (this.$route.query.copyId && this.form.copyId != this.$route.query.copyId) {
this.getOffer()
}
}, },
async created() { async created() {
await this.getChannelList() await this.getChannelList()
...@@ -1154,7 +1157,7 @@ export default { ...@@ -1154,7 +1157,7 @@ export default {
getOffer() { getOffer() {
//加了是否从全部客户列表中报价按钮进来的判断 //加了是否从全部客户列表中报价按钮进来的判断
if (this.$route.query !== 1) { if (this.$route.query !== 1) {
getOffer(this.$route.query.id).then((res) => { getOffer(this.$route.query.id || this.$route.query.copyId).then((res) => {
let formData = res.data let formData = res.data
formData.type = formData.type ? formData.type.split(",").filter((item) => item != "") : [] formData.type = formData.type ? formData.type.split(",").filter((item) => item != "") : []
formData.prodCreateReqVOList = [] formData.prodCreateReqVOList = []
...@@ -1187,6 +1190,14 @@ export default { ...@@ -1187,6 +1190,14 @@ export default {
}) })
}) })
} }
if (this.$route.query.copyId) {
formData.offerId = ""
formData.startTime = ""
formData.endTime = ""
formData.stopTime = ""
}
this.$set(this, "form", formData) this.$set(this, "form", formData)
// 接口只返回了发货人和收货人ID,还需要调用接口获取详细信息回显 // 接口只返回了发货人和收货人ID,还需要调用接口获取详细信息回显
getCustomerContactsSelect({ getCustomerContactsSelect({
......
This diff is collapsed.
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card> <logListCommon :offerId="offerId" />
<div slot="header" class="card-title">{{$t('跟进记录列表')}}</div>
<!-- 列表 -->
<div class="offer-header">
<span style="font-size: 15px;">{{$t('报价单号')}}{{number}}</span>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
>{{$t('新增')}}</el-button>
</div>
<el-table v-loading="loading" :data="list">
<el-table-column :label="$t('序号')" align="center" prop="id" type="index">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('跟进类型')" align="center" prop="type" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.ECW_OFFER_TYPE" :value="scope.row.type"></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('联系人')" align="center" prop="contactName" />
<el-table-column :label="$t('跟进方式')" align="center" prop="followUpMethod">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_FOLLOW_METHOD" :value="scope.row.followUpMethod"></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('跟进时间')" align="center" prop="followUpTime" width="180">
<template slot-scope="scope">
<span>{{ scope.row.followUpTime}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('客户反馈')" align="center" prop="customerFeedback" />
<el-table-column :label="$t('处理结果')" align="center" prop="processingResults" />
<el-table-column :label="$t('客户经理')" align="center" prop="followUpSalesmanName">
<template slot-scope="scope">
<span>{{getCustomerService(scope.row.followUpSalesmanId)}}</span>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="params.page" :limit.sync="params.rows"
@pagination="getList"/>
</el-card>
</div> </div>
</template> </template>
<script> <script>
import {getOfferLogPage} from "@/api/ecw/offerLog"; import logListCommon from "@/views/ecw/offer/logListCommon"
import {DICT_TYPE} from '@/utils/dict'
import {getOffer} from '@/api/ecw/offer'
import { userList } from "@/api/system/user"
export default { export default {
name: "OfferLog", name: "offerLogList",
components: { components: { logListCommon },
},
data() { data() {
return { return {}
// 遮罩层
loading: true,
list: [],
total:0,
params:{
page:1,
rows:20,
offerId:0,
type:2
},
number:'',
relationId:0,
creatorName:'test',
creatorData:[]
};
}, },
created() { computed: {
if(this.$route.query.offerId){ offerId() {
this.params.offerId = this.$route.query.offerId return parseInt(this.$route.query.offerId || 0)
this.getList();
this.getRelationID()
} }
userList('customer service').then(res =>this.creatorData = res.data)
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
let params = {...this.params};
// 执行查询
getOfferLogPage(params).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
getCustomerService(id){
var user = this.creatorData.find(item=>item.id==id)
if(user) return user.nickname
return ''
},
getRelationID(){
getOffer(this.params.offerId).then(response => {
this.relationId = response.data.consignorId;
this.number = response.data.number;
})
},
/** 新增按钮操作 */
handleAdd() {
this.$router.push({
path: "/offer/createLog",
query:{
offerId:this.params.offerId,
number:this.number
} }
}); }
},
}
};
</script> </script>
<style scoped> <style scoped>
.card-title{ .card-title {
font-size: 18px; font-size: 18px;
font-weight: bold; font-weight: bold;
} }
.offer-header{ .offer-header {
padding-bottom: 16px; padding-bottom: 16px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
</style> </style>
This diff is collapsed.
This diff is collapsed.
...@@ -317,7 +317,6 @@ export default { ...@@ -317,7 +317,6 @@ export default {
specialProducts: [], specialProducts: [],
// priceStepList: [{},{}], // 阶梯价格 // priceStepList: [{},{}], // 阶梯价格
// specialList:[], // 特殊需求,默认四个 // specialList:[], // 特殊需求,默认四个
rules() {},
product: null, product: null,
/* productType: null, */ /* productType: null, */
currencyList: [], currencyList: [],
......
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