jiangchengfeiyi-Web/src/views/OtherManagement/EntityCarouseCenter.vue

214 lines
7.8 KiB
Vue
Raw Normal View History

<template>
<div>
<div style="margin: 10px 0">
<el-input style="width: 200px; height: 30px; margin-right: 10px;" suffix-icon="Search" placeholder="请输入图片名称" v-model="simpleList.name"></el-input>
<el-button class="ml-5" type="primary" @click="onSearch" style="height: 25px;">搜索</el-button>
<el-button type="warning" @click="reset" style="height:25px">重置</el-button>
</div>
<div style="margin: 15px 0">
<el-popconfirm
confirm-button-text='确定'
cancel-button-text='取消'
icon="InfoFilled"
icon-color="red"
title="您确定批量删除这些数据吗?"
@confirm=""
width=180
>
<template #reference>
<el-button style="height: 25px" type="danger" slot="reference">批量删除 <el-icon style="margin-left: 5px;"><Remove /></el-icon></el-button>
</template>
</el-popconfirm>
</div>
<el-table :data="simpleList" border stripe header-cell-class-name="headerBg" :cell-style="{textAlign: 'center'}"
@selection-change="handleSelectionChange" :header-cell-style="{'text-align': 'center'}">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="id" label="图片序号" width="50"></el-table-column>
<el-table-column prop="imgUrl" label="图片">
<template #default="scope"><img :src="scope.row.imgUrl" alt="" style="height: 50px;"></template>
</el-table-column>
<el-table-column prop="name" label="商品图片" ></el-table-column>
<el-table-column prop="tips" label="对应商品"></el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button type="success" @click="editCarouse(scope.row)">编辑<i class="el-icon-edit"></i></el-button>
<el-popconfirm
confirm-button-text='确定'
cancel-button-text='取消'
icon="el-icon-info"
icon-color="red"
title="您确定删除吗?"
@confirm="deleteCarouse"
>
<template #reference>
<el-button type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div style="padding: 10px 0">
<!-- 分页器 -->
<el-pagination
:current-page="searchParams.current"
:page-size="searchParams.pageSize"
:page-sizes="[2, 5, 10, 20]"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:small="null"
background
layout="total, sizes, prev, pager, next, jumper"
:total="total"
/>
</div>
</div>
<!-- 编辑/详情表单 -->
<el-dialog v-model="DialogVisible" title="轮播图编辑">
<el-form label-width="100px" :disabled="disabled">
<el-form-item label="轮播图">
<el-upload
v-model:file-list="carouseImg"
ref="uploadImg"
action="#"
list-type="picture-card"
:auto-upload="false"
multiple="true"
:on-remove="removePic"
@change="(event: any) => handleChange(event)"
:on-exceed="Exceed_ProductImg"
limit="1" >
<el-icon>
<Plus/>
</el-icon>
</el-upload>
</el-form-item>
<el-form-item label="图片名称">
<el-input v-model="editForm.productImg" style="width: 200px;"></el-input>
</el-form-item>
<el-form-item label="对应商品" prop="price">
<el-select v-model="editForm.prdouctName" @change="(event: any) => loadForm(event)" style="width: 120px;">
<el-option v-for="item in goodList" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
</el-form>
<template #footer >
<span class="dialog-footer">
<el-button @click="DialogVisible = false" :disabled="disabled">取消</el-button>
<el-button type="primary" @click="saveEdit" :disabled="disabled">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { type UploadProps , type UploadUserFile , genFileId ,type UploadRawFile } from 'element-plus';
import myAxios from '@/api/myAxios';
import {ref, onMounted , inject} from 'vue'
import { WarnInfo, SuccessInfo , ErrorInfo, CommInfo } from '@/utils/messageInfo';
const simpleList : any = ref([
{
id: '1', //图片id
name: '样例1', //图片名称
imgUrl: 'https://carbon2.obs.cn-north-4.myhuaweicloud.com:443/feiyi%2Ftest%2F0%2FgGwBQzmm-cxz.png', //图片样例
grade: '等级1', //图片级别
correspondingGoods: '非遗发簪' //对应商品
},
{
id: '2', //图片id
name: '样例2', //图片名称
imgUrl: 'https://carbon2.obs.cn-north-4.myhuaweicloud.com:443/feiyi%2Ftest%2F0%2FgGwBQzmm-cxz.png', //图片样例
grade: '等级2', //图片级别
correspondingGoods: '非遗螺钿' //对应商品
}
])
const goodList = ref([]) //商品名称
const DialogVisible = ref(false); //表单显示
const disabled = ref(false)
const editForm : any= ref({})
const uploadImg : any = ref() //图片上传的ref绑定
const carouseImg: any = ref<UploadUserFile[]>([]) //给商品中心页面编辑商品使用
const tableData = ref([]) //获取的所有数据
const total = ref(0) //筛选条数
const fileSimple = ref() //单个文件
//请求参数
const searchParams: any = ref({
//当前页码
current: 1,
//每页显示条数
pageSize: 5
})
//导入组件刷新
const reload : any = inject("reload")
onMounted(() => {
})
//重置按钮
const reset =()=>{
reload()
}
const handleSelectionChange = (val:any)=>{
console.log(val)
}
// 处理行数大小变化
const handleSizeChange = (newSize:any) => {
searchParams.value.pageSize = newSize //新的页面条数
//重新发起请求
};
// 处理当前页变化
const handleCurrentChange = (Current:any) => {
searchParams.value.current = Current //新的当前页面
//重新发起请求
};
//搜索按钮方法
const onSearch = (data : String)=>{
searchParams.value.name = data
searchParams.value.current = 1
//重新发请求
}
const deleteCarouse = async (index: number,row: any) =>{ //删除单个轮播图
simpleList.value.splice(index,1)
}
const editCarouse = async (obj: any) =>{
carouseImg.value.splice(0,carouseImg.value.length)
carouseImg.value.push({ //编辑展示
url: obj.imgUrl
})
editForm.value = obj
DialogVisible.value = true
}
const saveEdit = ()=>{ //保存表单
DialogVisible.value = false
}
const removePic : UploadProps['onRemove'] = (uploadFile, uploadFiles) => { //uploadFile表示当前删除的图片uploadFiles是还剩余的图片信息
}
//将 等级选项 赋值到表格里
const loadForm = (value: any) => {
editForm.value.grade = value
}
const Exceed_ProductImg: UploadProps['onExceed'] = (files) => { //覆盖商品照片 'onExceed'当文件个数超过限制时,做出的判断
WarnInfo('请移除之前的再上传')
}
const handleChange = async (file: any ) => {
fileSimple.value = file
let formData = new FormData() //这一步很重要 创建一个FormData对象
formData.append("file", fileSimple.value.raw) //fileSimple.value.raw 才是文件主体 将其以文件的格式插入formData
// const res = await myAxios({ //编写请求,与以前的请求不同,这一次要指定好头部类型和文件类型
// url: '/file/uploadFile',
// method: 'post',
// headers: {
// 'content-Type': 'multipart/form-data'
// },
// data: {
// biz: "test",
// // 取出formData对象中的file
// file: formData.get("file")
// }
// })
}
</script>
<style scoped>
.headerBg{
background-color: #eee !important;
}
</style>