|
|
@@ -1,3777 +1,3509 @@
|
|
|
<template>
|
|
|
- <div class="article-manager video-icon form-submit" id="shopp-manager">
|
|
|
- <div class="i-layout-page-header">
|
|
|
- <PageHeader class="product_tabs">
|
|
|
- <div slot="title" class="acea-row row-middle">
|
|
|
- <router-link :to="{ path: `${roterPre}/product/index` }">
|
|
|
- <div class="font-sm after-line">
|
|
|
- <span class="iconfont iconfanhui"></span>
|
|
|
- <span class="pl10">返回</span>
|
|
|
- </div>
|
|
|
- </router-link>
|
|
|
- <span v-text="$route.params.id ? '编辑商品' : '添加商品'" class="mr20 ml16"></span>
|
|
|
- </div>
|
|
|
- </PageHeader>
|
|
|
- </div>
|
|
|
- <Card :bordered="false" dis-hover class="ivu-mt">
|
|
|
- <div class="new_tab">
|
|
|
- <Tabs v-model="currentTab" @on-click="onhangeTab">
|
|
|
- <TabPane
|
|
|
- v-for="(item, index) in headTab"
|
|
|
- :key="index"
|
|
|
- :label="item.title"
|
|
|
- :name="item.name"
|
|
|
- ></TabPane>
|
|
|
- </Tabs>
|
|
|
- </div>
|
|
|
- <Form
|
|
|
- class="formValidate mt20"
|
|
|
- ref="formValidate"
|
|
|
- :rules="ruleValidate"
|
|
|
- :model="formValidate"
|
|
|
- :label-width="labelWidth"
|
|
|
- :label-position="labelPosition"
|
|
|
- @submit.native.prevent
|
|
|
- >
|
|
|
- <Row :gutter="24" type="flex" v-show="currentTab === '1'">
|
|
|
- <!-- 商品信息-->
|
|
|
- <!--<Col span="24">-->
|
|
|
- <!--<FormItem label="商品类型:" props="is_virtual">-->
|
|
|
- <!--<div-->
|
|
|
- <!--class="productType"-->
|
|
|
- <!--:class="formValidate.product_type == item.id ? 'on' : ''-->
|
|
|
- <!--"-->
|
|
|
- <!--v-for="(item, index) in productType"-->
|
|
|
- <!--:key="index"-->
|
|
|
- <!--@click="productTypeTap(1,item)"-->
|
|
|
- <!-->-->
|
|
|
- <!--<div class="name">{{ item.name }}</div>-->
|
|
|
- <!--<div class="title">({{ item.title }})</div>-->
|
|
|
- <!--<div-->
|
|
|
- <!--v-if="formValidate.product_type == item.id"-->
|
|
|
- <!--class="jiao"-->
|
|
|
- <!--></div>-->
|
|
|
- <!--<div-->
|
|
|
- <!--v-if="formValidate.product_type == item.id"-->
|
|
|
- <!--class="iconfont iconduihao"-->
|
|
|
- <!--></div>-->
|
|
|
- <!--</div>-->
|
|
|
- <!--</FormItem>-->
|
|
|
- <!--</Col>-->
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品名称:" prop="store_name">
|
|
|
- <Input
|
|
|
- v-model="formValidate.store_name"
|
|
|
- placeholder="请输入商品名称"
|
|
|
- v-width="'50%'"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品分类:" prop="cate_id">
|
|
|
- <el-cascader
|
|
|
- placeholder="请选择商品分类"
|
|
|
- v-width="'50%'"
|
|
|
- size="mini"
|
|
|
- v-model="formValidate.cate_id"
|
|
|
- :options="treeSelect"
|
|
|
- :props="props"
|
|
|
- filterable
|
|
|
- clearable>
|
|
|
- </el-cascader>
|
|
|
- <!--<span class="addClass" @click="addClass">新增分类</span>-->
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" class="brandName">
|
|
|
- <FormItem label="商品品牌:" prop="">
|
|
|
- <Cascader
|
|
|
- :data="brandData"
|
|
|
- placeholder="请选择商品品牌"
|
|
|
- change-on-select
|
|
|
- v-model="formValidate.brand_id"
|
|
|
- filterable
|
|
|
- v-width="'50%'"
|
|
|
- ></Cascader>
|
|
|
- <!-- <span class="addClass" @click="addBrand">新增品牌</span>-->
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="单位:" prop="unit_name">
|
|
|
- <Select
|
|
|
- v-model="formValidate.unit_name"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- v-width="'50%'"
|
|
|
- placeholder="请输入单位"
|
|
|
- >
|
|
|
- <Option
|
|
|
- v-for="(item, index) in unitNameList"
|
|
|
- :value="item.name"
|
|
|
- :key="index"
|
|
|
- >{{ item.name }}</Option
|
|
|
- >
|
|
|
- </Select>
|
|
|
- <!-- <span class="addClass" @click="addUnit">新增单位</span>-->
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品标签:" prop="store_label_id" class="labelClass">
|
|
|
- <div class="acea-row row-middle">
|
|
|
- <div class="labelInput acea-row row-between-wrapper" @click="openStoreLabel">
|
|
|
- <div style="width: 90%;">
|
|
|
- <div v-if="storeDataLabel.length">
|
|
|
- <Tag closable v-for="(item,index) in storeDataLabel" @on-close="closeStoreLabel(item)">{{item.label_name}}</Tag>
|
|
|
- </div>
|
|
|
- <span class="span" v-else>选择商品标签</span>
|
|
|
- </div>
|
|
|
- <div class="iconfont iconxiayi"></div>
|
|
|
- </div>
|
|
|
- <span class="addClass" @click="addStoreLabel">新增标签</span>
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品编码:" prop="">
|
|
|
- <Input
|
|
|
- v-model="formValidate.code"
|
|
|
- placeholder="请输入商品编码"
|
|
|
- v-width="'50%'"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品轮播图:" prop="slider_image">
|
|
|
- <div class="acea-row">
|
|
|
- <div
|
|
|
- class="pictrue"
|
|
|
- v-for="(item, index) in formValidate.slider_image"
|
|
|
- :key="index"
|
|
|
- draggable="true"
|
|
|
- @dragstart="handleDragStart($event, item)"
|
|
|
- @dragover.prevent="handleDragOver($event, item)"
|
|
|
- @dragenter="handleDragEnter($event, item)"
|
|
|
- @dragend="handleDragEnd($event, item)"
|
|
|
- >
|
|
|
- <img v-lazy="item" />
|
|
|
- <Button
|
|
|
- shape="circle"
|
|
|
- icon="md-close"
|
|
|
- @click.native="handleRemove(index)"
|
|
|
- class="btndel"
|
|
|
- ></Button>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- v-if="formValidate.slider_image.length < 10"
|
|
|
- class="upLoad acea-row row-center-wrapper"
|
|
|
- @click="modalPicTap('duo')"
|
|
|
- >
|
|
|
- <Icon type="ios-camera-outline" size="26" />
|
|
|
- </div>
|
|
|
- <Input
|
|
|
- v-model="formValidate.slider_image[0]"
|
|
|
- class="input-display"
|
|
|
- ></Input>
|
|
|
- </div>
|
|
|
- <div class="tips"> 建议尺寸:800 * 800px,可拖拽改变图片顺序,默认首张图为主图,最多上传10张</div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="添加视频:">
|
|
|
- <i-switch v-model="formValidate.video_open" size="large">
|
|
|
- <span slot="open">开启</span>
|
|
|
- <span slot="close">关闭</span>
|
|
|
- </i-switch>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.video_open">
|
|
|
- <FormItem label="视频类型:">
|
|
|
- <RadioGroup v-model="seletVideo" @on-change="changeVideo">
|
|
|
- <Radio :label="0" class="radio">本地视频</Radio>
|
|
|
- <Radio :label="1">视频链接</Radio>
|
|
|
- </RadioGroup>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.video_open">
|
|
|
- <FormItem label="" prop="video_link">
|
|
|
- <Input
|
|
|
- v-if="seletVideo == 1 && !formValidate.video_link"
|
|
|
- v-width="'50%'"
|
|
|
- v-model="videoLink"
|
|
|
- placeholder="请输入视频链接"
|
|
|
- />
|
|
|
- <input
|
|
|
- type="file"
|
|
|
- ref="refid"
|
|
|
- @change="zh_uploadFile_change"
|
|
|
- class="input-display"
|
|
|
- />
|
|
|
- <div
|
|
|
- v-if="
|
|
|
+ <div class="article-manager video-icon form-submit" id="shopp-manager">
|
|
|
+ <div class="i-layout-page-header">
|
|
|
+ <PageHeader class="product_tabs">
|
|
|
+ <div slot="title" class="acea-row row-middle">
|
|
|
+ <router-link :to="{ path: `${roterPre}/product/index` }">
|
|
|
+ <div class="font-sm after-line">
|
|
|
+ <span class="iconfont iconfanhui"></span>
|
|
|
+ <span class="pl10">返回</span>
|
|
|
+ </div>
|
|
|
+ </router-link>
|
|
|
+ <span v-text="$route.params.id ? '编辑商品' : '添加商品'" class="mr20 ml16"></span>
|
|
|
+ </div>
|
|
|
+ </PageHeader>
|
|
|
+ </div>
|
|
|
+ <Card :bordered="false" dis-hover class="ivu-mt">
|
|
|
+ <div class="new_tab">
|
|
|
+ <Tabs v-model="currentTab" @on-click="onhangeTab">
|
|
|
+ <TabPane v-for="(item, index) in headTab" :key="index" :label="item.title" :name="item.name">
|
|
|
+ </TabPane>
|
|
|
+ </Tabs>
|
|
|
+ </div>
|
|
|
+ <Form class="formValidate mt20" ref="formValidate" :rules="ruleValidate" :model="formValidate"
|
|
|
+ :label-width="labelWidth" :label-position="labelPosition" @submit.native.prevent>
|
|
|
+ <Row :gutter="24" type="flex" v-show="currentTab === '1'">
|
|
|
+ <!-- 商品信息-->
|
|
|
+ <!--<Col span="24">-->
|
|
|
+ <!--<FormItem label="商品类型:" props="is_virtual">-->
|
|
|
+ <!--<div-->
|
|
|
+ <!--class="productType"-->
|
|
|
+ <!--:class="formValidate.product_type == item.id ? 'on' : ''-->
|
|
|
+ <!--"-->
|
|
|
+ <!--v-for="(item, index) in productType"-->
|
|
|
+ <!--:key="index"-->
|
|
|
+ <!--@click="productTypeTap(1,item)"-->
|
|
|
+ <!-->-->
|
|
|
+ <!--<div class="name">{{ item.name }}</div>-->
|
|
|
+ <!--<div class="title">({{ item.title }})</div>-->
|
|
|
+ <!--<div-->
|
|
|
+ <!--v-if="formValidate.product_type == item.id"-->
|
|
|
+ <!--class="jiao"-->
|
|
|
+ <!--></div>-->
|
|
|
+ <!--<div-->
|
|
|
+ <!--v-if="formValidate.product_type == item.id"-->
|
|
|
+ <!--class="iconfont iconduihao"-->
|
|
|
+ <!--></div>-->
|
|
|
+ <!--</div>-->
|
|
|
+ <!--</FormItem>-->
|
|
|
+ <!--</Col>-->
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品名称:" prop="store_name">
|
|
|
+ <Input v-model="formValidate.store_name" placeholder="请输入商品名称" v-width="'50%'" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品分类:" prop="cate_id">
|
|
|
+ <el-cascader placeholder="请选择商品分类" v-width="'50%'" size="mini" v-model="formValidate.cate_id"
|
|
|
+ :options="treeSelect" :props="props" filterable clearable>
|
|
|
+ </el-cascader>
|
|
|
+ <!--<span class="addClass" @click="addClass">新增分类</span>-->
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" class="brandName">
|
|
|
+ <FormItem label="商品品牌:" prop="">
|
|
|
+ <Cascader :data="brandData" placeholder="请选择商品品牌" change-on-select
|
|
|
+ v-model="formValidate.brand_id" filterable v-width="'50%'"></Cascader>
|
|
|
+ <!-- <span class="addClass" @click="addBrand">新增品牌</span>-->
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="单位:" prop="unit_name">
|
|
|
+ <Select v-model="formValidate.unit_name" clearable filterable v-width="'50%'" placeholder="请输入单位">
|
|
|
+ <Option v-for="(item, index) in unitNameList" :value="item.name" :key="index">{{ item.name }}</Option>
|
|
|
+ </Select>
|
|
|
+ <!-- <span class="addClass" @click="addUnit">新增单位</span>-->
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="货架:" prop="bid">
|
|
|
+ <Select v-model="formValidate.bid" clearable v-width="'50%'"
|
|
|
+ placeholder="请选择绑定货架">
|
|
|
+ <Option value="" >不绑定</Option>
|
|
|
+ <Option v-for="(item, index) in levelList" :value="item.id" :key="index">{{ item.name }}</Option>
|
|
|
+ </Select>
|
|
|
+ <!-- <span class="addClass" @click="addUnit">新增单位</span>-->
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品标签:" prop="store_label_id" class="labelClass">
|
|
|
+ <div class="acea-row row-middle">
|
|
|
+ <div class="labelInput acea-row row-between-wrapper" @click="openStoreLabel">
|
|
|
+ <div style="width: 90%;">
|
|
|
+ <div v-if="storeDataLabel.length">
|
|
|
+ <Tag closable v-for="(item,index) in storeDataLabel"
|
|
|
+ @on-close="closeStoreLabel(item)">{{item.label_name}}</Tag>
|
|
|
+ </div>
|
|
|
+ <span class="span" v-else>选择商品标签</span>
|
|
|
+ </div>
|
|
|
+ <div class="iconfont iconxiayi"></div>
|
|
|
+ </div>
|
|
|
+ <span class="addClass" @click="addStoreLabel">新增标签</span>
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品编码:" prop="">
|
|
|
+ <Input v-model="formValidate.code" placeholder="请输入商品编码" v-width="'50%'" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品轮播图:" prop="slider_image">
|
|
|
+ <div class="acea-row">
|
|
|
+ <div class="pictrue" v-for="(item, index) in formValidate.slider_image" :key="index"
|
|
|
+ draggable="true" @dragstart="handleDragStart($event, item)"
|
|
|
+ @dragover.prevent="handleDragOver($event, item)"
|
|
|
+ @dragenter="handleDragEnter($event, item)" @dragend="handleDragEnd($event, item)">
|
|
|
+ <img v-lazy="item" />
|
|
|
+ <Button shape="circle" icon="md-close" @click.native="handleRemove(index)"
|
|
|
+ class="btndel"></Button>
|
|
|
+ </div>
|
|
|
+ <div v-if="formValidate.slider_image.length < 10" class="upLoad acea-row row-center-wrapper"
|
|
|
+ @click="modalPicTap('duo')">
|
|
|
+ <Icon type="ios-camera-outline" size="26" />
|
|
|
+ </div>
|
|
|
+ <Input v-model="formValidate.slider_image[0]" class="input-display"></Input>
|
|
|
+ </div>
|
|
|
+ <div class="tips"> 建议尺寸:800 * 800px,可拖拽改变图片顺序,默认首张图为主图,最多上传10张</div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="添加视频:">
|
|
|
+ <i-switch v-model="formValidate.video_open" size="large">
|
|
|
+ <span slot="open">开启</span>
|
|
|
+ <span slot="close">关闭</span>
|
|
|
+ </i-switch>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.video_open">
|
|
|
+ <FormItem label="视频类型:">
|
|
|
+ <RadioGroup v-model="seletVideo" @on-change="changeVideo">
|
|
|
+ <Radio :label="0" class="radio">本地视频</Radio>
|
|
|
+ <Radio :label="1">视频链接</Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.video_open">
|
|
|
+ <FormItem label="" prop="video_link">
|
|
|
+ <Input v-if="seletVideo == 1 && !formValidate.video_link" v-width="'50%'" v-model="videoLink"
|
|
|
+ placeholder="请输入视频链接" />
|
|
|
+ <input type="file" ref="refid" @change="zh_uploadFile_change" class="input-display" />
|
|
|
+ <div v-if="
|
|
|
seletVideo == 0 &&
|
|
|
(upload_type !== '1' || videoLink) &&
|
|
|
!formValidate.video_link
|
|
|
- "
|
|
|
- class="ml10 videbox"
|
|
|
- @click="zh_uploadFile"
|
|
|
- >
|
|
|
- +
|
|
|
- </div>
|
|
|
- <Button
|
|
|
- v-if="
|
|
|
+ " class="ml10 videbox" @click="zh_uploadFile">
|
|
|
+ +
|
|
|
+ </div>
|
|
|
+ <Button v-if="
|
|
|
seletVideo == 1 &&
|
|
|
(upload_type !== '1' || videoLink) &&
|
|
|
!formValidate.video_link
|
|
|
- "
|
|
|
- type="primary"
|
|
|
- icon="ios-cloud-upload-outline"
|
|
|
- class="uploadVideo"
|
|
|
- @click="zh_uploadFile"
|
|
|
- >确认添加</Button>
|
|
|
- <Upload
|
|
|
- v-if="upload_type === '1' && !videoLink"
|
|
|
- :show-upload-list="false"
|
|
|
- :action="fileUrl2"
|
|
|
- :before-upload="videoSaveToUrl"
|
|
|
- :data="uploadData"
|
|
|
- :headers="header"
|
|
|
- :multiple="true"
|
|
|
- style="display: inline-block"
|
|
|
- >
|
|
|
- <div
|
|
|
- v-if="seletVideo === 0 && !formValidate.video_link"
|
|
|
- class="videbox"
|
|
|
- >
|
|
|
- +
|
|
|
- </div>
|
|
|
- </Upload>
|
|
|
- <div class="iview-video-style" v-if="formValidate.video_link">
|
|
|
- <video
|
|
|
- class="video-style"
|
|
|
- :src="formValidate.video_link"
|
|
|
- controls="controls"
|
|
|
- >
|
|
|
- 您的浏览器不支持 video 标签。
|
|
|
- </video>
|
|
|
- <div class="mark"></div>
|
|
|
- <Icon
|
|
|
- type="ios-trash-outline"
|
|
|
- class="iconv"
|
|
|
- @click="delVideo"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <Progress
|
|
|
- class="progress"
|
|
|
- :percent="progress"
|
|
|
- :stroke-width="5"
|
|
|
- v-if="upload.videoIng || videoIng"
|
|
|
- />
|
|
|
- <div class="tips">建议时长:9~30秒,视频宽高比16:9</div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" class="goodsShow">
|
|
|
- <FormItem label="上架时间:">
|
|
|
- <RadioGroup v-model="formValidate.is_show" @on-change="goodsOn">
|
|
|
- <Radio :label="1">
|
|
|
- <Icon type="social-apple"></Icon>
|
|
|
- <span>立即上架</span>
|
|
|
- </Radio>
|
|
|
- <Radio :label="2">
|
|
|
- <Icon type="social-android"></Icon>
|
|
|
- <span>定时上架</span>
|
|
|
- </Radio>
|
|
|
- <Radio :label="0">
|
|
|
- <Icon type="social-windows"></Icon>
|
|
|
- <span>放入仓库</span>
|
|
|
- </Radio>
|
|
|
- </RadioGroup>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.is_show==2">
|
|
|
- <FormItem label="">
|
|
|
- <DatePicker type="datetime" @on-change="onchangeShow" :options="startPickOptions" :value="formValidate.auto_on_time" v-model="formValidate.auto_on_time" placeholder="请选择上架时间" format="yyyy-MM-dd HH:mm" style="width: 260px;"></DatePicker>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" class="goodsShow">
|
|
|
- <FormItem label="定时下架:">
|
|
|
- <Switch v-model="off_show" :true-value="1" :false-value="0" size="large" @on-change="goodsOff">
|
|
|
- <span slot="open">开启</span>
|
|
|
- <span slot="close">关闭</span>
|
|
|
- </Switch>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="off_show==1">
|
|
|
- <FormItem label="">
|
|
|
- <DatePicker type="datetime" @on-change="onchangeOff" :options="endPickOptions" :value="formValidate.auto_off_time" v-model="formValidate.auto_off_time" placeholder="请选择下架时间" format="yyyy-MM-dd HH:mm" style="width: 260px;"></DatePicker>
|
|
|
- <div class="tips">开启定时下架后,系统会在设置时间下架该商品。下架时间需晚于开售时间,商品才能定时开售。</div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- <Row :gutter="24" type="flex" v-show="currentTab === '2'">
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品规格:" props="spec_type">
|
|
|
- <RadioGroup
|
|
|
- v-model="formValidate.spec_type"
|
|
|
- @on-change="changeSpec"
|
|
|
- >
|
|
|
- <Radio :label="0" class="radio">单规格</Radio>
|
|
|
- <Radio :label="1">多规格</Radio>
|
|
|
- </RadioGroup>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <!-- 多规格添加-->
|
|
|
- <Col span="24" v-if="formValidate.spec_type === 1" class="noForm">
|
|
|
- <!-- <Col span="24" v-if="!$route.params.id"> -->
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="选择规格:" prop="" >
|
|
|
- <div class="acea-row row-middle">
|
|
|
- <Select v-model="formValidate.selectRule" style="width: 23%">
|
|
|
- <Option
|
|
|
- v-for="(item, index) in ruleList"
|
|
|
- :value="item.rule_name"
|
|
|
- :key="index"
|
|
|
- >{{ item.rule_name }}</Option
|
|
|
- >
|
|
|
- </Select>
|
|
|
- <Button type="primary" class="mr20" @click="confirm"
|
|
|
- >确认</Button
|
|
|
- >
|
|
|
- <Button @click="addRule">添加规格模板</Button>
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem v-if="attrs.length !== 0">
|
|
|
- <draggable
|
|
|
- class="dragArea list-group"
|
|
|
- :list="attrs"
|
|
|
- group="peoples"
|
|
|
- handle=".move-icon"
|
|
|
- :move="checkMove"
|
|
|
- @end="end"
|
|
|
- >
|
|
|
- <div
|
|
|
- v-for="(item, index) in attrs"
|
|
|
- :key="index"
|
|
|
- class="acea-row row-middle mb10"
|
|
|
- >
|
|
|
- <div class="move-icon">
|
|
|
- <span class="iconfont icondrag2"></span>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- style="width: 90%"
|
|
|
- :class="moveIndex === index ? 'borderStyle' : ''"
|
|
|
- >
|
|
|
- <div class="acea-row row-middle">
|
|
|
- <span class="mr5">{{ item.value }}</span
|
|
|
- ><Icon
|
|
|
- type="ios-close-circle"
|
|
|
- size="14"
|
|
|
- class="curs"
|
|
|
- @click="handleRemoveRole(index)"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <div class="rulesBox">
|
|
|
- <draggable :list="item.detail" handle=".drag">
|
|
|
- <Tag
|
|
|
- type="dot"
|
|
|
- closable
|
|
|
- color="primary"
|
|
|
- v-for="(j, indexn) in item.detail"
|
|
|
- :key="indexn"
|
|
|
- :name="j"
|
|
|
- class="mr20 drag"
|
|
|
- @on-close="handleRemove2(item.detail, indexn)"
|
|
|
- >{{ j }}</Tag
|
|
|
- >
|
|
|
- </draggable>
|
|
|
- <Input
|
|
|
- search
|
|
|
- enter-button="添加"
|
|
|
- placeholder="请输入属性名称"
|
|
|
- v-model="item.detail.attrsVal"
|
|
|
- @on-search="createAttr(item.detail.attrsVal, index)"
|
|
|
- class="width-add"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </draggable>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="createBnt">
|
|
|
- <FormItem>
|
|
|
- <Button
|
|
|
- type="primary"
|
|
|
- icon="md-add"
|
|
|
- @click="addBtn"
|
|
|
- class="mr15"
|
|
|
- >添加新规格</Button
|
|
|
- >
|
|
|
- <Button type="success" @click="generate(1)">立即生成</Button>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="showIput">
|
|
|
- <Col :xl="6" :lg="9" :md="10" :sm="24" :xs="24">
|
|
|
- <FormItem label="规格:">
|
|
|
- <Input
|
|
|
- placeholder="请输入规格"
|
|
|
- v-model="formDynamic.attrsName"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col :xl="6" :lg="9" :md="10" :sm="24" :xs="24">
|
|
|
- <FormItem label="规格值:">
|
|
|
- <Input
|
|
|
- v-model="formDynamic.attrsVal"
|
|
|
- placeholder="请输入规格值"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col :xl="6" :lg="5" :md="10" :sm="24" :xs="24">
|
|
|
- <FormItem>
|
|
|
- <Button type="primary" class="mr15" @click="createAttrName"
|
|
|
- >确定</Button
|
|
|
- >
|
|
|
- <Button @click="offAttrName">取消</Button>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- </Col>
|
|
|
- <!-- 多规格设置-->
|
|
|
- <Col
|
|
|
- :xl="24"
|
|
|
- :lg="24"
|
|
|
- :md="24"
|
|
|
- :sm="24"
|
|
|
- :xs="24"
|
|
|
- v-if="
|
|
|
+ " type="primary" icon="ios-cloud-upload-outline" class="uploadVideo" @click="zh_uploadFile">确认添加</Button>
|
|
|
+ <Upload v-if="upload_type === '1' && !videoLink" :show-upload-list="false" :action="fileUrl2"
|
|
|
+ :before-upload="videoSaveToUrl" :data="uploadData" :headers="header" :multiple="true"
|
|
|
+ style="display: inline-block">
|
|
|
+ <div v-if="seletVideo === 0 && !formValidate.video_link" class="videbox">
|
|
|
+ +
|
|
|
+ </div>
|
|
|
+ </Upload>
|
|
|
+ <div class="iview-video-style" v-if="formValidate.video_link">
|
|
|
+ <video class="video-style" :src="formValidate.video_link" controls="controls">
|
|
|
+ 您的浏览器不支持 video 标签。
|
|
|
+ </video>
|
|
|
+ <div class="mark"></div>
|
|
|
+ <Icon type="ios-trash-outline" class="iconv" @click="delVideo" />
|
|
|
+ </div>
|
|
|
+ <Progress class="progress" :percent="progress" :stroke-width="5"
|
|
|
+ v-if="upload.videoIng || videoIng" />
|
|
|
+ <div class="tips">建议时长:9~30秒,视频宽高比16:9</div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" class="goodsShow">
|
|
|
+ <FormItem label="上架时间:">
|
|
|
+ <RadioGroup v-model="formValidate.is_show" @on-change="goodsOn">
|
|
|
+ <Radio :label="1">
|
|
|
+ <Icon type="social-apple"></Icon>
|
|
|
+ <span>立即上架</span>
|
|
|
+ </Radio>
|
|
|
+ <Radio :label="2">
|
|
|
+ <Icon type="social-android"></Icon>
|
|
|
+ <span>定时上架</span>
|
|
|
+ </Radio>
|
|
|
+ <Radio :label="0">
|
|
|
+ <Icon type="social-windows"></Icon>
|
|
|
+ <span>放入仓库</span>
|
|
|
+ </Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.is_show==2">
|
|
|
+ <FormItem label="">
|
|
|
+ <DatePicker type="datetime" @on-change="onchangeShow" :options="startPickOptions"
|
|
|
+ :value="formValidate.auto_on_time" v-model="formValidate.auto_on_time" placeholder="请选择上架时间"
|
|
|
+ format="yyyy-MM-dd HH:mm" style="width: 260px;"></DatePicker>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" class="goodsShow">
|
|
|
+ <FormItem label="定时下架:">
|
|
|
+ <Switch v-model="off_show" :true-value="1" :false-value="0" size="large" @on-change="goodsOff">
|
|
|
+ <span slot="open">开启</span>
|
|
|
+ <span slot="close">关闭</span>
|
|
|
+ </Switch>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="off_show==1">
|
|
|
+ <FormItem label="">
|
|
|
+ <DatePicker type="datetime" @on-change="onchangeOff" :options="endPickOptions"
|
|
|
+ :value="formValidate.auto_off_time" v-model="formValidate.auto_off_time"
|
|
|
+ placeholder="请选择下架时间" format="yyyy-MM-dd HH:mm" style="width: 260px;"></DatePicker>
|
|
|
+ <div class="tips">开启定时下架后,系统会在设置时间下架该商品。下架时间需晚于开售时间,商品才能定时开售。</div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ <Row :gutter="24" type="flex" v-show="currentTab === '2'">
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品规格:" props="spec_type">
|
|
|
+ <RadioGroup v-model="formValidate.spec_type" @on-change="changeSpec">
|
|
|
+ <Radio :label="0" class="radio">单规格</Radio>
|
|
|
+ <Radio :label="1">多规格</Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <!-- 多规格添加-->
|
|
|
+ <Col span="24" v-if="formValidate.spec_type === 1" class="noForm">
|
|
|
+ <!-- <Col span="24" v-if="!$route.params.id"> -->
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="选择规格:" prop="">
|
|
|
+ <div class="acea-row row-middle">
|
|
|
+ <Select v-model="formValidate.selectRule" style="width: 23%">
|
|
|
+ <Option v-for="(item, index) in ruleList" :value="item.rule_name" :key="index">{{ item.rule_name }}</Option>
|
|
|
+ </Select>
|
|
|
+ <Button type="primary" class="mr20" @click="confirm">确认</Button>
|
|
|
+ <Button @click="addRule">添加规格模板</Button>
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem v-if="attrs.length !== 0">
|
|
|
+ <draggable class="dragArea list-group" :list="attrs" group="peoples" handle=".move-icon"
|
|
|
+ :move="checkMove" @end="end">
|
|
|
+ <div v-for="(item, index) in attrs" :key="index" class="acea-row row-middle mb10">
|
|
|
+ <div class="move-icon">
|
|
|
+ <span class="iconfont icondrag2"></span>
|
|
|
+ </div>
|
|
|
+ <div style="width: 90%" :class="moveIndex === index ? 'borderStyle' : ''">
|
|
|
+ <div class="acea-row row-middle">
|
|
|
+ <span class="mr5">{{ item.value }}</span>
|
|
|
+ <Icon type="ios-close-circle" size="14" class="curs"
|
|
|
+ @click="handleRemoveRole(index)" />
|
|
|
+ </div>
|
|
|
+ <div class="rulesBox">
|
|
|
+ <draggable :list="item.detail" handle=".drag">
|
|
|
+ <Tag type="dot" closable color="primary" v-for="(j, indexn) in item.detail"
|
|
|
+ :key="indexn" :name="j" class="mr20 drag"
|
|
|
+ @on-close="handleRemove2(item.detail, indexn)">{{ j }}</Tag>
|
|
|
+ </draggable>
|
|
|
+ <Input search enter-button="添加" placeholder="请输入属性名称"
|
|
|
+ v-model="item.detail.attrsVal"
|
|
|
+ @on-search="createAttr(item.detail.attrsVal, index)" class="width-add" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </draggable>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="createBnt">
|
|
|
+ <FormItem>
|
|
|
+ <Button type="primary" icon="md-add" @click="addBtn" class="mr15">添加新规格</Button>
|
|
|
+ <Button type="success" @click="generate(1)">立即生成</Button>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="showIput">
|
|
|
+ <Col :xl="6" :lg="9" :md="10" :sm="24" :xs="24">
|
|
|
+ <FormItem label="规格:">
|
|
|
+ <Input placeholder="请输入规格" v-model="formDynamic.attrsName" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col :xl="6" :lg="9" :md="10" :sm="24" :xs="24">
|
|
|
+ <FormItem label="规格值:">
|
|
|
+ <Input v-model="formDynamic.attrsVal" placeholder="请输入规格值" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col :xl="6" :lg="5" :md="10" :sm="24" :xs="24">
|
|
|
+ <FormItem>
|
|
|
+ <Button type="primary" class="mr15" @click="createAttrName">确定</Button>
|
|
|
+ <Button @click="offAttrName">取消</Button>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ </Col>
|
|
|
+ <!-- 多规格设置-->
|
|
|
+ <Col :xl="24" :lg="24" :md="24" :sm="24" :xs="24" v-if="
|
|
|
manyFormValidate.length &&
|
|
|
formValidate.header.length !== 0 &&
|
|
|
attrs.length !== 0
|
|
|
- "
|
|
|
- >
|
|
|
- <!-- 批量设置-->
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="批量设置:" class="labeltop">
|
|
|
- <Table :data="oneFormBatch" :columns="formValidate.product_type == 1?columnsCarMy:formValidate.product_type == 3?columnsFictitious:columns2" border>
|
|
|
- <template slot-scope="{ row, index }" slot="attr">
|
|
|
- <div @click="batchAttr" class="acea-row row-between-wrapper" style="cursor: pointer;">
|
|
|
- <div style="width: 41px;">{{oneFormBatch[0].attr}}</div>
|
|
|
- <span class="iconfont icondrop-down"></span>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="pic">
|
|
|
- <div
|
|
|
- class="acea-row row-middle row-center-wrapper"
|
|
|
- @click="modalPicTap('dan', 'duopi', index)"
|
|
|
- >
|
|
|
- <div
|
|
|
- class="pictrue pictrueTab"
|
|
|
- v-if="oneFormBatch[0].pic"
|
|
|
- >
|
|
|
- <img v-lazy="oneFormBatch[0].pic" />
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="upLoad pictrueTab acea-row row-center-wrapper"
|
|
|
- v-else
|
|
|
- >
|
|
|
- <Icon type="ios-camera-outline" size="26" class="iosfont" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="price">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormBatch[0].price"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="settle_price">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormBatch[0].settle_price"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
-<!-- <template slot-scope="{ row, index }" slot="cost">-->
|
|
|
-<!-- <InputNumber-->
|
|
|
-<!-- v-model="oneFormBatch[0].cost"-->
|
|
|
-<!-- :min="0"-->
|
|
|
-<!-- class="priceBox"-->
|
|
|
-<!-- ></InputNumber>-->
|
|
|
-<!-- </template>-->
|
|
|
- <template slot-scope="{ row, index }" slot="ot_price">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormBatch[0].ot_price"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="stock">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormBatch[0].stock"
|
|
|
- :min="0"
|
|
|
- :disabled="formValidate.product_type == 1 || openErp"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="bar_code">
|
|
|
- <Input v-model="oneFormBatch[0].bar_code"></Input>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="code">
|
|
|
- <Input v-model="oneFormBatch[0].code"></Input>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="weight">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormBatch[0].weight"
|
|
|
- :step="0.1"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="volume">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormBatch[0].volume"
|
|
|
- :step="0.1"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="fictitious" v-if="formValidate.product_type == 1">
|
|
|
- <Button
|
|
|
- v-if="
|
|
|
+ ">
|
|
|
+ <!-- 批量设置-->
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="批量设置:" class="labeltop">
|
|
|
+ <Table :data="oneFormBatch"
|
|
|
+ :columns="formValidate.product_type == 1?columnsCarMy:formValidate.product_type == 3?columnsFictitious:columns2"
|
|
|
+ border>
|
|
|
+ <template slot-scope="{ row, index }" slot="attr">
|
|
|
+ <div @click="batchAttr" class="acea-row row-between-wrapper" style="cursor: pointer;">
|
|
|
+ <div style="width: 41px;">{{oneFormBatch[0].attr}}</div>
|
|
|
+ <span class="iconfont icondrop-down"></span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="pic">
|
|
|
+ <div class="acea-row row-middle row-center-wrapper"
|
|
|
+ @click="modalPicTap('dan', 'duopi', index)">
|
|
|
+ <div class="pictrue pictrueTab" v-if="oneFormBatch[0].pic">
|
|
|
+ <img v-lazy="oneFormBatch[0].pic" />
|
|
|
+ </div>
|
|
|
+ <div class="upLoad pictrueTab acea-row row-center-wrapper" v-else>
|
|
|
+ <Icon type="ios-camera-outline" size="26" class="iosfont" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="price">
|
|
|
+ <InputNumber v-model="oneFormBatch[0].price" :min="0" class="priceBox"></InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="settle_price">
|
|
|
+ <InputNumber v-model="oneFormBatch[0].settle_price" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <!-- <template slot-scope="{ row, index }" slot="cost">-->
|
|
|
+ <!-- <InputNumber-->
|
|
|
+ <!-- v-model="oneFormBatch[0].cost"-->
|
|
|
+ <!-- :min="0"-->
|
|
|
+ <!-- class="priceBox"-->
|
|
|
+ <!-- ></InputNumber>-->
|
|
|
+ <!-- </template>-->
|
|
|
+ <template slot-scope="{ row, index }" slot="ot_price">
|
|
|
+ <InputNumber v-model="oneFormBatch[0].ot_price" :min="0" class="priceBox"></InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="stock">
|
|
|
+ <InputNumber v-model="oneFormBatch[0].stock" :min="0"
|
|
|
+ :disabled="formValidate.product_type == 1 || openErp" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="bar_code">
|
|
|
+ <Input v-model="oneFormBatch[0].bar_code"></Input>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="code">
|
|
|
+ <Input v-model="oneFormBatch[0].code"></Input>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="weight">
|
|
|
+ <InputNumber v-model="oneFormBatch[0].weight" :step="0.1" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="volume">
|
|
|
+ <InputNumber v-model="oneFormBatch[0].volume" :step="0.1" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="fictitious"
|
|
|
+ v-if="formValidate.product_type == 1">
|
|
|
+ <Button v-if="
|
|
|
!row.virtual_list && !row.stock
|
|
|
- "
|
|
|
- @click="addVirtual(0, 'oneFormBatch')"
|
|
|
- >添加卡密</Button
|
|
|
- >
|
|
|
- <span
|
|
|
- v-else
|
|
|
- class="seeCatMy"
|
|
|
- @click="seeVirtual(oneFormBatch[0], 'oneFormBatch', 0)"
|
|
|
- >已设置</span
|
|
|
- >
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="action">
|
|
|
- <a @click="batchAdd">批量设置</a>
|
|
|
- <Divider type="vertical" />
|
|
|
- <a @click="batchDel">清空</a>
|
|
|
- </template>
|
|
|
- </Table>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <!-- 多规格表格-->
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品属性:" class="labeltop">
|
|
|
- <Table
|
|
|
- :data="manyFormValidate"
|
|
|
- :columns="formValidate.header"
|
|
|
- border
|
|
|
- >
|
|
|
- <template slot-scope="{ row, index }" v-for="(item,i) in attrData.length" :slot="'value'+(i+1)">
|
|
|
- <div :class="manyFormValidate[index].select?'selectOn':''">{{manyFormValidate[index]['value'+(i+1)]}}</div>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="pic">
|
|
|
- <div
|
|
|
- class="acea-row row-middle row-center-wrapper"
|
|
|
- @click="modalPicTap('dan', 'duoTable', index)"
|
|
|
- >
|
|
|
- <div
|
|
|
- class="pictrue pictrueTab"
|
|
|
- v-if="manyFormValidate[index].pic"
|
|
|
- >
|
|
|
- <img v-lazy="manyFormValidate[index].pic" />
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="upLoad pictrueTab acea-row row-center-wrapper"
|
|
|
- v-else
|
|
|
- >
|
|
|
- <Icon
|
|
|
- type="ios-camera-outline"
|
|
|
- size="21"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="price">
|
|
|
- <InputNumber
|
|
|
- v-model="manyFormValidate[index].price"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="settle_price">
|
|
|
- <InputNumber
|
|
|
- v-model="manyFormValidate[index].settle_price"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
-<!-- <template slot-scope="{ row, index }" slot="cost">-->
|
|
|
-<!-- <InputNumber-->
|
|
|
-<!-- v-model="manyFormValidate[index].cost"-->
|
|
|
-<!-- :min="0"-->
|
|
|
-<!-- class="priceBox"-->
|
|
|
-<!-- ></InputNumber>-->
|
|
|
-<!-- </template>-->
|
|
|
- <template slot-scope="{ row, index }" slot="ot_price">
|
|
|
- <InputNumber
|
|
|
- v-model="manyFormValidate[index].ot_price"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="stock">
|
|
|
- <InputNumber
|
|
|
- v-model="manyFormValidate[index].stock"
|
|
|
- :min="0"
|
|
|
- :precision="0"
|
|
|
- :disabled="formValidate.product_type == 1 || openErp"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="fictitious" v-if="formValidate.product_type == 1">
|
|
|
- <Button
|
|
|
- v-if="(!row.virtual_list || !row.virtual_list.length) && !row.stock"
|
|
|
- @click="addVirtual(index, 'manyFormValidate')"
|
|
|
- >添加卡密</Button
|
|
|
- >
|
|
|
- <span
|
|
|
- v-else
|
|
|
- class="seeCatMy"
|
|
|
- @click="seeVirtual(row, 'manyFormValidate', index)"
|
|
|
- >已设置</span>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="bar_code">
|
|
|
- <Input v-model="manyFormValidate[index].bar_code"></Input>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="code">
|
|
|
- <Input v-model="manyFormValidate[index].code"></Input>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="weight">
|
|
|
- <InputNumber
|
|
|
- v-model="manyFormValidate[index].weight"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="volume">
|
|
|
- <InputNumber
|
|
|
- v-model="manyFormValidate[index].volume"
|
|
|
- :min="0"
|
|
|
- class="priceBox"
|
|
|
- ></InputNumber>
|
|
|
- </template>
|
|
|
- <template slot-scope="{ row, index }" slot="action">
|
|
|
- <a @click="delAttrTable(index)">删除</a>
|
|
|
- </template>
|
|
|
- </Table>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- </Col>
|
|
|
- </Col>
|
|
|
- <!-- 单规格表格-->
|
|
|
- <div v-if="formValidate.spec_type === 0" style="width: 100%;">
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="图片:" prop="image">
|
|
|
- <div class="pictrueBox" @click="modalPicTap('dan', 'danTable', 0)">
|
|
|
- <div class="pictrue" v-if="oneFormValidate[0].pic">
|
|
|
- <img v-lazy="oneFormValidate[0].pic" />
|
|
|
- </div>
|
|
|
- <div class="upLoad acea-row row-center-wrapper" v-else>
|
|
|
- <Input
|
|
|
- v-model="oneFormValidate[0].pic"
|
|
|
- class="input-display"
|
|
|
- ></Input>
|
|
|
- <Icon type="ios-camera-outline" size="26" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" class="asterisk">
|
|
|
- <div class="asteriskInfo">*</div>
|
|
|
- <FormItem label="售价:">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormValidate[0].price"
|
|
|
- :min="0"
|
|
|
- :max="99999999"
|
|
|
- v-width="'50%'"
|
|
|
- ></InputNumber>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" class="asterisk">
|
|
|
- <div class="asteriskInfo on">*</div>
|
|
|
- <FormItem label="结算价:">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormValidate[0].settle_price"
|
|
|
- :min="0"
|
|
|
- :max="99999999"
|
|
|
- v-width="'50%'"
|
|
|
- ></InputNumber>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
-<!-- <Col span="24" class="asterisk">-->
|
|
|
-<!-- <div class="asteriskInfo on">*</div>-->
|
|
|
-<!-- <FormItem label="成本价:">-->
|
|
|
-<!-- <InputNumber-->
|
|
|
-<!-- v-model="oneFormValidate[0].cost"-->
|
|
|
-<!-- :min="0"-->
|
|
|
-<!-- :max="99999999"-->
|
|
|
-<!-- v-width="'50%'"-->
|
|
|
-<!-- ></InputNumber>-->
|
|
|
-<!-- </FormItem>-->
|
|
|
-<!-- </Col>-->
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="原价:">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormValidate[0].ot_price"
|
|
|
- :min="0"
|
|
|
- :max="99999999"
|
|
|
- v-width="'50%'"
|
|
|
- ></InputNumber>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" class="asterisk">
|
|
|
- <div class="asteriskInfo">*</div>
|
|
|
- <FormItem label="库存:">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormValidate[0].stock"
|
|
|
- :min="0"
|
|
|
- :max="99999999"
|
|
|
- :disabled="formValidate.product_type == 1 || openErp"
|
|
|
- :precision="0"
|
|
|
- v-width="'50%'"
|
|
|
- ></InputNumber>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品条形码:">
|
|
|
- <Input
|
|
|
- v-model.trim="oneFormValidate[0].bar_code"
|
|
|
- v-width="'50%'"
|
|
|
- placeholder="请输入商品条形码"
|
|
|
- ></Input>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品编号:">
|
|
|
- <Input
|
|
|
- v-model.trim="oneFormValidate[0].code"
|
|
|
- v-width="'50%'"
|
|
|
- placeholder="请输入商品编码"
|
|
|
- ></Input>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.product_type == 0">
|
|
|
- <FormItem label="重量(KG):">
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormValidate[0].weight"
|
|
|
- :min="0"
|
|
|
- :max="99999999"
|
|
|
- v-width="'50%'"
|
|
|
- ></InputNumber>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.product_type == 0">
|
|
|
- <FormItem
|
|
|
- label="体积(m³):"
|
|
|
- >
|
|
|
- <InputNumber
|
|
|
- v-model="oneFormValidate[0].volume"
|
|
|
- :min="0"
|
|
|
- :max="99999999"
|
|
|
- v-width="'50%'"
|
|
|
- ></InputNumber>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.product_type == 1">
|
|
|
- <FormItem
|
|
|
- label="卡密设置:"
|
|
|
- >
|
|
|
- <Button
|
|
|
- v-if="
|
|
|
+ " @click="addVirtual(0, 'oneFormBatch')">添加卡密</Button>
|
|
|
+ <span v-else class="seeCatMy"
|
|
|
+ @click="seeVirtual(oneFormBatch[0], 'oneFormBatch', 0)">已设置</span>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="action">
|
|
|
+ <a @click="batchAdd">批量设置</a>
|
|
|
+ <Divider type="vertical" />
|
|
|
+ <a @click="batchDel">清空</a>
|
|
|
+ </template>
|
|
|
+ </Table>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <!-- 多规格表格-->
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品属性:" class="labeltop">
|
|
|
+ <Table :data="manyFormValidate" :columns="formValidate.header" border>
|
|
|
+ <template slot-scope="{ row, index }" v-for="(item,i) in attrData.length"
|
|
|
+ :slot="'value'+(i+1)">
|
|
|
+ <div :class="manyFormValidate[index].select?'selectOn':''">
|
|
|
+ {{manyFormValidate[index]['value'+(i+1)]}}</div>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="pic">
|
|
|
+ <div class="acea-row row-middle row-center-wrapper"
|
|
|
+ @click="modalPicTap('dan', 'duoTable', index)">
|
|
|
+ <div class="pictrue pictrueTab" v-if="manyFormValidate[index].pic">
|
|
|
+ <img v-lazy="manyFormValidate[index].pic" />
|
|
|
+ </div>
|
|
|
+ <div class="upLoad pictrueTab acea-row row-center-wrapper" v-else>
|
|
|
+ <Icon type="ios-camera-outline" size="21" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="price">
|
|
|
+ <InputNumber v-model="manyFormValidate[index].price" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="settle_price">
|
|
|
+ <InputNumber v-model="manyFormValidate[index].settle_price" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <!-- <template slot-scope="{ row, index }" slot="cost">-->
|
|
|
+ <!-- <InputNumber-->
|
|
|
+ <!-- v-model="manyFormValidate[index].cost"-->
|
|
|
+ <!-- :min="0"-->
|
|
|
+ <!-- class="priceBox"-->
|
|
|
+ <!-- ></InputNumber>-->
|
|
|
+ <!-- </template>-->
|
|
|
+ <template slot-scope="{ row, index }" slot="ot_price">
|
|
|
+ <InputNumber v-model="manyFormValidate[index].ot_price" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="stock">
|
|
|
+ <InputNumber v-model="manyFormValidate[index].stock" :min="0" :precision="0"
|
|
|
+ :disabled="formValidate.product_type == 1 || openErp" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="fictitious"
|
|
|
+ v-if="formValidate.product_type == 1">
|
|
|
+ <Button v-if="(!row.virtual_list || !row.virtual_list.length) && !row.stock"
|
|
|
+ @click="addVirtual(index, 'manyFormValidate')">添加卡密</Button>
|
|
|
+ <span v-else class="seeCatMy"
|
|
|
+ @click="seeVirtual(row, 'manyFormValidate', index)">已设置</span>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="bar_code">
|
|
|
+ <Input v-model="manyFormValidate[index].bar_code"></Input>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="code">
|
|
|
+ <Input v-model="manyFormValidate[index].code"></Input>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="weight">
|
|
|
+ <InputNumber v-model="manyFormValidate[index].weight" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="volume">
|
|
|
+ <InputNumber v-model="manyFormValidate[index].volume" :min="0" class="priceBox">
|
|
|
+ </InputNumber>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="{ row, index }" slot="action">
|
|
|
+ <a @click="delAttrTable(index)">删除</a>
|
|
|
+ </template>
|
|
|
+ </Table>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ </Col>
|
|
|
+ </Col>
|
|
|
+ <!-- 单规格表格-->
|
|
|
+ <div v-if="formValidate.spec_type === 0" style="width: 100%;">
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="图片:" prop="image">
|
|
|
+ <div class="pictrueBox" @click="modalPicTap('dan', 'danTable', 0)">
|
|
|
+ <div class="pictrue" v-if="oneFormValidate[0].pic">
|
|
|
+ <img v-lazy="oneFormValidate[0].pic" />
|
|
|
+ </div>
|
|
|
+ <div class="upLoad acea-row row-center-wrapper" v-else>
|
|
|
+ <Input v-model="oneFormValidate[0].pic" class="input-display"></Input>
|
|
|
+ <Icon type="ios-camera-outline" size="26" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" class="asterisk">
|
|
|
+ <div class="asteriskInfo">*</div>
|
|
|
+ <FormItem label="售价:">
|
|
|
+ <InputNumber v-model="oneFormValidate[0].price" :min="0" :max="99999999" v-width="'50%'">
|
|
|
+ </InputNumber>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" class="asterisk">
|
|
|
+ <div class="asteriskInfo on">*</div>
|
|
|
+ <FormItem label="结算价:">
|
|
|
+ <InputNumber v-model="oneFormValidate[0].settle_price" :min="0" :max="99999999"
|
|
|
+ v-width="'50%'"></InputNumber>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <!-- <Col span="24" class="asterisk">-->
|
|
|
+ <!-- <div class="asteriskInfo on">*</div>-->
|
|
|
+ <!-- <FormItem label="成本价:">-->
|
|
|
+ <!-- <InputNumber-->
|
|
|
+ <!-- v-model="oneFormValidate[0].cost"-->
|
|
|
+ <!-- :min="0"-->
|
|
|
+ <!-- :max="99999999"-->
|
|
|
+ <!-- v-width="'50%'"-->
|
|
|
+ <!-- ></InputNumber>-->
|
|
|
+ <!-- </FormItem>-->
|
|
|
+ <!-- </Col>-->
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="原价:">
|
|
|
+ <InputNumber v-model="oneFormValidate[0].ot_price" :min="0" :max="99999999" v-width="'50%'">
|
|
|
+ </InputNumber>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" class="asterisk">
|
|
|
+ <div class="asteriskInfo">*</div>
|
|
|
+ <FormItem label="库存:">
|
|
|
+ <InputNumber v-model="oneFormValidate[0].stock" :min="0" :max="99999999"
|
|
|
+ :disabled="formValidate.product_type == 1 || openErp" :precision="0" v-width="'50%'">
|
|
|
+ </InputNumber>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品条形码:">
|
|
|
+ <Input v-model.trim="oneFormValidate[0].bar_code" v-width="'50%'"
|
|
|
+ placeholder="请输入商品条形码"></Input>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品编号:">
|
|
|
+ <Input v-model.trim="oneFormValidate[0].code" v-width="'50%'" placeholder="请输入商品编码"></Input>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.product_type == 0">
|
|
|
+ <FormItem label="重量(KG):">
|
|
|
+ <InputNumber v-model="oneFormValidate[0].weight" :min="0" :max="99999999" v-width="'50%'">
|
|
|
+ </InputNumber>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.product_type == 0">
|
|
|
+ <FormItem label="体积(m³):">
|
|
|
+ <InputNumber v-model="oneFormValidate[0].volume" :min="0" :max="99999999" v-width="'50%'">
|
|
|
+ </InputNumber>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.product_type == 1">
|
|
|
+ <FormItem label="卡密设置:">
|
|
|
+ <Button v-if="
|
|
|
!oneFormValidate[0].virtual_list.length
|
|
|
&& !oneFormValidate[0].stock
|
|
|
- "
|
|
|
- @click="addVirtual(0, 'oneFormValidate')"
|
|
|
- >添加卡密</Button
|
|
|
- >
|
|
|
- <span
|
|
|
- v-else
|
|
|
- class="seeCatMy"
|
|
|
- @click="seeVirtual(oneFormValidate[0], 'oneFormValidate', 0)"
|
|
|
- >已设置</span
|
|
|
- >
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- </div>
|
|
|
- </Row>
|
|
|
- <!-- 商品详情 -->
|
|
|
- <Row v-show="currentTab === '3'" class="mb10">
|
|
|
- <Col span="16">
|
|
|
- <wangeditor
|
|
|
- style="width: 100%"
|
|
|
- :content="contents"
|
|
|
- @editorContent="getEditorContent"
|
|
|
- ></wangeditor>
|
|
|
- </Col>
|
|
|
- <Col span="6" style="width: 33%">
|
|
|
- <div class="ifam">
|
|
|
- <div class="content" v-html="content"></div>
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- <!-- 其他设置-->
|
|
|
- <Row v-show="currentTab === '4'">
|
|
|
- <Col v-bind="grid3">
|
|
|
- <FormItem label="配送方式:" prop="" required>
|
|
|
- <CheckboxGroup v-model="formValidate.delivery_type">
|
|
|
- <Checkbox label="1">快递</Checkbox>
|
|
|
- <!-- <Checkbox label="3">门店配送</Checkbox>
|
|
|
+ " @click="addVirtual(0, 'oneFormValidate')">添加卡密</Button>
|
|
|
+ <span v-else class="seeCatMy"
|
|
|
+ @click="seeVirtual(oneFormValidate[0], 'oneFormValidate', 0)">已设置</span>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ </div>
|
|
|
+ </Row>
|
|
|
+ <!-- 商品详情 -->
|
|
|
+ <Row v-show="currentTab === '3'" class="mb10">
|
|
|
+ <Col span="16">
|
|
|
+ <wangeditor style="width: 100%" :content="contents" @editorContent="getEditorContent"></wangeditor>
|
|
|
+ </Col>
|
|
|
+ <Col span="6" style="width: 33%">
|
|
|
+ <div class="ifam">
|
|
|
+ <div class="content" v-html="content"></div>
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ <!-- 其他设置-->
|
|
|
+ <Row v-show="currentTab === '4'">
|
|
|
+ <Col v-bind="grid3">
|
|
|
+ <FormItem label="配送方式:" prop="" required>
|
|
|
+ <CheckboxGroup v-model="formValidate.delivery_type">
|
|
|
+ <Checkbox label="1">快递</Checkbox>
|
|
|
+ <!-- <Checkbox label="3">门店配送</Checkbox>
|
|
|
<Checkbox label="2">到店自提</Checkbox> -->
|
|
|
- </CheckboxGroup>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="运费设置:">
|
|
|
- <RadioGroup v-model="formValidate.freight">
|
|
|
- <Radio :label="1">包邮</Radio>
|
|
|
- <Radio :label="2">固定邮费</Radio>
|
|
|
- <Radio :label="3">运费模板</Radio>
|
|
|
- </RadioGroup>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col
|
|
|
- span="24"
|
|
|
- v-if="formValidate.freight == 2"
|
|
|
- >
|
|
|
- <FormItem
|
|
|
- label=""
|
|
|
- prop="freight"
|
|
|
- >
|
|
|
- <div class="acea-row row-middle">
|
|
|
- <InputNumber
|
|
|
- :min="0"
|
|
|
- v-model="formValidate.postage"
|
|
|
- placeholder="请输入金额"
|
|
|
- class="perW20 maxW"
|
|
|
- />
|
|
|
- <span class="ml10">元</span>
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.freight == 3">
|
|
|
- <FormItem label="" prop="">
|
|
|
- <div class="acea-row">
|
|
|
- <Select
|
|
|
- v-model="formValidate.temp_id"
|
|
|
- clearable
|
|
|
- class="perW20 maxW"
|
|
|
- >
|
|
|
- <Option
|
|
|
- v-for="(item, index) in templateList"
|
|
|
- :value="item.id"
|
|
|
- :key="index"
|
|
|
- >{{ item.name }}</Option
|
|
|
- >
|
|
|
- </Select>
|
|
|
- <Button @click="editTemp" class="ml15" v-if='formValidate.temp_id'>查看运费模板</Button>
|
|
|
- <Button @click="addTemp" class="ml15" v-else>添加运费模板</Button>
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="已售数量:">
|
|
|
- <InputNumber
|
|
|
- v-width="'50%'"
|
|
|
- :min="0"
|
|
|
- :max="999999"
|
|
|
- v-model="formValidate.ficti"
|
|
|
- placeholder="请输入已售数量"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="是否限购:">
|
|
|
- <i-switch v-model="formValidate.is_limit" :true-value="1" :false-value="0" size="large" @on-change="limitTap">
|
|
|
- <span slot="open">开启</span>
|
|
|
- <span slot="close">关闭</span>
|
|
|
- </i-switch>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.is_limit">
|
|
|
- <FormItem label="限购类型:">
|
|
|
- <RadioGroup v-model="formValidate.limit_type">
|
|
|
- <Radio :label="1">单次限购</Radio>
|
|
|
- <Radio :label="2">长期限购</Radio>
|
|
|
- </RadioGroup>
|
|
|
- <div class="tips">
|
|
|
- 单次限购是限制每次下单最多购买的数量,长期限购是限制一个用户总共可以购买的数量
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.is_limit">
|
|
|
- <FormItem label="限购数量:">
|
|
|
- <InputNumber
|
|
|
- :min="1"
|
|
|
- v-model="formValidate.limit_num"
|
|
|
- placeholder="请输入限购数量"
|
|
|
- class="perW20 maxW"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="排序:">
|
|
|
- <InputNumber
|
|
|
- :min="0"
|
|
|
- :max="999999"
|
|
|
- v-width="'50%'"
|
|
|
- v-model="formValidate.sort"
|
|
|
- placeholder="请输入排序"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品关键字:" prop="">
|
|
|
- <Input
|
|
|
- v-model="formValidate.keyword"
|
|
|
- placeholder="请输入商品关键字"
|
|
|
- v-width="'50%'"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品简介:" prop="">
|
|
|
- <Input
|
|
|
- v-model="formValidate.store_info"
|
|
|
- type="textarea"
|
|
|
- :rows="3"
|
|
|
- placeholder="请输入商品简介"
|
|
|
- v-width="'50%'"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品口令:">
|
|
|
- <Input
|
|
|
- v-model="formValidate.command_word"
|
|
|
- type="textarea"
|
|
|
- :rows="3"
|
|
|
- placeholder="请输入商品口令"
|
|
|
- v-width="'50%'"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品推荐图:">
|
|
|
- <div
|
|
|
- class="pictrueBox"
|
|
|
- @click="modalPicTap('dan', 'recommend_image')"
|
|
|
- >
|
|
|
- <div class="pictrue" v-if="formValidate.recommend_image">
|
|
|
- <img v-lazy="formValidate.recommend_image" />
|
|
|
- <Input
|
|
|
- v-model="formValidate.recommend_image"
|
|
|
- class="input-display"
|
|
|
- ></Input>
|
|
|
- </div>
|
|
|
- <div class="upLoad acea-row row-center-wrapper" v-else>
|
|
|
- <Input
|
|
|
- v-model="formValidate.recommend_image"
|
|
|
- class="input-display"
|
|
|
- ></Input>
|
|
|
- <Icon type="ios-camera-outline" size="26" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="tips">(建议图片比例5:2)</div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="服务保障:">
|
|
|
- <CheckboxGroup
|
|
|
- v-model="formValidate.ensure_id"
|
|
|
- class="checkAlls"
|
|
|
- >
|
|
|
- <Checkbox :label="item.id" v-for="(item,index) in ensureData">{{item.name}}</Checkbox>
|
|
|
- </CheckboxGroup>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="商品参数:" prop="">
|
|
|
- <Select
|
|
|
- v-model="formValidate.specs_id"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- v-width="'50%'"
|
|
|
- placeholder="请输入商品参数"
|
|
|
- @on-change="specsInfo"
|
|
|
- >
|
|
|
- <Option
|
|
|
- v-for="(item, index) in specsData"
|
|
|
- :value="item.id"
|
|
|
- :key="index"
|
|
|
- >{{ item.name }}</Option
|
|
|
- >
|
|
|
- </Select>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="formValidate.specs_id">
|
|
|
- <FormItem label="" props="">
|
|
|
- <Table border :columns="specsColumns" :data="specsList" ref="table" class="specsList" width="700">
|
|
|
- <template slot-scope="{ row, index }" slot="action">
|
|
|
- <a @click="delSpecs(index)" v-if="index>0">删除</a>
|
|
|
- </template>
|
|
|
- </Table>
|
|
|
- <Button class="mt20" @click="addSpecs">添加参数</Button>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24">
|
|
|
- <FormItem label="自定义留言:">
|
|
|
- <i-switch
|
|
|
- v-model="customBtn"
|
|
|
- @on-change="customMessBtn"
|
|
|
- size="large"
|
|
|
- >
|
|
|
- <span slot="open">开启</span>
|
|
|
- <span slot="close">关闭</span>
|
|
|
- </i-switch>
|
|
|
- <div class="mt10" v-if="customBtn">
|
|
|
- <Select
|
|
|
- v-model="formValidate.system_form_id"
|
|
|
- filterable
|
|
|
- v-width="'50%'"
|
|
|
- placeholder="请选择"
|
|
|
- @on-change="changeForm"
|
|
|
- >
|
|
|
- <Option
|
|
|
- v-for="(item, index) in formList"
|
|
|
- :value="item.id"
|
|
|
- :key="item.id"
|
|
|
- >{{ item.name }}</Option
|
|
|
- >
|
|
|
- </Select>
|
|
|
- </div>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- <Col span="24" v-if="customBtn && formValidate.system_form_id">
|
|
|
- <FormItem label="" props="">
|
|
|
- <Table border :columns="formColumns" :data="formTypeList" ref="table" class="specsList on">
|
|
|
- <template slot-scope="{ row }" slot="require">
|
|
|
- <span>{{row.require?'必填':'不必填'}}</span>
|
|
|
- </template>
|
|
|
- </Table>
|
|
|
- </FormItem>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- <Spin size="large" fix v-if="spinShow"></Spin>
|
|
|
- </Form>
|
|
|
- <Modal
|
|
|
- v-model="modalPic"
|
|
|
- width="960px"
|
|
|
- scrollable
|
|
|
- footer-hide
|
|
|
- closable
|
|
|
- title="上传商品图"
|
|
|
- :mask-closable="false"
|
|
|
- :z-index="1"
|
|
|
- >
|
|
|
- <uploadPictures
|
|
|
- :isChoice="isChoice"
|
|
|
- @getPic="getPic"
|
|
|
- @getPicD="getPicD"
|
|
|
- :gridBtn="gridBtn"
|
|
|
- :gridPic="gridPic"
|
|
|
- v-if="modalPic"
|
|
|
- ></uploadPictures>
|
|
|
- </Modal>
|
|
|
- </Card>
|
|
|
- <Card :bordered="false" dis-hover class="fixed-card" :style="{left: `${!menuCollapse?'200px':isMobile?'0':'80px'}`}">
|
|
|
- <Form>
|
|
|
- <FormItem>
|
|
|
- <Button v-if="currentTab !== '1'" @click="upTab">上一步</Button>
|
|
|
- <Button
|
|
|
- type="primary"
|
|
|
- class="submission"
|
|
|
- v-if="currentTab !== '4'"
|
|
|
- @click="downTab('formValidate')"
|
|
|
- >下一步</Button
|
|
|
- >
|
|
|
- <Button
|
|
|
- type="primary"
|
|
|
- :disabled="openSubimit"
|
|
|
- class="submission"
|
|
|
- @click="handleSubmit('formValidate')"
|
|
|
- v-if="$route.params.id || currentTab === '4'"
|
|
|
- >保存</Button
|
|
|
- >
|
|
|
- </FormItem>
|
|
|
- </Form>
|
|
|
- </Card>
|
|
|
- <freightTemplate
|
|
|
- :template="template"
|
|
|
- v-on:changeTemplate="changeTemplate"
|
|
|
- ref="templates"
|
|
|
- ></freightTemplate>
|
|
|
- <add-attr ref="addattr" @getList="userSearchs"></add-attr>
|
|
|
- <!--<coupon-list-->
|
|
|
- <!--ref="couponTemplates"-->
|
|
|
- <!--@nameId="nameId"-->
|
|
|
- <!--:couponids="formValidate.coupon_ids"-->
|
|
|
- <!--:updateIds="updateIds"-->
|
|
|
- <!--:updateName="updateName"-->
|
|
|
- <!--></coupon-list>-->
|
|
|
- <!-- 生成淘宝京东表单-->
|
|
|
- <!--<Modal v-model="modals" @on-cancel="cancel" class="Box" class-name="vertical-center-modal" scrollable footer-hide closable title="复制淘宝、天猫、京东、苏宁、1688" :mask-closable="false" width="800" height="500">-->
|
|
|
- <!--<tao-bao ref="taobaos" v-if="modals" @on-close="onClose"></tao-bao>-->
|
|
|
- <!--</Modal>-->
|
|
|
- <!-- 商品列表 -->
|
|
|
- <Modal v-model="goodsModals" title="商品列表" footerHide scrollable width="900" @on-cancel="goodCancel">
|
|
|
- <goods-list v-if="goodsModals" ref="goodslist" @getProductId="getProductId" :ischeckbox="true"></goods-list>
|
|
|
- </Modal>
|
|
|
- <!-- 用户标签 -->
|
|
|
- <!--<Modal-->
|
|
|
- <!--v-model="labelShow"-->
|
|
|
- <!--scrollable-->
|
|
|
- <!--title="请选择用户标签"-->
|
|
|
- <!--:closable="false"-->
|
|
|
- <!--width="320"-->
|
|
|
- <!--:footer-hide="true"-->
|
|
|
- <!--:mask-closable="false"-->
|
|
|
- <!-->-->
|
|
|
- <!--<userLabel ref="userLabel" @activeData="activeData" @close="labelClose"></userLabel>-->
|
|
|
- <!--</Modal>-->
|
|
|
- <!-- 商品标签 -->
|
|
|
- <Modal
|
|
|
- v-model="storeLabelShow"
|
|
|
- scrollable
|
|
|
- title="选择商品标签"
|
|
|
- :closable="true"
|
|
|
- width="540"
|
|
|
- :footer-hide="true"
|
|
|
- :mask-closable="false"
|
|
|
- >
|
|
|
- <labelList ref="storeLabel" @activeData="activeStoreData" @close="storeLabelClose"></labelList>
|
|
|
- </Modal>
|
|
|
- <menus-from :formValidate="formBrand" :fromName='1' ref="menusFrom"></menus-from>
|
|
|
- <Modal v-model="attrShow"
|
|
|
- scrollable
|
|
|
- title="请选择商品规格"
|
|
|
- :closable="false"
|
|
|
- width="320"
|
|
|
- :footer-hide="true"
|
|
|
- :mask-closable="false">
|
|
|
- <attr-list :attrs="attrsList" @activeData="activeAttr" @close="labelAttr" @subAttrs="subAttrs" v-if="attrShow"></attr-list>
|
|
|
- </Modal>
|
|
|
- <!--<Modal v-model="carMyShow"-->
|
|
|
- <!--scrollable-->
|
|
|
- <!--title="添加卡密"-->
|
|
|
- <!--closable-->
|
|
|
- <!--width="700"-->
|
|
|
- <!--:footer-hide="true"-->
|
|
|
- <!--:mask-closable="false">-->
|
|
|
- <!--<add-carMy ref="addCarMy" :virtualList="virtualList" @changeVirtual="changeVirtual" @fixdBtn="fixdBtn" @closeCarMy="closeCarMy"></add-carMy>-->
|
|
|
- <!--</Modal>-->
|
|
|
- </div>
|
|
|
+ </CheckboxGroup>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="运费设置:">
|
|
|
+ <RadioGroup v-model="formValidate.freight">
|
|
|
+ <Radio :label="1">包邮</Radio>
|
|
|
+ <Radio :label="2">固定邮费</Radio>
|
|
|
+ <Radio :label="3">运费模板</Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.freight == 2">
|
|
|
+ <FormItem label="" prop="freight">
|
|
|
+ <div class="acea-row row-middle">
|
|
|
+ <InputNumber :min="0" v-model="formValidate.postage" placeholder="请输入金额"
|
|
|
+ class="perW20 maxW" />
|
|
|
+ <span class="ml10">元</span>
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.freight == 3">
|
|
|
+ <FormItem label="" prop="">
|
|
|
+ <div class="acea-row">
|
|
|
+ <Select v-model="formValidate.temp_id" clearable class="perW20 maxW">
|
|
|
+ <Option v-for="(item, index) in templateList" :value="item.id" :key="index">{{ item.name }}</Option>
|
|
|
+ </Select>
|
|
|
+ <Button @click="editTemp" class="ml15" v-if='formValidate.temp_id'>查看运费模板</Button>
|
|
|
+ <Button @click="addTemp" class="ml15" v-else>添加运费模板</Button>
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="已售数量:">
|
|
|
+ <InputNumber v-width="'50%'" :min="0" :max="999999" v-model="formValidate.ficti"
|
|
|
+ placeholder="请输入已售数量" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="是否限购:">
|
|
|
+ <i-switch v-model="formValidate.is_limit" :true-value="1" :false-value="0" size="large"
|
|
|
+ @on-change="limitTap">
|
|
|
+ <span slot="open">开启</span>
|
|
|
+ <span slot="close">关闭</span>
|
|
|
+ </i-switch>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.is_limit">
|
|
|
+ <FormItem label="限购类型:">
|
|
|
+ <RadioGroup v-model="formValidate.limit_type">
|
|
|
+ <Radio :label="1">单次限购</Radio>
|
|
|
+ <Radio :label="2">长期限购</Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ <div class="tips">
|
|
|
+ 单次限购是限制每次下单最多购买的数量,长期限购是限制一个用户总共可以购买的数量
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.is_limit">
|
|
|
+ <FormItem label="限购数量:">
|
|
|
+ <InputNumber :min="1" v-model="formValidate.limit_num" placeholder="请输入限购数量"
|
|
|
+ class="perW20 maxW" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="排序:">
|
|
|
+ <InputNumber :min="0" :max="999999" v-width="'50%'" v-model="formValidate.sort"
|
|
|
+ placeholder="请输入排序" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品关键字:" prop="">
|
|
|
+ <Input v-model="formValidate.keyword" placeholder="请输入商品关键字" v-width="'50%'" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品简介:" prop="">
|
|
|
+ <Input v-model="formValidate.store_info" type="textarea" :rows="3" placeholder="请输入商品简介"
|
|
|
+ v-width="'50%'" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品口令:">
|
|
|
+ <Input v-model="formValidate.command_word" type="textarea" :rows="3" placeholder="请输入商品口令"
|
|
|
+ v-width="'50%'" />
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品推荐图:">
|
|
|
+ <div class="pictrueBox" @click="modalPicTap('dan', 'recommend_image')">
|
|
|
+ <div class="pictrue" v-if="formValidate.recommend_image">
|
|
|
+ <img v-lazy="formValidate.recommend_image" />
|
|
|
+ <Input v-model="formValidate.recommend_image" class="input-display"></Input>
|
|
|
+ </div>
|
|
|
+ <div class="upLoad acea-row row-center-wrapper" v-else>
|
|
|
+ <Input v-model="formValidate.recommend_image" class="input-display"></Input>
|
|
|
+ <Icon type="ios-camera-outline" size="26" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="tips">(建议图片比例5:2)</div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="服务保障:">
|
|
|
+ <CheckboxGroup v-model="formValidate.ensure_id" class="checkAlls">
|
|
|
+ <Checkbox :label="item.id" v-for="(item,index) in ensureData">{{item.name}}</Checkbox>
|
|
|
+ </CheckboxGroup>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="商品参数:" prop="">
|
|
|
+ <Select v-model="formValidate.specs_id" clearable filterable v-width="'50%'"
|
|
|
+ placeholder="请输入商品参数" @on-change="specsInfo">
|
|
|
+ <Option v-for="(item, index) in specsData" :value="item.id" :key="index">{{ item.name }}</Option>
|
|
|
+ </Select>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="formValidate.specs_id">
|
|
|
+ <FormItem label="" props="">
|
|
|
+ <Table border :columns="specsColumns" :data="specsList" ref="table" class="specsList"
|
|
|
+ width="700">
|
|
|
+ <template slot-scope="{ row, index }" slot="action">
|
|
|
+ <a @click="delSpecs(index)" v-if="index>0">删除</a>
|
|
|
+ </template>
|
|
|
+ </Table>
|
|
|
+ <Button class="mt20" @click="addSpecs">添加参数</Button>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24">
|
|
|
+ <FormItem label="自定义留言:">
|
|
|
+ <i-switch v-model="customBtn" @on-change="customMessBtn" size="large">
|
|
|
+ <span slot="open">开启</span>
|
|
|
+ <span slot="close">关闭</span>
|
|
|
+ </i-switch>
|
|
|
+ <div class="mt10" v-if="customBtn">
|
|
|
+ <Select v-model="formValidate.system_form_id" filterable v-width="'50%'" placeholder="请选择"
|
|
|
+ @on-change="changeForm">
|
|
|
+ <Option v-for="(item, index) in formList" :value="item.id" :key="item.id">{{ item.name }}</Option>
|
|
|
+ </Select>
|
|
|
+ </div>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ <Col span="24" v-if="customBtn && formValidate.system_form_id">
|
|
|
+ <FormItem label="" props="">
|
|
|
+ <Table border :columns="formColumns" :data="formTypeList" ref="table" class="specsList on">
|
|
|
+ <template slot-scope="{ row }" slot="require">
|
|
|
+ <span>{{row.require?'必填':'不必填'}}</span>
|
|
|
+ </template>
|
|
|
+ </Table>
|
|
|
+ </FormItem>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ <Spin size="large" fix v-if="spinShow"></Spin>
|
|
|
+ </Form>
|
|
|
+ <Modal v-model="modalPic" width="960px" scrollable footer-hide closable title="上传商品图" :mask-closable="false"
|
|
|
+ :z-index="1">
|
|
|
+ <uploadPictures :isChoice="isChoice" @getPic="getPic" @getPicD="getPicD" :gridBtn="gridBtn"
|
|
|
+ :gridPic="gridPic" v-if="modalPic"></uploadPictures>
|
|
|
+ </Modal>
|
|
|
+ </Card>
|
|
|
+ <Card :bordered="false" dis-hover class="fixed-card"
|
|
|
+ :style="{left: `${!menuCollapse?'200px':isMobile?'0':'80px'}`}">
|
|
|
+ <Form>
|
|
|
+ <FormItem>
|
|
|
+ <Button v-if="currentTab !== '1'" @click="upTab">上一步</Button>
|
|
|
+ <Button type="primary" class="submission" v-if="currentTab !== '4'"
|
|
|
+ @click="downTab('formValidate')">下一步</Button>
|
|
|
+ <Button type="primary" :disabled="openSubimit" class="submission"
|
|
|
+ @click="handleSubmit('formValidate')" v-if="$route.params.id || currentTab === '4'">保存</Button>
|
|
|
+ </FormItem>
|
|
|
+ </Form>
|
|
|
+ </Card>
|
|
|
+ <freightTemplate :template="template" v-on:changeTemplate="changeTemplate" ref="templates"></freightTemplate>
|
|
|
+ <add-attr ref="addattr" @getList="userSearchs"></add-attr>
|
|
|
+ <!--<coupon-list-->
|
|
|
+ <!--ref="couponTemplates"-->
|
|
|
+ <!--@nameId="nameId"-->
|
|
|
+ <!--:couponids="formValidate.coupon_ids"-->
|
|
|
+ <!--:updateIds="updateIds"-->
|
|
|
+ <!--:updateName="updateName"-->
|
|
|
+ <!--></coupon-list>-->
|
|
|
+ <!-- 生成淘宝京东表单-->
|
|
|
+ <!--<Modal v-model="modals" @on-cancel="cancel" class="Box" class-name="vertical-center-modal" scrollable footer-hide closable title="复制淘宝、天猫、京东、苏宁、1688" :mask-closable="false" width="800" height="500">-->
|
|
|
+ <!--<tao-bao ref="taobaos" v-if="modals" @on-close="onClose"></tao-bao>-->
|
|
|
+ <!--</Modal>-->
|
|
|
+ <!-- 商品列表 -->
|
|
|
+ <Modal v-model="goodsModals" title="商品列表" footerHide scrollable width="900" @on-cancel="goodCancel">
|
|
|
+ <goods-list v-if="goodsModals" ref="goodslist" @getProductId="getProductId" :ischeckbox="true"></goods-list>
|
|
|
+ </Modal>
|
|
|
+ <!-- 用户标签 -->
|
|
|
+ <!--<Modal-->
|
|
|
+ <!--v-model="labelShow"-->
|
|
|
+ <!--scrollable-->
|
|
|
+ <!--title="请选择用户标签"-->
|
|
|
+ <!--:closable="false"-->
|
|
|
+ <!--width="320"-->
|
|
|
+ <!--:footer-hide="true"-->
|
|
|
+ <!--:mask-closable="false"-->
|
|
|
+ <!-->-->
|
|
|
+ <!--<userLabel ref="userLabel" @activeData="activeData" @close="labelClose"></userLabel>-->
|
|
|
+ <!--</Modal>-->
|
|
|
+ <!-- 商品标签 -->
|
|
|
+ <Modal v-model="storeLabelShow" scrollable title="选择商品标签" :closable="true" width="540" :footer-hide="true"
|
|
|
+ :mask-closable="false">
|
|
|
+ <labelList ref="storeLabel" @activeData="activeStoreData" @close="storeLabelClose"></labelList>
|
|
|
+ </Modal>
|
|
|
+ <menus-from :formValidate="formBrand" :fromName='1' ref="menusFrom"></menus-from>
|
|
|
+ <Modal v-model="attrShow" scrollable title="请选择商品规格" :closable="false" width="320" :footer-hide="true"
|
|
|
+ :mask-closable="false">
|
|
|
+ <attr-list :attrs="attrsList" @activeData="activeAttr" @close="labelAttr" @subAttrs="subAttrs"
|
|
|
+ v-if="attrShow"></attr-list>
|
|
|
+ </Modal>
|
|
|
+ <!--<Modal v-model="carMyShow"-->
|
|
|
+ <!--scrollable-->
|
|
|
+ <!--title="添加卡密"-->
|
|
|
+ <!--closable-->
|
|
|
+ <!--width="700"-->
|
|
|
+ <!--:footer-hide="true"-->
|
|
|
+ <!--:mask-closable="false">-->
|
|
|
+ <!--<add-carMy ref="addCarMy" :virtualList="virtualList" @changeVirtual="changeVirtual" @fixdBtn="fixdBtn" @closeCarMy="closeCarMy"></add-carMy>-->
|
|
|
+ <!--</Modal>-->
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-// import COS from 'cos-js-sdk-v5'
|
|
|
-import { mapState,mapMutations } from "vuex";
|
|
|
-import Setting from "@/setting";
|
|
|
-import util from "@/libs/util";
|
|
|
-import vuedraggable from "vuedraggable";
|
|
|
-import uploadPictures from "@/components/uploadPictures";
|
|
|
-import freightTemplate from "@/components/freightTemplate";
|
|
|
-import wangeditor from "@/components/wangEditor/index.vue";
|
|
|
-
|
|
|
-import menusFrom from "../components/menusFrom";
|
|
|
-// import userLabel from "@/components/labelList";
|
|
|
-import labelList from "@/components/labelList";
|
|
|
-import couponList from "@/components/couponList";
|
|
|
-import goodsList from '@/components/goodsList/index';
|
|
|
-import addAttr from "../components/addAttr";
|
|
|
-import attrList from "../components/attrList";
|
|
|
-// import addCarMy from "../components/addCarMy";
|
|
|
-// import taoBao from './taoBao'
|
|
|
-import {
|
|
|
- productInfoApi,
|
|
|
- cascaderList,
|
|
|
- productAddApi,
|
|
|
- generateAttrApi,
|
|
|
- productGetRuleApi,
|
|
|
- productGetTemplateApi,
|
|
|
- productGetTempKeysApi,
|
|
|
- checkActivityApi,
|
|
|
- productCache,
|
|
|
- cacheDelete,
|
|
|
- brandList,
|
|
|
- productCreateApi,
|
|
|
- productAllUnit,
|
|
|
- productUnitCreate,
|
|
|
- uploadType,
|
|
|
- productAllEnsure,
|
|
|
- productLabelAdd,
|
|
|
- productAllSpecs,
|
|
|
- allSystemForm,
|
|
|
- systemFormInfo
|
|
|
-} from "@/api/product";
|
|
|
-import { erpConfig } from "@/api/erp";
|
|
|
-import { uploadByPieces } from "@/utils/upload"; //引入uploadByPieces方法
|
|
|
-export default {
|
|
|
- name: "product_productAdd",
|
|
|
- components: {
|
|
|
- uploadPictures,
|
|
|
- freightTemplate,
|
|
|
- goodsList,
|
|
|
- addAttr,
|
|
|
- couponList,
|
|
|
- // taoBao,
|
|
|
- // userLabel,
|
|
|
- menusFrom,
|
|
|
- attrList,
|
|
|
- // addCarMy,
|
|
|
- labelList,
|
|
|
- wangeditor,
|
|
|
- draggable: vuedraggable,
|
|
|
- },
|
|
|
- data() {
|
|
|
- return {
|
|
|
- formTypeList: [],
|
|
|
- formColumns: [
|
|
|
- {
|
|
|
- title: '表单标题',
|
|
|
- key: 'title',
|
|
|
- // align:'center',
|
|
|
- minWidth: 100
|
|
|
- },
|
|
|
- {
|
|
|
- title: '表单类型',
|
|
|
- key: 'name',
|
|
|
- // align:'center',
|
|
|
- minWidth: 100
|
|
|
- },
|
|
|
- {
|
|
|
- title: '是否必填',
|
|
|
- slot: 'require',
|
|
|
- // align:'center',
|
|
|
- minWidth: 100
|
|
|
- }
|
|
|
- ],
|
|
|
- roterPre: Setting.roterPre,
|
|
|
- specsList:[],
|
|
|
- specsColumns:[
|
|
|
- {
|
|
|
- title: '参数名称',
|
|
|
- key: 'name',
|
|
|
- align:'center',
|
|
|
- width: 150,
|
|
|
- render: (h, params) => {
|
|
|
- return h("div", [
|
|
|
- h("Input", {
|
|
|
- props: {
|
|
|
- value: params.row.name,
|
|
|
- placeholder:'请输入参数名称'
|
|
|
- },
|
|
|
- on: {
|
|
|
- "on-change": (e) => {
|
|
|
- params.row.name = e.target.value;
|
|
|
- this.specsList[params.index].name = e.target.value;
|
|
|
- },
|
|
|
- },
|
|
|
- }),
|
|
|
- ]);
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- title: '参数值',
|
|
|
- key: 'value',
|
|
|
- align:'center',
|
|
|
- width: 300,
|
|
|
- render: (h, params) => {
|
|
|
- return h("div", [
|
|
|
- h("Input", {
|
|
|
- props: {
|
|
|
- value: params.row.value,
|
|
|
- placeholder:'请输入参数值'
|
|
|
- },
|
|
|
- on: {
|
|
|
- "on-change": (e) => {
|
|
|
- params.row.value = e.target.value;
|
|
|
- this.specsList[params.index].value = e.target.value;
|
|
|
- },
|
|
|
- },
|
|
|
- }),
|
|
|
- ]);
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- title: '排序',
|
|
|
- key: 'sort',
|
|
|
- align:'center',
|
|
|
- width: 100,
|
|
|
- render: (h, params) => {
|
|
|
- return h("div", [
|
|
|
- h("InputNumber", {
|
|
|
- props: {
|
|
|
- value: parseInt(params.row.sort) || 0,
|
|
|
- placeholder:'排序',
|
|
|
- precision:0
|
|
|
- },
|
|
|
- on: {
|
|
|
- "on-change": (e) => {
|
|
|
- params.row.sort = e;
|
|
|
- this.specsList[params.index].sort = e;
|
|
|
- },
|
|
|
- },
|
|
|
- }),
|
|
|
- ]);
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- title: '操作',
|
|
|
- slot: 'action',
|
|
|
- align:'center',
|
|
|
- minWidth: 120
|
|
|
- }
|
|
|
- ],
|
|
|
- //自定义留言下拉选择
|
|
|
- customList: [
|
|
|
- {
|
|
|
- value: "text",
|
|
|
- label: "文本框",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "number",
|
|
|
- label: "数字",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "email",
|
|
|
- label: "邮件",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "data",
|
|
|
- label: "日期",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "time",
|
|
|
- label: "时间",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "id",
|
|
|
- label: "身份证",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "phone",
|
|
|
- label: "手机号",
|
|
|
- },
|
|
|
- {
|
|
|
- value: "img",
|
|
|
- label: "图片",
|
|
|
- },
|
|
|
- ],
|
|
|
- headTab: [
|
|
|
- { title: "基础信息", name: "1" },
|
|
|
- { title: "规格库存", name: "2" },
|
|
|
- { title: "商品详情", name: "3" },
|
|
|
- { title: "其他设置", name: "4" },
|
|
|
- ],
|
|
|
- productType: [
|
|
|
- { name: "普通商品", title: "物流发货", id: 0 },
|
|
|
- { name: "卡密/网盘", title: "自动发货", id: 1 },
|
|
|
- { name: "虚拟商品", title: "虚拟发货", id: 3 },
|
|
|
- ],
|
|
|
- virtualList:[],
|
|
|
- carMyShow: false,//是否开启卡密弹窗
|
|
|
- // recommend: [], //商品推荐
|
|
|
- customBtn: false, //自定义留言开关
|
|
|
- attrShow:false,
|
|
|
- content: "",
|
|
|
- contents: "",
|
|
|
- seletVideo: 0,
|
|
|
- fileUrl: Setting.apiBaseURL + "/file/upload",
|
|
|
- fileUrl2: Setting.apiBaseURL + "/file/video_upload",
|
|
|
- upload_type: "", //视频上传类型 1 本地上传 2 3 4 OSS上传
|
|
|
- uploadData: {}, // 上传参数
|
|
|
- header: {},
|
|
|
- // dataLabel:[],
|
|
|
- storeDataLabel:[],
|
|
|
- labelShow:false,
|
|
|
- storeLabelShow:false,
|
|
|
- props: { emitPath: false, multiple: true, checkStrictly: true },
|
|
|
- type: 0,
|
|
|
- goodsModals: false,
|
|
|
- off_show: 0,
|
|
|
- modals: false,
|
|
|
- spinShow: false,
|
|
|
- openSubimit: false,
|
|
|
- grid2: {
|
|
|
- xl: 10,
|
|
|
- lg: 12,
|
|
|
- md: 12,
|
|
|
- sm: 24,
|
|
|
- xs: 24,
|
|
|
- },
|
|
|
- grid3: {
|
|
|
- xl: 18,
|
|
|
- lg: 18,
|
|
|
- md: 20,
|
|
|
- sm: 24,
|
|
|
- xs: 24,
|
|
|
- },
|
|
|
- // 批量设置表格data
|
|
|
- oneFormBatch: [
|
|
|
- {
|
|
|
- attr:"全部",
|
|
|
- pic: "",
|
|
|
- price: 0,
|
|
|
- settle_price: 0,
|
|
|
- cost: 0,
|
|
|
- ot_price: 0,
|
|
|
- stock: 0,
|
|
|
- bar_code: "",
|
|
|
- code: "",
|
|
|
- weight: 0,
|
|
|
- volume: 0,
|
|
|
- },
|
|
|
- ],
|
|
|
- // 规格数据
|
|
|
- formDynamic: {
|
|
|
- attrsName: "",
|
|
|
- attrsVal: "",
|
|
|
- },
|
|
|
- formDynamicNameData: [],
|
|
|
- isBtn: false,
|
|
|
- columnsCarMy:[],
|
|
|
- columns2: [
|
|
|
- {
|
|
|
- title: "商品规格",
|
|
|
- slot: "attr",
|
|
|
- align: "center",
|
|
|
- minWidth: 80,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "图片",
|
|
|
- slot: "pic",
|
|
|
- align: "center",
|
|
|
- minWidth: 80,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "售价",
|
|
|
- slot: "price",
|
|
|
- align: "center",
|
|
|
- minWidth: 95,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "结算价",
|
|
|
- slot: "settle_price",
|
|
|
- align: "center",
|
|
|
- minWidth: 95,
|
|
|
- },
|
|
|
- // {
|
|
|
- // title: "成本价",
|
|
|
- // slot: "cost",
|
|
|
- // align: "center",
|
|
|
- // minWidth: 95,
|
|
|
- // },
|
|
|
- {
|
|
|
- title: "原价",
|
|
|
- slot: "ot_price",
|
|
|
- align: "center",
|
|
|
- minWidth: 95,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "库存",
|
|
|
- slot: "stock",
|
|
|
- align: "center",
|
|
|
- minWidth: 95,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "商品条形码",
|
|
|
- slot: "bar_code",
|
|
|
- align: "center",
|
|
|
- minWidth: 120,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "商品编号",
|
|
|
- slot: "code",
|
|
|
- align: "center",
|
|
|
- minWidth: 120,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "重量(KG)",
|
|
|
- slot: "weight",
|
|
|
- align: "center",
|
|
|
- minWidth: 95,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "体积(m³)",
|
|
|
- slot: "volume",
|
|
|
- align: "center",
|
|
|
- minWidth: 95,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "操作",
|
|
|
- slot: "action",
|
|
|
- // fixed: "right",
|
|
|
- align: "center",
|
|
|
- minWidth: 140,
|
|
|
- },
|
|
|
- ],
|
|
|
- columns: [],
|
|
|
- columnsInstall: [],
|
|
|
- columnsInstal2: [],
|
|
|
- gridPic: {
|
|
|
- xl: 6,
|
|
|
- lg: 8,
|
|
|
- md: 12,
|
|
|
- sm: 12,
|
|
|
- xs: 12,
|
|
|
- },
|
|
|
- gridBtn: {
|
|
|
- xl: 4,
|
|
|
- lg: 8,
|
|
|
- md: 8,
|
|
|
- sm: 8,
|
|
|
- xs: 8,
|
|
|
- },
|
|
|
- formValidate: {
|
|
|
- supplier_id:0,//供应商
|
|
|
- // is_presale_product: 0, //预售商品开关
|
|
|
- is_limit:0,//是否限购开关
|
|
|
- limit_type:1,//1单次限购,2长期限购
|
|
|
- limit_num:1,//限购数量
|
|
|
- // is_vip_product: 0, //付费会员专属开关
|
|
|
- // is_support_refund:0,
|
|
|
- disk_info: "", //卡密简介
|
|
|
- // presale_day: 1, //预售发货时间-结束
|
|
|
- // presale_time:[],
|
|
|
- auto_on_time:'',
|
|
|
- video_open: false, //视频按钮是否显示
|
|
|
- store_name: "",
|
|
|
- freight: 1, //运费设置
|
|
|
- postage: 0, //设置运费金额
|
|
|
- custom_form: [], //自定义留言
|
|
|
- system_form_id: 0,//自定义表单id
|
|
|
- cate_id: [],
|
|
|
- // label_id: [],
|
|
|
- ensure_id:[],
|
|
|
- keyword: "",
|
|
|
- unit_name: "",
|
|
|
- specs_id:0,
|
|
|
- store_info: "",
|
|
|
- bar_code:"",
|
|
|
- code:"",
|
|
|
- image: "",
|
|
|
- recommend_image: "",
|
|
|
- slider_image: [],
|
|
|
- description: "",
|
|
|
- ficti: 0,
|
|
|
- sort: 0,
|
|
|
- is_show: 1,
|
|
|
- is_hot: 0,
|
|
|
- is_benefit: 0,
|
|
|
- is_best: 0,
|
|
|
- is_new: 0,
|
|
|
- is_good: 0,
|
|
|
- is_postage: 0,
|
|
|
- // is_sub: [],
|
|
|
- id: 0,
|
|
|
- spec_type: 0,
|
|
|
- video_link: "",
|
|
|
- temp_id: "",
|
|
|
- attrs: [],
|
|
|
- items: [
|
|
|
- {
|
|
|
- pic: "",
|
|
|
- price: 0,
|
|
|
- cost: 0,
|
|
|
- ot_price: 0,
|
|
|
- stock: 0,
|
|
|
- bar_code: "",
|
|
|
- code: "",
|
|
|
- },
|
|
|
- ],
|
|
|
- // activity: ["默认", "秒杀", "砍价", "拼团"],
|
|
|
- // couponName: [],
|
|
|
- header: [],
|
|
|
- selectRule: "",
|
|
|
- coupon_ids: [],
|
|
|
- command_word: "",
|
|
|
- delivery_type: ["1"],
|
|
|
- specs:[],
|
|
|
- recommend_list: [],
|
|
|
- brand_id: [],
|
|
|
- product_type:0
|
|
|
- },
|
|
|
- ruleList: [],
|
|
|
- templateList: [],
|
|
|
- createBnt: false,
|
|
|
- showIput: false,
|
|
|
- manyFormValidate: [],
|
|
|
- // 单规格表格data
|
|
|
- oneFormValidate: [
|
|
|
- {
|
|
|
- pic: "",
|
|
|
- price: 0,
|
|
|
- settle_price: 0,
|
|
|
- cost: 0,
|
|
|
- ot_price: 0,
|
|
|
- stock: 0,
|
|
|
- bar_code: "",
|
|
|
- code: "",
|
|
|
- weight: 0,
|
|
|
- volume: 0,
|
|
|
- brokerage: 0,
|
|
|
- brokerage_two: 0,
|
|
|
- vip_price: 0,
|
|
|
- virtual_list: []
|
|
|
- },
|
|
|
- ],
|
|
|
- images: [],
|
|
|
- imagesTable: "",
|
|
|
- currentTab: "1",
|
|
|
- isChoice: "",
|
|
|
- grid: {
|
|
|
- xl: 8,
|
|
|
- lg: 8,
|
|
|
- md: 12,
|
|
|
- sm: 24,
|
|
|
- xs: 24,
|
|
|
- },
|
|
|
- loading: false,
|
|
|
- modalPic: false,
|
|
|
- template: false,
|
|
|
- uploadList: [],
|
|
|
- treeSelect: [],
|
|
|
- labelSelect: [],
|
|
|
- ensureData:[],
|
|
|
- specsData:[],
|
|
|
- picTit: "",
|
|
|
- tableIndex: 0,
|
|
|
- ruleValidate: {
|
|
|
- store_name: [
|
|
|
- { required: true, message: "请输入商品名称", trigger: "blur" },
|
|
|
- ],
|
|
|
- cate_id: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: "请选择商品分类",
|
|
|
- trigger: "change",
|
|
|
- type: "array"
|
|
|
- },
|
|
|
- ],
|
|
|
- keyword: [
|
|
|
- { required: true, message: "请输入商品关键字", trigger: "blur" },
|
|
|
- ],
|
|
|
- unit_name: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: "请输入单位",
|
|
|
- trigger: "change",
|
|
|
- },
|
|
|
- ],
|
|
|
- store_info: [
|
|
|
- { required: true, message: "请输入商品简介", trigger: "blur" },
|
|
|
- ],
|
|
|
- //image: [{ required: true, message: "请上传商品图", trigger: "change" }],
|
|
|
- slider_image: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: "请上传商品轮播图",
|
|
|
- type: "array",
|
|
|
- trigger: "change",
|
|
|
- },
|
|
|
- ],
|
|
|
- spec_type: [
|
|
|
- { required: true, message: "请选择商品规格", trigger: "change" },
|
|
|
- ],
|
|
|
- selectRule: [
|
|
|
- { required: true, message: "请选择商品规格属性", trigger: "change" },
|
|
|
- ]
|
|
|
- },
|
|
|
- manyBrokerage: 0,
|
|
|
- manyBrokerageTwo: 0,
|
|
|
- manyVipPrice: 0,
|
|
|
- upload: {
|
|
|
- videoIng: false, // 是否显示进度条;
|
|
|
- },
|
|
|
- videoIng: false, // 是否显示进度条;
|
|
|
- progress: 0, // 进度条默认0
|
|
|
- videoLink: "",
|
|
|
- attrs: [],
|
|
|
- // activity: { 默认: "colorBlue", 秒杀: "colorBlue", 砍价: "colorBlue", 拼团: "colorBlue" },
|
|
|
- // couponName: [],
|
|
|
- updateIds: [],
|
|
|
- updateName: [],
|
|
|
- rakeBack: [
|
|
|
- {
|
|
|
- title: "一级返佣",
|
|
|
- slot: "brokerage",
|
|
|
- align: "center",
|
|
|
- width: 95,
|
|
|
- },
|
|
|
- {
|
|
|
- title: "二级返佣",
|
|
|
- slot: "brokerage_two",
|
|
|
- align: "center",
|
|
|
- width: 95,
|
|
|
- },
|
|
|
- ],
|
|
|
- member: [
|
|
|
- {
|
|
|
- title: "会员价",
|
|
|
- slot: "vip_price",
|
|
|
- align: "center",
|
|
|
- width: 95,
|
|
|
- },
|
|
|
- ],
|
|
|
- headerCarMy:{
|
|
|
- title: "卡密设置",
|
|
|
- slot: "fictitious",
|
|
|
- align: "center",
|
|
|
- width: 95,
|
|
|
- },
|
|
|
- columnsInstalM: [],
|
|
|
- moveIndex: "",
|
|
|
- goodsData:[],
|
|
|
- brandData:[],
|
|
|
- unitNameList:[],
|
|
|
- formBrand:{},
|
|
|
- attrsList:[],
|
|
|
- activeAtter:[],
|
|
|
- tabIndex: 0,
|
|
|
- tabName: "",
|
|
|
- attrData:[],
|
|
|
- datePickerOptions: {
|
|
|
- disabledDate (date) {
|
|
|
- return date && date.valueOf() < Date.now() - 86400000;
|
|
|
- }
|
|
|
- },
|
|
|
- openErp:false,
|
|
|
- formList: []
|
|
|
- };
|
|
|
- },
|
|
|
- computed: {
|
|
|
- ...mapState("admin/layout", ["isMobile","menuCollapse"]),
|
|
|
- labelWidth() {
|
|
|
- return this.isMobile ? undefined : 120;
|
|
|
- },
|
|
|
- labelPosition() {
|
|
|
- return this.isMobile ? "top" : "right";
|
|
|
- },
|
|
|
- labelBottom() {
|
|
|
- return this.isMobile ? undefined : 15;
|
|
|
- },
|
|
|
- startPickOptions() {
|
|
|
- const that = this;
|
|
|
- return {
|
|
|
- disabledDate(time) {
|
|
|
- if(that.formValidate.auto_off_time) {
|
|
|
- return(
|
|
|
- time.getTime() > new Date(that.formValidate.auto_off_time).getTime() - 86400000
|
|
|
- )
|
|
|
- }
|
|
|
- return ''
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- endPickOptions() {
|
|
|
- const that = this;
|
|
|
- return {
|
|
|
- disabledDate(time) {
|
|
|
- if(that.formValidate.is_show == '1'){
|
|
|
- return time.getTime() < Date.now();
|
|
|
- }
|
|
|
- if(that.formValidate.auto_on_time) {
|
|
|
- return(
|
|
|
- time.getTime() < new Date(that.formValidate.auto_on_time).getTime() + 86400000
|
|
|
- )
|
|
|
- }
|
|
|
- return ''
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- changeUnit() {
|
|
|
- const { unitNameList } = this;
|
|
|
- const { unit_name } = this.formValidate;
|
|
|
- return {
|
|
|
- unitNameList,
|
|
|
- unit_name
|
|
|
- };
|
|
|
- }
|
|
|
- },
|
|
|
- watch: {
|
|
|
- changeUnit({ unitNameList, unit_name }) {
|
|
|
- if (!unit_name) {
|
|
|
- return;
|
|
|
- }
|
|
|
- let result = unitNameList.find(unit => unit.name == unit_name);
|
|
|
- if (!result) {
|
|
|
- this.formValidate.unit_name = '';
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- created() {
|
|
|
- this.columns = this.columns2.slice(1, 10);
|
|
|
- let data = JSON.parse(JSON.stringify(this.columns2));
|
|
|
- data.splice(8,2,this.headerCarMy);
|
|
|
- this.columnsCarMy = data;
|
|
|
- let fictitious = JSON.parse(JSON.stringify(this.columns2));
|
|
|
- fictitious.splice(8,2);
|
|
|
- this.columnsFictitious = fictitious;
|
|
|
- this.getToken();
|
|
|
- this.getErpConfig();
|
|
|
- // this.columnsInstall = this.columns2.slice(0, 4).concat(this.columnsInstall);
|
|
|
- // this.columnsInsta8 = this.columns2.slice(0, 4).concat(this.columnsInsta8);
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- this.setCopyrightShow({ value: false });
|
|
|
- if ((this.$route.params.id !== "0" && this.$route.params.id) || this.$route.query.copy) {
|
|
|
- this.getInfo();
|
|
|
- } else if (this.$route.params.id === "0") {
|
|
|
- productCache()
|
|
|
- .then((res) => {
|
|
|
- let data = res.data.info;
|
|
|
- if (!Array.isArray(data)) {
|
|
|
- let cate_id = data.cate_id.map(Number);
|
|
|
- // let label_id = data.label_id.map(Number);
|
|
|
- this.attrs = data.items || [];
|
|
|
- let ids = [];
|
|
|
- // let names = [];
|
|
|
- // if (data.coupons) {
|
|
|
- // data.coupons.map((item) => {
|
|
|
- // ids.push(item.id);
|
|
|
- // });
|
|
|
- // this.couponName = data.coupons;
|
|
|
- // }
|
|
|
- let brandIds = [];
|
|
|
- data.brand_id.forEach(item=>{
|
|
|
- brandIds.push(item.toString())
|
|
|
- })
|
|
|
- this.formValidate = data;
|
|
|
- this.formTypeList = data.custom_form_info || [];
|
|
|
- this.formValidate.brand_id = brandIds;
|
|
|
- // this.couponName = data.coupons;
|
|
|
- // that.couponName = names;
|
|
|
- this.formValidate.coupon_ids = ids;
|
|
|
- this.formValidate.is_limit = this.formValidate.is_limit?1:0;
|
|
|
- this.formValidate.limit_type = parseInt(this.formValidate.limit_type);
|
|
|
- // this.formValidate.is_support_refund = parseInt(this.formValidate.is_support_refund);
|
|
|
- this.updateIds = ids;
|
|
|
- this.updateName = data.coupons;
|
|
|
- this.formValidate.cate_id = cate_id;
|
|
|
- // this.dataLabel = data.label_id;
|
|
|
- this.storeDataLabel = data.store_label_id;
|
|
|
- this.specsList = data.specs;
|
|
|
- this.oneFormValidate = data.attrs;
|
|
|
- this.formValidate.header = [];
|
|
|
- this.generate(0);
|
|
|
- // this.addmanyData(data.attrs);
|
|
|
- // this.productTypeTap(2);
|
|
|
- this.columns = this.columns2.slice(1, 10);
|
|
|
- //this.manyFormValidate = data.attrs;
|
|
|
- this.formValidate.system_form_id = data.system_form_id || 0;
|
|
|
- if (this.formValidate.system_form_id) {
|
|
|
- this.customBtn = true;
|
|
|
- }
|
|
|
- this.spec_type = data.spec_type;
|
|
|
- if (data.spec_type === 0) {
|
|
|
- this.manyFormValidate = [];
|
|
|
- } else {
|
|
|
- this.createBnt = true;
|
|
|
- this.oneFormValidate = [
|
|
|
- {
|
|
|
- pic: data.slider_image[0],
|
|
|
- price: 0,
|
|
|
- settle_price: 0,
|
|
|
- cost: 0,
|
|
|
- ot_price: 0,
|
|
|
- stock: 0,
|
|
|
- bar_code: "",
|
|
|
- code: "",
|
|
|
- weight: 0,
|
|
|
- volume: 0,
|
|
|
- brokerage: 0,
|
|
|
- brokerage_two: 0,
|
|
|
- vip_price: 0,
|
|
|
- virtual_list: [],
|
|
|
- },
|
|
|
- ];
|
|
|
- }
|
|
|
- this.spinShow = false;
|
|
|
- }
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- this.$Message.error(err.msg);
|
|
|
- });
|
|
|
- }
|
|
|
- if(this.$route.query.type){
|
|
|
- this.modals = true;
|
|
|
- this.type = this.$route.query.type;
|
|
|
- }else {
|
|
|
- this.type = 0;
|
|
|
- }
|
|
|
- this.goodsCategory();
|
|
|
- this.productGetRule();
|
|
|
- this.productGetTemplate();
|
|
|
- this.getBrandList();
|
|
|
- this.getAllUnit();
|
|
|
- this.uploadType();
|
|
|
- this.getProductAllEnsure();
|
|
|
- this.getProductAllSpecs();
|
|
|
- this.getAllSystemForm();
|
|
|
- },
|
|
|
- destroyed () {
|
|
|
- this.setCopyrightShow({ value: true });
|
|
|
- },
|
|
|
- methods: {
|
|
|
- ...mapMutations('admin/layout', [
|
|
|
- 'setCopyrightShow'
|
|
|
- ]),
|
|
|
- changeForm(e){
|
|
|
- this.getSystemFormInfo(e,{type:1});
|
|
|
- },
|
|
|
- getSystemFormInfo(e,data){
|
|
|
- systemFormInfo(e,data).then(res=>{
|
|
|
- this.formTypeList = res.data.info;
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- getAllSystemForm(){
|
|
|
- allSystemForm().then(res=>{
|
|
|
- this.formList = res.data;
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- limitTap(e){
|
|
|
- if(e){
|
|
|
- this.formValidate.limit_type = (this.formValidate.is_limit && !this.formValidate.limit_type)?1:0
|
|
|
- this.formValidate.limit_num = (this.formValidate.is_limit && this.formValidate.limit_num == 0)?1:0
|
|
|
- }else{
|
|
|
- this.formValidate.limit_type = 0;
|
|
|
- this.formValidate.limit_num = 0;
|
|
|
- }
|
|
|
- },
|
|
|
- //erp配置
|
|
|
- getErpConfig(){
|
|
|
- erpConfig().then(res=>{
|
|
|
- this.openErp = res.data.open_erp;
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- delSpecs(index){
|
|
|
- this.specsList.splice(index, 1);
|
|
|
- },
|
|
|
- addSpecs(){
|
|
|
- let obj = {'name':'','value':'','sort':0}
|
|
|
- this.specsList.push(obj)
|
|
|
- },
|
|
|
- specsInfo(e){
|
|
|
- this.specsData.forEach(item=>{
|
|
|
- if(item.id == e){
|
|
|
- this.specsList = item.specs
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- getProductAllSpecs(){
|
|
|
- productAllSpecs().then(res=>{
|
|
|
- this.specsData = res.data
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- getProductAllEnsure(){
|
|
|
- productAllEnsure().then(res=>{
|
|
|
- this.ensureData = res.data
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- //添加倒入卡密的值
|
|
|
- changeVirtual(e){
|
|
|
- this.virtualList = this.virtualList.concat(e);
|
|
|
- },
|
|
|
- //添加卡密
|
|
|
- addVirtual(index, name) {
|
|
|
- this.tabIndex = index;
|
|
|
- this.tabName = name;
|
|
|
- this.virtualListClear();
|
|
|
- this.$refs.addCarMy.fixedCar = {
|
|
|
- disk_info:'',
|
|
|
- stock:0
|
|
|
- }
|
|
|
- this.$refs.addCarMy.cartMyType = 1;
|
|
|
- this.carMyShow = true;
|
|
|
- },
|
|
|
- //确认提交卡密
|
|
|
- fixdBtn(e){
|
|
|
- if(e.cartMyType == 1){
|
|
|
- this.$set(this[this.tabName][this.tabIndex],"disk_info",e.disk_info);
|
|
|
- this.$set(this[this.tabName][this.tabIndex],"stock",Number(e.stock));
|
|
|
- this[this.tabName][this.tabIndex].virtual_list = [];
|
|
|
- }else{
|
|
|
- this.$set(this[this.tabName][this.tabIndex],"virtual_list",e.virtualList);
|
|
|
- this.$set(this[this.tabName][this.tabIndex],"stock",e.virtualList.length);
|
|
|
- this[this.tabName][this.tabIndex].disk_info = '';
|
|
|
- }
|
|
|
- this.carMyShow = false;
|
|
|
- },
|
|
|
- closeCarMy(){
|
|
|
- this.carMyShow = false;
|
|
|
- },
|
|
|
- //清空卡密
|
|
|
- virtualListClear(){
|
|
|
- this.virtualList = [
|
|
|
- {
|
|
|
- key: "",
|
|
|
- value: "",
|
|
|
- },
|
|
|
- ];
|
|
|
- },
|
|
|
- seeVirtual(data, name, index) {
|
|
|
- this.tabName = name;
|
|
|
- this.tabIndex = index;
|
|
|
- this.virtualListClear();
|
|
|
- this.$refs.addCarMy.fixedCar = {
|
|
|
- disk_info:'',
|
|
|
- stock:0
|
|
|
- }
|
|
|
- if (data.virtual_list && data.virtual_list.length) {
|
|
|
- this.$refs.addCarMy.cartMyType = 2;
|
|
|
- this.virtualList = data.virtual_list;
|
|
|
- } else if (data.disk_info) {
|
|
|
- this.$refs.addCarMy.cartMyType = 1;
|
|
|
- this.$refs.addCarMy.fixedCar.disk_info = data.disk_info;
|
|
|
- this.$refs.addCarMy.fixedCar.stock = data.stock;
|
|
|
- }
|
|
|
- this.carMyShow = true;
|
|
|
- },
|
|
|
- //动态添加组件
|
|
|
- addAssembly(){
|
|
|
- this.formValidate.custom_form.push({
|
|
|
- title: "",
|
|
|
- label: "text",
|
|
|
- value: "",
|
|
|
- status: 0,
|
|
|
- });
|
|
|
- },
|
|
|
- customMessBtn(e) {
|
|
|
- if (!e) {
|
|
|
- this.formValidate.system_form_id = 0;
|
|
|
- }
|
|
|
- },
|
|
|
- addcustom() {
|
|
|
- if (this.formValidate.custom_form.length > 9) {
|
|
|
- this.$Message.warning("最多添加10条");
|
|
|
- } else {
|
|
|
- this.addAssembly();
|
|
|
- }
|
|
|
- },
|
|
|
- delcustom(index) {
|
|
|
- this.formValidate.custom_form.splice(index, 1);
|
|
|
- },
|
|
|
- // 预售具体日期
|
|
|
- // onchangeTime(e) {
|
|
|
- // this.formValidate.presale_time = e;
|
|
|
- // },
|
|
|
- //定时上架
|
|
|
- onchangeShow(e){
|
|
|
- this.formValidate.auto_on_time = e
|
|
|
- },
|
|
|
- //定时下架
|
|
|
- onchangeOff(e){
|
|
|
- this.formValidate.auto_off_time = e
|
|
|
- },
|
|
|
- //打开属性
|
|
|
- batchAttr(){
|
|
|
- this.attrShow = true;
|
|
|
- // if(!this.activeAtter.length){
|
|
|
- // let data = this.attrs;
|
|
|
- // data.map(el=>{
|
|
|
- // el.details = [];
|
|
|
- // el.detail.map(label=>{
|
|
|
- // el.details.push({
|
|
|
- // name:label,
|
|
|
- // select:false
|
|
|
- // })
|
|
|
- // })
|
|
|
- // })
|
|
|
- // this.attrsList = data;
|
|
|
- // }
|
|
|
- },
|
|
|
- //获取属性
|
|
|
- getAttr(){
|
|
|
- this.oneFormBatch[0].attr = '全部';
|
|
|
- let data = this.attrs;
|
|
|
- data.map(el=>{
|
|
|
- el.details = [];
|
|
|
- el.detail.map(label=>{
|
|
|
- el.details.push({
|
|
|
- name:label,
|
|
|
- select:false
|
|
|
- })
|
|
|
- })
|
|
|
- })
|
|
|
- this.attrsList = data;
|
|
|
- },
|
|
|
- //选中属性
|
|
|
- activeAttr(e){
|
|
|
- this.attrsList = e;
|
|
|
- },
|
|
|
- //关闭属性弹窗
|
|
|
- labelAttr(){
|
|
|
- this.attrShow = false;
|
|
|
- },
|
|
|
- //多属性为空
|
|
|
- manyEmpty(j){
|
|
|
- j.pic = '';
|
|
|
- j.price = 0;
|
|
|
- j.settle_price = 0;
|
|
|
- j.cost = 0;
|
|
|
- j.ot_price = 0;
|
|
|
- j.stock = 0;
|
|
|
- j.bar_code = '';
|
|
|
- j.code = '';
|
|
|
- j.weight = 0;
|
|
|
- j.volume = 0;
|
|
|
- j.virtual_list = []
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- doCombination(arr) {
|
|
|
- var count = arr.length - 1; //数组长度(从0开始)
|
|
|
- var tmp = [];
|
|
|
- var totalArr = [];// 总数组
|
|
|
-
|
|
|
- return doCombinationCallback(arr, 0);//从第一个开始
|
|
|
- //js 没有静态数据,为了避免和外部数据混淆,需要使用闭包的形式
|
|
|
- function doCombinationCallback(arr, curr_index) {
|
|
|
- for(let val of arr[curr_index]) {
|
|
|
- tmp[curr_index] = val;//以curr_index为索引,加入数组
|
|
|
- //当前循环下标小于数组总长度,则需要继续调用方法
|
|
|
- if(curr_index < count) {
|
|
|
- doCombinationCallback(arr, curr_index + 1);//继续调用
|
|
|
- }else{
|
|
|
- totalArr.push(tmp.join(','));//(直接给push进去,push进去的不是值,而是值的地址)
|
|
|
- }
|
|
|
-
|
|
|
- //js 对象都是 地址引用(引用关系),每次都需要重新初始化,否则 totalArr的数据都会是最后一次的 tmp 数据;
|
|
|
- let oldTmp = tmp;
|
|
|
- tmp = [];
|
|
|
- for(let index of oldTmp) {
|
|
|
- tmp.push(index);
|
|
|
- }
|
|
|
- }
|
|
|
- return totalArr;
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- //提交属性值;
|
|
|
- subAttrs(e){
|
|
|
- let selectData = [];
|
|
|
- this.attrsList.forEach((el,index)=>{
|
|
|
- let obj = [];
|
|
|
- el.details.forEach((label)=>{
|
|
|
- if(label.select){
|
|
|
- obj.push(label.name);
|
|
|
- }
|
|
|
- })
|
|
|
- if(obj.length){
|
|
|
- selectData.push(obj)
|
|
|
- }
|
|
|
- })
|
|
|
- let newData = [];
|
|
|
- if(selectData.length){
|
|
|
- newData = this.doCombination(selectData);
|
|
|
- }
|
|
|
- this.attrShow = false;
|
|
|
- this.activeAtter = selectData;
|
|
|
- this.oneFormBatch[0].attr = newData.length?newData.join(';') : '全部';
|
|
|
- this.manyFormValidate.forEach(j=>{
|
|
|
- j.select = false;
|
|
|
- if(newData.length){
|
|
|
- newData.forEach(item=>{
|
|
|
- if(j.values.split('').length == item.split('').length){
|
|
|
- if(j.values == item){
|
|
|
- j.select = true;
|
|
|
- }
|
|
|
- }else{
|
|
|
- if(j.values.indexOf(item) != -1){
|
|
|
- j.select = true;
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- }else{
|
|
|
- j.select = true;
|
|
|
- }
|
|
|
- })
|
|
|
- this.$set(this,'manyFormValidate',this.manyFormValidate)
|
|
|
- },
|
|
|
- goodsOn(e){
|
|
|
- if(e==0 || e==1){
|
|
|
- this.formValidate.auto_on_time = '';
|
|
|
- }
|
|
|
- },
|
|
|
- goodsOff(e){
|
|
|
- if(!e){
|
|
|
- this.formValidate.auto_off_time = '';
|
|
|
- }
|
|
|
- },
|
|
|
- addBrand(){
|
|
|
- this.$refs.menusFrom.modals = true
|
|
|
- this.$refs.menusFrom.titleFrom = "添加品牌分类"
|
|
|
- this.formBrand = {
|
|
|
- sort:0,
|
|
|
- is_show:1
|
|
|
- }
|
|
|
- this.formBrand.fid = [0];
|
|
|
- this.$refs.menusFrom.type = 1
|
|
|
- },
|
|
|
- getAllUnit(){
|
|
|
- productAllUnit().then(res=>{
|
|
|
- this.unitNameList = res.data;
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- addClass(){
|
|
|
- this.$modalForm(productCreateApi()).then(() => this.goodsCategory());
|
|
|
- },
|
|
|
- addUnit(){
|
|
|
- this.$modalForm(productUnitCreate()).then(() => this.getAllUnit());
|
|
|
- },
|
|
|
- addStoreLabel(){
|
|
|
- this.$modalForm(productLabelAdd()).then(() => {});
|
|
|
- },
|
|
|
- productTypeTap(num,item){
|
|
|
- if(num == 1){
|
|
|
- if(this.$route.params.id) return this.$Message.error('商品类型不能切换!');
|
|
|
- this.formValidate.product_type = item.id;
|
|
|
- }
|
|
|
- if(this.formValidate.product_type){
|
|
|
- this.headTab = [
|
|
|
- { title: "基础信息", name: "1" },
|
|
|
- { title: "规格库存", name: "2" },
|
|
|
- { title: "商品详情", name: "3" },
|
|
|
- { title: "其他设置", name: "4" },
|
|
|
- ]
|
|
|
- this.formValidate.postage = 0;
|
|
|
- this.formValidate.supplier_id = 0;
|
|
|
- }else{
|
|
|
- this.headTab = [
|
|
|
- { title: "基础信息", name: "1" },
|
|
|
- { title: "规格库存", name: "2" },
|
|
|
- { title: "商品详情", name: "3" },
|
|
|
- { title: "其他设置", name: "4" },
|
|
|
- ]
|
|
|
- }
|
|
|
- },
|
|
|
- // closeLabel(label){
|
|
|
- // let index = this.dataLabel.indexOf(this.dataLabel.filter(d=>d.id == label.id)[0]);
|
|
|
- // this.dataLabel.splice(index,1);
|
|
|
- // },
|
|
|
- // activeData(dataLabel){
|
|
|
- // this.labelShow = false;
|
|
|
- // this.dataLabel = dataLabel;
|
|
|
- // },
|
|
|
- // openLabel(row) {
|
|
|
- // this.labelShow = true;
|
|
|
- // this.$refs.userLabel.userLabel(JSON.parse(JSON.stringify(this.dataLabel)));
|
|
|
- // },
|
|
|
- // 标签弹窗关闭
|
|
|
- labelClose() {
|
|
|
- this.labelShow = false;
|
|
|
- },
|
|
|
- closeStoreLabel(label){
|
|
|
- let index = this.storeDataLabel.indexOf(this.storeDataLabel.filter(d=>d.id == label.id)[0]);
|
|
|
- this.storeDataLabel.splice(index,1);
|
|
|
- },
|
|
|
- activeStoreData(storeDataLabel){
|
|
|
- this.storeLabelShow = false;
|
|
|
- this.storeDataLabel = storeDataLabel;
|
|
|
- },
|
|
|
- openStoreLabel(row) {
|
|
|
- this.storeLabelShow = true;
|
|
|
- this.$refs.storeLabel.userLabel(JSON.parse(JSON.stringify(this.storeDataLabel)));
|
|
|
- },
|
|
|
- // 标签弹窗关闭
|
|
|
- storeLabelClose() {
|
|
|
- this.storeLabelShow = false;
|
|
|
- },
|
|
|
- // 品牌列表
|
|
|
- getBrandList(){
|
|
|
- brandList().then(res=>{
|
|
|
- //initBran()函数作用iview中规定value必须是字符串,后台返回成了数字,用于处理这个,给了个递归;
|
|
|
- this.initBran(res.data);
|
|
|
- this.brandData = res.data;
|
|
|
- }).catch(err=>{
|
|
|
- this.$Message.error(err.msg);
|
|
|
- })
|
|
|
- },
|
|
|
- initBran(data){
|
|
|
- data.map(item=>{
|
|
|
- item.value = item.value.toString();
|
|
|
- if(item.children && item.children.length){
|
|
|
- this.initBran(item.children);
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- getProductId(e){
|
|
|
- this.goodsModals = false;
|
|
|
- let nArr = this.goodsData.concat(e).filter((element,index,self)=>{
|
|
|
- return self.findIndex(x=>x.product_id==element.product_id) == index
|
|
|
- })
|
|
|
-
|
|
|
- this.goodsData = nArr.slice(0,12);
|
|
|
- },
|
|
|
- goodCancel () {
|
|
|
- this.goodsModals = false;
|
|
|
- },
|
|
|
- // goodsTap(){
|
|
|
- // this.goodsModals = true;
|
|
|
- // this.$refs.goodslist.handleSelectAll();
|
|
|
- // },
|
|
|
- // bindDelete (index) {
|
|
|
- // this.goodsData.splice(index, 1)
|
|
|
- // },
|
|
|
- cancel() {
|
|
|
- this.$router.push({path:`${Setting.roterPre}/product/index`});
|
|
|
- },
|
|
|
-
|
|
|
- videoSaveToUrl(file) {
|
|
|
- let imgTypeArr = ["video/mp4"];
|
|
|
- let imgType = imgTypeArr.indexOf(file.type) !== -1
|
|
|
- if (!imgType) {
|
|
|
- return this.$Message.warning({
|
|
|
- content: '文件 ' + file.name + ' 格式不正确, 请选择格式正确的视频',
|
|
|
- duration: 5
|
|
|
- });
|
|
|
- }
|
|
|
- uploadByPieces({
|
|
|
- randoms: "", // 随机数,这里作为给后端处理分片的标识 根据项目看情况 是否要加
|
|
|
- file: file, // 视频实体
|
|
|
- pieceSize: 3, // 分片大小
|
|
|
- success: (data) => {
|
|
|
- this.formValidate.video_link = data.file_path;
|
|
|
- this.progress = 100;
|
|
|
- },
|
|
|
- error: (e) => {
|
|
|
- this.$Message.error(e.msg);
|
|
|
- },
|
|
|
- uploading: (chunk, allChunk) => {
|
|
|
- this.videoIng = true;
|
|
|
- let st = Math.floor((chunk / allChunk) * 100);
|
|
|
- this.progress = st;
|
|
|
- },
|
|
|
- });
|
|
|
- return false;
|
|
|
- },
|
|
|
-
|
|
|
- // 上传头部token
|
|
|
- getToken() {
|
|
|
- this.header["Authori-zation"] = "Bearer " + util.cookies.get("token");
|
|
|
- },
|
|
|
- // beforeUpload() {
|
|
|
- // this.uploadData = {};
|
|
|
- // let promise = new Promise((resolve) => {
|
|
|
- // this.$nextTick(function () {
|
|
|
- // resolve(true);
|
|
|
- // });
|
|
|
- // });
|
|
|
- // return promise;
|
|
|
- // },
|
|
|
- // 上传成功
|
|
|
- handleSuccess(res, file, fileList) {
|
|
|
- if (res.status === 200) {
|
|
|
- this.formValidate.video_link = res.data.src;
|
|
|
- this.$Message.success(res.msg);
|
|
|
- } else {
|
|
|
- this.$Message.error(res.msg);
|
|
|
- }
|
|
|
- },
|
|
|
- //获取视频上传类型
|
|
|
- uploadType() {
|
|
|
- uploadType().then((res) => {
|
|
|
- this.upload_type = res.data.upload_type;
|
|
|
- });
|
|
|
- },
|
|
|
- getEditorContent(data) {
|
|
|
- this.content = data;
|
|
|
- },
|
|
|
- infoData(data){
|
|
|
- let cate_id = data.cate_id.map(Number);
|
|
|
- this.attrs = data.items || [];
|
|
|
- let ids = [];
|
|
|
- data.coupons.map((item) => {
|
|
|
- ids.push(item.id);
|
|
|
- });
|
|
|
- this.goodsData = data.recommend_list;
|
|
|
- if(data.auto_off_time){
|
|
|
- this.off_show = 1;
|
|
|
- }else{
|
|
|
- this.off_show = 0;
|
|
|
- }
|
|
|
- let brandIds = [];
|
|
|
- data.brand_id.forEach(item=>{
|
|
|
- brandIds.push(item.toString())
|
|
|
- })
|
|
|
- this.formValidate = data;
|
|
|
- this.formTypeList = data.custom_form_info;
|
|
|
- this.formValidate.brand_id = brandIds;
|
|
|
- this.formValidate.is_limit = this.formValidate.is_limit?1:0;
|
|
|
- this.formValidate.limit_type = parseInt(data.limit_type);
|
|
|
- // this.formValidate.is_support_refund = parseInt(this.formValidate.is_support_refund);
|
|
|
- this.contents = data.description;
|
|
|
- // this.couponName = data.coupons;
|
|
|
- this.formValidate.coupon_ids = ids;
|
|
|
- this.updateIds = ids;
|
|
|
- this.updateName = data.coupons;
|
|
|
- this.formValidate.cate_id = cate_id;
|
|
|
- // this.dataLabel = data.label_id;
|
|
|
- this.storeDataLabel = data.store_label_id;
|
|
|
- this.specsList = data.specs;
|
|
|
- if(data.attr){
|
|
|
- this.oneFormValidate = [data.attr];
|
|
|
- }
|
|
|
- this.formValidate.header = [];
|
|
|
- this.generate(0);
|
|
|
- //this.manyFormValidate = data.attrs;
|
|
|
- // this.addmanyData(data.attrs);
|
|
|
- // this.productTypeTap(2);
|
|
|
- this.formValidate.system_form_id = data.system_form_id || 0;
|
|
|
- if (this.formValidate.system_form_id) {
|
|
|
- this.customBtn = true;
|
|
|
- }
|
|
|
- this.spec_type = data.spec_type;
|
|
|
- if (data.spec_type === 0) {
|
|
|
- this.manyFormValidate = [];
|
|
|
- } else {
|
|
|
- this.createBnt = true;
|
|
|
- this.oneFormValidate = [
|
|
|
- {
|
|
|
- pic: "",
|
|
|
- price: 0,
|
|
|
- settle_price: 0,
|
|
|
- cost: 0,
|
|
|
- ot_price: 0,
|
|
|
- stock: 0,
|
|
|
- bar_code: "",
|
|
|
- code: "",
|
|
|
- weight: 0,
|
|
|
- volume: 0,
|
|
|
- brokerage: 0,
|
|
|
- brokerage_two: 0,
|
|
|
- vip_price: 0,
|
|
|
- virtual_list: [],
|
|
|
- },
|
|
|
- ];
|
|
|
- }
|
|
|
- },
|
|
|
- //关闭淘宝弹窗并生成数据;
|
|
|
- onClose(data){
|
|
|
- this.modals = false;
|
|
|
- this.infoData(data);
|
|
|
- },
|
|
|
-
|
|
|
- checkMove(evt) {
|
|
|
- this.moveIndex = evt.draggedContext.index;
|
|
|
- },
|
|
|
- end() {
|
|
|
- this.moveIndex = "";
|
|
|
- },
|
|
|
- // checkAllGroupChange(data) {
|
|
|
- // this.checkAllGroup(data);
|
|
|
- // },
|
|
|
- // checkAllGroup(data) {
|
|
|
- // if (this.formValidate.spec_type === 0) {
|
|
|
- // if (data.indexOf(0) > -1) {
|
|
|
- // this.columnsInstall = this.columns2.slice(1, 5).concat(this.member);
|
|
|
- // } else if (data.indexOf(1) > -1) {
|
|
|
- // this.columnsInstall = this.columns2.slice(1, 5).concat(this.rakeBack);
|
|
|
- // } else {
|
|
|
- // this.columnsInstall = this.columns2.slice(1, 5);
|
|
|
- // }
|
|
|
- // if (data.length === 2) {
|
|
|
- // this.columnsInstall = this.columns2
|
|
|
- // .slice(1, 5)
|
|
|
- // .concat(this.rakeBack)
|
|
|
- // .concat(this.member);
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // if (data.indexOf(0) > -1) {
|
|
|
- // this.columnsInstal2 = this.columnsInstalM
|
|
|
- // .slice(0, 4)
|
|
|
- // .concat(this.member);
|
|
|
- // } else if (data.indexOf(1) > -1) {
|
|
|
- // this.columnsInstal2 = this.columnsInstalM
|
|
|
- // .slice(0, 4)
|
|
|
- // .concat(this.rakeBack);
|
|
|
- // } else {
|
|
|
- // this.columnsInstal2 = this.columnsInstalM.slice(0, 4);
|
|
|
- // }
|
|
|
- // if (data.length === 2) {
|
|
|
- // this.columnsInstal2 = this.columnsInstalM
|
|
|
- // .slice(0, 4)
|
|
|
- // .concat(this.rakeBack)
|
|
|
- // .concat(this.member);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // },
|
|
|
- // 添加优惠券
|
|
|
- // addCoupon() {
|
|
|
- // this.$refs.couponTemplates.isTemplate = true;
|
|
|
- // this.$refs.couponTemplates.tableList();
|
|
|
- // },
|
|
|
- //对象数组去重;
|
|
|
- unique(arr) {
|
|
|
- const res = new Map();
|
|
|
- return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));
|
|
|
- },
|
|
|
- // nameId(id, names) {
|
|
|
- // this.formValidate.coupon_ids = id;
|
|
|
- // this.couponName = this.unique(names);
|
|
|
- // },
|
|
|
- // handleClose(name) {
|
|
|
- // let index = this.couponName.indexOf(name);
|
|
|
- // this.couponName.splice(index, 1);
|
|
|
- // let couponIds = this.formValidate.coupon_ids;
|
|
|
- // couponIds.splice(index, 1);
|
|
|
- // this.updateIds = couponIds;
|
|
|
- // this.updateName = this.couponName;
|
|
|
- // },
|
|
|
- // 运费模板
|
|
|
- getList() {
|
|
|
- this.productGetTemplate();
|
|
|
- },
|
|
|
- // 添加运费模板
|
|
|
- addTemp() {
|
|
|
- this.$refs.templates.isTemplate = true;
|
|
|
- },
|
|
|
- //查看、编辑运费模板
|
|
|
- editTemp(){
|
|
|
- this.$refs.templates.isTemplate = true;
|
|
|
- this.$refs.templates.editFrom(this.formValidate.temp_id);
|
|
|
- },
|
|
|
- // 删除视频;
|
|
|
- delVideo() {
|
|
|
- let that = this;
|
|
|
- that.$set(that.formValidate, "video_link", "");
|
|
|
- that.$set(that, "progress", 0);
|
|
|
- that.videoIng = false;
|
|
|
- that.upload.videoIng = false;
|
|
|
- },
|
|
|
- zh_uploadFile() {
|
|
|
- if (this.seletVideo == 1) {
|
|
|
- if(this.videoLink && this.$getFileType(this.videoLink) == 'video'){
|
|
|
- this.formValidate.video_link = this.videoLink;
|
|
|
- }else{
|
|
|
- return this.$Message.error("请输入正确的视频链接")
|
|
|
- }
|
|
|
- } else {
|
|
|
- this.$refs.refid.click();
|
|
|
- }
|
|
|
- },
|
|
|
- zh_uploadFile_change(evfile) {
|
|
|
- let that = this;
|
|
|
- let suffix = evfile.target.files[0].name.substr(
|
|
|
- evfile.target.files[0].name.indexOf(".")
|
|
|
- );
|
|
|
- if (suffix.indexOf(".mp4") === -1) {
|
|
|
- return that.$Message.error("只能上传MP4文件");
|
|
|
- }
|
|
|
- let types = {
|
|
|
- key: evfile.target.files[0].name,
|
|
|
- contentType: evfile.target.files[0].type,
|
|
|
- };
|
|
|
- productGetTempKeysApi(types)
|
|
|
- .then((res) => {
|
|
|
- that.$videoCloud
|
|
|
- .videoUpload({
|
|
|
- type: res.data.type,
|
|
|
- evfile: evfile,
|
|
|
- res: res,
|
|
|
- uploading(status, progress) {
|
|
|
- that.upload.videoIng = status;
|
|
|
- if (res.status == 200) {
|
|
|
- that.progress = 100;
|
|
|
- }
|
|
|
- },
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- that.formValidate.video_link = res.url;
|
|
|
- that.$Message.success("视频上传成功");
|
|
|
- that.upload.videoIng = false;
|
|
|
- })
|
|
|
- .catch((res) => {
|
|
|
- that.$Message.error(res);
|
|
|
- });
|
|
|
- })
|
|
|
- .catch((res) => {
|
|
|
- that.$Message.error(res.msg);
|
|
|
- });
|
|
|
- },
|
|
|
- // 上一页;
|
|
|
- upTab() {
|
|
|
- if(this.currentTab==3&&this.formValidate.product_type!=0){
|
|
|
- this.currentTab = (Number(this.currentTab) - 2).toString();
|
|
|
- }else{
|
|
|
- this.currentTab = (Number(this.currentTab) - 1).toString();
|
|
|
- }
|
|
|
- },
|
|
|
- // 下一页;
|
|
|
- downTab(name) {
|
|
|
- this.$refs[name].validate((valid) => {
|
|
|
- if (valid) {
|
|
|
- if(this.formValidate.is_show == 2 && !this.formValidate.auto_on_time){
|
|
|
- return this.$Message.warning("请填写定时上架时间");
|
|
|
- }
|
|
|
- if(this.off_show == 1 && !this.formValidate.auto_off_time){
|
|
|
- return this.$Message.warning("请填写定时下架时间");
|
|
|
- }
|
|
|
- if(this.currentTab==3&&this.formValidate.product_type!=0){
|
|
|
- this.currentTab = (Number(this.currentTab) + 2).toString();
|
|
|
- }else{
|
|
|
- this.currentTab = (Number(this.currentTab) + 1).toString();
|
|
|
- }
|
|
|
- }else{
|
|
|
- this.$Message.warning("请完善数据");
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- // 属性弹窗回调函数;
|
|
|
- userSearchs() {
|
|
|
- this.productGetRule();
|
|
|
- },
|
|
|
- // 添加规则;
|
|
|
- addRule() {
|
|
|
- this.$refs.addattr.modal = true;
|
|
|
- },
|
|
|
- // 批量设置分佣;
|
|
|
- // brokerageSetUp() {
|
|
|
- // let that = this;
|
|
|
- // if (that.formValidate.is_sub.indexOf(1) > -1) {
|
|
|
- // if (that.manyBrokerage <= 0 || that.manyBrokerageTwo <= 0) {
|
|
|
- // return that.$Message.error("请填写返佣金额后进行批量添加");
|
|
|
- // }
|
|
|
- // } else if (that.formValidate.is_sub.indexOf(0) > -1) {
|
|
|
- // if (that.manyVipPrice <= 0) {
|
|
|
- // return that.$Message.error("请填写会员价后进行批量添加");
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if (this.formValidate.is_sub.length === 2) {
|
|
|
- // if (
|
|
|
- // that.manyBrokerage <= 0 ||
|
|
|
- // that.manyBrokerageTwo <= 0 ||
|
|
|
- // that.manyVipPrice <= 0
|
|
|
- // ) {
|
|
|
- // return that.$Message.error("请填写完金额后进行批量添加");
|
|
|
- // }
|
|
|
- // }
|
|
|
- // for (let val of that.manyFormValidate) {
|
|
|
- // this.$set(val, "brokerage", that.manyBrokerage);
|
|
|
- // this.$set(val, "brokerage_two", that.manyBrokerageTwo);
|
|
|
- // this.$set(val, "vip_price", that.manyVipPrice);
|
|
|
- // }
|
|
|
- // },
|
|
|
- // 批量设置会员价
|
|
|
- vipPriceSetUp() {
|
|
|
- let that = this;
|
|
|
- if (that.manyVipPrice <= 0) {
|
|
|
- return that.$Message.error("请填写会员价在进行批量添加");
|
|
|
- } else {
|
|
|
- for (let val of that.manyFormValidate) {
|
|
|
- this.$set(val, "vip_price", that.manyVipPrice);
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- batchDel() {
|
|
|
- this.oneFormBatch = [
|
|
|
- {
|
|
|
- attr:"全部",
|
|
|
- pic: "",
|
|
|
- price: 0,
|
|
|
- settle_price: 0,
|
|
|
- cost: 0,
|
|
|
- ot_price: 0,
|
|
|
- stock: 0,
|
|
|
- bar_code: "",
|
|
|
- code: "",
|
|
|
- weight: 0,
|
|
|
- volume: 0,
|
|
|
- virtualList:[],
|
|
|
- disk_info:''
|
|
|
- },
|
|
|
- ];
|
|
|
- this.activeAtter=[];
|
|
|
- for (let val of this.manyFormValidate) {
|
|
|
- val.select = true;
|
|
|
- }
|
|
|
- },
|
|
|
- confirm() {
|
|
|
- let that = this;
|
|
|
- that.createBnt = true;
|
|
|
- if (that.formValidate.selectRule.trim().length <= 0) {
|
|
|
- return that.$Message.error("请选择属性");
|
|
|
- }
|
|
|
- that.ruleList.forEach(function (item, index) {
|
|
|
- if (item.rule_name === that.formValidate.selectRule) {
|
|
|
- that.attrs = item.rule_value;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- // 获取商品属性模板;
|
|
|
- productGetRule() {
|
|
|
- productGetRuleApi().then((res) => {
|
|
|
- this.ruleList = res.data;
|
|
|
- });
|
|
|
- },
|
|
|
- // 获取运费模板;
|
|
|
- productGetTemplate() {
|
|
|
- productGetTemplateApi().then((res) => {
|
|
|
- this.templateList = res.data;
|
|
|
- });
|
|
|
- },
|
|
|
- // 删除表格中的属性
|
|
|
- delAttrTable(index) {
|
|
|
- let id = this.$route.params.id;
|
|
|
- if (id) {
|
|
|
- // checkActivityApi(id)
|
|
|
- // .then((res) => {
|
|
|
- this.manyFormValidate.splice(index, 1);
|
|
|
- this.$Message.success(res.msg);
|
|
|
- // })
|
|
|
- // .catch((res) => {
|
|
|
- // this.$Message.error(res.msg);
|
|
|
- // });
|
|
|
- } else {
|
|
|
- this.manyFormValidate.splice(index, 1);
|
|
|
- }
|
|
|
- },
|
|
|
- // 批量添加
|
|
|
- batchAdd() {
|
|
|
- for (let val of this.manyFormValidate) {
|
|
|
- //this.manyEmpty(val);
|
|
|
- if(val.select){
|
|
|
- if (this.oneFormBatch[0].pic) {
|
|
|
- this.$set(val, "pic", this.oneFormBatch[0].pic);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].price > 0) {
|
|
|
- this.$set(val, "price", this.oneFormBatch[0].price);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].settle_price > 0) {
|
|
|
- this.$set(val, "settle_price", this.oneFormBatch[0].settle_price);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].cost > 0) {
|
|
|
- this.$set(val, "cost", this.oneFormBatch[0].cost);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].ot_price > 0) {
|
|
|
- this.$set(val, "ot_price", this.oneFormBatch[0].ot_price);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].stock > 0) {
|
|
|
- this.$set(val, "stock", this.oneFormBatch[0].stock);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].bar_code !== "") {
|
|
|
- this.$set(val, "bar_code", this.oneFormBatch[0].bar_code);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].code !== "") {
|
|
|
- this.$set(val, "code", this.oneFormBatch[0].code);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].weight > 0) {
|
|
|
- this.$set(val, "weight", this.oneFormBatch[0].weight);
|
|
|
- }
|
|
|
- if (this.oneFormBatch[0].volume > 0) {
|
|
|
- this.$set(val, "volume", this.oneFormBatch[0].volume);
|
|
|
- }
|
|
|
- if(this.formValidate.product_type == 1){
|
|
|
- if(this.oneFormBatch[0].virtual_list && this.oneFormBatch[0].virtual_list.length){
|
|
|
- this.$set(val, "virtual_list", this.oneFormBatch[0].virtual_list);
|
|
|
- }else if(this.oneFormBatch[0].disk_info){
|
|
|
- this.$refs.addCarMy.cartMyType = 1;
|
|
|
- this.$set(val, "disk_info", this.oneFormBatch[0].disk_info);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- // 添加按钮
|
|
|
- addBtn() {
|
|
|
- this.clearAttr();
|
|
|
- this.createBnt = false;
|
|
|
- this.showIput = true;
|
|
|
- },
|
|
|
- addmanyData(data){
|
|
|
- data.forEach(item=>{
|
|
|
- item.select = true
|
|
|
- })
|
|
|
- this.manyFormValidate = data;
|
|
|
- },
|
|
|
- // 立即生成
|
|
|
- generate(type) {
|
|
|
- generateAttrApi({ attrs: this.attrs,product_type: this.formValidate.product_type }, this.formValidate.id, type)
|
|
|
- .then((res) => {
|
|
|
- let info = res.data.info,
|
|
|
- header1 = JSON.parse(JSON.stringify(info.header));
|
|
|
- if (this.$route.params.id !== "0") {
|
|
|
- this.addmanyData(info.value);
|
|
|
- }
|
|
|
- this.formValidate.header = header1;
|
|
|
- this.attrData = res.data.info.attr;
|
|
|
- let header = info.header;
|
|
|
- header.pop();
|
|
|
- this.columnsInstalM = info.header;
|
|
|
- // this.checkAllGroup(this.formValidate.is_sub);
|
|
|
- if (!this.$route.params.id && this.formValidate.spec_type === 1) {
|
|
|
- this.manyFormValidate.map((item) => {
|
|
|
- item.pic = this.formValidate.slider_image[0];
|
|
|
- });
|
|
|
- this.oneFormBatch[0].pic = this.formValidate.slider_image[0];
|
|
|
- } else if (this.$route.params.id) {
|
|
|
- this.manyFormValidate.map((item) => {
|
|
|
- if (!item.pic) {
|
|
|
- item.pic = this.formValidate.slider_image[0];
|
|
|
- }
|
|
|
- });
|
|
|
- this.oneFormBatch[0].pic = this.formValidate.slider_image[0];
|
|
|
- }
|
|
|
- this.getAttr();
|
|
|
- })
|
|
|
- .catch((res) => {
|
|
|
- this.$Message.error(res.msg);
|
|
|
- });
|
|
|
- },
|
|
|
- // 取消
|
|
|
- offAttrName() {
|
|
|
- this.showIput = false;
|
|
|
- this.createBnt = true;
|
|
|
- },
|
|
|
- clearAttr() {
|
|
|
- this.formDynamic.attrsName = "";
|
|
|
- this.formDynamic.attrsVal = "";
|
|
|
- },
|
|
|
- // 删除规格
|
|
|
- handleRemoveRole(index) {
|
|
|
- this.attrs.splice(index, 1);
|
|
|
- this.manyFormValidate.splice(index, 1);
|
|
|
- },
|
|
|
- // 删除属性
|
|
|
- handleRemove2(item, index) {
|
|
|
- item.splice(index, 1);
|
|
|
- },
|
|
|
- // 添加规则名称
|
|
|
- createAttrName() {
|
|
|
- if (this.formDynamic.attrsName && this.formDynamic.attrsVal) {
|
|
|
- let data = {
|
|
|
- value: this.formDynamic.attrsName,
|
|
|
- detail: [this.formDynamic.attrsVal],
|
|
|
- };
|
|
|
- this.attrs.push(data);
|
|
|
- var hash = {};
|
|
|
- this.attrs = this.attrs.reduce(function (item, next) {
|
|
|
- /* eslint-disable */
|
|
|
- hash[next.value] ? "" : (hash[next.value] = true && item.push(next));
|
|
|
- return item;
|
|
|
- }, []);
|
|
|
- this.clearAttr();
|
|
|
- this.showIput = false;
|
|
|
- this.createBnt = true;
|
|
|
- } else {
|
|
|
- this.$Message.warning("请添加完整的规格!");
|
|
|
- }
|
|
|
- },
|
|
|
- // 添加属性
|
|
|
- createAttr(num, idx) {
|
|
|
- if (num) {
|
|
|
- this.attrs[idx].detail.push(num);
|
|
|
- var hash = {};
|
|
|
- this.attrs[idx].detail = this.attrs[idx].detail.reduce(function (
|
|
|
- item,
|
|
|
- next
|
|
|
- ) {
|
|
|
- /* eslint-disable */
|
|
|
- hash[next] ? "" : (hash[next] = true && item.push(next));
|
|
|
- return item;
|
|
|
- },
|
|
|
- []);
|
|
|
- } else {
|
|
|
- this.$Message.warning("请添加属性");
|
|
|
- }
|
|
|
- },
|
|
|
- // 商品分类;
|
|
|
- goodsCategory() {
|
|
|
- cascaderList(1)
|
|
|
- .then((res) => {
|
|
|
- this.treeSelect = res.data;
|
|
|
- })
|
|
|
- .catch((res) => {
|
|
|
- this.$Message.error(res.msg);
|
|
|
- });
|
|
|
- },
|
|
|
- //视视上传类型
|
|
|
- changeVideo(e) {
|
|
|
- this.formValidate.video_link = "";
|
|
|
- this.videoLink = "";
|
|
|
- },
|
|
|
- // 改变规格
|
|
|
- changeSpec() {
|
|
|
- // this.formValidate.is_sub = [];
|
|
|
- // let id = this.$route.params.id;
|
|
|
- // if (id) {
|
|
|
- // checkActivityApi(id)
|
|
|
- // .then((res) => {})
|
|
|
- // .catch((res) => {
|
|
|
- // this.formValidate.spec_type = this.spec_type;
|
|
|
- // this.$Message.error(res.msg);
|
|
|
- // });
|
|
|
- // }
|
|
|
- },
|
|
|
- // 详情
|
|
|
- getInfo() {
|
|
|
- let that = this;
|
|
|
- that.spinShow = true;
|
|
|
- productInfoApi(that.$route.params.id || this.$route.query.copy)
|
|
|
- .then((res) => {
|
|
|
- let data = res.data.productInfo;
|
|
|
- this.infoData(data);
|
|
|
- this.spinShow = false;
|
|
|
- })
|
|
|
- .catch((res) => {
|
|
|
- this.spinShow = false;
|
|
|
- this.$Message.error(res.msg);
|
|
|
- });
|
|
|
- },
|
|
|
- // tab切换
|
|
|
- onhangeTab(name) {
|
|
|
- this.currentTab = name;
|
|
|
- },
|
|
|
- handleRemove(i) {
|
|
|
- this.images.splice(i, 1);
|
|
|
- this.formValidate.slider_image.splice(i, 1);
|
|
|
- this.oneFormValidate[0].pic = this.formValidate.slider_image[0];
|
|
|
- },
|
|
|
- // 关闭图片上传模态框
|
|
|
- changeCancel(msg) {
|
|
|
- this.modalPic = false;
|
|
|
- },
|
|
|
- // 点击商品图
|
|
|
- modalPicTap(tit, picTit, index) {
|
|
|
- this.modalPic = true;
|
|
|
- this.isChoice = tit === "dan" ? "单选" : "多选";
|
|
|
- this.picTit = picTit;
|
|
|
- this.tableIndex = index;
|
|
|
- },
|
|
|
- // 获取单张图片信息
|
|
|
- getPic(pc) {
|
|
|
- switch (this.picTit) {
|
|
|
- case "danFrom":
|
|
|
- this.formValidate.image = pc.att_dir;
|
|
|
- if (!this.$route.params.id) {
|
|
|
- if (this.formValidate.spec_type === 0) {
|
|
|
- this.oneFormValidate[0].pic = pc.att_dir;
|
|
|
- } else {
|
|
|
- this.manyFormValidate.map((item) => {
|
|
|
- item.pic = pc.att_dir;
|
|
|
- });
|
|
|
- this.oneFormBatch[0].pic = pc.att_dir;
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case "danTable":
|
|
|
- this.oneFormValidate[this.tableIndex].pic = pc.att_dir;
|
|
|
- break;
|
|
|
- case "duopi":
|
|
|
- this.oneFormBatch[this.tableIndex].pic = pc.att_dir;
|
|
|
- break;
|
|
|
- case "recommend_image":
|
|
|
- this.formValidate.recommend_image = pc.att_dir;
|
|
|
- break;
|
|
|
- default:
|
|
|
- this.manyFormValidate[this.tableIndex].pic = pc.att_dir;
|
|
|
- }
|
|
|
- this.modalPic = false;
|
|
|
- },
|
|
|
- // 获取多张图信息
|
|
|
- getPicD(pc) {
|
|
|
- this.images = pc;
|
|
|
- this.images.map((item) => {
|
|
|
- this.formValidate.slider_image.push(item.att_dir);
|
|
|
- this.formValidate.slider_image = this.formValidate.slider_image.splice(
|
|
|
- 0,
|
|
|
- 10
|
|
|
- );
|
|
|
- });
|
|
|
- this.oneFormValidate[0].pic = this.formValidate.slider_image[0];
|
|
|
- this.modalPic = false;
|
|
|
- },
|
|
|
- // 提交
|
|
|
- handleSubmit(name) {
|
|
|
- this.$refs[name].validate((valid) => {
|
|
|
- if (valid) {
|
|
|
- if (!this.formValidate.store_name.trim()) {
|
|
|
- return this.$Message.warning("基础信息-商品名称不能为空");
|
|
|
- }
|
|
|
- if(this.formValidate.is_show == 2 && !this.formValidate.auto_on_time){
|
|
|
- return this.$Message.warning("基础信息-定时上架时间不能为空");
|
|
|
- }
|
|
|
- if(this.off_show == 1 && !this.formValidate.auto_off_time){
|
|
|
- return this.$Message.warning("基础信息-定时下架时间不能为空");
|
|
|
- }
|
|
|
- if(this.formValidate.freight==2&&this.formValidate.product_type == 0&&this.formValidate.postage<=0){
|
|
|
- return this.$Message.warning("物流设置-固定邮费不能为0");
|
|
|
- }
|
|
|
- if(this.formValidate.freight==3&&this.formValidate.product_type == 0&&!this.formValidate.temp_id){
|
|
|
- return this.$Message.warning("物流设置-运费模板不能为空");
|
|
|
- }
|
|
|
- if(this.currentTab==4 && !this.formValidate.delivery_type.length){
|
|
|
- return this.$Message.warning("请选择配送方式");
|
|
|
- }
|
|
|
- // if(this.formValidate.product_type==0&&this.formValidate.is_presale_product&&!this.formValidate.presale_time[0]){
|
|
|
- // return this.$Message.warning("营销设置-预售时间不能为空");
|
|
|
- // }
|
|
|
- // for (let i = 0; i < this.formValidate.custom_form.length; i++) {
|
|
|
- // const element = this.formValidate.custom_form[i];
|
|
|
- // if (!element.title) {
|
|
|
- // return this.$Message.warning("其他设置-留言标题不能为空");
|
|
|
- // }
|
|
|
- // }
|
|
|
- if(this.customBtn && this.formValidate.system_form_id == 0){
|
|
|
- return this.$Message.warning('其他设置-请选择自定义表单模板');
|
|
|
- }
|
|
|
- this.formValidate.type = this.type;
|
|
|
- if (this.formValidate.spec_type === 0) {
|
|
|
- this.formValidate.attrs = this.oneFormValidate;
|
|
|
- this.formValidate.header = [];
|
|
|
- this.formValidate.items = [];
|
|
|
- } else {
|
|
|
- this.formValidate.items = this.attrs;
|
|
|
- this.formValidate.attrs = this.manyFormValidate;
|
|
|
- }
|
|
|
- if (
|
|
|
- this.formValidate.spec_type === 1 &&
|
|
|
- this.manyFormValidate.length === 0
|
|
|
- ) {
|
|
|
- return this.$Message.warning("规格库存-请点击生成多规格");
|
|
|
- // return this.$Message.warning('请点击生成规格!');
|
|
|
- }
|
|
|
- let item = this.formValidate.attrs;
|
|
|
- // if ( this.formValidate.is_sub.indexOf(1) != -1 ) {
|
|
|
- // for (let i = 0; i < item.length; i++) {
|
|
|
- // if (
|
|
|
- // item[i].brokerage === null ||
|
|
|
- // item[i].brokerage_two === null
|
|
|
- // ) {
|
|
|
- // return this.$Message.warning("营销设置- 一二级返佣不能为空");
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if(this.formValidate.is_sub.indexOf(0) != -1){
|
|
|
- // for (let i = 0; i < item.length; i++) {
|
|
|
- // if (item[i].vip_price === null) {
|
|
|
- // return this.$Message.warning("营销设置-会员价不能为空");
|
|
|
- // }
|
|
|
- // if (item[i].vip_price === 0) {
|
|
|
- // return this.$Message.warning("营销设置-会员价不能为0");
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if (this.formValidate.is_sub.length === 2) {
|
|
|
- // for (let i = 0; i < item.length; i++) {
|
|
|
- // if (
|
|
|
- // item[i].brokerage === null ||
|
|
|
- // item[i].brokerage_two === null ||
|
|
|
- // item[i].vip_price === null
|
|
|
- // ) {
|
|
|
- // return this.$Message.error(
|
|
|
- // "营销设置- 一二级返佣和会员价不能为空"
|
|
|
- // );
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- for (let i = 0; i < this.specsList.length; i++){
|
|
|
- let data = this.specsList[i];
|
|
|
- if(!data.name.trim()){
|
|
|
- return this.$Message.error('请输入参数名称');
|
|
|
- }
|
|
|
- if(!data.value.trim()){
|
|
|
- return this.$Message.error('请输入参数值');
|
|
|
- }
|
|
|
- }
|
|
|
- // if(!this.formValidate.product_type){
|
|
|
- // this.formValidate.is_support_refund = 1;
|
|
|
- // }
|
|
|
- this.openSubimit = false;
|
|
|
- this.formValidate.description = this.formatRichText(this.content);
|
|
|
- let goodsId = [];
|
|
|
- this.goodsData.forEach(item=>{
|
|
|
- goodsId.push(item.product_id)
|
|
|
- })
|
|
|
- this.formValidate.recommend_list = goodsId;
|
|
|
- // 用户标签
|
|
|
- // let activeIds = [];
|
|
|
- // this.dataLabel.forEach((item)=>{
|
|
|
- // activeIds.push(item.id)
|
|
|
- // });
|
|
|
- // this.formValidate.label_id = activeIds
|
|
|
- // 商品标签
|
|
|
- let storeActiveIds = [];
|
|
|
- this.storeDataLabel.forEach((item)=>{
|
|
|
- storeActiveIds.push(item.id)
|
|
|
- });
|
|
|
- this.formValidate.store_label_id = storeActiveIds
|
|
|
- // 商品参数
|
|
|
- this.formValidate.specs = this.specsList;
|
|
|
- if (this.$route.query.copy) {
|
|
|
- this.formValidate.id = 0;
|
|
|
- this.formValidate.soure_link = '';
|
|
|
- }
|
|
|
- productAddApi(this.formValidate)
|
|
|
- .then(async (res) => {
|
|
|
- this.openSubimit = true;
|
|
|
- this.$Message.success(res.msg);
|
|
|
- if (this.$route.params.id === "0") {
|
|
|
- cacheDelete().catch((err) => {
|
|
|
- this.$Message.error(err.msg);
|
|
|
- });
|
|
|
- }
|
|
|
- setTimeout(() => {
|
|
|
- this.$router.push({ path: `${Setting.roterPre}/product/index` });
|
|
|
- }, 500);
|
|
|
- })
|
|
|
- .catch((res) => {
|
|
|
- this.openSubimit = false;
|
|
|
- this.$Message.error(res.msg);
|
|
|
- });
|
|
|
- } else {
|
|
|
- if (!this.formValidate.store_name) {
|
|
|
- return this.$Message.warning("基础信息-商品名称不能为空");
|
|
|
- } else if (!this.formValidate.cate_id.length) {
|
|
|
- return this.$Message.warning("基础信息-商品分类不能为空");
|
|
|
- } else if (!this.formValidate.unit_name) {
|
|
|
- return this.$Message.warning("基础信息-商品单位不能为空");
|
|
|
- } else if (!this.formValidate.slider_image.length) {
|
|
|
- return this.$Message.warning("基础信息-商品轮播图不能为空");
|
|
|
- }
|
|
|
- // if(!this.formValidate.store_name || !this.formValidate.cate_id || !this.formValidate.keyword
|
|
|
- // || !this.formValidate.unit_name || !this.formValidate.store_info
|
|
|
- // || !this.formValidate.image || !this.formValidate.slider_image){
|
|
|
- // this.$Message.warning("请填写完整商品信息!");
|
|
|
- // }
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- changeTemplate(msg) {
|
|
|
- this.template = msg;
|
|
|
- },
|
|
|
- // 表单验证
|
|
|
- validate(prop, status, error) {
|
|
|
- if (status === false) {
|
|
|
- this.$Message.warning(error);
|
|
|
- }
|
|
|
- },
|
|
|
- // 移动
|
|
|
- handleDragStart(e, item) {
|
|
|
- this.dragging = item;
|
|
|
- },
|
|
|
- handleDragEnd(e, item) {
|
|
|
- this.dragging = null;
|
|
|
- },
|
|
|
- handleDragOver(e) {
|
|
|
- e.dataTransfer.dropEffect = "move";
|
|
|
- },
|
|
|
- handleDragEnter(e, item) {
|
|
|
- e.dataTransfer.effectAllowed = "move";
|
|
|
- if (item === this.dragging) {
|
|
|
- return;
|
|
|
- }
|
|
|
- const newItems = [...this.formValidate.slider_image];
|
|
|
- const src = newItems.indexOf(this.dragging);
|
|
|
- const dst = newItems.indexOf(item);
|
|
|
- newItems.splice(dst, 0, ...newItems.splice(src, 1));
|
|
|
- this.formValidate.slider_image = newItems;
|
|
|
- },
|
|
|
- // 添加自定义弹窗
|
|
|
- addCustomDialog(editorId) {
|
|
|
- window.UE.registerUI(
|
|
|
- "test-dialog",
|
|
|
- function (editor, uiName) {
|
|
|
- // 创建 dialog
|
|
|
- let dialog = new window.UE.ui.Dialog({
|
|
|
- iframeUrl: "/store/widget.images/index.html?fodder=dialog",
|
|
|
- editor: editor,
|
|
|
- name: uiName,
|
|
|
- title: "上传图片",
|
|
|
- cssRules: "width:1200px;height:500px;padding:20px;",
|
|
|
- });
|
|
|
- this.dialog = dialog;
|
|
|
- let btn = new window.UE.ui.Button({
|
|
|
- name: "dialog-button",
|
|
|
- title: "上传图片",
|
|
|
- cssRules: `background-image: url(https://cdn.oss.9gt.net/prov1.1/1/icons.png);background-position: -726px -77px;`,
|
|
|
- onclick: function () {
|
|
|
- // 渲染dialog
|
|
|
- dialog.render();
|
|
|
- dialog.open();
|
|
|
- },
|
|
|
- });
|
|
|
- return btn;
|
|
|
- },
|
|
|
- 37
|
|
|
- );
|
|
|
- window.UE.registerUI(
|
|
|
- "video-dialog",
|
|
|
- function (editor, uiName) {
|
|
|
- let dialog = new window.UE.ui.Dialog({
|
|
|
- iframeUrl: "/store/widget.video/index.html?fodder=video",
|
|
|
- editor: editor,
|
|
|
- name: uiName,
|
|
|
- title: "上传视频",
|
|
|
- cssRules: "width:1000px;height:500px;padding:20px;",
|
|
|
- });
|
|
|
- this.dialog = dialog;
|
|
|
- let btn = new window.UE.ui.Button({
|
|
|
- name: "video-button",
|
|
|
- title: "上传视频",
|
|
|
- cssRules: `background-image: url(../../../assets/images/icons.png);background-position: -320px -20px;`,
|
|
|
- onclick: function () {
|
|
|
- // 渲染dialog
|
|
|
- dialog.render();
|
|
|
- dialog.open();
|
|
|
- },
|
|
|
- });
|
|
|
- return btn;
|
|
|
- },
|
|
|
- 38
|
|
|
- );
|
|
|
- },
|
|
|
- formatRichText(html) {
|
|
|
- let newContent = html.replace(/<img[^>]*>/gi, function (match, capture) {
|
|
|
- match = match
|
|
|
- .replace(/style="[^"]+"/gi, "")
|
|
|
- .replace(/style='[^']+'/gi, "");
|
|
|
- match = match
|
|
|
- .replace(/width="[^"]+"/gi, "")
|
|
|
- .replace(/width='[^']+'/gi, "");
|
|
|
- match = match
|
|
|
- .replace(/height="[^"]+"/gi, "")
|
|
|
- .replace(/height='[^']+'/gi, "");
|
|
|
- return match;
|
|
|
- });
|
|
|
- newContent = newContent.replace(
|
|
|
- /style="[^"]+"/gi,
|
|
|
- function (match, capture) {
|
|
|
- match = match
|
|
|
- .replace(/width:[^;]+;/gi, "max-width:100%;")
|
|
|
- .replace(/width:[^;]+;/gi, "max-width:100%;");
|
|
|
- return match;
|
|
|
- }
|
|
|
- );
|
|
|
- // newContent = newContent.replace(/<br[^>]*\/>/gi, "");
|
|
|
- newContent = newContent.replace(
|
|
|
- /\<img/gi,
|
|
|
- '<img style="max-width:100%;height:auto;display:block;margin-top:0;margin-bottom:0;"'
|
|
|
- );
|
|
|
- return newContent;
|
|
|
- },
|
|
|
- },
|
|
|
-};
|
|
|
+ // import COS from 'cos-js-sdk-v5'
|
|
|
+ import {
|
|
|
+ mapState,
|
|
|
+ mapMutations
|
|
|
+ } from "vuex";
|
|
|
+ import Setting from "@/setting";
|
|
|
+ import util from "@/libs/util";
|
|
|
+ import vuedraggable from "vuedraggable";
|
|
|
+ import uploadPictures from "@/components/uploadPictures";
|
|
|
+ import freightTemplate from "@/components/freightTemplate";
|
|
|
+ import wangeditor from "@/components/wangEditor/index.vue";
|
|
|
+
|
|
|
+ import menusFrom from "../components/menusFrom";
|
|
|
+ // import userLabel from "@/components/labelList";
|
|
|
+ import labelList from "@/components/labelList";
|
|
|
+ import couponList from "@/components/couponList";
|
|
|
+ import goodsList from '@/components/goodsList/index';
|
|
|
+ import addAttr from "../components/addAttr";
|
|
|
+ import attrList from "../components/attrList";
|
|
|
+ // import addCarMy from "../components/addCarMy";
|
|
|
+ // import taoBao from './taoBao'
|
|
|
+ import {
|
|
|
+ productInfoApi,
|
|
|
+ cascaderList,
|
|
|
+ productAddApi,
|
|
|
+ generateAttrApi,
|
|
|
+ productGetRuleApi,
|
|
|
+ productGetTemplateApi,
|
|
|
+ productGetTempKeysApi,
|
|
|
+ checkActivityApi,
|
|
|
+ productCache,
|
|
|
+ cacheDelete,
|
|
|
+ brandList,
|
|
|
+ productCreateApi,
|
|
|
+ productAllUnit,
|
|
|
+ productUnitCreate,
|
|
|
+ uploadType,
|
|
|
+ productAllEnsure,
|
|
|
+ productLabelAdd,
|
|
|
+ productAllSpecs,
|
|
|
+ allSystemForm,
|
|
|
+ systemFormInfo
|
|
|
+ } from "@/api/product";
|
|
|
+ import {
|
|
|
+ erpConfig
|
|
|
+ } from "@/api/erp";
|
|
|
+ import {
|
|
|
+ uploadByPieces
|
|
|
+ } from "@/utils/upload"; //引入uploadByPieces方法
|
|
|
+ import {
|
|
|
+ shelves_lst,
|
|
|
+ } from "@/api/order";
|
|
|
+ export default {
|
|
|
+ name: "product_productAdd",
|
|
|
+ components: {
|
|
|
+ uploadPictures,
|
|
|
+ freightTemplate,
|
|
|
+ goodsList,
|
|
|
+ addAttr,
|
|
|
+ couponList,
|
|
|
+ // taoBao,
|
|
|
+ // userLabel,
|
|
|
+ menusFrom,
|
|
|
+ attrList,
|
|
|
+ // addCarMy,
|
|
|
+ labelList,
|
|
|
+ wangeditor,
|
|
|
+ draggable: vuedraggable,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ levelList:[],
|
|
|
+ formTypeList: [],
|
|
|
+ formColumns: [{
|
|
|
+ title: '表单标题',
|
|
|
+ key: 'title',
|
|
|
+ // align:'center',
|
|
|
+ minWidth: 100
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '表单类型',
|
|
|
+ key: 'name',
|
|
|
+ // align:'center',
|
|
|
+ minWidth: 100
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '是否必填',
|
|
|
+ slot: 'require',
|
|
|
+ // align:'center',
|
|
|
+ minWidth: 100
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ roterPre: Setting.roterPre,
|
|
|
+ specsList: [],
|
|
|
+ specsColumns: [{
|
|
|
+ title: '参数名称',
|
|
|
+ key: 'name',
|
|
|
+ align: 'center',
|
|
|
+ width: 150,
|
|
|
+ render: (h, params) => {
|
|
|
+ return h("div", [
|
|
|
+ h("Input", {
|
|
|
+ props: {
|
|
|
+ value: params.row.name,
|
|
|
+ placeholder: '请输入参数名称'
|
|
|
+ },
|
|
|
+ on: {
|
|
|
+ "on-change": (e) => {
|
|
|
+ params.row.name = e.target.value;
|
|
|
+ this.specsList[params.index].name = e.target.value;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '参数值',
|
|
|
+ key: 'value',
|
|
|
+ align: 'center',
|
|
|
+ width: 300,
|
|
|
+ render: (h, params) => {
|
|
|
+ return h("div", [
|
|
|
+ h("Input", {
|
|
|
+ props: {
|
|
|
+ value: params.row.value,
|
|
|
+ placeholder: '请输入参数值'
|
|
|
+ },
|
|
|
+ on: {
|
|
|
+ "on-change": (e) => {
|
|
|
+ params.row.value = e.target.value;
|
|
|
+ this.specsList[params.index].value = e.target.value;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '排序',
|
|
|
+ key: 'sort',
|
|
|
+ align: 'center',
|
|
|
+ width: 100,
|
|
|
+ render: (h, params) => {
|
|
|
+ return h("div", [
|
|
|
+ h("InputNumber", {
|
|
|
+ props: {
|
|
|
+ value: parseInt(params.row.sort) || 0,
|
|
|
+ placeholder: '排序',
|
|
|
+ precision: 0
|
|
|
+ },
|
|
|
+ on: {
|
|
|
+ "on-change": (e) => {
|
|
|
+ params.row.sort = e;
|
|
|
+ this.specsList[params.index].sort = e;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '操作',
|
|
|
+ slot: 'action',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 120
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ //自定义留言下拉选择
|
|
|
+ customList: [{
|
|
|
+ value: "text",
|
|
|
+ label: "文本框",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "number",
|
|
|
+ label: "数字",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "email",
|
|
|
+ label: "邮件",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "data",
|
|
|
+ label: "日期",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "time",
|
|
|
+ label: "时间",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "id",
|
|
|
+ label: "身份证",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "phone",
|
|
|
+ label: "手机号",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: "img",
|
|
|
+ label: "图片",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ headTab: [{
|
|
|
+ title: "基础信息",
|
|
|
+ name: "1"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "规格库存",
|
|
|
+ name: "2"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "商品详情",
|
|
|
+ name: "3"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "其他设置",
|
|
|
+ name: "4"
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ productType: [{
|
|
|
+ name: "普通商品",
|
|
|
+ title: "物流发货",
|
|
|
+ id: 0
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "卡密/网盘",
|
|
|
+ title: "自动发货",
|
|
|
+ id: 1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "虚拟商品",
|
|
|
+ title: "虚拟发货",
|
|
|
+ id: 3
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ virtualList: [],
|
|
|
+ carMyShow: false, //是否开启卡密弹窗
|
|
|
+ // recommend: [], //商品推荐
|
|
|
+ customBtn: false, //自定义留言开关
|
|
|
+ attrShow: false,
|
|
|
+ content: "",
|
|
|
+ contents: "",
|
|
|
+ seletVideo: 0,
|
|
|
+ fileUrl: Setting.apiBaseURL + "/file/upload",
|
|
|
+ fileUrl2: Setting.apiBaseURL + "/file/video_upload",
|
|
|
+ upload_type: "", //视频上传类型 1 本地上传 2 3 4 OSS上传
|
|
|
+ uploadData: {}, // 上传参数
|
|
|
+ header: {},
|
|
|
+ // dataLabel:[],
|
|
|
+ storeDataLabel: [],
|
|
|
+ labelShow: false,
|
|
|
+ storeLabelShow: false,
|
|
|
+ props: {
|
|
|
+ emitPath: false,
|
|
|
+ multiple: true,
|
|
|
+ checkStrictly: true
|
|
|
+ },
|
|
|
+ type: 0,
|
|
|
+ goodsModals: false,
|
|
|
+ off_show: 0,
|
|
|
+ modals: false,
|
|
|
+ spinShow: false,
|
|
|
+ openSubimit: false,
|
|
|
+ grid2: {
|
|
|
+ xl: 10,
|
|
|
+ lg: 12,
|
|
|
+ md: 12,
|
|
|
+ sm: 24,
|
|
|
+ xs: 24,
|
|
|
+ },
|
|
|
+ grid3: {
|
|
|
+ xl: 18,
|
|
|
+ lg: 18,
|
|
|
+ md: 20,
|
|
|
+ sm: 24,
|
|
|
+ xs: 24,
|
|
|
+ },
|
|
|
+ // 批量设置表格data
|
|
|
+ oneFormBatch: [{
|
|
|
+ attr: "全部",
|
|
|
+ pic: "",
|
|
|
+ price: 0,
|
|
|
+ settle_price: 0,
|
|
|
+ cost: 0,
|
|
|
+ ot_price: 0,
|
|
|
+ stock: 0,
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ weight: 0,
|
|
|
+ volume: 0,
|
|
|
+ }, ],
|
|
|
+ // 规格数据
|
|
|
+ formDynamic: {
|
|
|
+ attrsName: "",
|
|
|
+ attrsVal: "",
|
|
|
+ },
|
|
|
+ formDynamicNameData: [],
|
|
|
+ isBtn: false,
|
|
|
+ columnsCarMy: [],
|
|
|
+ columns2: [{
|
|
|
+ title: "商品规格",
|
|
|
+ slot: "attr",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 80,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "图片",
|
|
|
+ slot: "pic",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 80,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "售价",
|
|
|
+ slot: "price",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 95,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "结算价",
|
|
|
+ slot: "settle_price",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 95,
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // title: "成本价",
|
|
|
+ // slot: "cost",
|
|
|
+ // align: "center",
|
|
|
+ // minWidth: 95,
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ title: "原价",
|
|
|
+ slot: "ot_price",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 95,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "库存",
|
|
|
+ slot: "stock",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 95,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "商品条形码",
|
|
|
+ slot: "bar_code",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 120,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "商品编号",
|
|
|
+ slot: "code",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 120,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "重量(KG)",
|
|
|
+ slot: "weight",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 95,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "体积(m³)",
|
|
|
+ slot: "volume",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 95,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "操作",
|
|
|
+ slot: "action",
|
|
|
+ // fixed: "right",
|
|
|
+ align: "center",
|
|
|
+ minWidth: 140,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ columns: [],
|
|
|
+ columnsInstall: [],
|
|
|
+ columnsInstal2: [],
|
|
|
+ gridPic: {
|
|
|
+ xl: 6,
|
|
|
+ lg: 8,
|
|
|
+ md: 12,
|
|
|
+ sm: 12,
|
|
|
+ xs: 12,
|
|
|
+ },
|
|
|
+ gridBtn: {
|
|
|
+ xl: 4,
|
|
|
+ lg: 8,
|
|
|
+ md: 8,
|
|
|
+ sm: 8,
|
|
|
+ xs: 8,
|
|
|
+ },
|
|
|
+ formValidate: {
|
|
|
+ supplier_id: 0, //供应商
|
|
|
+ // is_presale_product: 0, //预售商品开关
|
|
|
+ is_limit: 0, //是否限购开关
|
|
|
+ limit_type: 1, //1单次限购,2长期限购
|
|
|
+ limit_num: 1, //限购数量
|
|
|
+ // is_vip_product: 0, //付费会员专属开关
|
|
|
+ // is_support_refund:0,
|
|
|
+ disk_info: "", //卡密简介
|
|
|
+ // presale_day: 1, //预售发货时间-结束
|
|
|
+ // presale_time:[],
|
|
|
+ auto_on_time: '',
|
|
|
+ video_open: false, //视频按钮是否显示
|
|
|
+ store_name: "",
|
|
|
+ freight: 1, //运费设置
|
|
|
+ postage: 0, //设置运费金额
|
|
|
+ custom_form: [], //自定义留言
|
|
|
+ system_form_id: 0, //自定义表单id
|
|
|
+ cate_id: [],
|
|
|
+ // label_id: [],
|
|
|
+ ensure_id: [],
|
|
|
+ keyword: "",
|
|
|
+ unit_name: "",
|
|
|
+ specs_id: 0,
|
|
|
+ store_info: "",
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ image: "",
|
|
|
+ recommend_image: "",
|
|
|
+ slider_image: [],
|
|
|
+ description: "",
|
|
|
+ ficti: 0,
|
|
|
+ sort: 0,
|
|
|
+ is_show: 1,
|
|
|
+ is_hot: 0,
|
|
|
+ is_benefit: 0,
|
|
|
+ is_best: 0,
|
|
|
+ is_new: 0,
|
|
|
+ is_good: 0,
|
|
|
+ is_postage: 0,
|
|
|
+ // is_sub: [],
|
|
|
+ id: 0,
|
|
|
+ spec_type: 0,
|
|
|
+ video_link: "",
|
|
|
+ temp_id: "",
|
|
|
+ attrs: [],
|
|
|
+ items: [{
|
|
|
+ pic: "",
|
|
|
+ price: 0,
|
|
|
+ cost: 0,
|
|
|
+ ot_price: 0,
|
|
|
+ stock: 0,
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ }, ],
|
|
|
+ // activity: ["默认", "秒杀", "砍价", "拼团"],
|
|
|
+ // couponName: [],
|
|
|
+ header: [],
|
|
|
+ selectRule: "",
|
|
|
+ coupon_ids: [],
|
|
|
+ command_word: "",
|
|
|
+ delivery_type: ["1"],
|
|
|
+ specs: [],
|
|
|
+ recommend_list: [],
|
|
|
+ brand_id: [],
|
|
|
+ product_type: 0
|
|
|
+ },
|
|
|
+ ruleList: [],
|
|
|
+ templateList: [],
|
|
|
+ createBnt: false,
|
|
|
+ showIput: false,
|
|
|
+ manyFormValidate: [],
|
|
|
+ // 单规格表格data
|
|
|
+ oneFormValidate: [{
|
|
|
+ pic: "",
|
|
|
+ price: 0,
|
|
|
+ settle_price: 0,
|
|
|
+ cost: 0,
|
|
|
+ ot_price: 0,
|
|
|
+ stock: 0,
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ weight: 0,
|
|
|
+ volume: 0,
|
|
|
+ brokerage: 0,
|
|
|
+ brokerage_two: 0,
|
|
|
+ vip_price: 0,
|
|
|
+ virtual_list: []
|
|
|
+ }, ],
|
|
|
+ images: [],
|
|
|
+ imagesTable: "",
|
|
|
+ currentTab: "1",
|
|
|
+ isChoice: "",
|
|
|
+ grid: {
|
|
|
+ xl: 8,
|
|
|
+ lg: 8,
|
|
|
+ md: 12,
|
|
|
+ sm: 24,
|
|
|
+ xs: 24,
|
|
|
+ },
|
|
|
+ loading: false,
|
|
|
+ modalPic: false,
|
|
|
+ template: false,
|
|
|
+ uploadList: [],
|
|
|
+ treeSelect: [],
|
|
|
+ labelSelect: [],
|
|
|
+ ensureData: [],
|
|
|
+ specsData: [],
|
|
|
+ picTit: "",
|
|
|
+ tableIndex: 0,
|
|
|
+ ruleValidate: {
|
|
|
+ store_name: [{
|
|
|
+ required: true,
|
|
|
+ message: "请输入商品名称",
|
|
|
+ trigger: "blur"
|
|
|
+ }, ],
|
|
|
+ cate_id: [{
|
|
|
+ required: true,
|
|
|
+ message: "请选择商品分类",
|
|
|
+ trigger: "change",
|
|
|
+ type: "array"
|
|
|
+ }, ],
|
|
|
+ keyword: [{
|
|
|
+ required: true,
|
|
|
+ message: "请输入商品关键字",
|
|
|
+ trigger: "blur"
|
|
|
+ }, ],
|
|
|
+ unit_name: [{
|
|
|
+ required: true,
|
|
|
+ message: "请输入单位",
|
|
|
+ trigger: "change",
|
|
|
+ }, ],
|
|
|
+ store_info: [{
|
|
|
+ required: true,
|
|
|
+ message: "请输入商品简介",
|
|
|
+ trigger: "blur"
|
|
|
+ }, ],
|
|
|
+ //image: [{ required: true, message: "请上传商品图", trigger: "change" }],
|
|
|
+ slider_image: [{
|
|
|
+ required: true,
|
|
|
+ message: "请上传商品轮播图",
|
|
|
+ type: "array",
|
|
|
+ trigger: "change",
|
|
|
+ }, ],
|
|
|
+ spec_type: [{
|
|
|
+ required: true,
|
|
|
+ message: "请选择商品规格",
|
|
|
+ trigger: "change"
|
|
|
+ }, ],
|
|
|
+ selectRule: [{
|
|
|
+ required: true,
|
|
|
+ message: "请选择商品规格属性",
|
|
|
+ trigger: "change"
|
|
|
+ }, ]
|
|
|
+ },
|
|
|
+ manyBrokerage: 0,
|
|
|
+ manyBrokerageTwo: 0,
|
|
|
+ manyVipPrice: 0,
|
|
|
+ upload: {
|
|
|
+ videoIng: false, // 是否显示进度条;
|
|
|
+ },
|
|
|
+ videoIng: false, // 是否显示进度条;
|
|
|
+ progress: 0, // 进度条默认0
|
|
|
+ videoLink: "",
|
|
|
+ attrs: [],
|
|
|
+ // activity: { 默认: "colorBlue", 秒杀: "colorBlue", 砍价: "colorBlue", 拼团: "colorBlue" },
|
|
|
+ // couponName: [],
|
|
|
+ updateIds: [],
|
|
|
+ updateName: [],
|
|
|
+ rakeBack: [{
|
|
|
+ title: "一级返佣",
|
|
|
+ slot: "brokerage",
|
|
|
+ align: "center",
|
|
|
+ width: 95,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "二级返佣",
|
|
|
+ slot: "brokerage_two",
|
|
|
+ align: "center",
|
|
|
+ width: 95,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ member: [{
|
|
|
+ title: "会员价",
|
|
|
+ slot: "vip_price",
|
|
|
+ align: "center",
|
|
|
+ width: 95,
|
|
|
+ }, ],
|
|
|
+ headerCarMy: {
|
|
|
+ title: "卡密设置",
|
|
|
+ slot: "fictitious",
|
|
|
+ align: "center",
|
|
|
+ width: 95,
|
|
|
+ },
|
|
|
+ columnsInstalM: [],
|
|
|
+ moveIndex: "",
|
|
|
+ goodsData: [],
|
|
|
+ brandData: [],
|
|
|
+ unitNameList: [],
|
|
|
+ formBrand: {},
|
|
|
+ attrsList: [],
|
|
|
+ activeAtter: [],
|
|
|
+ tabIndex: 0,
|
|
|
+ tabName: "",
|
|
|
+ attrData: [],
|
|
|
+ datePickerOptions: {
|
|
|
+ disabledDate(date) {
|
|
|
+ return date && date.valueOf() < Date.now() - 86400000;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ openErp: false,
|
|
|
+ formList: []
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapState("admin/layout", ["isMobile", "menuCollapse"]),
|
|
|
+ labelWidth() {
|
|
|
+ return this.isMobile ? undefined : 120;
|
|
|
+ },
|
|
|
+ labelPosition() {
|
|
|
+ return this.isMobile ? "top" : "right";
|
|
|
+ },
|
|
|
+ labelBottom() {
|
|
|
+ return this.isMobile ? undefined : 15;
|
|
|
+ },
|
|
|
+ startPickOptions() {
|
|
|
+ const that = this;
|
|
|
+ return {
|
|
|
+ disabledDate(time) {
|
|
|
+ if (that.formValidate.auto_off_time) {
|
|
|
+ return (
|
|
|
+ time.getTime() > new Date(that.formValidate.auto_off_time).getTime() - 86400000
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ endPickOptions() {
|
|
|
+ const that = this;
|
|
|
+ return {
|
|
|
+ disabledDate(time) {
|
|
|
+ if (that.formValidate.is_show == '1') {
|
|
|
+ return time.getTime() < Date.now();
|
|
|
+ }
|
|
|
+ if (that.formValidate.auto_on_time) {
|
|
|
+ return (
|
|
|
+ time.getTime() < new Date(that.formValidate.auto_on_time).getTime() + 86400000
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeUnit() {
|
|
|
+ const {
|
|
|
+ unitNameList
|
|
|
+ } = this;
|
|
|
+ const {
|
|
|
+ unit_name
|
|
|
+ } = this.formValidate;
|
|
|
+ return {
|
|
|
+ unitNameList,
|
|
|
+ unit_name
|
|
|
+ };
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ changeUnit({
|
|
|
+ unitNameList,
|
|
|
+ unit_name
|
|
|
+ }) {
|
|
|
+ if (!unit_name) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let result = unitNameList.find(unit => unit.name == unit_name);
|
|
|
+ if (!result) {
|
|
|
+ this.formValidate.unit_name = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.columns = this.columns2.slice(1, 10);
|
|
|
+ let data = JSON.parse(JSON.stringify(this.columns2));
|
|
|
+ data.splice(8, 2, this.headerCarMy);
|
|
|
+ this.columnsCarMy = data;
|
|
|
+ let fictitious = JSON.parse(JSON.stringify(this.columns2));
|
|
|
+ fictitious.splice(8, 2);
|
|
|
+ this.columnsFictitious = fictitious;
|
|
|
+ this.getToken();
|
|
|
+ this.getErpConfig();
|
|
|
+ // this.columnsInstall = this.columns2.slice(0, 4).concat(this.columnsInstall);
|
|
|
+ // this.columnsInsta8 = this.columns2.slice(0, 4).concat(this.columnsInsta8);
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.setCopyrightShow({
|
|
|
+ value: false
|
|
|
+ });
|
|
|
+ if ((this.$route.params.id !== "0" && this.$route.params.id) || this.$route.query.copy) {
|
|
|
+ this.getInfo();
|
|
|
+ } else if (this.$route.params.id === "0") {
|
|
|
+ productCache()
|
|
|
+ .then((res) => {
|
|
|
+ let data = res.data.info;
|
|
|
+ if (!Array.isArray(data)) {
|
|
|
+ let cate_id = data.cate_id.map(Number);
|
|
|
+ // let label_id = data.label_id.map(Number);
|
|
|
+ this.attrs = data.items || [];
|
|
|
+ let ids = [];
|
|
|
+ // let names = [];
|
|
|
+ // if (data.coupons) {
|
|
|
+ // data.coupons.map((item) => {
|
|
|
+ // ids.push(item.id);
|
|
|
+ // });
|
|
|
+ // this.couponName = data.coupons;
|
|
|
+ // }
|
|
|
+ let brandIds = [];
|
|
|
+ data.brand_id.forEach(item => {
|
|
|
+ brandIds.push(item.toString())
|
|
|
+ })
|
|
|
+ this.formValidate = data;
|
|
|
+ this.formTypeList = data.custom_form_info || [];
|
|
|
+ this.formValidate.brand_id = brandIds;
|
|
|
+ // this.couponName = data.coupons;
|
|
|
+ // that.couponName = names;
|
|
|
+ this.formValidate.coupon_ids = ids;
|
|
|
+ this.formValidate.is_limit = this.formValidate.is_limit ? 1 : 0;
|
|
|
+ this.formValidate.limit_type = parseInt(this.formValidate.limit_type);
|
|
|
+ // this.formValidate.is_support_refund = parseInt(this.formValidate.is_support_refund);
|
|
|
+ this.updateIds = ids;
|
|
|
+ this.updateName = data.coupons;
|
|
|
+ this.formValidate.cate_id = cate_id;
|
|
|
+ // this.dataLabel = data.label_id;
|
|
|
+ this.storeDataLabel = data.store_label_id;
|
|
|
+ this.specsList = data.specs;
|
|
|
+ this.oneFormValidate = data.attrs;
|
|
|
+ this.formValidate.header = [];
|
|
|
+ this.generate(0);
|
|
|
+ // this.addmanyData(data.attrs);
|
|
|
+ // this.productTypeTap(2);
|
|
|
+ this.columns = this.columns2.slice(1, 10);
|
|
|
+ //this.manyFormValidate = data.attrs;
|
|
|
+ this.formValidate.system_form_id = data.system_form_id || 0;
|
|
|
+ if (this.formValidate.system_form_id) {
|
|
|
+ this.customBtn = true;
|
|
|
+ }
|
|
|
+ this.spec_type = data.spec_type;
|
|
|
+ if (data.spec_type === 0) {
|
|
|
+ this.manyFormValidate = [];
|
|
|
+ } else {
|
|
|
+ this.createBnt = true;
|
|
|
+ this.oneFormValidate = [{
|
|
|
+ pic: data.slider_image[0],
|
|
|
+ price: 0,
|
|
|
+ settle_price: 0,
|
|
|
+ cost: 0,
|
|
|
+ ot_price: 0,
|
|
|
+ stock: 0,
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ weight: 0,
|
|
|
+ volume: 0,
|
|
|
+ brokerage: 0,
|
|
|
+ brokerage_two: 0,
|
|
|
+ vip_price: 0,
|
|
|
+ virtual_list: [],
|
|
|
+ }, ];
|
|
|
+ }
|
|
|
+ this.spinShow = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (this.$route.query.type) {
|
|
|
+ this.modals = true;
|
|
|
+ this.type = this.$route.query.type;
|
|
|
+ } else {
|
|
|
+ this.type = 0;
|
|
|
+ }
|
|
|
+ this.goodsCategory();
|
|
|
+ this.productGetRule();
|
|
|
+ this.productGetTemplate();
|
|
|
+ this.getBrandList();
|
|
|
+ this.getAllUnit();
|
|
|
+ this.uploadType();
|
|
|
+ this.getProductAllEnsure();
|
|
|
+ this.getProductAllSpecs();
|
|
|
+ this.getAllSystemForm();
|
|
|
+ this.shelves_lst();
|
|
|
+ },
|
|
|
+ destroyed() {
|
|
|
+ this.setCopyrightShow({
|
|
|
+ value: true
|
|
|
+ });
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ ...mapMutations('admin/layout', [
|
|
|
+ 'setCopyrightShow'
|
|
|
+ ]),
|
|
|
+ // 获取货架列表
|
|
|
+ shelves_lst() {
|
|
|
+ shelves_lst().then((res) => {
|
|
|
+ this.levelList = res.data;
|
|
|
+ console.log(res)
|
|
|
+ });
|
|
|
+ },
|
|
|
+ changeForm(e) {
|
|
|
+ this.getSystemFormInfo(e, {
|
|
|
+ type: 1
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getSystemFormInfo(e, data) {
|
|
|
+ systemFormInfo(e, data).then(res => {
|
|
|
+ this.formTypeList = res.data.info;
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getAllSystemForm() {
|
|
|
+ allSystemForm().then(res => {
|
|
|
+ this.formList = res.data;
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ limitTap(e) {
|
|
|
+ if (e) {
|
|
|
+ this.formValidate.limit_type = (this.formValidate.is_limit && !this.formValidate.limit_type) ? 1 : 0
|
|
|
+ this.formValidate.limit_num = (this.formValidate.is_limit && this.formValidate.limit_num == 0) ? 1 : 0
|
|
|
+ } else {
|
|
|
+ this.formValidate.limit_type = 0;
|
|
|
+ this.formValidate.limit_num = 0;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //erp配置
|
|
|
+ getErpConfig() {
|
|
|
+ erpConfig().then(res => {
|
|
|
+ this.openErp = res.data.open_erp;
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ delSpecs(index) {
|
|
|
+ this.specsList.splice(index, 1);
|
|
|
+ },
|
|
|
+ addSpecs() {
|
|
|
+ let obj = {
|
|
|
+ 'name': '',
|
|
|
+ 'value': '',
|
|
|
+ 'sort': 0
|
|
|
+ }
|
|
|
+ this.specsList.push(obj)
|
|
|
+ },
|
|
|
+ specsInfo(e) {
|
|
|
+ this.specsData.forEach(item => {
|
|
|
+ if (item.id == e) {
|
|
|
+ this.specsList = item.specs
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getProductAllSpecs() {
|
|
|
+ productAllSpecs().then(res => {
|
|
|
+ this.specsData = res.data
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getProductAllEnsure() {
|
|
|
+ productAllEnsure().then(res => {
|
|
|
+ this.ensureData = res.data
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //添加倒入卡密的值
|
|
|
+ changeVirtual(e) {
|
|
|
+ this.virtualList = this.virtualList.concat(e);
|
|
|
+ },
|
|
|
+ //添加卡密
|
|
|
+ addVirtual(index, name) {
|
|
|
+ this.tabIndex = index;
|
|
|
+ this.tabName = name;
|
|
|
+ this.virtualListClear();
|
|
|
+ this.$refs.addCarMy.fixedCar = {
|
|
|
+ disk_info: '',
|
|
|
+ stock: 0
|
|
|
+ }
|
|
|
+ this.$refs.addCarMy.cartMyType = 1;
|
|
|
+ this.carMyShow = true;
|
|
|
+ },
|
|
|
+ //确认提交卡密
|
|
|
+ fixdBtn(e) {
|
|
|
+ if (e.cartMyType == 1) {
|
|
|
+ this.$set(this[this.tabName][this.tabIndex], "disk_info", e.disk_info);
|
|
|
+ this.$set(this[this.tabName][this.tabIndex], "stock", Number(e.stock));
|
|
|
+ this[this.tabName][this.tabIndex].virtual_list = [];
|
|
|
+ } else {
|
|
|
+ this.$set(this[this.tabName][this.tabIndex], "virtual_list", e.virtualList);
|
|
|
+ this.$set(this[this.tabName][this.tabIndex], "stock", e.virtualList.length);
|
|
|
+ this[this.tabName][this.tabIndex].disk_info = '';
|
|
|
+ }
|
|
|
+ this.carMyShow = false;
|
|
|
+ },
|
|
|
+ closeCarMy() {
|
|
|
+ this.carMyShow = false;
|
|
|
+ },
|
|
|
+ //清空卡密
|
|
|
+ virtualListClear() {
|
|
|
+ this.virtualList = [{
|
|
|
+ key: "",
|
|
|
+ value: "",
|
|
|
+ }, ];
|
|
|
+ },
|
|
|
+ seeVirtual(data, name, index) {
|
|
|
+ this.tabName = name;
|
|
|
+ this.tabIndex = index;
|
|
|
+ this.virtualListClear();
|
|
|
+ this.$refs.addCarMy.fixedCar = {
|
|
|
+ disk_info: '',
|
|
|
+ stock: 0
|
|
|
+ }
|
|
|
+ if (data.virtual_list && data.virtual_list.length) {
|
|
|
+ this.$refs.addCarMy.cartMyType = 2;
|
|
|
+ this.virtualList = data.virtual_list;
|
|
|
+ } else if (data.disk_info) {
|
|
|
+ this.$refs.addCarMy.cartMyType = 1;
|
|
|
+ this.$refs.addCarMy.fixedCar.disk_info = data.disk_info;
|
|
|
+ this.$refs.addCarMy.fixedCar.stock = data.stock;
|
|
|
+ }
|
|
|
+ this.carMyShow = true;
|
|
|
+ },
|
|
|
+ //动态添加组件
|
|
|
+ addAssembly() {
|
|
|
+ this.formValidate.custom_form.push({
|
|
|
+ title: "",
|
|
|
+ label: "text",
|
|
|
+ value: "",
|
|
|
+ status: 0,
|
|
|
+ });
|
|
|
+ },
|
|
|
+ customMessBtn(e) {
|
|
|
+ if (!e) {
|
|
|
+ this.formValidate.system_form_id = 0;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ addcustom() {
|
|
|
+ if (this.formValidate.custom_form.length > 9) {
|
|
|
+ this.$Message.warning("最多添加10条");
|
|
|
+ } else {
|
|
|
+ this.addAssembly();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ delcustom(index) {
|
|
|
+ this.formValidate.custom_form.splice(index, 1);
|
|
|
+ },
|
|
|
+ // 预售具体日期
|
|
|
+ // onchangeTime(e) {
|
|
|
+ // this.formValidate.presale_time = e;
|
|
|
+ // },
|
|
|
+ //定时上架
|
|
|
+ onchangeShow(e) {
|
|
|
+ this.formValidate.auto_on_time = e
|
|
|
+ },
|
|
|
+ //定时下架
|
|
|
+ onchangeOff(e) {
|
|
|
+ this.formValidate.auto_off_time = e
|
|
|
+ },
|
|
|
+ //打开属性
|
|
|
+ batchAttr() {
|
|
|
+ this.attrShow = true;
|
|
|
+ // if(!this.activeAtter.length){
|
|
|
+ // let data = this.attrs;
|
|
|
+ // data.map(el=>{
|
|
|
+ // el.details = [];
|
|
|
+ // el.detail.map(label=>{
|
|
|
+ // el.details.push({
|
|
|
+ // name:label,
|
|
|
+ // select:false
|
|
|
+ // })
|
|
|
+ // })
|
|
|
+ // })
|
|
|
+ // this.attrsList = data;
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ //获取属性
|
|
|
+ getAttr() {
|
|
|
+ this.oneFormBatch[0].attr = '全部';
|
|
|
+ let data = this.attrs;
|
|
|
+ data.map(el => {
|
|
|
+ el.details = [];
|
|
|
+ el.detail.map(label => {
|
|
|
+ el.details.push({
|
|
|
+ name: label,
|
|
|
+ select: false
|
|
|
+ })
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.attrsList = data;
|
|
|
+ },
|
|
|
+ //选中属性
|
|
|
+ activeAttr(e) {
|
|
|
+ this.attrsList = e;
|
|
|
+ },
|
|
|
+ //关闭属性弹窗
|
|
|
+ labelAttr() {
|
|
|
+ this.attrShow = false;
|
|
|
+ },
|
|
|
+ //多属性为空
|
|
|
+ manyEmpty(j) {
|
|
|
+ j.pic = '';
|
|
|
+ j.price = 0;
|
|
|
+ j.settle_price = 0;
|
|
|
+ j.cost = 0;
|
|
|
+ j.ot_price = 0;
|
|
|
+ j.stock = 0;
|
|
|
+ j.bar_code = '';
|
|
|
+ j.code = '';
|
|
|
+ j.weight = 0;
|
|
|
+ j.volume = 0;
|
|
|
+ j.virtual_list = []
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ doCombination(arr) {
|
|
|
+ var count = arr.length - 1; //数组长度(从0开始)
|
|
|
+ var tmp = [];
|
|
|
+ var totalArr = []; // 总数组
|
|
|
+
|
|
|
+ return doCombinationCallback(arr, 0); //从第一个开始
|
|
|
+ //js 没有静态数据,为了避免和外部数据混淆,需要使用闭包的形式
|
|
|
+ function doCombinationCallback(arr, curr_index) {
|
|
|
+ for (let val of arr[curr_index]) {
|
|
|
+ tmp[curr_index] = val; //以curr_index为索引,加入数组
|
|
|
+ //当前循环下标小于数组总长度,则需要继续调用方法
|
|
|
+ if (curr_index < count) {
|
|
|
+ doCombinationCallback(arr, curr_index + 1); //继续调用
|
|
|
+ } else {
|
|
|
+ totalArr.push(tmp.join(',')); //(直接给push进去,push进去的不是值,而是值的地址)
|
|
|
+ }
|
|
|
+
|
|
|
+ //js 对象都是 地址引用(引用关系),每次都需要重新初始化,否则 totalArr的数据都会是最后一次的 tmp 数据;
|
|
|
+ let oldTmp = tmp;
|
|
|
+ tmp = [];
|
|
|
+ for (let index of oldTmp) {
|
|
|
+ tmp.push(index);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return totalArr;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ //提交属性值;
|
|
|
+ subAttrs(e) {
|
|
|
+ let selectData = [];
|
|
|
+ this.attrsList.forEach((el, index) => {
|
|
|
+ let obj = [];
|
|
|
+ el.details.forEach((label) => {
|
|
|
+ if (label.select) {
|
|
|
+ obj.push(label.name);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (obj.length) {
|
|
|
+ selectData.push(obj)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ let newData = [];
|
|
|
+ if (selectData.length) {
|
|
|
+ newData = this.doCombination(selectData);
|
|
|
+ }
|
|
|
+ this.attrShow = false;
|
|
|
+ this.activeAtter = selectData;
|
|
|
+ this.oneFormBatch[0].attr = newData.length ? newData.join(';') : '全部';
|
|
|
+ this.manyFormValidate.forEach(j => {
|
|
|
+ j.select = false;
|
|
|
+ if (newData.length) {
|
|
|
+ newData.forEach(item => {
|
|
|
+ if (j.values.split('').length == item.split('').length) {
|
|
|
+ if (j.values == item) {
|
|
|
+ j.select = true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (j.values.indexOf(item) != -1) {
|
|
|
+ j.select = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ j.select = true;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.$set(this, 'manyFormValidate', this.manyFormValidate)
|
|
|
+ },
|
|
|
+ goodsOn(e) {
|
|
|
+ if (e == 0 || e == 1) {
|
|
|
+ this.formValidate.auto_on_time = '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ goodsOff(e) {
|
|
|
+ if (!e) {
|
|
|
+ this.formValidate.auto_off_time = '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ addBrand() {
|
|
|
+ this.$refs.menusFrom.modals = true
|
|
|
+ this.$refs.menusFrom.titleFrom = "添加品牌分类"
|
|
|
+ this.formBrand = {
|
|
|
+ sort: 0,
|
|
|
+ is_show: 1
|
|
|
+ }
|
|
|
+ this.formBrand.fid = [0];
|
|
|
+ this.$refs.menusFrom.type = 1
|
|
|
+ },
|
|
|
+ getAllUnit() {
|
|
|
+ productAllUnit().then(res => {
|
|
|
+ this.unitNameList = res.data;
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ addClass() {
|
|
|
+ this.$modalForm(productCreateApi()).then(() => this.goodsCategory());
|
|
|
+ },
|
|
|
+ addUnit() {
|
|
|
+ this.$modalForm(productUnitCreate()).then(() => this.getAllUnit());
|
|
|
+ },
|
|
|
+ addStoreLabel() {
|
|
|
+ this.$modalForm(productLabelAdd()).then(() => {});
|
|
|
+ },
|
|
|
+ productTypeTap(num, item) {
|
|
|
+ if (num == 1) {
|
|
|
+ if (this.$route.params.id) return this.$Message.error('商品类型不能切换!');
|
|
|
+ this.formValidate.product_type = item.id;
|
|
|
+ }
|
|
|
+ if (this.formValidate.product_type) {
|
|
|
+ this.headTab = [{
|
|
|
+ title: "基础信息",
|
|
|
+ name: "1"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "规格库存",
|
|
|
+ name: "2"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "商品详情",
|
|
|
+ name: "3"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "其他设置",
|
|
|
+ name: "4"
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ this.formValidate.postage = 0;
|
|
|
+ this.formValidate.supplier_id = 0;
|
|
|
+ } else {
|
|
|
+ this.headTab = [{
|
|
|
+ title: "基础信息",
|
|
|
+ name: "1"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "规格库存",
|
|
|
+ name: "2"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "商品详情",
|
|
|
+ name: "3"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: "其他设置",
|
|
|
+ name: "4"
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // closeLabel(label){
|
|
|
+ // let index = this.dataLabel.indexOf(this.dataLabel.filter(d=>d.id == label.id)[0]);
|
|
|
+ // this.dataLabel.splice(index,1);
|
|
|
+ // },
|
|
|
+ // activeData(dataLabel){
|
|
|
+ // this.labelShow = false;
|
|
|
+ // this.dataLabel = dataLabel;
|
|
|
+ // },
|
|
|
+ // openLabel(row) {
|
|
|
+ // this.labelShow = true;
|
|
|
+ // this.$refs.userLabel.userLabel(JSON.parse(JSON.stringify(this.dataLabel)));
|
|
|
+ // },
|
|
|
+ // 标签弹窗关闭
|
|
|
+ labelClose() {
|
|
|
+ this.labelShow = false;
|
|
|
+ },
|
|
|
+ closeStoreLabel(label) {
|
|
|
+ let index = this.storeDataLabel.indexOf(this.storeDataLabel.filter(d => d.id == label.id)[0]);
|
|
|
+ this.storeDataLabel.splice(index, 1);
|
|
|
+ },
|
|
|
+ activeStoreData(storeDataLabel) {
|
|
|
+ this.storeLabelShow = false;
|
|
|
+ this.storeDataLabel = storeDataLabel;
|
|
|
+ },
|
|
|
+ openStoreLabel(row) {
|
|
|
+ this.storeLabelShow = true;
|
|
|
+ this.$refs.storeLabel.userLabel(JSON.parse(JSON.stringify(this.storeDataLabel)));
|
|
|
+ },
|
|
|
+ // 标签弹窗关闭
|
|
|
+ storeLabelClose() {
|
|
|
+ this.storeLabelShow = false;
|
|
|
+ },
|
|
|
+ // 品牌列表
|
|
|
+ getBrandList() {
|
|
|
+ brandList().then(res => {
|
|
|
+ //initBran()函数作用iview中规定value必须是字符串,后台返回成了数字,用于处理这个,给了个递归;
|
|
|
+ this.initBran(res.data);
|
|
|
+ this.brandData = res.data;
|
|
|
+ }).catch(err => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ initBran(data) {
|
|
|
+ data.map(item => {
|
|
|
+ item.value = item.value.toString();
|
|
|
+ if (item.children && item.children.length) {
|
|
|
+ this.initBran(item.children);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getProductId(e) {
|
|
|
+ this.goodsModals = false;
|
|
|
+ let nArr = this.goodsData.concat(e).filter((element, index, self) => {
|
|
|
+ return self.findIndex(x => x.product_id == element.product_id) == index
|
|
|
+ })
|
|
|
+
|
|
|
+ this.goodsData = nArr.slice(0, 12);
|
|
|
+ },
|
|
|
+ goodCancel() {
|
|
|
+ this.goodsModals = false;
|
|
|
+ },
|
|
|
+ // goodsTap(){
|
|
|
+ // this.goodsModals = true;
|
|
|
+ // this.$refs.goodslist.handleSelectAll();
|
|
|
+ // },
|
|
|
+ // bindDelete (index) {
|
|
|
+ // this.goodsData.splice(index, 1)
|
|
|
+ // },
|
|
|
+ cancel() {
|
|
|
+ this.$router.push({
|
|
|
+ path: `${Setting.roterPre}/product/index`
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ videoSaveToUrl(file) {
|
|
|
+ let imgTypeArr = ["video/mp4"];
|
|
|
+ let imgType = imgTypeArr.indexOf(file.type) !== -1
|
|
|
+ if (!imgType) {
|
|
|
+ return this.$Message.warning({
|
|
|
+ content: '文件 ' + file.name + ' 格式不正确, 请选择格式正确的视频',
|
|
|
+ duration: 5
|
|
|
+ });
|
|
|
+ }
|
|
|
+ uploadByPieces({
|
|
|
+ randoms: "", // 随机数,这里作为给后端处理分片的标识 根据项目看情况 是否要加
|
|
|
+ file: file, // 视频实体
|
|
|
+ pieceSize: 3, // 分片大小
|
|
|
+ success: (data) => {
|
|
|
+ this.formValidate.video_link = data.file_path;
|
|
|
+ this.progress = 100;
|
|
|
+ },
|
|
|
+ error: (e) => {
|
|
|
+ this.$Message.error(e.msg);
|
|
|
+ },
|
|
|
+ uploading: (chunk, allChunk) => {
|
|
|
+ this.videoIng = true;
|
|
|
+ let st = Math.floor((chunk / allChunk) * 100);
|
|
|
+ this.progress = st;
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 上传头部token
|
|
|
+ getToken() {
|
|
|
+ this.header["Authori-zation"] = "Bearer " + util.cookies.get("token");
|
|
|
+ },
|
|
|
+ // beforeUpload() {
|
|
|
+ // this.uploadData = {};
|
|
|
+ // let promise = new Promise((resolve) => {
|
|
|
+ // this.$nextTick(function () {
|
|
|
+ // resolve(true);
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // return promise;
|
|
|
+ // },
|
|
|
+ // 上传成功
|
|
|
+ handleSuccess(res, file, fileList) {
|
|
|
+ if (res.status === 200) {
|
|
|
+ this.formValidate.video_link = res.data.src;
|
|
|
+ this.$Message.success(res.msg);
|
|
|
+ } else {
|
|
|
+ this.$Message.error(res.msg);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //获取视频上传类型
|
|
|
+ uploadType() {
|
|
|
+ uploadType().then((res) => {
|
|
|
+ this.upload_type = res.data.upload_type;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getEditorContent(data) {
|
|
|
+ this.content = data;
|
|
|
+ },
|
|
|
+ infoData(data) {
|
|
|
+ let cate_id = data.cate_id.map(Number);
|
|
|
+ this.attrs = data.items || [];
|
|
|
+ let ids = [];
|
|
|
+ data.coupons.map((item) => {
|
|
|
+ ids.push(item.id);
|
|
|
+ });
|
|
|
+ this.goodsData = data.recommend_list;
|
|
|
+ if (data.auto_off_time) {
|
|
|
+ this.off_show = 1;
|
|
|
+ } else {
|
|
|
+ this.off_show = 0;
|
|
|
+ }
|
|
|
+ let brandIds = [];
|
|
|
+ data.brand_id.forEach(item => {
|
|
|
+ brandIds.push(item.toString())
|
|
|
+ })
|
|
|
+ this.formValidate = data;
|
|
|
+ this.formTypeList = data.custom_form_info;
|
|
|
+ this.formValidate.brand_id = brandIds;
|
|
|
+ this.formValidate.is_limit = this.formValidate.is_limit ? 1 : 0;
|
|
|
+ this.formValidate.limit_type = parseInt(data.limit_type);
|
|
|
+ // this.formValidate.is_support_refund = parseInt(this.formValidate.is_support_refund);
|
|
|
+ this.contents = data.description;
|
|
|
+ // this.couponName = data.coupons;
|
|
|
+ this.formValidate.coupon_ids = ids;
|
|
|
+ this.updateIds = ids;
|
|
|
+ this.updateName = data.coupons;
|
|
|
+ this.formValidate.cate_id = cate_id;
|
|
|
+ // this.dataLabel = data.label_id;
|
|
|
+ this.storeDataLabel = data.store_label_id;
|
|
|
+ this.specsList = data.specs;
|
|
|
+ if (data.attr) {
|
|
|
+ this.oneFormValidate = [data.attr];
|
|
|
+ }
|
|
|
+ this.formValidate.header = [];
|
|
|
+ this.generate(0);
|
|
|
+ //this.manyFormValidate = data.attrs;
|
|
|
+ // this.addmanyData(data.attrs);
|
|
|
+ // this.productTypeTap(2);
|
|
|
+ this.formValidate.system_form_id = data.system_form_id || 0;
|
|
|
+ if (this.formValidate.system_form_id) {
|
|
|
+ this.customBtn = true;
|
|
|
+ }
|
|
|
+ this.spec_type = data.spec_type;
|
|
|
+ if (data.spec_type === 0) {
|
|
|
+ this.manyFormValidate = [];
|
|
|
+ } else {
|
|
|
+ this.createBnt = true;
|
|
|
+ this.oneFormValidate = [{
|
|
|
+ pic: "",
|
|
|
+ price: 0,
|
|
|
+ settle_price: 0,
|
|
|
+ cost: 0,
|
|
|
+ ot_price: 0,
|
|
|
+ stock: 0,
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ weight: 0,
|
|
|
+ volume: 0,
|
|
|
+ brokerage: 0,
|
|
|
+ brokerage_two: 0,
|
|
|
+ vip_price: 0,
|
|
|
+ virtual_list: [],
|
|
|
+ }, ];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //关闭淘宝弹窗并生成数据;
|
|
|
+ onClose(data) {
|
|
|
+ this.modals = false;
|
|
|
+ this.infoData(data);
|
|
|
+ },
|
|
|
+
|
|
|
+ checkMove(evt) {
|
|
|
+ this.moveIndex = evt.draggedContext.index;
|
|
|
+ },
|
|
|
+ end() {
|
|
|
+ this.moveIndex = "";
|
|
|
+ },
|
|
|
+ // checkAllGroupChange(data) {
|
|
|
+ // this.checkAllGroup(data);
|
|
|
+ // },
|
|
|
+ // checkAllGroup(data) {
|
|
|
+ // if (this.formValidate.spec_type === 0) {
|
|
|
+ // if (data.indexOf(0) > -1) {
|
|
|
+ // this.columnsInstall = this.columns2.slice(1, 5).concat(this.member);
|
|
|
+ // } else if (data.indexOf(1) > -1) {
|
|
|
+ // this.columnsInstall = this.columns2.slice(1, 5).concat(this.rakeBack);
|
|
|
+ // } else {
|
|
|
+ // this.columnsInstall = this.columns2.slice(1, 5);
|
|
|
+ // }
|
|
|
+ // if (data.length === 2) {
|
|
|
+ // this.columnsInstall = this.columns2
|
|
|
+ // .slice(1, 5)
|
|
|
+ // .concat(this.rakeBack)
|
|
|
+ // .concat(this.member);
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // if (data.indexOf(0) > -1) {
|
|
|
+ // this.columnsInstal2 = this.columnsInstalM
|
|
|
+ // .slice(0, 4)
|
|
|
+ // .concat(this.member);
|
|
|
+ // } else if (data.indexOf(1) > -1) {
|
|
|
+ // this.columnsInstal2 = this.columnsInstalM
|
|
|
+ // .slice(0, 4)
|
|
|
+ // .concat(this.rakeBack);
|
|
|
+ // } else {
|
|
|
+ // this.columnsInstal2 = this.columnsInstalM.slice(0, 4);
|
|
|
+ // }
|
|
|
+ // if (data.length === 2) {
|
|
|
+ // this.columnsInstal2 = this.columnsInstalM
|
|
|
+ // .slice(0, 4)
|
|
|
+ // .concat(this.rakeBack)
|
|
|
+ // .concat(this.member);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // 添加优惠券
|
|
|
+ // addCoupon() {
|
|
|
+ // this.$refs.couponTemplates.isTemplate = true;
|
|
|
+ // this.$refs.couponTemplates.tableList();
|
|
|
+ // },
|
|
|
+ //对象数组去重;
|
|
|
+ unique(arr) {
|
|
|
+ const res = new Map();
|
|
|
+ return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));
|
|
|
+ },
|
|
|
+ // nameId(id, names) {
|
|
|
+ // this.formValidate.coupon_ids = id;
|
|
|
+ // this.couponName = this.unique(names);
|
|
|
+ // },
|
|
|
+ // handleClose(name) {
|
|
|
+ // let index = this.couponName.indexOf(name);
|
|
|
+ // this.couponName.splice(index, 1);
|
|
|
+ // let couponIds = this.formValidate.coupon_ids;
|
|
|
+ // couponIds.splice(index, 1);
|
|
|
+ // this.updateIds = couponIds;
|
|
|
+ // this.updateName = this.couponName;
|
|
|
+ // },
|
|
|
+ // 运费模板
|
|
|
+ getList() {
|
|
|
+ this.productGetTemplate();
|
|
|
+ },
|
|
|
+ // 添加运费模板
|
|
|
+ addTemp() {
|
|
|
+ this.$refs.templates.isTemplate = true;
|
|
|
+ },
|
|
|
+ //查看、编辑运费模板
|
|
|
+ editTemp() {
|
|
|
+ this.$refs.templates.isTemplate = true;
|
|
|
+ this.$refs.templates.editFrom(this.formValidate.temp_id);
|
|
|
+ },
|
|
|
+ // 删除视频;
|
|
|
+ delVideo() {
|
|
|
+ let that = this;
|
|
|
+ that.$set(that.formValidate, "video_link", "");
|
|
|
+ that.$set(that, "progress", 0);
|
|
|
+ that.videoIng = false;
|
|
|
+ that.upload.videoIng = false;
|
|
|
+ },
|
|
|
+ zh_uploadFile() {
|
|
|
+ if (this.seletVideo == 1) {
|
|
|
+ if (this.videoLink && this.$getFileType(this.videoLink) == 'video') {
|
|
|
+ this.formValidate.video_link = this.videoLink;
|
|
|
+ } else {
|
|
|
+ return this.$Message.error("请输入正确的视频链接")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$refs.refid.click();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ zh_uploadFile_change(evfile) {
|
|
|
+ let that = this;
|
|
|
+ let suffix = evfile.target.files[0].name.substr(
|
|
|
+ evfile.target.files[0].name.indexOf(".")
|
|
|
+ );
|
|
|
+ if (suffix.indexOf(".mp4") === -1) {
|
|
|
+ return that.$Message.error("只能上传MP4文件");
|
|
|
+ }
|
|
|
+ let types = {
|
|
|
+ key: evfile.target.files[0].name,
|
|
|
+ contentType: evfile.target.files[0].type,
|
|
|
+ };
|
|
|
+ productGetTempKeysApi(types)
|
|
|
+ .then((res) => {
|
|
|
+ that.$videoCloud
|
|
|
+ .videoUpload({
|
|
|
+ type: res.data.type,
|
|
|
+ evfile: evfile,
|
|
|
+ res: res,
|
|
|
+ uploading(status, progress) {
|
|
|
+ that.upload.videoIng = status;
|
|
|
+ if (res.status == 200) {
|
|
|
+ that.progress = 100;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ that.formValidate.video_link = res.url;
|
|
|
+ that.$Message.success("视频上传成功");
|
|
|
+ that.upload.videoIng = false;
|
|
|
+ })
|
|
|
+ .catch((res) => {
|
|
|
+ that.$Message.error(res);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch((res) => {
|
|
|
+ that.$Message.error(res.msg);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 上一页;
|
|
|
+ upTab() {
|
|
|
+ if (this.currentTab == 3 && this.formValidate.product_type != 0) {
|
|
|
+ this.currentTab = (Number(this.currentTab) - 2).toString();
|
|
|
+ } else {
|
|
|
+ this.currentTab = (Number(this.currentTab) - 1).toString();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 下一页;
|
|
|
+ downTab(name) {
|
|
|
+ this.$refs[name].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ if (this.formValidate.is_show == 2 && !this.formValidate.auto_on_time) {
|
|
|
+ return this.$Message.warning("请填写定时上架时间");
|
|
|
+ }
|
|
|
+ if (this.off_show == 1 && !this.formValidate.auto_off_time) {
|
|
|
+ return this.$Message.warning("请填写定时下架时间");
|
|
|
+ }
|
|
|
+ if (this.currentTab == 3 && this.formValidate.product_type != 0) {
|
|
|
+ this.currentTab = (Number(this.currentTab) + 2).toString();
|
|
|
+ } else {
|
|
|
+ this.currentTab = (Number(this.currentTab) + 1).toString();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$Message.warning("请完善数据");
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 属性弹窗回调函数;
|
|
|
+ userSearchs() {
|
|
|
+ this.productGetRule();
|
|
|
+ },
|
|
|
+ // 添加规则;
|
|
|
+ addRule() {
|
|
|
+ this.$refs.addattr.modal = true;
|
|
|
+ },
|
|
|
+ // 批量设置分佣;
|
|
|
+ // brokerageSetUp() {
|
|
|
+ // let that = this;
|
|
|
+ // if (that.formValidate.is_sub.indexOf(1) > -1) {
|
|
|
+ // if (that.manyBrokerage <= 0 || that.manyBrokerageTwo <= 0) {
|
|
|
+ // return that.$Message.error("请填写返佣金额后进行批量添加");
|
|
|
+ // }
|
|
|
+ // } else if (that.formValidate.is_sub.indexOf(0) > -1) {
|
|
|
+ // if (that.manyVipPrice <= 0) {
|
|
|
+ // return that.$Message.error("请填写会员价后进行批量添加");
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (this.formValidate.is_sub.length === 2) {
|
|
|
+ // if (
|
|
|
+ // that.manyBrokerage <= 0 ||
|
|
|
+ // that.manyBrokerageTwo <= 0 ||
|
|
|
+ // that.manyVipPrice <= 0
|
|
|
+ // ) {
|
|
|
+ // return that.$Message.error("请填写完金额后进行批量添加");
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // for (let val of that.manyFormValidate) {
|
|
|
+ // this.$set(val, "brokerage", that.manyBrokerage);
|
|
|
+ // this.$set(val, "brokerage_two", that.manyBrokerageTwo);
|
|
|
+ // this.$set(val, "vip_price", that.manyVipPrice);
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // 批量设置会员价
|
|
|
+ vipPriceSetUp() {
|
|
|
+ let that = this;
|
|
|
+ if (that.manyVipPrice <= 0) {
|
|
|
+ return that.$Message.error("请填写会员价在进行批量添加");
|
|
|
+ } else {
|
|
|
+ for (let val of that.manyFormValidate) {
|
|
|
+ this.$set(val, "vip_price", that.manyVipPrice);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ batchDel() {
|
|
|
+ this.oneFormBatch = [{
|
|
|
+ attr: "全部",
|
|
|
+ pic: "",
|
|
|
+ price: 0,
|
|
|
+ settle_price: 0,
|
|
|
+ cost: 0,
|
|
|
+ ot_price: 0,
|
|
|
+ stock: 0,
|
|
|
+ bar_code: "",
|
|
|
+ code: "",
|
|
|
+ weight: 0,
|
|
|
+ volume: 0,
|
|
|
+ virtualList: [],
|
|
|
+ disk_info: ''
|
|
|
+ }, ];
|
|
|
+ this.activeAtter = [];
|
|
|
+ for (let val of this.manyFormValidate) {
|
|
|
+ val.select = true;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ confirm() {
|
|
|
+ let that = this;
|
|
|
+ that.createBnt = true;
|
|
|
+ if (that.formValidate.selectRule.trim().length <= 0) {
|
|
|
+ return that.$Message.error("请选择属性");
|
|
|
+ }
|
|
|
+ that.ruleList.forEach(function(item, index) {
|
|
|
+ if (item.rule_name === that.formValidate.selectRule) {
|
|
|
+ that.attrs = item.rule_value;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取商品属性模板;
|
|
|
+ productGetRule() {
|
|
|
+ productGetRuleApi().then((res) => {
|
|
|
+ this.ruleList = res.data;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取运费模板;
|
|
|
+ productGetTemplate() {
|
|
|
+ productGetTemplateApi().then((res) => {
|
|
|
+ this.templateList = res.data;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 删除表格中的属性
|
|
|
+ delAttrTable(index) {
|
|
|
+ let id = this.$route.params.id;
|
|
|
+ if (id) {
|
|
|
+ // checkActivityApi(id)
|
|
|
+ // .then((res) => {
|
|
|
+ this.manyFormValidate.splice(index, 1);
|
|
|
+ this.$Message.success(res.msg);
|
|
|
+ // })
|
|
|
+ // .catch((res) => {
|
|
|
+ // this.$Message.error(res.msg);
|
|
|
+ // });
|
|
|
+ } else {
|
|
|
+ this.manyFormValidate.splice(index, 1);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 批量添加
|
|
|
+ batchAdd() {
|
|
|
+ for (let val of this.manyFormValidate) {
|
|
|
+ //this.manyEmpty(val);
|
|
|
+ if (val.select) {
|
|
|
+ if (this.oneFormBatch[0].pic) {
|
|
|
+ this.$set(val, "pic", this.oneFormBatch[0].pic);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].price > 0) {
|
|
|
+ this.$set(val, "price", this.oneFormBatch[0].price);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].settle_price > 0) {
|
|
|
+ this.$set(val, "settle_price", this.oneFormBatch[0].settle_price);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].cost > 0) {
|
|
|
+ this.$set(val, "cost", this.oneFormBatch[0].cost);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].ot_price > 0) {
|
|
|
+ this.$set(val, "ot_price", this.oneFormBatch[0].ot_price);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].stock > 0) {
|
|
|
+ this.$set(val, "stock", this.oneFormBatch[0].stock);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].bar_code !== "") {
|
|
|
+ this.$set(val, "bar_code", this.oneFormBatch[0].bar_code);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].code !== "") {
|
|
|
+ this.$set(val, "code", this.oneFormBatch[0].code);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].weight > 0) {
|
|
|
+ this.$set(val, "weight", this.oneFormBatch[0].weight);
|
|
|
+ }
|
|
|
+ if (this.oneFormBatch[0].volume > 0) {
|
|
|
+ this.$set(val, "volume", this.oneFormBatch[0].volume);
|
|
|
+ }
|
|
|
+ if (this.formValidate.product_type == 1) {
|
|
|
+ if (this.oneFormBatch[0].virtual_list && this.oneFormBatch[0].virtual_list.length) {
|
|
|
+ this.$set(val, "virtual_list", this.oneFormBatch[0].virtual_list);
|
|
|
+ } else if (this.oneFormBatch[0].disk_info) {
|
|
|
+ this.$refs.addCarMy.cartMyType = 1;
|
|
|
+ this.$set(val, "disk_info", this.oneFormBatch[0].disk_info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 添加按钮
|
|
|
+ addBtn() {
|
|
|
+ this.clearAttr();
|
|
|
+ this.createBnt = false;
|
|
|
+ this.showIput = true;
|
|
|
+ },
|
|
|
+ addmanyData(data) {
|
|
|
+ data.forEach(item => {
|
|
|
+ item.select = true
|
|
|
+ })
|
|
|
+ this.manyFormValidate = data;
|
|
|
+ },
|
|
|
+ // 立即生成
|
|
|
+ generate(type) {
|
|
|
+ generateAttrApi({
|
|
|
+ attrs: this.attrs,
|
|
|
+ product_type: this.formValidate.product_type
|
|
|
+ }, this.formValidate.id, type)
|
|
|
+ .then((res) => {
|
|
|
+ let info = res.data.info,
|
|
|
+ header1 = JSON.parse(JSON.stringify(info.header));
|
|
|
+ if (this.$route.params.id !== "0") {
|
|
|
+ this.addmanyData(info.value);
|
|
|
+ }
|
|
|
+ this.formValidate.header = header1;
|
|
|
+ this.attrData = res.data.info.attr;
|
|
|
+ let header = info.header;
|
|
|
+ header.pop();
|
|
|
+ this.columnsInstalM = info.header;
|
|
|
+ // this.checkAllGroup(this.formValidate.is_sub);
|
|
|
+ if (!this.$route.params.id && this.formValidate.spec_type === 1) {
|
|
|
+ this.manyFormValidate.map((item) => {
|
|
|
+ item.pic = this.formValidate.slider_image[0];
|
|
|
+ });
|
|
|
+ this.oneFormBatch[0].pic = this.formValidate.slider_image[0];
|
|
|
+ } else if (this.$route.params.id) {
|
|
|
+ this.manyFormValidate.map((item) => {
|
|
|
+ if (!item.pic) {
|
|
|
+ item.pic = this.formValidate.slider_image[0];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.oneFormBatch[0].pic = this.formValidate.slider_image[0];
|
|
|
+ }
|
|
|
+ this.getAttr();
|
|
|
+ })
|
|
|
+ .catch((res) => {
|
|
|
+ this.$Message.error(res.msg);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 取消
|
|
|
+ offAttrName() {
|
|
|
+ this.showIput = false;
|
|
|
+ this.createBnt = true;
|
|
|
+ },
|
|
|
+ clearAttr() {
|
|
|
+ this.formDynamic.attrsName = "";
|
|
|
+ this.formDynamic.attrsVal = "";
|
|
|
+ },
|
|
|
+ // 删除规格
|
|
|
+ handleRemoveRole(index) {
|
|
|
+ this.attrs.splice(index, 1);
|
|
|
+ this.manyFormValidate.splice(index, 1);
|
|
|
+ },
|
|
|
+ // 删除属性
|
|
|
+ handleRemove2(item, index) {
|
|
|
+ item.splice(index, 1);
|
|
|
+ },
|
|
|
+ // 添加规则名称
|
|
|
+ createAttrName() {
|
|
|
+ if (this.formDynamic.attrsName && this.formDynamic.attrsVal) {
|
|
|
+ let data = {
|
|
|
+ value: this.formDynamic.attrsName,
|
|
|
+ detail: [this.formDynamic.attrsVal],
|
|
|
+ };
|
|
|
+ this.attrs.push(data);
|
|
|
+ var hash = {};
|
|
|
+ this.attrs = this.attrs.reduce(function(item, next) {
|
|
|
+ /* eslint-disable */
|
|
|
+ hash[next.value] ? "" : (hash[next.value] = true && item.push(next));
|
|
|
+ return item;
|
|
|
+ }, []);
|
|
|
+ this.clearAttr();
|
|
|
+ this.showIput = false;
|
|
|
+ this.createBnt = true;
|
|
|
+ } else {
|
|
|
+ this.$Message.warning("请添加完整的规格!");
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 添加属性
|
|
|
+ createAttr(num, idx) {
|
|
|
+ if (num) {
|
|
|
+ this.attrs[idx].detail.push(num);
|
|
|
+ var hash = {};
|
|
|
+ this.attrs[idx].detail = this.attrs[idx].detail.reduce(function(
|
|
|
+ item,
|
|
|
+ next
|
|
|
+ ) {
|
|
|
+ /* eslint-disable */
|
|
|
+ hash[next] ? "" : (hash[next] = true && item.push(next));
|
|
|
+ return item;
|
|
|
+ },
|
|
|
+ []);
|
|
|
+ } else {
|
|
|
+ this.$Message.warning("请添加属性");
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 商品分类;
|
|
|
+ goodsCategory() {
|
|
|
+ cascaderList(1)
|
|
|
+ .then((res) => {
|
|
|
+ this.treeSelect = res.data;
|
|
|
+ })
|
|
|
+ .catch((res) => {
|
|
|
+ this.$Message.error(res.msg);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //视视上传类型
|
|
|
+ changeVideo(e) {
|
|
|
+ this.formValidate.video_link = "";
|
|
|
+ this.videoLink = "";
|
|
|
+ },
|
|
|
+ // 改变规格
|
|
|
+ changeSpec() {
|
|
|
+ // this.formValidate.is_sub = [];
|
|
|
+ // let id = this.$route.params.id;
|
|
|
+ // if (id) {
|
|
|
+ // checkActivityApi(id)
|
|
|
+ // .then((res) => {})
|
|
|
+ // .catch((res) => {
|
|
|
+ // this.formValidate.spec_type = this.spec_type;
|
|
|
+ // this.$Message.error(res.msg);
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ // 详情
|
|
|
+ getInfo() {
|
|
|
+ let that = this;
|
|
|
+ that.spinShow = true;
|
|
|
+ productInfoApi(that.$route.params.id || this.$route.query.copy)
|
|
|
+ .then((res) => {
|
|
|
+ let data = res.data.productInfo;
|
|
|
+ this.infoData(data);
|
|
|
+ this.spinShow = false;
|
|
|
+ })
|
|
|
+ .catch((res) => {
|
|
|
+ this.spinShow = false;
|
|
|
+ this.$Message.error(res.msg);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // tab切换
|
|
|
+ onhangeTab(name) {
|
|
|
+ this.currentTab = name;
|
|
|
+ },
|
|
|
+ handleRemove(i) {
|
|
|
+ this.images.splice(i, 1);
|
|
|
+ this.formValidate.slider_image.splice(i, 1);
|
|
|
+ this.oneFormValidate[0].pic = this.formValidate.slider_image[0];
|
|
|
+ },
|
|
|
+ // 关闭图片上传模态框
|
|
|
+ changeCancel(msg) {
|
|
|
+ this.modalPic = false;
|
|
|
+ },
|
|
|
+ // 点击商品图
|
|
|
+ modalPicTap(tit, picTit, index) {
|
|
|
+ this.modalPic = true;
|
|
|
+ this.isChoice = tit === "dan" ? "单选" : "多选";
|
|
|
+ this.picTit = picTit;
|
|
|
+ this.tableIndex = index;
|
|
|
+ },
|
|
|
+ // 获取单张图片信息
|
|
|
+ getPic(pc) {
|
|
|
+ switch (this.picTit) {
|
|
|
+ case "danFrom":
|
|
|
+ this.formValidate.image = pc.att_dir;
|
|
|
+ if (!this.$route.params.id) {
|
|
|
+ if (this.formValidate.spec_type === 0) {
|
|
|
+ this.oneFormValidate[0].pic = pc.att_dir;
|
|
|
+ } else {
|
|
|
+ this.manyFormValidate.map((item) => {
|
|
|
+ item.pic = pc.att_dir;
|
|
|
+ });
|
|
|
+ this.oneFormBatch[0].pic = pc.att_dir;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "danTable":
|
|
|
+ this.oneFormValidate[this.tableIndex].pic = pc.att_dir;
|
|
|
+ break;
|
|
|
+ case "duopi":
|
|
|
+ this.oneFormBatch[this.tableIndex].pic = pc.att_dir;
|
|
|
+ break;
|
|
|
+ case "recommend_image":
|
|
|
+ this.formValidate.recommend_image = pc.att_dir;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ this.manyFormValidate[this.tableIndex].pic = pc.att_dir;
|
|
|
+ }
|
|
|
+ this.modalPic = false;
|
|
|
+ },
|
|
|
+ // 获取多张图信息
|
|
|
+ getPicD(pc) {
|
|
|
+ this.images = pc;
|
|
|
+ this.images.map((item) => {
|
|
|
+ this.formValidate.slider_image.push(item.att_dir);
|
|
|
+ this.formValidate.slider_image = this.formValidate.slider_image.splice(
|
|
|
+ 0,
|
|
|
+ 10
|
|
|
+ );
|
|
|
+ });
|
|
|
+ this.oneFormValidate[0].pic = this.formValidate.slider_image[0];
|
|
|
+ this.modalPic = false;
|
|
|
+ },
|
|
|
+ // 提交
|
|
|
+ handleSubmit(name) {
|
|
|
+ this.$refs[name].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ if (!this.formValidate.store_name.trim()) {
|
|
|
+ return this.$Message.warning("基础信息-商品名称不能为空");
|
|
|
+ }
|
|
|
+ if (this.formValidate.is_show == 2 && !this.formValidate.auto_on_time) {
|
|
|
+ return this.$Message.warning("基础信息-定时上架时间不能为空");
|
|
|
+ }
|
|
|
+ if (this.off_show == 1 && !this.formValidate.auto_off_time) {
|
|
|
+ return this.$Message.warning("基础信息-定时下架时间不能为空");
|
|
|
+ }
|
|
|
+ if (this.formValidate.freight == 2 && this.formValidate.product_type == 0 && this
|
|
|
+ .formValidate.postage <= 0) {
|
|
|
+ return this.$Message.warning("物流设置-固定邮费不能为0");
|
|
|
+ }
|
|
|
+ if (this.formValidate.freight == 3 && this.formValidate.product_type == 0 && !this
|
|
|
+ .formValidate.temp_id) {
|
|
|
+ return this.$Message.warning("物流设置-运费模板不能为空");
|
|
|
+ }
|
|
|
+ if (this.currentTab == 4 && !this.formValidate.delivery_type.length) {
|
|
|
+ return this.$Message.warning("请选择配送方式");
|
|
|
+ }
|
|
|
+ // if(this.formValidate.product_type==0&&this.formValidate.is_presale_product&&!this.formValidate.presale_time[0]){
|
|
|
+ // return this.$Message.warning("营销设置-预售时间不能为空");
|
|
|
+ // }
|
|
|
+ // for (let i = 0; i < this.formValidate.custom_form.length; i++) {
|
|
|
+ // const element = this.formValidate.custom_form[i];
|
|
|
+ // if (!element.title) {
|
|
|
+ // return this.$Message.warning("其他设置-留言标题不能为空");
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ if (this.customBtn && this.formValidate.system_form_id == 0) {
|
|
|
+ return this.$Message.warning('其他设置-请选择自定义表单模板');
|
|
|
+ }
|
|
|
+ this.formValidate.type = this.type;
|
|
|
+ if (this.formValidate.spec_type === 0) {
|
|
|
+ this.formValidate.attrs = this.oneFormValidate;
|
|
|
+ this.formValidate.header = [];
|
|
|
+ this.formValidate.items = [];
|
|
|
+ } else {
|
|
|
+ this.formValidate.items = this.attrs;
|
|
|
+ this.formValidate.attrs = this.manyFormValidate;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ this.formValidate.spec_type === 1 &&
|
|
|
+ this.manyFormValidate.length === 0
|
|
|
+ ) {
|
|
|
+ return this.$Message.warning("规格库存-请点击生成多规格");
|
|
|
+ // return this.$Message.warning('请点击生成规格!');
|
|
|
+ }
|
|
|
+ let item = this.formValidate.attrs;
|
|
|
+ // if ( this.formValidate.is_sub.indexOf(1) != -1 ) {
|
|
|
+ // for (let i = 0; i < item.length; i++) {
|
|
|
+ // if (
|
|
|
+ // item[i].brokerage === null ||
|
|
|
+ // item[i].brokerage_two === null
|
|
|
+ // ) {
|
|
|
+ // return this.$Message.warning("营销设置- 一二级返佣不能为空");
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if(this.formValidate.is_sub.indexOf(0) != -1){
|
|
|
+ // for (let i = 0; i < item.length; i++) {
|
|
|
+ // if (item[i].vip_price === null) {
|
|
|
+ // return this.$Message.warning("营销设置-会员价不能为空");
|
|
|
+ // }
|
|
|
+ // if (item[i].vip_price === 0) {
|
|
|
+ // return this.$Message.warning("营销设置-会员价不能为0");
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (this.formValidate.is_sub.length === 2) {
|
|
|
+ // for (let i = 0; i < item.length; i++) {
|
|
|
+ // if (
|
|
|
+ // item[i].brokerage === null ||
|
|
|
+ // item[i].brokerage_two === null ||
|
|
|
+ // item[i].vip_price === null
|
|
|
+ // ) {
|
|
|
+ // return this.$Message.error(
|
|
|
+ // "营销设置- 一二级返佣和会员价不能为空"
|
|
|
+ // );
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ for (let i = 0; i < this.specsList.length; i++) {
|
|
|
+ let data = this.specsList[i];
|
|
|
+ if (!data.name.trim()) {
|
|
|
+ return this.$Message.error('请输入参数名称');
|
|
|
+ }
|
|
|
+ if (!data.value.trim()) {
|
|
|
+ return this.$Message.error('请输入参数值');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // if(!this.formValidate.product_type){
|
|
|
+ // this.formValidate.is_support_refund = 1;
|
|
|
+ // }
|
|
|
+ this.openSubimit = false;
|
|
|
+ this.formValidate.description = this.formatRichText(this.content);
|
|
|
+ let goodsId = [];
|
|
|
+ this.goodsData.forEach(item => {
|
|
|
+ goodsId.push(item.product_id)
|
|
|
+ })
|
|
|
+ this.formValidate.recommend_list = goodsId;
|
|
|
+ // 用户标签
|
|
|
+ // let activeIds = [];
|
|
|
+ // this.dataLabel.forEach((item)=>{
|
|
|
+ // activeIds.push(item.id)
|
|
|
+ // });
|
|
|
+ // this.formValidate.label_id = activeIds
|
|
|
+ // 商品标签
|
|
|
+ let storeActiveIds = [];
|
|
|
+ this.storeDataLabel.forEach((item) => {
|
|
|
+ storeActiveIds.push(item.id)
|
|
|
+ });
|
|
|
+ this.formValidate.store_label_id = storeActiveIds
|
|
|
+ // 商品参数
|
|
|
+ this.formValidate.specs = this.specsList;
|
|
|
+ if (this.$route.query.copy) {
|
|
|
+ this.formValidate.id = 0;
|
|
|
+ this.formValidate.soure_link = '';
|
|
|
+ }
|
|
|
+ productAddApi(this.formValidate)
|
|
|
+ .then(async (res) => {
|
|
|
+ this.openSubimit = true;
|
|
|
+ this.$Message.success(res.msg);
|
|
|
+ if (this.$route.params.id === "0") {
|
|
|
+ cacheDelete().catch((err) => {
|
|
|
+ this.$Message.error(err.msg);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$router.push({
|
|
|
+ path: `${Setting.roterPre}/product/index`
|
|
|
+ });
|
|
|
+ }, 500);
|
|
|
+ })
|
|
|
+ .catch((res) => {
|
|
|
+ this.openSubimit = false;
|
|
|
+ this.$Message.error(res.msg);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ if (!this.formValidate.store_name) {
|
|
|
+ return this.$Message.warning("基础信息-商品名称不能为空");
|
|
|
+ } else if (!this.formValidate.cate_id.length) {
|
|
|
+ return this.$Message.warning("基础信息-商品分类不能为空");
|
|
|
+ } else if (!this.formValidate.unit_name) {
|
|
|
+ return this.$Message.warning("基础信息-商品单位不能为空");
|
|
|
+ } else if (!this.formValidate.slider_image.length) {
|
|
|
+ return this.$Message.warning("基础信息-商品轮播图不能为空");
|
|
|
+ }
|
|
|
+ // if(!this.formValidate.store_name || !this.formValidate.cate_id || !this.formValidate.keyword
|
|
|
+ // || !this.formValidate.unit_name || !this.formValidate.store_info
|
|
|
+ // || !this.formValidate.image || !this.formValidate.slider_image){
|
|
|
+ // this.$Message.warning("请填写完整商品信息!");
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ changeTemplate(msg) {
|
|
|
+ this.template = msg;
|
|
|
+ },
|
|
|
+ // 表单验证
|
|
|
+ validate(prop, status, error) {
|
|
|
+ if (status === false) {
|
|
|
+ this.$Message.warning(error);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 移动
|
|
|
+ handleDragStart(e, item) {
|
|
|
+ this.dragging = item;
|
|
|
+ },
|
|
|
+ handleDragEnd(e, item) {
|
|
|
+ this.dragging = null;
|
|
|
+ },
|
|
|
+ handleDragOver(e) {
|
|
|
+ e.dataTransfer.dropEffect = "move";
|
|
|
+ },
|
|
|
+ handleDragEnter(e, item) {
|
|
|
+ e.dataTransfer.effectAllowed = "move";
|
|
|
+ if (item === this.dragging) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const newItems = [...this.formValidate.slider_image];
|
|
|
+ const src = newItems.indexOf(this.dragging);
|
|
|
+ const dst = newItems.indexOf(item);
|
|
|
+ newItems.splice(dst, 0, ...newItems.splice(src, 1));
|
|
|
+ this.formValidate.slider_image = newItems;
|
|
|
+ },
|
|
|
+ // 添加自定义弹窗
|
|
|
+ addCustomDialog(editorId) {
|
|
|
+ window.UE.registerUI(
|
|
|
+ "test-dialog",
|
|
|
+ function(editor, uiName) {
|
|
|
+ // 创建 dialog
|
|
|
+ let dialog = new window.UE.ui.Dialog({
|
|
|
+ iframeUrl: "/store/widget.images/index.html?fodder=dialog",
|
|
|
+ editor: editor,
|
|
|
+ name: uiName,
|
|
|
+ title: "上传图片",
|
|
|
+ cssRules: "width:1200px;height:500px;padding:20px;",
|
|
|
+ });
|
|
|
+ this.dialog = dialog;
|
|
|
+ let btn = new window.UE.ui.Button({
|
|
|
+ name: "dialog-button",
|
|
|
+ title: "上传图片",
|
|
|
+ cssRules: `background-image: url(https://cdn.oss.9gt.net/prov1.1/1/icons.png);background-position: -726px -77px;`,
|
|
|
+ onclick: function() {
|
|
|
+ // 渲染dialog
|
|
|
+ dialog.render();
|
|
|
+ dialog.open();
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return btn;
|
|
|
+ },
|
|
|
+ 37
|
|
|
+ );
|
|
|
+ window.UE.registerUI(
|
|
|
+ "video-dialog",
|
|
|
+ function(editor, uiName) {
|
|
|
+ let dialog = new window.UE.ui.Dialog({
|
|
|
+ iframeUrl: "/store/widget.video/index.html?fodder=video",
|
|
|
+ editor: editor,
|
|
|
+ name: uiName,
|
|
|
+ title: "上传视频",
|
|
|
+ cssRules: "width:1000px;height:500px;padding:20px;",
|
|
|
+ });
|
|
|
+ this.dialog = dialog;
|
|
|
+ let btn = new window.UE.ui.Button({
|
|
|
+ name: "video-button",
|
|
|
+ title: "上传视频",
|
|
|
+ cssRules: `background-image: url(../../../assets/images/icons.png);background-position: -320px -20px;`,
|
|
|
+ onclick: function() {
|
|
|
+ // 渲染dialog
|
|
|
+ dialog.render();
|
|
|
+ dialog.open();
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return btn;
|
|
|
+ },
|
|
|
+ 38
|
|
|
+ );
|
|
|
+ },
|
|
|
+ formatRichText(html) {
|
|
|
+ let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
|
|
|
+ match = match
|
|
|
+ .replace(/style="[^"]+"/gi, "")
|
|
|
+ .replace(/style='[^']+'/gi, "");
|
|
|
+ match = match
|
|
|
+ .replace(/width="[^"]+"/gi, "")
|
|
|
+ .replace(/width='[^']+'/gi, "");
|
|
|
+ match = match
|
|
|
+ .replace(/height="[^"]+"/gi, "")
|
|
|
+ .replace(/height='[^']+'/gi, "");
|
|
|
+ return match;
|
|
|
+ });
|
|
|
+ newContent = newContent.replace(
|
|
|
+ /style="[^"]+"/gi,
|
|
|
+ function(match, capture) {
|
|
|
+ match = match
|
|
|
+ .replace(/width:[^;]+;/gi, "max-width:100%;")
|
|
|
+ .replace(/width:[^;]+;/gi, "max-width:100%;");
|
|
|
+ return match;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ // newContent = newContent.replace(/<br[^>]*\/>/gi, "");
|
|
|
+ newContent = newContent.replace(
|
|
|
+ /\<img/gi,
|
|
|
+ '<img style="max-width:100%;height:auto;display:block;margin-top:0;margin-bottom:0;"'
|
|
|
+ );
|
|
|
+ return newContent;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ };
|
|
|
</script>
|
|
|
<style scoped lang="stylus">
|
|
|
-.video-style {
|
|
|
- width: 100%;
|
|
|
- height: 100% !important;
|
|
|
- border-radius: 10px;
|
|
|
-}
|
|
|
-.select-add {
|
|
|
- width: 200px;
|
|
|
- margin-left: 6px;
|
|
|
- margin-right: 10px
|
|
|
-}
|
|
|
-.input-display {
|
|
|
- display: none
|
|
|
-}
|
|
|
-.width-add {
|
|
|
- width:200px;
|
|
|
-}
|
|
|
-.custom-input {
|
|
|
- width: 100px;
|
|
|
- margin-right: 10px
|
|
|
-}
|
|
|
-.asterisk{
|
|
|
- position relative;
|
|
|
- .asteriskInfo{
|
|
|
- position absolute;
|
|
|
- color #ed4014;
|
|
|
- left 73px;
|
|
|
- top 8px;
|
|
|
- &.on{
|
|
|
- left:62px;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-.specsList {
|
|
|
- /deep/.ivu-table-header table{
|
|
|
- border:0!important
|
|
|
- }
|
|
|
- /deep/.ivu-table-header thead tr th{
|
|
|
- padding 0!important
|
|
|
- background-color #EEEEEE!important;
|
|
|
- }
|
|
|
- /deep/.ivu-table-cell{
|
|
|
- padding 0!important
|
|
|
- }
|
|
|
- /deep/.ivu-table-border th, /deep/.ivu-table-border td{
|
|
|
- border-right unset;
|
|
|
- }
|
|
|
- /deep/.ivu-table td{
|
|
|
- height 59px;
|
|
|
- }
|
|
|
- &.on{
|
|
|
- width 50% !important;
|
|
|
- /deep/.ivu-table{
|
|
|
- width 100% !important;
|
|
|
- }
|
|
|
- /deep/.ivu-table td{
|
|
|
- height 40px;
|
|
|
- padding 0 !important;
|
|
|
- }
|
|
|
- /deep/.ivu-table-cell{
|
|
|
- padding 0 16px !important;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-.form-submit {
|
|
|
- /deep/.ivu-card{
|
|
|
- border-radius: 0;
|
|
|
- }
|
|
|
- margin-bottom: 79px;
|
|
|
- .fixed-card {
|
|
|
- position: fixed;
|
|
|
- right: 0;
|
|
|
- bottom: 0;
|
|
|
- left: 200px;
|
|
|
- z-index: 20;
|
|
|
- box-shadow: 0 -1px 2px rgb(240, 240, 240);
|
|
|
-
|
|
|
- /deep/ .ivu-card-body {
|
|
|
- padding: 15px 16px 14px;
|
|
|
- }
|
|
|
-
|
|
|
- .ivu-form-item {
|
|
|
- margin-bottom: 0;
|
|
|
- }
|
|
|
-
|
|
|
- /deep/ .ivu-form-item-content {
|
|
|
- margin-right: 124px;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
-
|
|
|
- .ivu-btn {
|
|
|
- height: 36px;
|
|
|
- padding: 0 20px;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-.seeCatMy {
|
|
|
- color: #2d8cf0;
|
|
|
- cursor: pointer;
|
|
|
-}
|
|
|
-.addCustom_content {
|
|
|
- margin-top: 20px;
|
|
|
-
|
|
|
- .custom_box {
|
|
|
- margin-bottom: 10px;
|
|
|
- }
|
|
|
-
|
|
|
- .addfont {
|
|
|
- display: inline-block;
|
|
|
- font-size: 13px;
|
|
|
- font-weight: 400;
|
|
|
- color: #1890FF;
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.addCustomBox {
|
|
|
- margin-top: 12px;
|
|
|
- font-size: 13px;
|
|
|
- font-weight: 400;
|
|
|
- color: #1890FF;
|
|
|
-
|
|
|
- .btn {
|
|
|
- cursor: pointer;
|
|
|
- width: max-content;
|
|
|
- }
|
|
|
-}
|
|
|
-.checkAlls /deep/.ivu-checkbox-inner{
|
|
|
- width 14px;
|
|
|
- height 14px;
|
|
|
-}
|
|
|
-.checkAlls /deep/.ivu-checkbox-wrapper{
|
|
|
- font-size 12px;
|
|
|
-}
|
|
|
-.lines {
|
|
|
- border-bottom: 1px dashed #eee;
|
|
|
- margin-bottom: 20px;
|
|
|
-}
|
|
|
-.iosfont{
|
|
|
- font-size 20px!important;
|
|
|
-}
|
|
|
-.selectOn{
|
|
|
- color #2d8cf0;
|
|
|
-}
|
|
|
-.ifam {
|
|
|
- width: 344px;
|
|
|
- height: 644px;
|
|
|
- background: url('../../../assets/images/phonebg.png') no-repeat center top;
|
|
|
- background-size: 344px 644px;
|
|
|
- padding: 40px 20px;
|
|
|
- padding-top: 50px;
|
|
|
- margin: 0 auto 0 20px;
|
|
|
-
|
|
|
- .content {
|
|
|
- height: 560px;
|
|
|
- overflow: hidden;
|
|
|
- scrollbar-width: none; /* firefox */
|
|
|
- -ms-overflow-style: none; /* IE 10+ */
|
|
|
- overflow-x: hidden;
|
|
|
- overflow-y: auto;
|
|
|
- }
|
|
|
-
|
|
|
- .content::-webkit-scrollbar {
|
|
|
- display: none; /* Chrome Safari */
|
|
|
- }
|
|
|
-}
|
|
|
-.offShow{
|
|
|
- position absolute
|
|
|
-}
|
|
|
-.goodsShow /deep/.ivu-radio-group-vertical .ivu-radio-wrapper{
|
|
|
- height 35px;
|
|
|
- line-height 35px;
|
|
|
-}
|
|
|
-.videbox {
|
|
|
- width: 60px;
|
|
|
- height: 60px;
|
|
|
- background: rgba(0, 0, 0, 0.02);
|
|
|
- border-radius: 4px;
|
|
|
- border: 1px dashed #DDDDDD;
|
|
|
- line-height: 50px;
|
|
|
- text-align: center;
|
|
|
- color: #898989;
|
|
|
- font-size: 30px;
|
|
|
- font-weight: 400;
|
|
|
- cursor: pointer;
|
|
|
-}
|
|
|
-.brandName{
|
|
|
- /deep/.ivu-cascader{
|
|
|
- display inline-block
|
|
|
- }
|
|
|
-}
|
|
|
-.formValidate{
|
|
|
- .addClass{
|
|
|
- color: #1890FF;
|
|
|
- margin-left 14px;
|
|
|
- padding 9px 0;
|
|
|
- cursor pointer;
|
|
|
- }
|
|
|
-}
|
|
|
-.productType {
|
|
|
- width: 120px;
|
|
|
- height: 60px;
|
|
|
- background: #FFFFFF;
|
|
|
- border-radius: 3px;
|
|
|
- border: 1px solid #E7E7E7;
|
|
|
- float: left;
|
|
|
- text-align: center;
|
|
|
- padding-top: 8px;
|
|
|
- position: relative;
|
|
|
- cursor: pointer;
|
|
|
- line-height: 23px;
|
|
|
- margin-right 12px;
|
|
|
-
|
|
|
- &.on{
|
|
|
- border-color #1890FF;
|
|
|
- }
|
|
|
-
|
|
|
- .name {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 600;
|
|
|
- color: rgba(0, 0, 0, 0.85);
|
|
|
- }
|
|
|
-
|
|
|
- .title {
|
|
|
- font-size: 12px;
|
|
|
- font-weight: 400;
|
|
|
- color: #999999;
|
|
|
- }
|
|
|
-
|
|
|
- .jiao {
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- right: 0;
|
|
|
- width: 0;
|
|
|
- height: 0;
|
|
|
- border-bottom: 26px solid #1890FF;
|
|
|
- border-left: 26px solid transparent;
|
|
|
- }
|
|
|
-
|
|
|
- .iconfont {
|
|
|
- position: absolute;
|
|
|
- bottom: -3px;
|
|
|
- right: 1px;
|
|
|
- color: #FFFFFF;
|
|
|
- font-size 12px;
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-.labelInput{
|
|
|
- border: 1px solid #dcdee2;
|
|
|
- width 50%;
|
|
|
- padding 0 5px;
|
|
|
- border-radius 5px;
|
|
|
- min-height 30px;
|
|
|
- cursor pointer;
|
|
|
- .span{
|
|
|
- color: #c5c8ce;
|
|
|
- }
|
|
|
- .iconxiayi{
|
|
|
- font-size 12px
|
|
|
- }
|
|
|
-}
|
|
|
-.labelClass{
|
|
|
- /deep/.ivu-form-item-content{
|
|
|
- line-height unset;
|
|
|
- }
|
|
|
-}
|
|
|
-.ivu-checkbox-wrapper{
|
|
|
- margin-right 19px;
|
|
|
-}
|
|
|
-.list-group {
|
|
|
- margin-left: -8px;
|
|
|
-}
|
|
|
-
|
|
|
-.borderStyle {
|
|
|
- border: 1px solid #ccc;
|
|
|
- padding: 8px;
|
|
|
- border-radius: 4px;
|
|
|
-}
|
|
|
-
|
|
|
-.drag {
|
|
|
- cursor: move;
|
|
|
-}
|
|
|
-
|
|
|
-.move-icon {
|
|
|
- width: 30px;
|
|
|
- cursor: move;
|
|
|
- margin-right: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.move-icon .icondrag2 {
|
|
|
- font-size: 26px;
|
|
|
- color: #d8d8d8;
|
|
|
-}
|
|
|
-
|
|
|
-.maxW /deep/.ivu-select-dropdown {
|
|
|
- max-width: 600px;
|
|
|
-}
|
|
|
-
|
|
|
-#shopp-manager .ivu-table-wrapper {
|
|
|
- border-left: 1px solid #dcdee2;
|
|
|
- border-top: 1px solid #dcdee2;
|
|
|
-}
|
|
|
-
|
|
|
-.noLeft {
|
|
|
- >>> .ivu-form-item-content {
|
|
|
- margin-left: 0 !important;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#shopp-manager .ivu-form-item .tips {
|
|
|
- display: inline-bolck;
|
|
|
- font-size: 12px;
|
|
|
- font-weight: 400;
|
|
|
- color: #999999;
|
|
|
- margin-top: 14px;
|
|
|
-}
|
|
|
-
|
|
|
-.iview-video-style {
|
|
|
- width: 40%;
|
|
|
- height: 180px;
|
|
|
- border-radius: 10px;
|
|
|
- background-color: #707070;
|
|
|
- margin-top: 10px;
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
-}
|
|
|
-
|
|
|
-.iview-video-style .iconv {
|
|
|
- color: #fff;
|
|
|
- line-height: 180px;
|
|
|
- width: 50px;
|
|
|
- height: 50px;
|
|
|
- display: inherit;
|
|
|
- font-size: 26px;
|
|
|
- position: absolute;
|
|
|
- top: -74px;
|
|
|
- left: 50%;
|
|
|
- margin-left: -25px;
|
|
|
-}
|
|
|
-
|
|
|
-.iview-video-style .mark {
|
|
|
- position: absolute;
|
|
|
- width: 100%;
|
|
|
- height: 30px;
|
|
|
- top: 0;
|
|
|
- background-color: rgba(0, 0, 0, 0.5);
|
|
|
- text-align: center;
|
|
|
-}
|
|
|
-
|
|
|
-.uploadVideo {
|
|
|
- margin-left: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.submission {
|
|
|
- margin-left: 10px;
|
|
|
-}
|
|
|
-.form-submit .fixed-card .ivu-btn {
|
|
|
- height:32px;
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .tip {
|
|
|
- color: #c9c9c9;
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .color-item {
|
|
|
- width 70px;
|
|
|
- height: 28px;
|
|
|
- line-height: 28px;
|
|
|
- color: #fff;
|
|
|
- margin-right: 10px;
|
|
|
- border-radius 2px;
|
|
|
- text-align center
|
|
|
- .num{
|
|
|
- color #1890FF;
|
|
|
- width 14px;
|
|
|
- height 14px;
|
|
|
- text-align center;
|
|
|
- line-height 14px;
|
|
|
- border-radius 50%;
|
|
|
- background-color #fff;
|
|
|
- margin-right 6px;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .color-item.blue {
|
|
|
- background-color: #1E9FFF;
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .color-item.yellow {
|
|
|
- background-color: rgb(254, 185, 0);
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .color-item.green {
|
|
|
- background-color: #009688;
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .color-item.red {
|
|
|
- background-color: #ed4014;
|
|
|
-}
|
|
|
-
|
|
|
-.color-list .color-item.colorBlue {
|
|
|
- background: linear-gradient(270deg, #5ECFFF 0%, #0084FF 100%);
|
|
|
-}
|
|
|
-
|
|
|
-.columnsBox {
|
|
|
- margin-right: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.priceBox {
|
|
|
- width: 100%;
|
|
|
-}
|
|
|
-
|
|
|
-.rulesBox {
|
|
|
- display: flex;
|
|
|
- flex-wrap: wrap;
|
|
|
-}
|
|
|
-
|
|
|
-.pictrueBox {
|
|
|
- display: inline-block;
|
|
|
-}
|
|
|
-
|
|
|
-.pictrueTab {
|
|
|
- width: 40px !important;
|
|
|
- height: 40px !important;
|
|
|
-}
|
|
|
-
|
|
|
-.pictrue {
|
|
|
- width: 60px;
|
|
|
- height: 60px;
|
|
|
- border: 1px dotted rgba(0, 0, 0, 0.1);
|
|
|
- margin-right: 15px;
|
|
|
- margin-bottom 10px;
|
|
|
- display: inline-block;
|
|
|
- position: relative;
|
|
|
- cursor: pointer;
|
|
|
-
|
|
|
- img {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
-
|
|
|
- .btndel {
|
|
|
- position: absolute;
|
|
|
- z-index: 1;
|
|
|
- width: 20px !important;
|
|
|
- height: 20px !important;
|
|
|
- left: 46px;
|
|
|
- top: -4px;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.upLoad {
|
|
|
- width: 58px;
|
|
|
- height: 58px;
|
|
|
- line-height: 58px;
|
|
|
- border: 1px dotted rgba(0, 0, 0, 0.1);
|
|
|
- border-radius: 4px;
|
|
|
- background: rgba(0, 0, 0, 0.02);
|
|
|
- cursor: pointer;
|
|
|
-}
|
|
|
-
|
|
|
-.curs {
|
|
|
- cursor: pointer;
|
|
|
-}
|
|
|
-
|
|
|
-.inpWith {
|
|
|
- width: 60%;
|
|
|
-}
|
|
|
-
|
|
|
-.labeltop {
|
|
|
- >>> .ivu-form-item-label {
|
|
|
- float: none !important;
|
|
|
- display: inline-block !important;
|
|
|
- margin-left: 120px !important;
|
|
|
- width: auto !important;
|
|
|
- }
|
|
|
- .icondrop-down{
|
|
|
- font-size: 12px;
|
|
|
- margin-left: 5px;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.video-icon {
|
|
|
- background-image: url('https://cdn.oss.9gt.net/prov1.1/1/icons.png'); // cdn.oss.9gt.net/prov1.1/1/icons.png);
|
|
|
- // background-color: #fff;
|
|
|
- background-position: -9999px;
|
|
|
- background-repeat: no-repeat;
|
|
|
-}
|
|
|
-.progress {
|
|
|
- margin-top: 10px;
|
|
|
-}
|
|
|
-.new_tab {
|
|
|
- >>>.ivu-tabs-nav .ivu-tabs-tab{
|
|
|
- padding:4px 16px 20px !important;
|
|
|
- font-weight: 500;
|
|
|
- }
|
|
|
-}
|
|
|
+ .video-style {
|
|
|
+ width: 100%;
|
|
|
+ height: 100% !important;
|
|
|
+ border-radius: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .select-add {
|
|
|
+ width: 200px;
|
|
|
+ margin-left: 6px;
|
|
|
+ margin-right: 10px
|
|
|
+ }
|
|
|
+
|
|
|
+ .input-display {
|
|
|
+ display: none
|
|
|
+ }
|
|
|
+
|
|
|
+ .width-add {
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .custom-input {
|
|
|
+ width: 100px;
|
|
|
+ margin-right: 10px
|
|
|
+ }
|
|
|
+
|
|
|
+ .asterisk {
|
|
|
+ position relative;
|
|
|
+
|
|
|
+ .asteriskInfo {
|
|
|
+ position absolute;
|
|
|
+ color #ed4014;
|
|
|
+ left 73px;
|
|
|
+ top 8px;
|
|
|
+
|
|
|
+ &.on {
|
|
|
+ left: 62px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .specsList {
|
|
|
+ /deep/.ivu-table-header table {
|
|
|
+ border: 0 !important
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/.ivu-table-header thead tr th {
|
|
|
+ padding 0 !important background-color #EEEEEE !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/.ivu-table-cell {
|
|
|
+ padding 0 !important
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/.ivu-table-border th,
|
|
|
+ /deep/.ivu-table-border td {
|
|
|
+ border-right unset;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/.ivu-table td {
|
|
|
+ height 59px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.on {
|
|
|
+ width 50% !important;
|
|
|
+
|
|
|
+ /deep/.ivu-table {
|
|
|
+ width 100% !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/.ivu-table td {
|
|
|
+ height 40px;
|
|
|
+ padding 0 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/.ivu-table-cell {
|
|
|
+ padding 0 16px !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-submit {
|
|
|
+ /deep/.ivu-card {
|
|
|
+ border-radius: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ margin-bottom: 79px;
|
|
|
+
|
|
|
+ .fixed-card {
|
|
|
+ position: fixed;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ left: 200px;
|
|
|
+ z-index: 20;
|
|
|
+ box-shadow: 0 -1px 2px rgb(240, 240, 240);
|
|
|
+
|
|
|
+ /deep/ .ivu-card-body {
|
|
|
+ padding: 15px 16px 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ivu-form-item {
|
|
|
+ margin-bottom: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .ivu-form-item-content {
|
|
|
+ margin-right: 124px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ivu-btn {
|
|
|
+ height: 36px;
|
|
|
+ padding: 0 20px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .seeCatMy {
|
|
|
+ color: #2d8cf0;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .addCustom_content {
|
|
|
+ margin-top: 20px;
|
|
|
+
|
|
|
+ .custom_box {
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .addfont {
|
|
|
+ display: inline-block;
|
|
|
+ font-size: 13px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #1890FF;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .addCustomBox {
|
|
|
+ margin-top: 12px;
|
|
|
+ font-size: 13px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #1890FF;
|
|
|
+
|
|
|
+ .btn {
|
|
|
+ cursor: pointer;
|
|
|
+ width: max-content;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .checkAlls /deep/.ivu-checkbox-inner {
|
|
|
+ width 14px;
|
|
|
+ height 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .checkAlls /deep/.ivu-checkbox-wrapper {
|
|
|
+ font-size 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .lines {
|
|
|
+ border-bottom: 1px dashed #eee;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .iosfont {
|
|
|
+ font-size 20px !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .selectOn {
|
|
|
+ color #2d8cf0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ifam {
|
|
|
+ width: 344px;
|
|
|
+ height: 644px;
|
|
|
+ background: url('../../../assets/images/phonebg.png') no-repeat center top;
|
|
|
+ background-size: 344px 644px;
|
|
|
+ padding: 40px 20px;
|
|
|
+ padding-top: 50px;
|
|
|
+ margin: 0 auto 0 20px;
|
|
|
+
|
|
|
+ .content {
|
|
|
+ height: 560px;
|
|
|
+ overflow: hidden;
|
|
|
+ scrollbar-width: none;
|
|
|
+ /* firefox */
|
|
|
+ -ms-overflow-style: none;
|
|
|
+ /* IE 10+ */
|
|
|
+ overflow-x: hidden;
|
|
|
+ overflow-y: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .content::-webkit-scrollbar {
|
|
|
+ display: none;
|
|
|
+ /* Chrome Safari */
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .offShow {
|
|
|
+ position absolute
|
|
|
+ }
|
|
|
+
|
|
|
+ .goodsShow /deep/.ivu-radio-group-vertical .ivu-radio-wrapper {
|
|
|
+ height 35px;
|
|
|
+ line-height 35px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .videbox {
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+ background: rgba(0, 0, 0, 0.02);
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px dashed #DDDDDD;
|
|
|
+ line-height: 50px;
|
|
|
+ text-align: center;
|
|
|
+ color: #898989;
|
|
|
+ font-size: 30px;
|
|
|
+ font-weight: 400;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .brandName {
|
|
|
+ /deep/.ivu-cascader {
|
|
|
+ display inline-block
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .formValidate {
|
|
|
+ .addClass {
|
|
|
+ color: #1890FF;
|
|
|
+ margin-left 14px;
|
|
|
+ padding 9px 0;
|
|
|
+ cursor pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .productType {
|
|
|
+ width: 120px;
|
|
|
+ height: 60px;
|
|
|
+ background: #FFFFFF;
|
|
|
+ border-radius: 3px;
|
|
|
+ border: 1px solid #E7E7E7;
|
|
|
+ float: left;
|
|
|
+ text-align: center;
|
|
|
+ padding-top: 8px;
|
|
|
+ position: relative;
|
|
|
+ cursor: pointer;
|
|
|
+ line-height: 23px;
|
|
|
+ margin-right 12px;
|
|
|
+
|
|
|
+ &.on {
|
|
|
+ border-color #1890FF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .name {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: rgba(0, 0, 0, 0.85);
|
|
|
+ }
|
|
|
+
|
|
|
+ .title {
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #999999;
|
|
|
+ }
|
|
|
+
|
|
|
+ .jiao {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 0;
|
|
|
+ right: 0;
|
|
|
+ width: 0;
|
|
|
+ height: 0;
|
|
|
+ border-bottom: 26px solid #1890FF;
|
|
|
+ border-left: 26px solid transparent;
|
|
|
+ }
|
|
|
+
|
|
|
+ .iconfont {
|
|
|
+ position: absolute;
|
|
|
+ bottom: -3px;
|
|
|
+ right: 1px;
|
|
|
+ color: #FFFFFF;
|
|
|
+ font-size 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .labelInput {
|
|
|
+ border: 1px solid #dcdee2;
|
|
|
+ width 50%;
|
|
|
+ padding 0 5px;
|
|
|
+ border-radius 5px;
|
|
|
+ min-height 30px;
|
|
|
+ cursor pointer;
|
|
|
+
|
|
|
+ .span {
|
|
|
+ color: #c5c8ce;
|
|
|
+ }
|
|
|
+
|
|
|
+ .iconxiayi {
|
|
|
+ font-size 12px
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .labelClass {
|
|
|
+ /deep/.ivu-form-item-content {
|
|
|
+ line-height unset;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .ivu-checkbox-wrapper {
|
|
|
+ margin-right 19px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .list-group {
|
|
|
+ margin-left: -8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .borderStyle {
|
|
|
+ border: 1px solid #ccc;
|
|
|
+ padding: 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .drag {
|
|
|
+ cursor: move;
|
|
|
+ }
|
|
|
+
|
|
|
+ .move-icon {
|
|
|
+ width: 30px;
|
|
|
+ cursor: move;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .move-icon .icondrag2 {
|
|
|
+ font-size: 26px;
|
|
|
+ color: #d8d8d8;
|
|
|
+ }
|
|
|
+
|
|
|
+ .maxW /deep/.ivu-select-dropdown {
|
|
|
+ max-width: 600px;
|
|
|
+ }
|
|
|
+
|
|
|
+ #shopp-manager .ivu-table-wrapper {
|
|
|
+ border-left: 1px solid #dcdee2;
|
|
|
+ border-top: 1px solid #dcdee2;
|
|
|
+ }
|
|
|
+
|
|
|
+ .noLeft {
|
|
|
+ >>>.ivu-form-item-content {
|
|
|
+ margin-left: 0 !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #shopp-manager .ivu-form-item .tips {
|
|
|
+ display: inline-bolck;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #999999;
|
|
|
+ margin-top: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .iview-video-style {
|
|
|
+ width: 40%;
|
|
|
+ height: 180px;
|
|
|
+ border-radius: 10px;
|
|
|
+ background-color: #707070;
|
|
|
+ margin-top: 10px;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ .iview-video-style .iconv {
|
|
|
+ color: #fff;
|
|
|
+ line-height: 180px;
|
|
|
+ width: 50px;
|
|
|
+ height: 50px;
|
|
|
+ display: inherit;
|
|
|
+ font-size: 26px;
|
|
|
+ position: absolute;
|
|
|
+ top: -74px;
|
|
|
+ left: 50%;
|
|
|
+ margin-left: -25px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .iview-video-style .mark {
|
|
|
+ position: absolute;
|
|
|
+ width: 100%;
|
|
|
+ height: 30px;
|
|
|
+ top: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .uploadVideo {
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .submission {
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-submit .fixed-card .ivu-btn {
|
|
|
+ height: 32px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .tip {
|
|
|
+ color: #c9c9c9;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .color-item {
|
|
|
+ width 70px;
|
|
|
+ height: 28px;
|
|
|
+ line-height: 28px;
|
|
|
+ color: #fff;
|
|
|
+ margin-right: 10px;
|
|
|
+ border-radius 2px;
|
|
|
+
|
|
|
+ text-align center .num {
|
|
|
+ color #1890FF;
|
|
|
+ width 14px;
|
|
|
+ height 14px;
|
|
|
+ text-align center;
|
|
|
+ line-height 14px;
|
|
|
+ border-radius 50%;
|
|
|
+ background-color #fff;
|
|
|
+ margin-right 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .color-item.blue {
|
|
|
+ background-color: #1E9FFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .color-item.yellow {
|
|
|
+ background-color: rgb(254, 185, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .color-item.green {
|
|
|
+ background-color: #009688;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .color-item.red {
|
|
|
+ background-color: #ed4014;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-list .color-item.colorBlue {
|
|
|
+ background: linear-gradient(270deg, #5ECFFF 0%, #0084FF 100%);
|
|
|
+ }
|
|
|
+
|
|
|
+ .columnsBox {
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .priceBox {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .rulesBox {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pictrueBox {
|
|
|
+ display: inline-block;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pictrueTab {
|
|
|
+ width: 40px !important;
|
|
|
+ height: 40px !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pictrue {
|
|
|
+ width: 60px;
|
|
|
+ height: 60px;
|
|
|
+ border: 1px dotted rgba(0, 0, 0, 0.1);
|
|
|
+ margin-right: 15px;
|
|
|
+ margin-bottom 10px;
|
|
|
+ display: inline-block;
|
|
|
+ position: relative;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btndel {
|
|
|
+ position: absolute;
|
|
|
+ z-index: 1;
|
|
|
+ width: 20px !important;
|
|
|
+ height: 20px !important;
|
|
|
+ left: 46px;
|
|
|
+ top: -4px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .upLoad {
|
|
|
+ width: 58px;
|
|
|
+ height: 58px;
|
|
|
+ line-height: 58px;
|
|
|
+ border: 1px dotted rgba(0, 0, 0, 0.1);
|
|
|
+ border-radius: 4px;
|
|
|
+ background: rgba(0, 0, 0, 0.02);
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .curs {
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .inpWith {
|
|
|
+ width: 60%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .labeltop {
|
|
|
+ >>>.ivu-form-item-label {
|
|
|
+ float: none !important;
|
|
|
+ display: inline-block !important;
|
|
|
+ margin-left: 120px !important;
|
|
|
+ width: auto !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .icondrop-down {
|
|
|
+ font-size: 12px;
|
|
|
+ margin-left: 5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .video-icon {
|
|
|
+ background-image: url('https://cdn.oss.9gt.net/prov1.1/1/icons.png'); // cdn.oss.9gt.net/prov1.1/1/icons.png);
|
|
|
+ // background-color: #fff;
|
|
|
+ background-position: -9999px;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ }
|
|
|
+
|
|
|
+ .progress {
|
|
|
+ margin-top: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .new_tab {
|
|
|
+ >>>.ivu-tabs-nav .ivu-tabs-tab {
|
|
|
+ padding: 4px 16px 20px !important;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+ }
|
|
|
</style>
|