<template> <div class="tenant"> <!-- <Banner /> --> <div class="content"> <byTable :source="sourceList.data" :pagination="sourceList.pagination" :config="config" :loading="loading" highlight-current-row :selectConfig="selectConfig" :table-events="{ //element talbe事件都能传 select: select, }" :action-list="[ { text: '添加spu', action: () => openModal('add'), }, ]" @get-list="getList" > <template #slotName="{ item }"> {{ item.createTime }} </template> </byTable> </div> <el-dialog :title="modalType == 'add' ? '添加spu' : '编辑'" v-model="dialogVisible" width="800" v-loading="loading" > <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="byform" > <template #products> <div style="width: 100%"> <el-button type="primary" @click="openProduct = true" style="margin-bottom: 10px" > 添加产品 </el-button> <el-table :data="formData.data.productInfos"> <el-table-column prop="code" label="产品编码" /> <el-table-column prop="name" label="产品名称" /> <el-table-column prop="spec" label="规格" /> <el-table-column prop="zip" label="操作" width="100"> <template #default="{ $index }"> <el-button type="primary" link @click="handleRemove($index)" >删除</el-button > </template> </el-table-column> </el-table> </div> </template> </byForm> <template #footer> <el-button @click="dialogVisible = false" size="large">取 消</el-button> <el-button type="primary" @click="submitForm('byform')" size="large" :loading="submitLoading" > 确 定 </el-button> </template> </el-dialog> <el-dialog v-model="openProduct" title="选择产品" width="70%" append-to-body > <SelectProduct @handleSelect="handleSelect"></SelectProduct> <template #footer> <span class="dialog-footer"> <el-button @click="openProduct = false">取消</el-button> </span> </template> </el-dialog> </div> </template> <script setup> /* eslint-disable vue/no-unused-components */ import { ElMessage, ElMessageBox } from "element-plus"; import byTable from "@/components/byTable/index"; import byForm from "@/components/byForm/index"; import { computed, defineComponent, ref } from "vue"; import useUserStore from "@/store/modules/user"; import SelectProduct from "@/components/WDLY/product/SelectProduct"; const loading = ref(false); const submitLoading = ref(false); const sourceList = ref({ data: [], pagination: { total: 3, pageNum: 1, pageSize: 10, }, }); let dialogVisible = ref(false); let openProduct = ref(false); let roomDialogVisible = ref(false); let modalType = ref("add"); let rules = ref({ code: [{ required: true, message: "请输入spu编码", trigger: "blur" }], name: [{ required: true, message: "请输入spu名称", trigger: "blur" }], }); const { proxy } = getCurrentInstance(); const selectConfig = reactive([ // { // label: "spu类型", // prop: "type", // data: [], // }, ]); const config = computed(() => { return [ { attrs: { label: "spu编码", prop: "code", }, }, { attrs: { label: "spu名称", prop: "name", }, }, { attrs: { label: "关联产品数", prop: "count", }, }, { attrs: { label: "spu说明", prop: "remark", }, }, { attrs: { label: "操作", width: "200", align: "right", }, // 渲染 el-button,一般用在最后一列。 renderHTML(row) { return [ { attrs: { label: "修改", type: "primary", text: true, }, el: "button", click() { getDtl(row); }, }, { attrs: { label: "删除", type: "danger", text: true, }, el: "button", click() { // 弹窗提示是否删除 ElMessageBox.confirm( "此操作将永久删除该数据, 是否继续?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", } ).then(() => { // 删除 proxy .post("/productSpu/delete", { id: row.id, }) .then((res) => { ElMessage({ message: "删除成功", type: "success", }); getList(); }); }); }, }, ]; }, }, ]; }); let formData = reactive({ data: {}, treeData: [], }); const formOption = reactive({ inline: true, labelWidth: 100, itemWidth: 100, rules: [], }); const byform = ref(null); const treeData = ref([]); const formConfig = reactive([ { type: "input", prop: "code", label: "spu编码", }, { type: "input", prop: "name", label: "spu名称", }, { type: "input", itemType: "textarea", prop: "remark", label: "spu说明", }, { type: "slot", slotName: "products", prop: "keeperId", label: "关联产品", }, ]); const getList = async (req) => { sourceList.value.pagination = { ...sourceList.value.pagination, ...req }; loading.value = true; proxy .post("/productSpu/page", sourceList.value.pagination) .then((message) => { sourceList.value.data = message.rows; sourceList.value.pagination.total = message.total; setTimeout(() => { loading.value = false; }, 200); }); }; const openModal = () => { dialogVisible.value = true; modalType.value = "add"; formData.data = { productInfos: [], }; }; const submitForm = () => { byform.value.handleSubmit((valid) => { submitLoading.value = true; proxy.post("/productSpu/" + modalType.value, formData.data).then( (res) => { ElMessage({ message: modalType.value == "add" ? "添加成功" : "编辑成功", type: "success", }); dialogVisible.value = false; submitLoading.value = false; getList(); }, (err) => (submitLoading.value = false) ); }); }; const getDtl = (row) => { modalType.value = "edit"; proxy.post("/productSpu/detail", { id: row.id }).then((res) => { res.productInfos = res.productInfoList; formData.data = res; dialogVisible.value = true; }); }; const warehouseType = ref([]); const getDict = () => { // // 币种数据 proxy .post("/dictTenantData/page", { pageNum: 1, pageSize: 999, tenantId: useUserStore().user.tenantId, dictCode: "warehouse_type", }) .then((res) => { warehouseType.value = res.rows; selectConfig[0].data = res.rows.map((x) => ({ label: x.dictValue, value: x.dictKey, })); formConfig[0].data = res.rows.map((x) => ({ label: x.dictValue, value: x.dictKey, })); }); }; getList(); // getDict(); const handleSelect = (row) => { const flag = formData.data.productInfos.some((x) => x.id === row.id); if (flag) return ElMessage({ message: "该产品已选择", type: "info", }); formData.data.productInfos.push({ name: row.name, code: row.customCode, spec: row.spec, id: row.id, }); return ElMessage({ message: "选择成功", type: "success", }); }; const handleRemove = (index) => { formData.data.productInfos.splice(index, 1); return ElMessage({ message: "删除成功", type: "success", }); }; </script> <style lang="scss" scoped> .tenant { padding: 20px; } </style>