mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2025-12-17 08:25:52 +08:00
分类参数必填校验
This commit is contained in:
@@ -16,8 +16,7 @@
|
|||||||
<span> > {{ this.baseInfoForm.categoryName[2] }}</span>
|
<span> > {{ this.baseInfoForm.categoryName[2] }}</span>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="商品名称" prop="goodsName">
|
<FormItem label="商品名称" prop="goodsName">
|
||||||
<Input v-model="baseInfoForm.goodsName" clearable placeholder="商品名称" style="width: 260px"
|
<Input v-model="baseInfoForm.goodsName" clearable placeholder="商品名称" style="width: 260px" type="text" />
|
||||||
type="text"/>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem label="商品价格" prop="price">
|
<FormItem label="商品价格" prop="price">
|
||||||
@@ -149,13 +148,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Upload ref="upload" :action="uploadFileUrl" :format="['avi', 'wmv', 'mpeg', 'mp4', 'mov']"
|
<Upload ref="upload" :action="uploadFileUrl" :format="['avi', 'wmv', 'mpeg', 'mp4', 'mov']"
|
||||||
:headers="{ ...accessToken }"
|
:headers="{ ...accessToken }" :max-size="10240" :on-error="() => { loadingVideo = false }"
|
||||||
:max-size="10240" :on-error="() => { loadingVideo = false }"
|
:on-exceeded-size="handleVideoMaxSize" :on-format-error="handleFormatError"
|
||||||
:on-exceeded-size="handleVideoMaxSize"
|
:on-progress="() => { loadingVideo = true }" :on-success="handleSuccessGoodsVideo"
|
||||||
:on-format-error="handleFormatError" :on-progress="() => { loadingVideo = true }"
|
:show-upload-list="false" multiple style="margin-left: 10px" type="drag">
|
||||||
:on-success="handleSuccessGoodsVideo" :show-upload-list="false"
|
|
||||||
multiple
|
|
||||||
style="margin-left: 10px" type="drag">
|
|
||||||
<Button :loading="loadingVideo" icon="ios-cloud-upload-outline" type="text">
|
<Button :loading="loadingVideo" icon="ios-cloud-upload-outline" type="text">
|
||||||
<span v-if="!loadingVideo">
|
<span v-if="!loadingVideo">
|
||||||
{{ baseInfoForm.goodsVideo ? "已" : "" }}上传视频
|
{{ baseInfoForm.goodsVideo ? "已" : "" }}上传视频
|
||||||
@@ -183,12 +179,14 @@
|
|||||||
<FormItem class="sku-item-content-val flex" label="">
|
<FormItem class="sku-item-content-val flex" label="">
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<AutoComplete v-model="item.name" :filter-method="filterMethod"
|
<AutoComplete v-model="item.name" :filter-method="filterMethod" :maxlength="30"
|
||||||
:maxlength="30" placeholder="请输入规格项名称" style="width: 150px"
|
placeholder="请输入规格项名称" style="width: 150px" @on-focus="changeSkuItem(item.name)"
|
||||||
@on-focus="changeSkuItem(item.name)" @on-change="editSkuItem(item.name, $index, item)">
|
@on-change="editSkuItem(item.name, $index, item)">
|
||||||
</AutoComplete>
|
</AutoComplete>
|
||||||
|
|
||||||
<iSwitch v-if="$index === 0" style="margin-left: 10px" size="small" @on-change="changeSkuOpenImage" v-model="openImage" /><span v-if="$index === 0" style="margin-left: 5px">添加规格图片</span>
|
<iSwitch v-if="$index === 0" style="margin-left: 10px" size="small"
|
||||||
|
@on-change="changeSkuOpenImage" v-model="openImage" /><span v-if="$index === 0"
|
||||||
|
style="margin-left: 5px">添加规格图片</span>
|
||||||
</div>
|
</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
@@ -202,52 +200,40 @@
|
|||||||
<div style="display: flex; justify-content: center; align-items: center;">
|
<div style="display: flex; justify-content: center; align-items: center;">
|
||||||
|
|
||||||
|
|
||||||
<AutoComplete ref="input" v-model="val.value"
|
<AutoComplete ref="input" v-model="val.value" :disabled="containsSameSkuItem"
|
||||||
:disabled="containsSameSkuItem"
|
:filter-method="filterMethod" :maxlength="30" placeholder="请输入规格值"
|
||||||
:filter-method="filterMethod"
|
style="width: 180px" @on-focus="changeSkuVals(val, item.name)"
|
||||||
:maxlength="30" placeholder="请输入规格值" style="width: 180px"
|
|
||||||
@on-focus="changeSkuVals(val, item.name)"
|
|
||||||
@on-blur="checkSkuVal(val, $index, item)"
|
@on-blur="checkSkuVal(val, $index, item)"
|
||||||
@on-change="skuValueChange(val, index, item)">
|
@on-change="skuValueChange(val, index, item)">
|
||||||
</AutoComplete>
|
</AutoComplete>
|
||||||
<a style="margin-left: 6px" v-if="val.value && val.value !== ''">
|
<a style="margin-left: 6px" v-if="val.value && val.value !== ''">
|
||||||
<Icon size="15" type="md-trash" @click="handleCloseSkuValue(val, index, item)"></Icon>
|
<Icon size="15" type="md-trash" @click="handleCloseSkuValue(val, index, item)">
|
||||||
|
</Icon>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="$index === 0 && openImage" style="margin-top: 10px">
|
<div v-if="$index === 0 && openImage" style="margin-top: 10px">
|
||||||
<vuedraggable :animation="200" :list="val.images"
|
<vuedraggable :animation="200" :list="val.images">
|
||||||
>
|
<div v-for="(img, __index) in val.images" :key="__index" class="sku-upload-list"
|
||||||
<div v-for="(img, __index) in val.images" :key="__index"
|
|
||||||
class="sku-upload-list"
|
|
||||||
style="width: 180px;height: 140px">
|
style="width: 180px;height: 140px">
|
||||||
<template>
|
<template>
|
||||||
<img
|
<img :src="img" style="width: 180px;height: 140px" />
|
||||||
:src="img"
|
|
||||||
style="width: 180px;height: 140px"
|
|
||||||
/>
|
|
||||||
<div class="sku-upload-list-cover">
|
<div class="sku-upload-list-cover">
|
||||||
<div style="margin-top: 50px">
|
<div style="margin-top: 50px">
|
||||||
<Icon size="25" type="md-search" @click="handleView(img)"></Icon>
|
<Icon size="25" type="md-search" @click="handleView(img)"></Icon>
|
||||||
<Icon size="25" type="md-trash" @click="handleRemove(val.images, __index)"></Icon>
|
<Icon size="25" type="md-trash" @click="handleRemove(val.images, __index)">
|
||||||
|
</Icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</vuedraggable>
|
</vuedraggable>
|
||||||
<Upload ref="uploadSku" :action="uploadFileUrl"
|
<Upload ref="uploadSku" :action="uploadFileUrl" v-if="val.images < 1"
|
||||||
v-if="val.images < 1"
|
:before-upload="handleBeforeUpload" :format="['jpg', 'jpeg', 'png', 'webp']"
|
||||||
:before-upload="handleBeforeUpload"
|
:headers="{ ...accessToken }" :max-size="2048" :on-error="() => { $Spin.hide(); }"
|
||||||
:format="['jpg', 'jpeg', 'png', 'webp']"
|
:on-exceeded-size="handleMaxSize" :on-format-error="handleFormatError"
|
||||||
:headers="{ ...accessToken }"
|
:on-progress="() => { $Spin.show(); }" :on-success="(res, file) => {
|
||||||
:max-size="2048"
|
|
||||||
:on-error="() => { $Spin.hide(); }"
|
|
||||||
:on-exceeded-size="handleMaxSize"
|
|
||||||
:on-format-error="handleFormatError"
|
|
||||||
:on-progress="() => { $Spin.show(); }"
|
|
||||||
:on-success="(res, file) => {
|
|
||||||
handleSuccess(res, file, val.images)
|
handleSuccess(res, file, val.images)
|
||||||
}"
|
}" :show-upload-list="false"
|
||||||
:show-upload-list="false"
|
|
||||||
style="width: 180px;height: 140px;margin-right: 10px" type="drag">
|
style="width: 180px;height: 140px;margin-right: 10px" type="drag">
|
||||||
<div>
|
<div>
|
||||||
<Icon size="136" type="ios-camera"></Icon>
|
<Icon size="136" type="ios-camera"></Icon>
|
||||||
@@ -256,12 +242,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem v-if="item.spec_values.length < 10 && item.spec_values.length >= 1 && item.spec_values[0].value !== ''" class="sku-item-content-val flex" label="" style="line-height: 32px;">
|
<FormItem
|
||||||
<AutoComplete ref="input" v-model="newSkuValues[$index]"
|
v-if="item.spec_values.length < 10 && item.spec_values.length >= 1 && item.spec_values[0].value !== ''"
|
||||||
:disabled="containsSameSkuItem"
|
class="sku-item-content-val flex" label="" style="line-height: 32px;">
|
||||||
:filter-method="filterMethod"
|
<AutoComplete ref="input" v-model="newSkuValues[$index]" :disabled="containsSameSkuItem"
|
||||||
:maxlength="30" placeholder="自定义规格值" style="width: 180px"
|
:filter-method="filterMethod" :maxlength="30" placeholder="自定义规格值"
|
||||||
@on-blur="addSpec($index, item)"
|
style="width: 180px" @on-blur="addSpec($index, item)"
|
||||||
v-on:keyup.native.enter="addSpec($index, item)">
|
v-on:keyup.native.enter="addSpec($index, item)">
|
||||||
</AutoComplete>
|
</AutoComplete>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
@@ -363,12 +349,7 @@
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
</div>
|
</div>
|
||||||
<FormItem class="form-item-view-el" label="PC商品描述" prop="intro" style="width: 100%">
|
<FormItem class="form-item-view-el" label="PC商品描述" prop="intro" style="width: 100%">
|
||||||
<editor
|
<editor ref="editor" v-model="baseInfoForm.intro" height="800px" openXss></editor>
|
||||||
ref="editor"
|
|
||||||
v-model="baseInfoForm.intro"
|
|
||||||
height="800px"
|
|
||||||
openXss
|
|
||||||
></editor>
|
|
||||||
<div class="promise-intro-btn">
|
<div class="promise-intro-btn">
|
||||||
<Button type="primary" @click="promiseIntroEditor">将PC商品描述同步到移动端描述
|
<Button type="primary" @click="promiseIntroEditor">将PC商品描述同步到移动端描述
|
||||||
</Button>
|
</Button>
|
||||||
@@ -376,12 +357,7 @@
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem class="form-item-view-el" label="移动端描述" prop="skuList" style="width: 100%">
|
<FormItem class="form-item-view-el" label="移动端描述" prop="skuList" style="width: 100%">
|
||||||
<editor
|
<editor ref="introEditor" v-model="baseInfoForm.mobileIntro" height="800px" openXss></editor>
|
||||||
ref="introEditor"
|
|
||||||
v-model="baseInfoForm.mobileIntro"
|
|
||||||
height="800px"
|
|
||||||
openXss
|
|
||||||
></editor>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="baseInfoForm.goodsType != 'VIRTUAL_GOODS'">
|
<div v-if="baseInfoForm.goodsType != 'VIRTUAL_GOODS'">
|
||||||
@@ -430,19 +406,19 @@
|
|||||||
<Panel :name="paramsGroup.groupName">
|
<Panel :name="paramsGroup.groupName">
|
||||||
{{ paramsGroup.groupName }}
|
{{ paramsGroup.groupName }}
|
||||||
<p slot="content">
|
<p slot="content">
|
||||||
<FormItem v-for="(params, paramsIndex) in paramsGroup.params" :key="paramsIndex"
|
<FormItem v-for="(paramsItem, paramsIndex) in paramsGroup.params" :key="paramsIndex"
|
||||||
:label="`${params.paramName}:`">
|
:label="`${paramsItem.paramName}:`"
|
||||||
<Select v-model="params.paramValue" clearable placeholder="请选择" style="width: 200px"
|
:rules="{ required: paramsItem.required, message: '参数不能为空' }">
|
||||||
@on-change="
|
<Select v-model="paramsItem.paramValue" clearable placeholder="请选择" style="width: 200px" @on-change="
|
||||||
selectParams(
|
selectParams(
|
||||||
paramsGroup,
|
paramsGroup,
|
||||||
groupIndex,
|
groupIndex,
|
||||||
params,
|
paramsItem,
|
||||||
paramsIndex,
|
paramsIndex,
|
||||||
params.paramValue
|
paramsItem.paramValue
|
||||||
)
|
)
|
||||||
">
|
">
|
||||||
<Option v-for="option in params.options.split(',')" :key="option" :label="option"
|
<Option v-for="option in paramsItem.options.split(',')" :key="option" :label="option"
|
||||||
:value="option">
|
:value="option">
|
||||||
</Option>
|
</Option>
|
||||||
</Select>
|
</Select>
|
||||||
@@ -476,7 +452,8 @@
|
|||||||
<!--<ossManage @callback="callbackSelected" ref="ossManage" />-->
|
<!--<ossManage @callback="callbackSelected" ref="ossManage" />-->
|
||||||
<!--</Modal>-->
|
<!--</Modal>-->
|
||||||
<Modal v-model="picModelFlag" width="1200px" @on-ok="confirmUrls">
|
<Modal v-model="picModelFlag" width="1200px" @on-ok="confirmUrls">
|
||||||
<ossManage ref="ossManage" :isComponent="true" :initialize="picModelFlag" @callback="callbackSelected" @selected="(list)=>{ selectedImage = list}"/>
|
<ossManage ref="ossManage" :isComponent="true" :initialize="picModelFlag" @callback="callbackSelected"
|
||||||
|
@selected="(list) => { selectedImage = list }" />
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -1832,6 +1809,25 @@ export default {
|
|||||||
this.$Message.error("存在重复规格值!");
|
this.$Message.error("存在重复规格值!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
console.log(this.baseInfoForm.goodsParamsDTOList)
|
||||||
|
let checkFlag = false;
|
||||||
|
this.goodsParams.forEach(group => {
|
||||||
|
group.params.forEach(param => {
|
||||||
|
if(param.required){
|
||||||
|
const check = this.baseInfoForm.goodsParamsDTOList.some(paramsGroup =>
|
||||||
|
paramsGroup.some(paramsItem => paramsItem.paramId === param.id)
|
||||||
|
);
|
||||||
|
if(!check){
|
||||||
|
checkFlag = !check;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
if(checkFlag){
|
||||||
|
this.$Message.error("存在未填写的参数项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.submitLoading = true;
|
this.submitLoading = true;
|
||||||
this.$refs["baseInfoForm"].validate((valid) => {
|
this.$refs["baseInfoForm"].validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
@@ -2068,9 +2064,7 @@ export default {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#dplayer {
|
#dplayer {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* .tox-notifications-container{
|
/* .tox-notifications-container{
|
||||||
display: none !important;
|
display: none !important;
|
||||||
|
|||||||
Reference in New Issue
Block a user