dl_site_system/dl_vue/src/views/busi/prod/index.vue
2025-07-01 17:30:19 +08:00

451 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="分类" prop="catgId">
<treeselect style="width: 200px" v-model="queryParams.catgId" :options="catgOptions" :normalizer="normalizer" :noResultsText="'暂无数据'" placeholder="选择分类" />
</el-form-item>
<el-form-item label="产品名称" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['busi:prod:add']"
>新增</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['busi:prod:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['busi:prod:remove']"-->
<!-- >删除</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['busi:prod:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="prodList" @cell-dblclick="cellClick">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
<el-table-column label="所属栏目" align="center" prop="catgName" width="120" />
<el-table-column label="产品名称" align="center" prop="title" width="200" />
<el-table-column label="产品图" align="center" prop="mainPic" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.mainPic" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="产品负责人" align="center" prop="leaderName" :min-width="200" />
<!-- <el-table-column label="产品简介" align="center" prop="description" />-->
<el-table-column width="100" label="排序" align="center" prop="sort">
<template slot="header" slot-scope="scope">
<span>排序</span>
<el-tooltip class="item" effect="dark" content="鼠标双击数据可直接修改排序"
placement="bottom"
>
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<template slot-scope="scope">
<el-input size="mini" type="number" v-model="scope.row.sort" v-if="scope.row.flag" @blur="inputClick(scope.row)" v-focus></el-input>
<span v-if="!scope.row.flag">{{scope.row.sort}}</span>
</template>
</el-table-column>
<el-table-column width="80" label="首页显示" align="center" prop="ifReco">
<template slot-scope="scope">
<el-switch
v-model="scope.row.ifReco"
@change="changeIfReco($event,scope.row)"
>
</el-switch>
</template>
</el-table-column>
<el-table-column width="80" label="是否发布" align="center" prop="ifPublic">
<template slot-scope="scope">
<el-switch
v-model="scope.row.ifPublic"
@change="changeIfPublic($event,scope.row)"
>
</el-switch>
</template>
</el-table-column>
<el-table-column width="90" label="随机产品" align="center" prop="randomNum">
<template slot="header" slot-scope="scope">
<span>随机产品</span>
<el-tooltip class="item" effect="dark" content="鼠标单机数据可查看关联产品明细"
placement="bottom"
>
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<template slot-scope="scope">
<el-tag style="cursor: pointer" @click="managerRandom(scope.row)">{{scope.row.randomNum}}</el-tag>
</template>
</el-table-column>
<el-table-column width="120" label="发布人" align="center" prop="userName">
</el-table-column>
<el-table-column width="100" label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
{{scope.row.createTime | formatDate}}
</template>
</el-table-column>
<el-table-column width="100" label="修改时间" align="center" prop="updateTime">
<template slot-scope="scope">
{{scope.row.updateTime | formatDate}}
</template>
</el-table-column>
<el-table-column width="200" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleAddSimilar(scope.row.id)"
v-hasPermi="['busi:prod:add']"
>添加相似</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['busi:prod:edit']"
>修改</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['busi:prod:remove', 'busi:relation:add']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleDelete" icon="el-icon-delete" v-hasPermi="['busi:prod:remove']">删除</el-dropdown-item>
<el-dropdown-item command="handleSetRelation" icon="el-icon-key" v-hasPermi="['busi:relation:add']">分配负责人</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 随机产品管理对话框 -->
<random-product ref="randomProduct" @refresh="getList" @ok="handleSuccess" @add="handleAddNewRandom"></random-product>
<!-- 选择产品组件-->
<select-product ref="selectProduct" :randomProdList="randomProdList" @ok="submitSelect"></select-product>
<!-- 选择用户组件-->
<select-all-user ref="select" @ok="chooseUserFun" />
</div>
</template>
<script>
import { listCategory } from "@/api/busi/category";
import { listProdNew, getProdNew, delProdNew, addProdNew,delProdRandom, updateProdNew,listRandomProd,saveRandom } from "@/api/busi/prod";
import { addRelation } from "@/api/busi/relation";
import selectAllUser from "@/views/system/user/selectAllUser";
import selectProduct from "@/views/busi/prod/selectProduct";
import randomProduct from "@/views/busi/prod/randomProduct";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "Prod",
dicts: ['sys_yes_no'],
components: { selectAllUser ,selectProduct,randomProduct,Treeselect},
data() {
return {
// 遮罩层
loading: true,
//栏目分类
catgOptions:[],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 产品数据
prodList: [],
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
catgId: null,
title: null,
newsFrom: null,
},
//当前操作的数据id
nowDealId:"",
//当前产品的随机产品数组
randomProdList: [],
};
},
filters:{
formatDate(val){
if(val){
return val.slice(0, 10)
}else{
return ""
}
},
},
directives: {
// 注册一个局部的自定义指令 v-focus
focus: {
// 指令的定义
inserted: function (el) {
// 聚焦元素
el.querySelector('input').focus()
}
}
},
watch: {
'$route'(to, from) {
if (from.path !== to.path) {
// 返回上一页时执行的代码
this.getList();
}
}
},
mounted() {
this.getList();
},
created() {
},
methods: {
// 更多操作触发
handleCommand(command, row) {
switch (command) {
case "handleDelete":
this.handleDelete(row)
break;
case "handleSetRelation":
this.handleSetRelation(row);
break;
default:
break;
}
},
/** 转换部门数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.label,
children: node.children
};
},
/** 查询产品、文章列表 */
getList() {
this.loading = true;
//查产品栏目
listCategory({catgType:"cp"}).then(response => {
response.data.map((item)=>{
item.parentId=0
})
this.catgOptions = response.data
});
listProdNew(this.queryParams).then(response => {
this.prodList = response.data.records;
this.total = response.data.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.$router.push({path:'/product/prodForm'})
},
/** 添加类似操作 */
handleAddSimilar(id){
this.$router.push({path:'/product/prodForm',query:{id:id,type:"similar"}})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.$router.push({path:'/product/prodForm',query:{id:row.id}})
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除产品?').then(function() {
return delProdNew(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('busi/prod/export', {
...this.queryParams
}, `prod_${new Date().getTime()}.xlsx`)
},
//双击单元格后显示input并通过v-focus让input自动获取焦点
cellClick(row){
row.flag=true
},
//input框失去焦点事件
inputClick(row){
row.flag=false
let data = {
id:row.id,
sort:row.sort
}
this.updateData(data)
},
/**
* 改变是否发布的值
* @param e
* @param row
*/
changeIfPublic(e,row){
let data = {
id:row.id,
ifPublic:e
}
this.updateData(data)
},
/**
* 改变是否首页推荐的值
* @param e
* @param row
*/
changeIfReco(e,row){
let data = {
id:row.id,
ifReco:e
}
this.updateData(data)
},
/**
* 更新数据
* @param data
*/
updateData(data){
updateProdNew(data).then(response => {
this.$modal.msgSuccess('修改成功')
this.getList()
});
},
/**
* 查看产品随机产品
* @param row
*/
managerRandom(row){
this.nowDealId = row.id
this.$refs.randomProduct.show(row.id,row.title+"-随机产品")
},
/**
* 已有随机产品列表回调
*/
handleSuccess(dataArray){
this.randomProdList = dataArray
},
/**
* 添加随机产品--打开选择产品的弹出框
*/
handleAddNewRandom(){
this.$refs.selectProduct.show(this.nowDealId)
},
// 确定按钮--新增随机产品
submitSelect(ids) {
let dataObj = {
prodId: this.nowDealId,
randomIdList: ids
}
saveRandom(dataObj).then(response => {
this.$modal.msgSuccess('新增成功')
this.$refs.randomProduct.getRandomList()
})
},
/**
* 分配负责员工
* @param row
*/
handleSetRelation(row){
this.nowDealId = row.id
this.$refs.select.show(row.leaderId);
},
/**
* 确定选中的用户
* @param userIds
*/
chooseUserFun(userIds){
let dataObj={
prodId:this.nowDealId,
leaderId:userIds
}
addRelation(dataObj).then(response => {
this.$modal.msgSuccess('分配成功')
this.getList()
})
}
}
};
</script>