totus-nline/eladmin-web/src/views/bus/busCarousel/index.vue
2025-07-31 14:16:01 +08:00

155 lines
5.0 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">
<!--工具栏-->
<div class="head-container">
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
<el-form ref="form" :model="form" size="small" label-width="80px">
<el-form-item label="排序">
<el-input-number :min="1" v-model="form.sort" style="width: 370px;" />
</el-form-item>
<!-- 上传文件 -->
<el-form-item label="轮播图">
<el-upload
ref="upload"
:limit="1"
:before-upload="beforeUpload"
:auto-upload="false"
:headers="headers"
:on-success="handleSuccess"
:on-error="handleError"
:action="'/api/api/busCarousel/pictures?sort=' + form.sort"
>
<div class="eladmin-upload"><i class="el-icon-upload" /> 添加文件</div>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="loading" type="primary" @click="upload">确认</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="id" label="编号" />
<el-table-column prop="path" label="轮播图" >
<template slot-scope="{row}">
<el-image
:src=" baseApi + row.path"
:preview-src-list="[baseApi + row.path]"
fit="contain"
lazy
class="el-avatar"
>
<div slot="error">
<i class="el-icon-document" />
</div>
</el-image>
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" />
<el-table-column v-if="checkPer(['admin','busCarousel:del'])" label="操作" width="150px" align="center">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudBusCarousel from '@/api/bus/busCarousel/busCarousel'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { mapGetters } from 'vuex'
import { getToken } from "@/utils/auth";
const defaultForm = { id: null, name: null, path: null, sort: null }
export default {
name: 'Carousel',
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({ title: '', url: 'api/busCarousel', idField: 'id', sort: 'sort,asc', crudMethod: { ...crudBusCarousel }})
},
data() {
return {
permission: {
add: ['admin', 'busCarousel:add'],
edit: ['-1', 'busCarousel:edit'],
del: ['admin', 'busCarousel:del']
},
rules: {
path: [
{ required: true, message: '图片不能为空', trigger: 'blur' }
]
},
loading: false,
headers: { 'Authorization': getToken() },
}
},
created() {
this.crud.optShow = { add: true, del: true }
},
computed: {
...mapGetters([
'baseApi',
])
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
// 上传文件
upload() {
this.$refs.upload.submit()
},
beforeUpload(file) {
let isLt2M = true
isLt2M = file.size / 1024 / 1024 < 100
if (!isLt2M) {
this.loading = false
this.$message.error('上传文件大小不能超过 100MB!')
}
this.form.name = file.name
return isLt2M
},
handleSuccess(response, file, fileList) {
this.crud.notify('上传成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.$refs.upload.clearFiles()
this.crud.status.add = CRUD.STATUS.NORMAL
this.crud.resetForm()
this.crud.toQuery()
},
// 监听上传失败
handleError(e, file, fileList) {
const msg = JSON.parse(e.message)
this.$notify({
title: msg.message,
type: 'error',
duration: 2500
})
this.loading = false
}
}
}
</script>
<style scoped>
</style>