You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
7.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-dialog :title="choosePruoductObj.title"
:visible.sync="choosePruoductObj.open"
:width="choosePruoductObj.width"
@open="init()"
@close="cancel"
append-to-body>
<el-form ref="auditForm" inline :model="choosePruoductObj.queryParams" label-width="80px">
<el-form-item label="商品名称" prop="nameLike">
<el-input
size="small"
placeholder="请输入商品名称"
v-model="choosePruoductObj.queryParams.nameLike"
clearable
/>
</el-form-item>
<el-form-item label="商品编码" prop="outProductId">
<el-input
size="small"
placeholder="请输入商品编码"
v-model="choosePruoductObj.queryParams.outProductId"
clearable
/>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" icon="el-icon-search" size="mini" @click="getProductList">搜索</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<span>申请展示日期范围:</span>
<el-date-picker
v-model="handleDateArray"
clearable
size="small"
type="daterange"
:picker-options="pickerOptions"
value-format="yyyy-MM-dd"
placeholder="选择日期范围"
@change="handleDateChange"
/>
<span style="color: #999; font-size: 12px;"> 温馨提示尽量选择2天后的日期开始展示为审核留出足够时间</span>
</el-row>
<el-table class="mt20"
:data="choosePruoductObj.list"
ref="table"
v-loading="choosePruoductObj.loading"
max-height="500" border
row-key="productId"
@selection-change="handleSelectionChange"
:header-cell-style="{'text-align': 'center'}"
:cell-style="{'text-align': 'center'}"
>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="主图" prop="pic">
<template slot-scope="{ row }">
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img"/>
</template>
</el-table-column>
<el-table-column label="名称/编码" min-width="200" prop="outProductId">
<template slot-scope="{ row }">
<div>名称:{{ row.name }} </div>
<div v-if="row.outProductId">编码:{{ row.outProductId }}</div>
</template>
</el-table-column>
<el-table-column label="品牌/分类" prop="brandName">
<template #default="{ row }" >
<div v-if="row.brandName">品牌:{{ row.brandName }}</div>
<div v-if="row.productCategoryName">分类:{{ row.productCategoryName }}</div>
</template>
</el-table-column>
<el-table-column label="价格/排序" prop="price">
<template #default="{ row }">
<div v-if="row.price">价格:{{ row.price }}</div>
<div v-if="row.sort">排序:{{ row.sort }}</div>
</template>
</el-table-column>
<el-table-column label="场馆内上架状态/商品课程" prop="" width="180">
<template #default="{ row }">
<dict-tag :value="row.publishStatus" prop-name="pms_publish_status"/>
&nbsp;&nbsp;
<dict-tag :value="row.isCourse" prop-name="pms_is_course" />
</template>
</el-table-column>
</el-table>
<pagination
v-show="choosePruoductObj.total>0"
:total="choosePruoductObj.total"
:page.sync="choosePruoductObj.queryParams.pageNum"
:limit.sync="choosePruoductObj.queryParams.pageSize"
@pagination="getProductList"
/>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">提 交</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import {listPmsProduct} from "@/api/pms/product";
import { getProductShow,addProductShow,updateProductShow} from "@/api/pms/productShow";
import ProductCategorySelect from "@/views/components/ProductCategorySelect.vue";
export default {
components: {ProductCategorySelect},
name: "ProductSelect",
data() {
return {
loadingSelect: false,
pickerOptions: {
disabledDate(time) {
// 返回 true 表示禁用,禁止选择今天之前的日期(今天及之后可选)
return time.getTime() < Date.now() - 8.64e7
}
},
selectProduct: [],
handleDateArray: [],
form: {
showStartTime:'',
showEndTime:'',
productId:'',
id:''
},
choosePruoductObj: {
loading: false,
open: false,
title: "选择商品提交申请",
list: [],
width: '60%',
queryParams: {
pageNum: 1,
pageSize: 10,
sale:'1',
nameLike: null,
outProductId: null
},
total: 0
}
}
},
methods: {
submitForm() {
if (this.selectProduct.length>1 || this.selectProduct.length===0){
this.$message.warning('请选择一条记录进行提交');
return;
}
if(this.form.showStartTime=='' || this.form.showEndTime==''){
this.$message.warning('请选择展示日期范围');
return;
}
this.form.productId=this.selectProduct[0].id;
// 判断是否为新增还是更新
if(this.form.id){
updateProductShow(this.form).then(()=>{
this.$message.success('提交成功');
this.choosePruoductObj.open=false;
this.$emit("refreshData")
})
}else {
addProductShow(this.form).then(()=>{
this.$message.success('提交成功');
this.choosePruoductObj.open=false;
this.$emit("refreshData")
})
}
},
async init() {
this.choosePruoductObj.queryParams.pageNum = 1;
await this.getProductList();
this.choosePruoductObj.open = true
this.$nextTick(()=>{
if (this.selectProduct.length>0){
this.judge()
}
})
},
judge() {
this.$nextTick(()=>{
this.choosePruoductObj.list.forEach(ele => {
if (this.selectProduct.some(item => item.id === ele.id)) {
this.$refs.table.toggleRowSelection(ele, true)
} else {
this.$refs.table.toggleRowSelection(ele, false)
}
});
})
},
handleDateChange(val) {
if (val) {
this.form.showStartTime = val[0];
this.form.showEndTime = val[1];
} else {
delete this.form.showStartTime;
delete this.form.showEndTime;
}
},
handleSelectionChange(selection) {
this.selectProduct= selection
},
async getProductList() {
this.choosePruoductObj.loading = true;
const query = {...this.choosePruoductObj.queryParams, pageNum: undefined, pageSize: undefined};
const {pageNum, pageSize} = this.choosePruoductObj.queryParams;
const pageReq = {page: pageNum - 1, size: pageSize};
await listPmsProduct(query, pageReq).then(response => {
const { content, totalElements } = response
this.choosePruoductObj.list = content;
this.choosePruoductObj.total = Number(totalElements);
this.choosePruoductObj.loading = false;
});
},
cancel() {
this.$refs.table.clearSelection()
this.selectProduct = [];
this.handleDateArray = [];
this.form = {
showStartTime:'',
showEndTime:'',
productId:''
}
this.choosePruoductObj.open = false;
}
}
}
</script>
<style lang="stylus">
.line
display flex
align-items center
margin-bottom: 5px;
border-bottom 1px dashed #ccc
.line:last-child
border-bottom 0 !important
margin-bottom 0 !important
</style>