| | |
| | | <template> |
| | | <TableLayout :permissions="['business:category:query']"> |
| | | <!-- 搜索表单 --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="类别名称" prop="name"> |
| | | <el-input v-model="searchForm.name" placeholder="请输入类别名称" @keypress.enter.native="search"></el-input> |
| | | <el-input v-model="searchForm.name" placeholder="请输入类别名称" @keypress.enter.native="loadTree"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="类型" prop="type"> |
| | | <el-select v-model="searchForm.type" clearable placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in typeList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id"> |
| | | </el-option> |
| | | <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">搜索</el-button> |
| | | <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:category:exportExcel']" @click="exportExcel">导出</el-button> --> |
| | | <el-button @click="reset">重置</el-button> |
| | | <el-button type="primary" @click="loadTree">搜索</el-button> |
| | | <el-button @click="resetSearch">重置</el-button> |
| | | </section> |
| | | </el-form> |
| | | <!-- 表格和分页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:category:create']"> |
| | | <li><el-button type="primary" @click="$refs.operaCategoryWindow.open('新建类别')" icon="el-icon-plus" v-permissions="['business:category:create']">新建</el-button></li> |
| | | <li><el-button type="primary" @click="$refs.operaCategoryWindow.open('新建类别')" icon="el-icon-plus">新建一级类别</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | v-loading="loading" |
| | | :data="tableData" |
| | | :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" |
| | | row-key="id" |
| | | stripe |
| | | border |
| | | default-expand-all |
| | | :header-cell-style="rowStyle" |
| | | :cell-style="rowStyle" |
| | | > |
| | | <el-table-column prop="imgurl" label="图标" min-width="100px"> |
| | | <el-table-column prop="imgurl" label="图标" min-width="90px"> |
| | | <template slot-scope="{row}"> |
| | | <el-image |
| | | v-if="row.imgurl" |
| | | style="width: 70px; height: 70px" |
| | | :src="row.prefixUrl + row.imgurl" |
| | | :preview-src-list="[row.prefixUrl + row.imgurl]" |
| | | fit="cover"></el-image> |
| | | <el-image v-if="row.imgurl" style="width: 50px; height: 50px" :src="categoryImgUrl(row)" fit="cover"></el-image> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="name" label="类别名称" min-width="100px"></el-table-column> |
| | | <el-table-column prop="categoryName" label="类型" min-width="100px"> |
| | | <el-table-column prop="name" label="类别名称" min-width="140px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.type == 0">自定义</span> |
| | | <span v-else>系统</span> |
| | | <span v-if="row.parentId">└ {{ row.name }}</span> |
| | | <span v-else>{{ row.name }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="sortnum" label="排序码(升序)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createDate" label="创建时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="状态" min-width="100px"> |
| | | <el-table-column label="级别" min-width="80px"> |
| | | <template slot-scope="{row}">{{ row.parentId ? '二级类别' : '一级类别' }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="sortnum" label="排序码" min-width="80px"></el-table-column> |
| | | <el-table-column prop="createDate" label="创建时间" min-width="140px"></el-table-column> |
| | | <el-table-column prop="status" label="状态" min-width="80px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | v-model="row.status" |
| | | @change="changeStatus(row)" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | :active-value="0" |
| | | :inactive-value="1"> |
| | | </el-switch> |
| | | <el-switch v-model="row.status" @change="changeStatus(row)" :active-value="0" :inactive-value="1" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:category:update', 'business:category:delete'])" |
| | | label="操作" |
| | | min-width="120" |
| | | fixed="right" |
| | | > |
| | | <el-table-column label="操作" min-width="220px" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="edit(row.id)" icon="el-icon-edit" v-permissions="['business:category:update']">编辑</el-button> |
| | | <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:category:delete']">删除</el-button> |
| | | <template v-if="!row.parentId"> |
| | | <el-button type="text" @click="edit(row.id)" v-permissions="['business:category:update']">编辑</el-button> |
| | | <el-button type="text" @click="$refs.operaSubCategoryWindow.open('新建子类别', row)" v-permissions="['business:category:create']">新增子类别</el-button> |
| | | <el-button type="text" class="btn-delete" icon="el-icon-delete" @click="deleteParent(row)" v-permissions="['business:category:delete']">删除</el-button> |
| | | </template> |
| | | <template v-else> |
| | | <el-button type="text" @click="$refs.operaSubCategoryWindow.open('编辑子类别', { id: row.parentId }, row)" v-permissions="['business:category:update']">编辑</el-button> |
| | | <el-button type="text" class="btn-delete" icon="el-icon-delete" @click="deleteSub(row)" v-permissions="['business:category:delete']">删除</el-button> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | > |
| | | </pagination> |
| | | </template> |
| | | <!-- 新建/修改 --> |
| | | <OperaCategoryWindow ref="operaCategoryWindow" @success="handlePageChange"/> |
| | | <OperaCategoryWindow ref="operaCategoryWindow" @success="loadTree"/> |
| | | <OperaSubCategoryWindow ref="operaSubCategoryWindow" @success="loadTree"/> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaCategoryWindow from '@/components/business/OperaCategoryWindow' |
| | | import { queryById, updateDisableById } from '@/api/business/category.js' |
| | | export default { |
| | | name: 'Category', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaCategoryWindow }, |
| | | data () { |
| | | return { |
| | | // 搜索 |
| | | searchForm: { |
| | | name: '', |
| | | type: '' |
| | | }, |
| | | typeList: [ |
| | | { name: '自定义', id: 0 }, |
| | | { name: '系统', id: 1 } |
| | | ] |
| | | } |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import OperaCategoryWindow from '@/components/business/OperaCategoryWindow' |
| | | import OperaSubCategoryWindow from '@/components/business/OperaSubCategoryWindow' |
| | | import { fetchTree, queryById, updateDisableById, deleteById, deleteSub as deleteSubApi } from '@/api/business/category.js' |
| | | |
| | | export default { |
| | | name: 'Category', |
| | | components: { TableLayout, OperaCategoryWindow, OperaSubCategoryWindow }, |
| | | data () { |
| | | return { |
| | | loading: false, |
| | | tableData: [], |
| | | searchForm: { name: '', type: '' }, |
| | | typeList: [{ name: '自定义', id: 0 }, { name: '系统', id: 1 }] |
| | | } |
| | | }, |
| | | created () { |
| | | this.loadTree() |
| | | }, |
| | | methods: { |
| | | rowStyle () { return 'text-align:center' }, |
| | | categoryImgUrl (row) { |
| | | if (!row.imgurl) return '' |
| | | if (row.imgurl.indexOf('http') === 0) return row.imgurl |
| | | return (row.prefixUrl || '') + row.imgurl |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: '类别', |
| | | api: '/business/category', |
| | | 'field.id': 'id', |
| | | 'field.main': 'name' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | rowStyle() { |
| | | return "text-align:center"; |
| | | }, |
| | | changeStatus(item) { |
| | | updateDisableById({ |
| | | id: item.id, |
| | | status: item.status |
| | | }).then(res => { |
| | | this.$tip.apiSuccess('更新成功') |
| | | }).finally(() => { |
| | | // this.search() |
| | | loadTree () { |
| | | this.loading = true |
| | | fetchTree(this.searchForm).then(res => { |
| | | this.tableData = (res || []).map(p => { |
| | | const prefixUrl = p.prefixUrl || '' |
| | | const children = (p.children || []).map(c => ({ |
| | | ...c, |
| | | parentId: c.parentId != null ? c.parentId : p.id, |
| | | prefixUrl: c.prefixUrl || prefixUrl |
| | | })) |
| | | return { ...p, children } |
| | | }) |
| | | }, |
| | | edit(id) { |
| | | queryById(id) |
| | | .then(res => { |
| | | let obj = { |
| | | id, |
| | | name: res.name, |
| | | attrFirst: res.attrFirst, |
| | | attrFirstList: res.attrFirstList, |
| | | attrSecond: res.attrSecond, |
| | | attrSecondList: res.attrSecondList, |
| | | sortnum: res.sortnum, |
| | | paramList: res.paramList, |
| | | imgurl: res.imgurl, |
| | | budgetList: res.budgetList.length > 0 ? res.budgetList : [{ maxamount: '', minamount: '' }], |
| | | type: res.type, |
| | | platCateId: res.platCateId, |
| | | tableData: res.paramList.map(item => { |
| | | return { |
| | | id: item.id, |
| | | name: item.name, |
| | | isselect: item.isselect, |
| | | isshow: item.isshow |
| | | } |
| | | }), |
| | | fileList: res.imgurl ? [{ url: res.prefixUrl + res.imgurl }] : [] |
| | | } |
| | | this.$refs.operaCategoryWindow.open('编辑类别', obj) |
| | | }) |
| | | } |
| | | }).finally(() => { this.loading = false }) |
| | | }, |
| | | resetSearch () { |
| | | this.searchForm = { name: '', type: '' } |
| | | this.loadTree() |
| | | }, |
| | | changeStatus (item) { |
| | | updateDisableById({ id: item.id, status: item.status }).then(() => { |
| | | this.$message.success('更新成功') |
| | | }) |
| | | }, |
| | | edit (id) { |
| | | queryById(id).then(res => { |
| | | const obj = { |
| | | id, name: res.name, sortnum: res.sortnum, paramList: res.paramList, |
| | | imgurl: res.imgurl, budgetList: res.budgetList.length > 0 ? res.budgetList : [{ maxamount: '', minamount: '' }], |
| | | type: res.type, platCateId: res.platCateId, |
| | | tableData: res.paramList.map(item => ({ id: item.id, name: item.name, isselect: item.isselect, isshow: item.isshow })), |
| | | fileList: res.imgurl ? [{ url: res.prefixUrl + res.imgurl }] : [] |
| | | } |
| | | this.$refs.operaCategoryWindow.open('编辑类别', obj) |
| | | }) |
| | | }, |
| | | deleteParent (row) { |
| | | this.$confirm(`确认删除【${row.name}】?`, '提示').then(() => { |
| | | deleteById(row.id).then(() => { |
| | | this.$message.success('删除成功') |
| | | this.loadTree() |
| | | }) |
| | | }) |
| | | }, |
| | | deleteSub (row) { |
| | | this.$confirm(`确认删除子类别【${row.name}】?`, '提示').then(() => { |
| | | deleteSubApi(row.id).then(() => { |
| | | this.$message.success('删除成功') |
| | | this.loadTree() |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | </script> |
| | | } |
| | | </script> |