dl_site_system/dl_vue/src/views/busi/new/index.vue

443 lines
14 KiB
Vue
Raw Normal View History

2025-06-27 17:51:13 +08:00
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
2025-07-01 17:30:19 +08:00
<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">
2025-06-27 17:51:13 +08:00
<el-input
v-model="queryParams.title"
2025-07-01 17:30:19 +08:00
placeholder="请输入新闻标题"
2025-06-27 17:51:13 +08:00
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:new: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:new: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:new: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:new:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
2025-07-01 17:30:19 +08:00
<el-table v-loading="loading" :data="prodList" @cell-dblclick="cellClick">
2025-06-27 17:51:13 +08:00
<!-- <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" />
2025-07-01 17:30:19 +08:00
<el-table-column label="新闻标题" align="center" prop="title" width="200" />
<el-table-column label="新闻图" align="center" prop="mainPic" width="100">
2025-06-27 17:51:13 +08:00
<template slot-scope="scope">
<image-preview :src="scope.row.mainPic" :width="50" :height="50"/>
</template>
</el-table-column>
2025-07-01 17:30:19 +08:00
<el-table-column label="新闻负责人" align="center" prop="leaderName" />
<!-- <el-table-column label="产品简介" align="center" prop="description" />-->
2025-06-27 17:51:13 +08:00
<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>
2025-07-01 17:30:19 +08:00
<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>
2025-06-27 17:51:13 +08:00
<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>
2025-07-01 17:30:19 +08:00
<el-table-column width="200" label="操作" align="center" class-name="small-padding fixed-width">
2025-06-27 17:51:13 +08:00
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
2025-07-01 17:30:19 +08:00
@click="handleAddSimilar(scope.row.id)"
v-hasPermi="['busi:new:add']"
>添加相似</el-button>
2025-06-27 17:51:13 +08:00
<el-button
size="mini"
type="text"
2025-07-01 17:30:19 +08:00
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['busi:new:edit']"
>修改</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['busi:new: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:new: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>
2025-06-27 17:51:13 +08:00
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
2025-07-01 17:30:19 +08:00
<!-- 随机产品管理对话框 -->
<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" />
2025-06-27 17:51:13 +08:00
</div>
</template>
<script>
2025-07-01 17:30:19 +08:00
import { listCategory } from "@/api/busi/category";
import { listProdNew, getProdNew, delProdNew, addProdNew,delProdRandom, updateProdNew,listRandomProd,saveRandom } from "@/api/busi/new";
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";
2025-06-27 17:51:13 +08:00
export default {
name: "New",
dicts: ['sys_yes_no'],
2025-07-01 17:30:19 +08:00
components: { selectAllUser,selectProduct,randomProduct ,Treeselect},
2025-06-27 17:51:13 +08:00
data() {
return {
// 遮罩层
loading: true,
2025-07-01 17:30:19 +08:00
//栏目分类
catgOptions:[],
2025-06-27 17:51:13 +08:00
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 产品数据
prodList: [],
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
catgId: null,
title: null,
newsFrom: null,
},
2025-07-01 17:30:19 +08:00
//当前操作的数据id
nowDealId:"",
//当前产品的随机产品数组
randomProdList: [],
2025-06-27 17:51:13 +08:00
};
},
filters:{
formatDate(val){
if(val){
return val.slice(0, 10)
}else{
return ""
}
},
},
directives: {
// 注册一个局部的自定义指令 v-focus
focus: {
// 指令的定义
inserted: function (el) {
// 聚焦元素
el.querySelector('input').focus()
}
}
},
2025-07-01 17:30:19 +08:00
watch: {
'$route'(to, from) {
if (from.path !== to.path) {
// 返回上一页时执行的代码
this.getList();
}
}
},
2025-06-27 17:51:13 +08:00
mounted() {
this.getList();
},
created() {
},
methods: {
2025-07-01 17:30:19 +08:00
// 更多操作触发
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
};
},
2025-06-27 17:51:13 +08:00
/** 查询产品、文章列表 */
getList() {
this.loading = true;
2025-07-01 17:30:19 +08:00
//查文章栏目
listCategory({catgType:"wz"}).then(response => {
response.data.map((item)=>{
item.parentId=0
})
this.catgOptions = response.data
});
2025-06-27 17:51:13 +08:00
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:'/new/newForm'})
},
2025-07-01 17:30:19 +08:00
/** 添加类似操作 */
handleAddSimilar(id){
this.$router.push({path:'/new/newForm',query:{id:id,type:"similar"}})
},
2025-06-27 17:51:13 +08:00
/** 修改按钮操作 */
handleUpdate(row) {
this.$router.push({path:'/new/newForm',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/new/export', {
...this.queryParams
2025-07-01 17:30:19 +08:00
}, `news_${new Date().getTime()}.xlsx`)
2025-06-27 17:51:13 +08:00
},
//双击单元格后显示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()
});
2025-07-01 17:30:19 +08:00
},
/**
* 查看产品随机产品
* @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()
})
2025-06-27 17:51:13 +08:00
}
}
};
</script>