From 08e9a67dd679f311e79a27b04cd0c53a30b4bccf Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 04 六月 2026 18:33:22 +0800
Subject: [PATCH] aaa
---
company_admin/src/views/business/category.vue | 238 +++++++++++++++++++++++++++-------------------------------
1 files changed, 111 insertions(+), 127 deletions(-)
diff --git a/company_admin/src/views/business/category.vue b/company_admin/src/views/business/category.vue
index 4c654a9..0971b55 100644
--- a/company_admin/src/views/business/category.vue
+++ b/company_admin/src/views/business/category.vue
@@ -1,169 +1,153 @@
<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>
\ No newline at end of file
+}
+</script>
--
Gitblit v1.9.3