<!-- * @Description: 服装库管理 * @Author: syy * @Date: 2024-7-18 --> <template> <div class="main-box"> <TreeFilter ref="treeFilter" label="clothSetName" id="clothSetId" width="300px" :show-all="true" :request-api="userManageClothApi.getList" @change="changeTreeFilter" > <template v-slot:header> <s-button suffix="服装库" @click="addClass(FormOptEnum.ADD)" style="margin-bottom: 15px" /> </template> <template v-slot:label="{ row }"> <span class="custom-tree-node"> <span>{{ row.node.label }}</span> <span v-if="row.node.label != '全部'"> <a @click.stop="addClass(FormOptEnum.EDIT, row.node.data)"> <el-icon><Edit /></el-icon> </a> <a style="margin-left: 8px" @click.stop="addDelete(row.node.data.clothSetId, '删除服装库')"> <el-icon><Delete /></el-icon> </a> </span> </span> </template> </TreeFilter> <div class="table-box"> <ProTable ref="proTable" title="服装库管理" :columns="columns" rowKey="clothId" :data="tableData.clothes"> <!-- 表格 header 按钮 --> <template #tableHeader="scope"> <s-button suffix="服装" @click="onOpen(FormOptEnum.ADD, { clothSetId: clothSetId }, treeFilter.treeAllData)" /> <s-button type="danger" :opt="FormOptEnum.DELETE" plain suffix="服装" :disabled="!scope.isSelected" @click="onDelete(scope.selectedListIds, '删除所选服装')" /> </template> <!-- 表格操作栏 --> <template #operation="scope"> <el-space> <s-button link :opt="FormOptEnum.DELETE" @click="onDelete([scope.row.clothId], `删除服装`)" /> </el-space> </template> </ProTable> </div> <!-- 人员新增/编辑表单 --> <Form ref="formRef"></Form> <!-- 班级新增/编辑表单 --> <Form1 ref="formRefC" /> <!-- 预览头像 --> <el-dialog v-model="visible" title="查看头像" width="830px" :before-close="handleClose"> <div style="display: flex; align-items: center; justify-content: center"> <img style="max-width: 100%; max-height: 600px" class="detailpic" :src="faceUrl" alt="" /> </div> <template #footer> <div class="dialog-footer"> <el-button @click="visible = false">关闭</el-button> </div> </template> </el-dialog> </div> </template> <script setup lang="tsx" name="SysUserClothing"> import { userManageClothApi,userClothButtonCode,SysUserCloth } from "@/api"; import { useHandleData } from "@/hooks/useHandleData"; import { FormOptEnum } from "@/enums"; import Form from "./components/form/index.vue"; import Form1 from "./components/form1/index.vue"; import { ColumnProps, ProTableInstance } from "@/components/ProTable/interface"; import TreeFilter from "@/components/TreeFilter/index.vue"; import { useUserStore } from "@/stores/modules"; // 获取 ProTable 元素,调用其获取刷新数据方法(还能获取到当前查询参数,方便导出携带参数) const faceUrl = ref(''); const visible = ref(false); //是否显示人员表单 const proTable = ref<ProTableInstance>(); const treeFilter = ref<any>({}); const userStore = useUserStore(); const { accessToken } = userStore; const tableData = ref<any>([]) // 表格配置项 const columns: ColumnProps<SysUserCloth.list>[] = [ { type: "selection", fixed: "left", width: 50 }, { prop: "clothUrl", label: "服装图", render: scope => { return ( <img src={scope.row.clothUrl} onClick={() => viewHeadImage(scope)} style='width:50px;height:50px' alt=''/> ); } }, { prop: "operation", label: "操作", width: 250, fixed: "right" } ]; const viewHeadImage = (scope: any) => { faceUrl.value = scope.row.clothUrl; visible.value = true }; const handleClose = () => { visible.value = false; }; // 人员表单引用 const formRef = ref<InstanceType<typeof Form> | null>(null); // 班级表单引用 const formRefC = ref<InstanceType<typeof Form1> | null>(null); /** * 打开服装表单 * @param opt 操作类型 * @param record 记录 */ function onOpen(opt: FormOptEnum, record: {},treeAllData:any) { formRef.value?.onOpen({ opt: opt, record: record,treeAllData:treeAllData, successful: RefreshTable }); } /** * 打开服装库表单 * @param opt 操作类型 * @param record 记录 */ function addClass(opt: FormOptEnum, record: {} | SysUserCloth.list = {}) { formRefC.value?.onOpen({ opt: opt, record: JSON.parse(JSON.stringify(record)), successful: RefreshTree }); } /** * 服装库删除 * @param ids id数组 */ async function addDelete(clothSetId: string[],msg: string) { // 二次确认 => 请求api => 刷新表格 await useHandleData(userManageClothApi.deleteClothDataBaseD, { clothSetId }, msg); RefreshTree(); //刷新表格 } /** * 服装删除 * @param ids id数组 */ async function onDelete(ids: string[], msg: string) { // 二次确认 => 请求api => 刷新表格 await useHandleData(userManageClothApi.delete, {clothId: ids.join(","), clothSetId:tableData.value.clothSetId}, msg); RefreshTable(); //刷新表格 } // 刷新表格 const RefreshTable = () => { getList(clothSetId.value) } // 刷新表格+树 const RefreshTree = () => { getList(clothSetId.value) treeFilter.value?.refresh(); //刷新树形筛选器 } /** 服装库切换切换 */ const clothSetId = ref<number | string>() function changeTreeFilter(val: number | string) { clothSetId.value = val proTable.value!.pageable.pageNum = 1; getList(val) } // 获取列表 const getList = (clothSetId:any)=>{ if(!clothSetId) return false userManageClothApi.page({clothSetId:clothSetId}).then((resp:any)=>{ if(resp.code == 200){ tableData.value = resp.data } }) } </script> <style scoped lang="scss"> .table-box { width: 100%; height: 100%; } .custom-tree-node { display: flex; flex: 1; align-items: center; justify-content: space-between; padding-right: 8px; font-size: 14px; } </style>