branch_lyj
Liuyujie 7 months ago
parent d4508b8dae
commit aa13a6a04d

@ -1,9 +1,14 @@
<template>  <template>
<!-- 整个页面的容器 -->
<div class="app-container"> <div class="app-container">
<!-- 筛选搜索区域的卡片 -->
<el-card class="filter-container" shadow="never"> <el-card class="filter-container" shadow="never">
<div> <div>
<!-- 搜索图标 -->
<i class="el-icon-search"></i> <i class="el-icon-search"></i>
<!-- 显示筛选搜索文字 -->
<span>筛选搜索</span> <span>筛选搜索</span>
<!-- 查询搜索按钮点击触发handleSearchList方法按钮样式为小型主色调 -->
<el-button <el-button
style="float:right" style="float:right"
type="primary" type="primary"
@ -11,6 +16,7 @@
size="small"> size="small">
查询搜索 查询搜索
</el-button> </el-button>
<!-- 重置按钮点击触发handleResetSearch方法按钮样式为小型与查询搜索按钮有一定间隔 -->
<el-button <el-button
style="float:right;margin-right: 15px" style="float:right;margin-right: 15px"
@click="handleResetSearch()" @click="handleResetSearch()"
@ -19,12 +25,18 @@
</el-button> </el-button>
</div> </div>
<div style="margin-top: 15px"> <div style="margin-top: 15px">
<!-- 内联表单绑定数据模型为listQuery表单尺寸为小标签宽度为140px -->
<el-form :inline="true" :model="listQuery" size="small" label-width="140px"> <el-form :inline="true" :model="listQuery" size="small" label-width="140px">
<!-- 商品名称表单项 -->
<el-form-item label="商品名称:"> <el-form-item label="商品名称:">
<!-- 输入框双向绑定listQuery.productName设置了占位提示文字 -->
<el-input v-model="listQuery.productName" class="input-width" placeholder="商品名称"></el-input> <el-input v-model="listQuery.productName" class="input-width" placeholder="商品名称"></el-input>
</el-form-item> </el-form-item>
<!-- 推荐状态表单项 -->
<el-form-item label="推荐状态:"> <el-form-item label="推荐状态:">
<!-- 下拉选择框双向绑定listQuery.recommendStatus有清除功能设置了占位提示文字 -->
<el-select v-model="listQuery.recommendStatus" placeholder="全部" clearable class="input-width"> <el-select v-model="listQuery.recommendStatus" placeholder="全部" clearable class="input-width">
<!-- 循环生成下拉选项每个选项的keylabelvalue根据recommendOptions中的数据来设置 -->
<el-option v-for="item in recommendOptions" <el-option v-for="item in recommendOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
@ -35,26 +47,37 @@
</el-form> </el-form>
</div> </div>
</el-card> </el-card>
<!-- 操作区域的卡片 -->
<el-card class="operate-container" shadow="never"> <el-card class="operate-container" shadow="never">
<!-- 图标 -->
<i class="el-icon-tickets"></i> <i class="el-icon-tickets"></i>
<!-- 显示数据列表文字 -->
<span>数据列表</span> <span>数据列表</span>
<!-- 选择商品按钮点击触发handleSelectProduct方法按钮尺寸为迷你型 -->
<el-button size="mini" class="btn-add" @click="handleSelectProduct()"></el-button> <el-button size="mini" class="btn-add" @click="handleSelectProduct()"></el-button>
</el-card> </el-card>
<!-- 表格容器 -->
<div class="table-container"> <div class="table-container">
<!-- el-table组件绑定数据为list设置宽度为100%监听选择变化事件根据listLoading状态显示加载动画有边框 -->
<el-table ref="newProductTable" <el-table ref="newProductTable"
:data="list" :data="list"
style="width: 100%;" style="width: 100%;"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
v-loading="listLoading" border> v-loading="listLoading" border>
<!-- 选择列宽度为60px内容居中 -->
<el-table-column type="selection" width="60" align="center"></el-table-column> <el-table-column type="selection" width="60" align="center"></el-table-column>
<!-- 编号列宽度为120px内容居中通过插槽作用域展示对应行的id数据 -->
<el-table-column label="编号" width="120" align="center"> <el-table-column label="编号" width="120" align="center">
<template slot-scope="scope">{{scope.row.id}}</template> <template slot-scope="scope">{{scope.row.id}}</template>
</el-table-column> </el-table-column>
<!-- 商品名称列内容居中通过插槽作用域展示对应行的productName数据 -->
<el-table-column label="商品名称" align="center"> <el-table-column label="商品名称" align="center">
<template slot-scope="scope">{{scope.row.productName}}</template> <template slot-scope="scope">{{scope.row.productName}}</template>
</el-table-column> </el-table-column>
<!-- 是否推荐列宽度为200px内容居中包含一个开关组件 -->
<el-table-column label="是否推荐" width="200" align="center"> <el-table-column label="是否推荐" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 开关组件监听状态改变事件设置了激活和未激活的值双向绑定对应行的recommendStatus数据 -->
<el-switch <el-switch
@change="handleRecommendStatusStatusChange(scope.$index, scope.row)" @change="handleRecommendStatusStatusChange(scope.$index, scope.row)"
:active-value="1" :active-value="1"
@ -63,18 +86,23 @@
</el-switch> </el-switch>
</template> </template>
</el-table-column> </el-table-column>
<!-- 排序列宽度为160px内容居中通过插槽作用域展示对应行的sort数据 -->
<el-table-column label="排序" width="160" align="center"> <el-table-column label="排序" width="160" align="center">
<template slot-scope="scope">{{scope.row.sort}}</template> <template slot-scope="scope">{{scope.row.sort}}</template>
</el-table-column> </el-table-column>
<!-- 状态列宽度为160px内容居中通过管道formatRecommendStatus格式化对应行的recommendStatus数据来展示 -->
<el-table-column label="状态" width="160" align="center"> <el-table-column label="状态" width="160" align="center">
<template slot-scope="scope">{{scope.row.recommendStatus | formatRecommendStatus}}</template> <template slot-scope="scope">{{scope.row.recommendStatus | formatRecommendStatus}}</template>
</el-table-column> </el-table-column>
<!-- 操作列宽度为180px内容居中包含设置排序和删除两个按钮 -->
<el-table-column label="操作" width="180" align="center"> <el-table-column label="操作" width="180" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 设置排序按钮点击触发handleEditSort方法按钮尺寸为迷你型文本样式 -->
<el-button size="mini" <el-button size="mini"
type="text" type="text"
@click="handleEditSort(scope.$index, scope.row)">设置排序 @click="handleEditSort(scope.$index, scope.row)">设置排序
</el-button> </el-button>
<!-- 删除按钮点击触发handleDelete方法按钮尺寸为迷你型文本样式 -->
<el-button size="mini" <el-button size="mini"
type="text" type="text"
@click="handleDelete(scope.$index, scope.row)">删除 @click="handleDelete(scope.$index, scope.row)">删除
@ -83,10 +111,13 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<!-- 批量操作容器 -->
<div class="batch-operate-container"> <div class="batch-operate-container">
<!-- 下拉选择框用于选择批量操作类型双向绑定operateType设置了占位提示文字 -->
<el-select <el-select
size="small" size="small"
v-model="operateType" placeholder="批量操作"> v-model="operateType" placeholder="批量操作">
<!-- 循环生成下拉选项每个选项的keylabelvalue根据operates中的数据来设置 -->
<el-option <el-option
v-for="item in operates" v-for="item in operates"
:key="item.value" :key="item.value"
@ -94,6 +125,7 @@
:value="item.value"> :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
<!-- 确定按钮点击触发handleBatchOperate方法按钮样式为小型主色调与下拉选择框有一定间隔 -->
<el-button <el-button
style="margin-left: 20px" style="margin-left: 20px"
class="search-button" class="search-button"
@ -103,7 +135,9 @@
确定 确定
</el-button> </el-button>
</div> </div>
<!-- 分页容器 -->
<div class="pagination-container"> <div class="pagination-container">
<!-- el-pagination分页组件设置了背景色监听页面尺寸改变和当前页改变事件配置了布局页面尺寸可选页面尺寸列表当前页总数据量等属性 -->
<el-pagination <el-pagination
background background
@size-change="handleSizeChange" @size-change="handleSizeChange"
@ -115,27 +149,36 @@
:total="total"> :total="total">
</el-pagination> </el-pagination>
</div> </div>
<!-- 选择商品的对话框 -->
<el-dialog title="选择商品" :visible.sync="selectDialogVisible" width="50%"> <el-dialog title="选择商品" :visible.sync="selectDialogVisible" width="50%">
<!-- 输入框双向绑定dialogData.listQuery.keyword设置了宽度样式占位提示文字包含一个搜索按钮 -->
<el-input v-model="dialogData.listQuery.keyword" <el-input v-model="dialogData.listQuery.keyword"
style="width: 250px;margin-bottom: 20px" style="width: 250px;margin-bottom: 20px"
size="small" size="small"
placeholder="商品名称搜索"> placeholder="商品名称搜索">
<el-button slot="append" icon="el-icon-search" @click="handleSelectSearch()"></el-button> <el-button slot="append" icon="el-icon-search" @click="handleSelectSearch()"></el-button>
</el-input> </el-input>
<!-- el-table组件用于对话框内展示数据绑定数据为dialogData.list监听选择变化事件有边框 -->
<el-table :data="dialogData.list" <el-table :data="dialogData.list"
@selection-change="handleDialogSelectionChange" border> @selection-change="handleDialogSelectionChange" border>
<!-- 选择列宽度为60px内容居中 -->
<el-table-column type="selection" width="60" align="center"></el-table-column> <el-table-column type="selection" width="60" align="center"></el-table-column>
<!-- 商品名称列内容居中通过插槽作用域展示对应行的name数据 -->
<el-table-column label="商品名称" align="center"> <el-table-column label="商品名称" align="center">
<template slot-scope="scope">{{scope.row.name}}</template> <template slot-scope="scope">{{scope.row.name}}</template>
</el-table-column> </el-table-column>
<!-- 货号列宽度为160px内容居中通过插槽作用域展示对应行的productSn数据格式化展示格式 -->
<el-table-column label="货号" width="160" align="center"> <el-table-column label="货号" width="160" align="center">
<template slot-scope="scope">NO.{{scope.row.productSn}}</template> <template slot-scope="scope">NO.{{scope.row.productSn}}</template>
</el-table-column> </el-table-column>
<!-- 价格列宽度为120px内容居中通过插槽作用域展示对应行的price数据格式化展示格式 -->
<el-table-column label="价格" width="120" align="center"> <el-table-column label="价格" width="120" align="center">
<template slot-scope="scope">{{scope.row.price}}</template> <template slot-scope="scope">{{scope.row.price}}</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 对话框内的分页容器 -->
<div class="pagination-container"> <div class="pagination-container">
<!-- el-pagination分页组件设置了背景色监听对话框内页面尺寸改变和当前页改变事件配置了布局页面尺寸可选页面尺寸列表当前页总数据量等属性 -->
<el-pagination <el-pagination
background background
@size-change="handleDialogSizeChange" @size-change="handleDialogSizeChange"
@ -149,36 +192,48 @@
</div> </div>
<div style="clear: both;"></div> <div style="clear: both;"></div>
<div slot="footer"> <div slot="footer">
<!-- 取消按钮点击隐藏对话框按钮尺寸为小型 -->
<el-button size="small" @click="selectDialogVisible = false"> </el-button> <el-button size="small" @click="selectDialogVisible = false"> </el-button>
<!-- 确定按钮点击触发handleSelectDialogConfirm方法按钮尺寸为小型主色调 -->
<el-button size="small" type="primary" @click="handleSelectDialogConfirm()"> </el-button> <el-button size="small" type="primary" @click="handleSelectDialogConfirm()"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 设置排序的对话框 -->
<el-dialog title="设置排序" <el-dialog title="设置排序"
:visible.sync="sortDialogVisible" :visible.sync="sortDialogVisible"
width="40%"> width="40%">
<!-- el-form表单组件绑定数据模型为sortDialogData设置标签宽度 -->
<el-form :model="sortDialogData" <el-form :model="sortDialogData"
label-width="150px"> label-width="150px">
<!-- 排序表单项 -->
<el-form-item label="排序:"> <el-form-item label="排序:">
<!-- 输入框双向绑定sortDialogData.sort设置了宽度 -->
<el-input v-model="sortDialogData.sort" style="width: 200px"></el-input> <el-input v-model="sortDialogData.sort" style="width: 200px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer"> <span slot="footer">
<!-- 取消按钮点击隐藏对话框按钮尺寸为小型 -->
<el-button @click="sortDialogVisible = false" size="small"> </el-button> <el-button @click="sortDialogVisible = false" size="small"> </el-button>
<!-- 确定按钮点击触发handleUpdateSort方法按钮尺寸为小型主色调 -->
<el-button type="primary" @click="handleUpdateSort" size="small"> </el-button> <el-button type="primary" @click="handleUpdateSort" size="small"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
// '@/api/newProduct'
import {fetchList,updateRecommendStatus,deleteNewProduct,createNewProduct,updateNewProductSort} from '@/api/newProduct'; import {fetchList,updateRecommendStatus,deleteNewProduct,createNewProduct,updateNewProductSort} from '@/api/newProduct';
// '@/api/product'fetchListfetchProductList
import {fetchList as fetchProductList} from '@/api/product'; import {fetchList as fetchProductList} from '@/api/product';
//
const defaultListQuery = { const defaultListQuery = {
pageNum: 1, pageNum: 1,
pageSize: 5, pageSize: 5,
productName: null, productName: null,
recommendStatus: null recommendStatus: null
}; };
// ''0
const defaultRecommendOptions = [ const defaultRecommendOptions = [
{ {
label: '未推荐', label: '未推荐',
@ -189,16 +244,24 @@
value: 1 value: 1
} }
]; ];
export default { export default {
name: 'newProductList', name: 'newProductList',
data() { data() {
return { return {
// defaultListQuery
listQuery: Object.assign({}, defaultListQuery), listQuery: Object.assign({}, defaultListQuery),
// defaultRecommendOptions
recommendOptions: Object.assign({}, defaultRecommendOptions), recommendOptions: Object.assign({}, defaultRecommendOptions),
// null
list: null, list: null,
// null
total: null, total: null,
// false
listLoading: false, listLoading: false,
//
multipleSelection: [], multipleSelection: [],
// ''0
operates: [ operates: [
{ {
label: "设为推荐", label: "设为推荐",
@ -213,28 +276,40 @@
value: 2 value: 2
} }
], ],
// null
operateType: null, operateType: null,
// false
selectDialogVisible:false, selectDialogVisible:false,
dialogData:{ dialogData:{
// null
list: null, list: null,
// null
total: null, total: null,
//
multipleSelection:[], multipleSelection:[],
listQuery:{ listQuery:{
// null
keyword: null, keyword: null,
// 1
pageNum: 1, pageNum: 1,
// 5
pageSize: 5 pageSize: 5
} }
}, },
// false
sortDialogVisible:false, sortDialogVisible:false,
// id
sortDialogData:{sort:0,id:null} sortDialogData:{sort:0,id:null}
} }
}, },
created() { created() {
// getList
this.getList(); this.getList();
}, },
filters:{ filters:{
// formatRecommendStatus
formatRecommendStatus(status){ formatRecommendStatus(status){
if(status===1){ if(status===1){ //10''''
return '推荐中'; return '推荐中';
}else{ }else{
return '未推荐'; return '未推荐';
@ -242,31 +317,39 @@
} }
}, },
methods: { methods: {
// defaultListQuery
handleResetSearch() { handleResetSearch() {
this.listQuery = Object.assign({}, defaultListQuery); this.listQuery = Object.assign({}, defaultListQuery);
}, },
// 1getList
handleSearchList() { handleSearchList() {
this.listQuery.pageNum = 1; this.listQuery.pageNum = 1;
this.getList(); this.getList();
}, },
// multipleSelection
handleSelectionChange(val){ handleSelectionChange(val){
this.multipleSelection = val; this.multipleSelection = val;
}, },
// 1getList
handleSizeChange(val) { handleSizeChange(val) {
this.listQuery.pageNum = 1; this.listQuery.pageNum = 1;
this.listQuery.pageSize = val; this.listQuery.pageSize = val;
this.getList(); this.getList();
}, },
// getList
handleCurrentChange(val) { handleCurrentChange(val) {
this.listQuery.pageNum = val; this.listQuery.pageNum = val;
this.getList(); this.getList();
}, },
// updateRecommendStatusStatusid
handleRecommendStatusStatusChange(index,row){ handleRecommendStatusStatusChange(index,row){
this.updateRecommendStatusStatus(row.id,row.recommendStatus); this.updateRecommendStatusStatus(row.id,row.recommendStatus);
}, },
// deleteProductid
handleDelete(index,row){ handleDelete(index,row){
this.deleteProduct(row.id); this.deleteProduct(row.id);
}, },
//
handleBatchOperate(){ handleBatchOperate(){
if (this.multipleSelection < 1) { if (this.multipleSelection < 1) {
this.$message({ this.$message({
@ -276,7 +359,7 @@
}); });
return; return;
} }
let ids = []; let ids = []; //
for (let i = 0; i < this.multipleSelection.length; i++) { for (let i = 0; i < this.multipleSelection.length; i++) {
ids.push(this.multipleSelection[i].id); ids.push(this.multipleSelection[i].id);
} }
@ -297,25 +380,31 @@
}); });
} }
}, },
// getDialogList
handleSelectProduct(){ handleSelectProduct(){
this.selectDialogVisible=true; this.selectDialogVisible=true;
this.getDialogList(); this.getDialogList();
}, },
// getDialogList
handleSelectSearch(){ handleSelectSearch(){
this.getDialogList(); this.getDialogList();
}, },
// 1getDialogList
handleDialogSizeChange(val) { handleDialogSizeChange(val) {
this.dialogData.listQuery.pageNum = 1; this.dialogData.listQuery.pageNum = 1;
this.dialogData.listQuery.pageSize = val; this.dialogData.listQuery.pageSize = val;
this.getDialogList(); this.getDialogList();
}, },
// getDialogList
handleDialogCurrentChange(val) { handleDialogCurrentChange(val) {
this.dialogData.listQuery.pageNum = val; this.dialogData.listQuery.pageNum = val;
this.getDialogList(); this.getDialogList();
}, },
// dialogData.multipleSelection
handleDialogSelectionChange(val){ handleDialogSelectionChange(val){
this.dialogData.multipleSelection = val; this.dialogData.multipleSelection = val;
}, },
//
handleSelectDialogConfirm(){ handleSelectDialogConfirm(){
if (this.dialogData.multipleSelection < 1) { if (this.dialogData.multipleSelection < 1) {
this.$message({ this.$message({
@ -325,7 +414,7 @@
}); });
return; return;
} }
let selectProducts = []; let selectProducts = []; //
for (let i = 0; i < this.dialogData.multipleSelection.length; i++) { for (let i = 0; i < this.dialogData.multipleSelection.length; i++) {
selectProducts.push({ selectProducts.push({
productId:this.dialogData.multipleSelection[i].id, productId:this.dialogData.multipleSelection[i].id,
@ -337,10 +426,10 @@
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
createNewProduct(selectProducts).then(response=>{ createNewProduct(selectProducts).then(response=>{ //createNewProduct
this.selectDialogVisible=false; this.selectDialogVisible=false;
this.dialogData.multipleSelection=[]; this.dialogData.multipleSelection=[];
this.getList(); this.getList(); //
this.$message({ this.$message({
type: 'success', type: 'success',
message: '添加成功!' message: '添加成功!'
@ -348,20 +437,22 @@
}); });
}); });
}, },
//
handleEditSort(index,row){ handleEditSort(index,row){
this.sortDialogVisible=true; this.sortDialogVisible=true;
this.sortDialogData.sort=row.sort; this.sortDialogData.sort=row.sort;
this.sortDialogData.id=row.id; this.sortDialogData.id=row.id; //id便
}, },
//
handleUpdateSort(){ handleUpdateSort(){
this.$confirm('是否要修改排序?', '提示', { this.$confirm('是否要修改排序?', '提示', { //
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
updateNewProductSort(this.sortDialogData).then(response=>{ updateNewProductSort(this.sortDialogData).then(response=>{ //updateNewProductSort
this.sortDialogVisible=false; this.sortDialogVisible=false;
this.getList(); this.getList(); //
this.$message({ this.$message({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
@ -369,48 +460,51 @@
}); });
}) })
}, },
//
getList() { getList() {
this.listLoading = true; this.listLoading = true; //true
fetchList(this.listQuery).then(response => { fetchList(this.listQuery).then(response => { //fetchList
this.listLoading = false; this.listLoading = false; //false
this.list = response.data.list; this.list = response.data.list; //
this.total = response.data.total; this.total = response.data.total;
}) })
}, },
//
updateRecommendStatusStatus(ids,status){ updateRecommendStatusStatus(ids,status){
this.$confirm('是否要修改推荐状态?', '提示', { this.$confirm('是否要修改推荐状态?', '提示', { //
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
let params=new URLSearchParams(); let params=new URLSearchParams(); //ididURLSearchParams
params.append("ids",ids); params.append("ids",ids);
params.append("recommendStatus",status); params.append("recommendStatus",status);
updateRecommendStatus(params).then(response=>{ updateRecommendStatus(params).then(response=>{ //updateRecommendStatus
this.getList(); this.getList(); //
this.$message({ this.$message({
type: 'success', type: 'success',
message: '修改成功!' message: '修改成功!'
}); });
}); });
}).catch(() => { }).catch(() => {
this.$message({ this.$message({ //
type: 'success', type: 'success',
message: '已取消操作!' message: '已取消操作!'
}); });
this.getList(); this.getList();
}); });
}, },
//
deleteProduct(ids){ deleteProduct(ids){
this.$confirm('是否要删除该推荐?', '提示', { this.$confirm('是否要删除该推荐?', '提示', { //
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
let params=new URLSearchParams(); let params=new URLSearchParams(); //ididURLSearchParams
params.append("ids",ids); params.append("ids",ids);
deleteNewProduct(params).then(response=>{ deleteNewProduct(params).then(response=>{ //deleteNewProduct
this.getList(); this.getList(); //
this.$message({ this.$message({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
@ -418,9 +512,10 @@
}); });
}) })
}, },
//
getDialogList(){ getDialogList(){
fetchProductList(this.dialogData.listQuery).then(response=>{ fetchProductList(this.dialogData.listQuery).then(response=>{ //fetchProductList
this.dialogData.list=response.data.list; this.dialogData.list=response.data.list; //
this.dialogData.total=response.data.total; this.dialogData.total=response.data.total;
}) })
} }

Loading…
Cancel
Save