feat(单元格管理): 新增主板ID字段并优化单元格表单布局
在单元格管理和编辑功能中,新增了主板ID字段,并调整了表单布局以提升用户体验。同时,将单元格表单从对话框改为抽屉式布局,便于操作和查看。
This commit is contained in:
parent
ba7b027c7b
commit
a742b56413
|
@ -44,6 +44,10 @@ export interface AddCabinetCellCommand {
|
||||||
cellNo: number;
|
cellNo: number;
|
||||||
/** 针脚序号 */
|
/** 针脚序号 */
|
||||||
pinNo: number;
|
pinNo: number;
|
||||||
|
/**
|
||||||
|
* 关联主板ID
|
||||||
|
*/
|
||||||
|
mainboardId: number;
|
||||||
/** 格口类型(1小格 2中格 3大格 4超大格) */
|
/** 格口类型(1小格 2中格 3大格 4超大格) */
|
||||||
cellType: number;
|
cellType: number;
|
||||||
/** 使用状态(1空闲 2已占用) */
|
/** 使用状态(1空闲 2已占用) */
|
||||||
|
|
|
@ -9,6 +9,7 @@ import type { FormRules } from 'element-plus';
|
||||||
export interface FormDTO {
|
export interface FormDTO {
|
||||||
cellId?: number;
|
cellId?: number;
|
||||||
cabinetId: number;
|
cabinetId: number;
|
||||||
|
mainboardId: number;
|
||||||
cellNo: number;
|
cellNo: number;
|
||||||
pinNo: number;
|
pinNo: number;
|
||||||
cellType: number;
|
cellType: number;
|
||||||
|
@ -27,11 +28,12 @@ const props = defineProps({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(["update:visible", "refresh"]);
|
const emit = defineEmits(["update:modelValue", "refresh"]);
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const formData = reactive<FormDTO>({
|
const formData = reactive<FormDTO>({
|
||||||
cabinetId: null,
|
cabinetId: null,
|
||||||
|
mainboardId: null,
|
||||||
cellNo: null,
|
cellNo: null,
|
||||||
pinNo: null,
|
pinNo: null,
|
||||||
cellType: 1,
|
cellType: 1,
|
||||||
|
@ -44,6 +46,10 @@ const rules = reactive<FormRules>({
|
||||||
{ required: true, message: "柜体ID必填", trigger: "blur" },
|
{ required: true, message: "柜体ID必填", trigger: "blur" },
|
||||||
{ type: 'number', message: '必须为数字类型' }
|
{ type: 'number', message: '必须为数字类型' }
|
||||||
],
|
],
|
||||||
|
mainboardId: [
|
||||||
|
{ required: true, message: "主板ID必填", trigger: "blur" },
|
||||||
|
{ type: 'number', message: '必须为数字类型' }
|
||||||
|
],
|
||||||
cellNo: [
|
cellNo: [
|
||||||
{ required: true, message: "单元格号必填", trigger: "blur" },
|
{ required: true, message: "单元格号必填", trigger: "blur" },
|
||||||
{ type: 'number', message: '必须为数字类型' }
|
{ type: 'number', message: '必须为数字类型' }
|
||||||
|
@ -77,7 +83,7 @@ const handleConfirm = async () => {
|
||||||
|
|
||||||
const closeDialog = () => {
|
const closeDialog = () => {
|
||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
emit("update:visible", false);
|
emit('update:modelValue', false);
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(() => props.row, (val) => {
|
watch(() => props.row, (val) => {
|
||||||
|
@ -88,49 +94,49 @@ watch(() => props.row, (val) => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-dialog title="编辑单元格" :model-value="visible" width="600px" @close="closeDialog">
|
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
|
||||||
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
|
<el-form-item label="柜体ID" prop="cabinetId">
|
||||||
<el-form-item label="柜体ID" prop="cabinetId">
|
<el-input v-model.number="formData.cabinetId" placeholder="请输入柜体ID" />
|
||||||
<el-input v-model.number="formData.cabinetId" placeholder="请输入柜体ID" />
|
</el-form-item>
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="单元格号" prop="cellNo">
|
<el-form-item label="主板ID" prop="mainboardId">
|
||||||
<el-input v-model.number="formData.cellNo" placeholder="请输入单元格号" />
|
<el-input v-model.number="formData.mainboardId" placeholder="请输入主板ID" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="针脚号" prop="pinNo">
|
<el-form-item label="单元格号" prop="cellNo">
|
||||||
<el-input v-model.number="formData.pinNo" placeholder="请输入针脚号" />
|
<el-input v-model.number="formData.cellNo" placeholder="请输入单元格号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="单元格类型" prop="cellType">
|
<el-form-item label="针脚号" prop="pinNo">
|
||||||
<el-select v-model="formData.cellType" placeholder="请选择类型">
|
<el-input v-model.number="formData.pinNo" placeholder="请输入针脚号" />
|
||||||
<el-option label="小格" :value="1" />
|
</el-form-item>
|
||||||
<el-option label="中格" :value="2" />
|
|
||||||
<el-option label="大格" :value="3" />
|
|
||||||
<el-option label="超大格" :value="4" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="使用状态" prop="usageStatus">
|
<el-form-item label="单元格类型" prop="cellType">
|
||||||
<el-select v-model="formData.usageStatus" placeholder="请选择状态">
|
<el-select v-model="formData.cellType" placeholder="请选择类型">
|
||||||
<el-option label="空闲" :value="1" />
|
<el-option label="小格" :value="1" />
|
||||||
<el-option label="已占用" :value="2" />
|
<el-option label="中格" :value="2" />
|
||||||
</el-select>
|
<el-option label="大格" :value="3" />
|
||||||
</el-form-item>
|
<el-option label="超大格" :value="4" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="可用状态" prop="availableStatus">
|
<el-form-item label="使用状态" prop="usageStatus">
|
||||||
<el-select v-model="formData.availableStatus" placeholder="请选择状态">
|
<el-select v-model="formData.usageStatus" placeholder="请选择状态">
|
||||||
<el-option label="正常" :value="1" />
|
<el-option label="空闲" :value="1" />
|
||||||
<el-option label="故障" :value="2" />
|
<el-option label="已占用" :value="2" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<template #footer>
|
<el-form-item label="可用状态" prop="availableStatus">
|
||||||
<el-button @click="closeDialog">取消</el-button>
|
<el-select v-model="formData.availableStatus" placeholder="请选择状态">
|
||||||
|
<el-option label="正常" :value="1" />
|
||||||
|
<el-option label="故障" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
<el-button type="primary" :icon="useRenderIcon(Confirm)" @click="handleConfirm">
|
<el-button type="primary" :icon="useRenderIcon(Confirm)" @click="handleConfirm">
|
||||||
确认
|
提交
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</el-form-item>
|
||||||
</el-dialog>
|
</el-form>
|
||||||
</template>
|
</template>
|
|
@ -8,6 +8,7 @@ import type { FormRules } from 'element-plus';
|
||||||
|
|
||||||
export interface FormDTO {
|
export interface FormDTO {
|
||||||
cabinetId: number;
|
cabinetId: number;
|
||||||
|
mainboardId: number;
|
||||||
cellNo: number;
|
cellNo: number;
|
||||||
pinNo: number;
|
pinNo: number;
|
||||||
cellType: number;
|
cellType: number;
|
||||||
|
@ -28,11 +29,12 @@ const props = defineProps({
|
||||||
|
|
||||||
(window as any).cellProps = props;
|
(window as any).cellProps = props;
|
||||||
|
|
||||||
const emit = defineEmits(["update:visible", "refresh"]);
|
const emit = defineEmits(["update:modelValue", "refresh"]);
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const formData = reactive<FormDTO>({
|
const formData = reactive<FormDTO>({
|
||||||
cabinetId: props.initialCabinetId,
|
cabinetId: props.initialCabinetId,
|
||||||
|
mainboardId: null,
|
||||||
cellNo: null,
|
cellNo: null,
|
||||||
pinNo: null,
|
pinNo: null,
|
||||||
cellType: 1,
|
cellType: 1,
|
||||||
|
@ -42,6 +44,10 @@ const formData = reactive<FormDTO>({
|
||||||
|
|
||||||
const rules = reactive<FormRules>({
|
const rules = reactive<FormRules>({
|
||||||
cabinetId: [],
|
cabinetId: [],
|
||||||
|
mainboardId: [
|
||||||
|
{ required: true, message: "主板ID必填", trigger: "blur" },
|
||||||
|
{ type: 'number', message: '必须为数字类型' }
|
||||||
|
],
|
||||||
cellNo: [
|
cellNo: [
|
||||||
{ required: true, message: "单元格号必填", trigger: "blur" },
|
{ required: true, message: "单元格号必填", trigger: "blur" },
|
||||||
{ type: 'number', message: '必须为数字类型' }
|
{ type: 'number', message: '必须为数字类型' }
|
||||||
|
@ -76,52 +82,50 @@ const handleConfirm = async () => {
|
||||||
|
|
||||||
const closeDialog = () => {
|
const closeDialog = () => {
|
||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
emit("update:visible", false);
|
emit("update:modelValue", false);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-dialog title="新增单元格" :model-value="visible" width="600px" @close="closeDialog">
|
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
|
||||||
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
|
<el-form-item label="主板ID" prop="mainboardId">
|
||||||
|
<el-input v-model.number="formData.mainboardId" placeholder="请输入主板ID" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="单元格号" prop="cellNo">
|
||||||
|
<el-input v-model.number="formData.cellNo" placeholder="请输入单元格号" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="单元格号" prop="cellNo">
|
<el-form-item label="针脚号" prop="pinNo">
|
||||||
<el-input v-model.number="formData.cellNo" placeholder="请输入单元格号" />
|
<el-input v-model.number="formData.pinNo" placeholder="请输入针脚号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="针脚号" prop="pinNo">
|
<el-form-item label="单元格类型" prop="cellType">
|
||||||
<el-input v-model.number="formData.pinNo" placeholder="请输入针脚号" />
|
<el-select v-model="formData.cellType" placeholder="请选择类型">
|
||||||
</el-form-item>
|
<el-option label="小格" :value="1" />
|
||||||
|
<el-option label="中格" :value="2" />
|
||||||
|
<el-option label="大格" :value="3" />
|
||||||
|
<el-option label="超大格" :value="4" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="单元格类型" prop="cellType">
|
<el-form-item label="使用状态" prop="usageStatus">
|
||||||
<el-select v-model="formData.cellType" placeholder="请选择类型">
|
<el-select v-model="formData.usageStatus" placeholder="请选择状态">
|
||||||
<el-option label="小格" :value="1" />
|
<el-option label="空闲" :value="1" />
|
||||||
<el-option label="中格" :value="2" />
|
<el-option label="已占用" :value="2" />
|
||||||
<el-option label="大格" :value="3" />
|
</el-select>
|
||||||
<el-option label="超大格" :value="4" />
|
</el-form-item>
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="使用状态" prop="usageStatus">
|
<el-form-item label="可用状态" prop="availableStatus">
|
||||||
<el-select v-model="formData.usageStatus" placeholder="请选择状态">
|
<el-select v-model="formData.availableStatus" placeholder="请选择状态">
|
||||||
<el-option label="空闲" :value="1" />
|
<el-option label="正常" :value="1" />
|
||||||
<el-option label="已占用" :value="2" />
|
<el-option label="故障" :value="2" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
<el-form-item label="可用状态" prop="availableStatus">
|
|
||||||
<el-select v-model="formData.availableStatus" placeholder="请选择状态">
|
|
||||||
<el-option label="正常" :value="1" />
|
|
||||||
<el-option label="故障" :value="2" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="closeDialog">取消</el-button>
|
|
||||||
<el-button type="primary" :icon="useRenderIcon(Confirm)" @click="handleConfirm">
|
<el-button type="primary" :icon="useRenderIcon(Confirm)" @click="handleConfirm">
|
||||||
确认
|
提交
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</el-form-item>
|
||||||
</el-dialog>
|
</el-form>
|
||||||
</template>
|
</template>
|
|
@ -279,9 +279,12 @@ const switchCellType = (cellType: number) => {
|
||||||
:page-sizes="[10, 20, 50]" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"
|
:page-sizes="[10, 20, 50]" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"
|
||||||
@size-change="onSizeChange" @current-change="onCurrentChange" />
|
@size-change="onSizeChange" @current-change="onCurrentChange" />
|
||||||
</PureTableBar>
|
</PureTableBar>
|
||||||
<cell-form-modal v-model:visible="modalVisible" :initial-cabinet-id="searchFormParams.cabinetId"
|
<el-drawer v-model="modalVisible" title="新增单元格" size="30%">
|
||||||
@refresh="getList" />
|
<cell-form-modal :initial-cabinet-id="searchFormParams.cabinetId" @refresh="getList" />
|
||||||
<cell-edit-modal v-model:visible="editVisible" :row="currentRow" @refresh="getList" />
|
</el-drawer>
|
||||||
|
<el-drawer v-model="editVisible" title="编辑单元格" size="30%">
|
||||||
|
<cell-edit-modal :row="currentRow" @refresh="getList" />
|
||||||
|
</el-drawer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -16,6 +16,8 @@ import Delete from "@iconify-icons/ep/delete";
|
||||||
import AddFill from "@iconify-icons/ri/add-circle-line";
|
import AddFill from "@iconify-icons/ri/add-circle-line";
|
||||||
import Search from "@iconify-icons/ep/search";
|
import Search from "@iconify-icons/ep/search";
|
||||||
import Refresh from "@iconify-icons/ep/refresh";
|
import Refresh from "@iconify-icons/ep/refresh";
|
||||||
|
import CellFormModal from "@/views/cabinet/cabinet-cell/cell-form-modal.vue";
|
||||||
|
import CellEditModal from "@/views/cabinet/cabinet-cell/cell-edit-modal.vue";
|
||||||
import { getGoodsInfo } from "@/api/shop/goods";
|
import { getGoodsInfo } from "@/api/shop/goods";
|
||||||
import { CabinetMainboardDTO, deleteMainboard, getMainboardList, updateMainboard } from "@/api/cabinet/mainboards";
|
import { CabinetMainboardDTO, deleteMainboard, getMainboardList, updateMainboard } from "@/api/cabinet/mainboards";
|
||||||
|
|
||||||
|
@ -25,6 +27,7 @@ defineOptions({
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
const currentCell = ref<CabinetCellDTO>();
|
||||||
const cabinetInfo = ref<SmartCabinetDTO>({
|
const cabinetInfo = ref<SmartCabinetDTO>({
|
||||||
cabinetName: "",
|
cabinetName: "",
|
||||||
cabinetType: 0,
|
cabinetType: 0,
|
||||||
|
@ -53,6 +56,8 @@ const cellPagination = ref({
|
||||||
});
|
});
|
||||||
const goodsConfigVisible = ref(false);
|
const goodsConfigVisible = ref(false);
|
||||||
const currentCellId = ref<number>();
|
const currentCellId = ref<number>();
|
||||||
|
const cellFormVisible = ref(false);
|
||||||
|
const cellEditVisible = ref(false);
|
||||||
|
|
||||||
function handleConfigure(row: CabinetCellDTO) {
|
function handleConfigure(row: CabinetCellDTO) {
|
||||||
currentCellId.value = row.cellId;
|
currentCellId.value = row.cellId;
|
||||||
|
@ -109,6 +114,11 @@ async function handleClearGoods(row: CabinetCellDTO) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleEditCell(row: CabinetCellDTO) {
|
||||||
|
currentCell.value = row;
|
||||||
|
cellEditVisible.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
async function fetchCabinetDetail() {
|
async function fetchCabinetDetail() {
|
||||||
try {
|
try {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
|
@ -286,13 +296,19 @@ onMounted(() => {
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
|
|
||||||
<div class="cell-details" v-if="activeTab === 'cells'">
|
<div class="cell-details" v-if="activeTab === 'cells'">
|
||||||
|
<div style="display: flex; justify-content: flex-end; margin-bottom: 16px;">
|
||||||
|
<el-button type="primary" :size="'small'" :icon="useRenderIcon(AddFill)" @click="cellFormVisible = true">
|
||||||
|
新增格口
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
<el-table v-loading="loading" :data="cellList" border>
|
<el-table v-loading="loading" :data="cellList" border>
|
||||||
<el-table-column label="格口ID" prop="cellId" width="80" />
|
<el-table-column label="格口ID" prop="cellId" width="80" />
|
||||||
<el-table-column label="格口号" prop="cellNo" width="80" />
|
<el-table-column label="格口号" prop="cellNo" width="80" />
|
||||||
|
<el-table-column label="针脚号" prop="pinNo" width="80" />
|
||||||
<el-table-column label="商品图片" width="120">
|
<el-table-column label="商品图片" width="120">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-image :src="row.coverImg" :preview-src-list="[row.coverImg]" fit="cover" class="rounded" width="60"
|
<el-image :src="row.coverImg" :preview-src-list="[row.coverImg]" :preview-teleported="true"
|
||||||
height="60" />
|
:hide-on-click-modal="true" fit="cover" class="rounded" width="60" height="60" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="商品名称">
|
<el-table-column label="商品名称">
|
||||||
|
@ -325,6 +341,10 @@ onMounted(() => {
|
||||||
<el-button type="success" link :icon="useRenderIcon(AddFill)" @click="handleConfigure(row)">
|
<el-button type="success" link :icon="useRenderIcon(AddFill)" @click="handleConfigure(row)">
|
||||||
配置商品
|
配置商品
|
||||||
</el-button>
|
</el-button>
|
||||||
|
|
||||||
|
<el-button type="primary" link :icon="useRenderIcon(EditPen)" @click="handleEditCell(row)">
|
||||||
|
编辑格口
|
||||||
|
</el-button>
|
||||||
<el-button v-if="row.goodsId" type="warning" link :icon="useRenderIcon(EditPen)"
|
<el-button v-if="row.goodsId" type="warning" link :icon="useRenderIcon(EditPen)"
|
||||||
@click="handleStockConfig(row)">
|
@click="handleStockConfig(row)">
|
||||||
配置库存
|
配置库存
|
||||||
|
@ -370,6 +390,12 @@ onMounted(() => {
|
||||||
<el-drawer v-model="goodsConfigVisible" title="配置商品" size="50%" direction="rtl">
|
<el-drawer v-model="goodsConfigVisible" title="配置商品" size="50%" direction="rtl">
|
||||||
<CabinetGoodsConfigModal v-model="goodsConfigVisible" :cell-id="currentCellId" @refresh="fetchCellList" />
|
<CabinetGoodsConfigModal v-model="goodsConfigVisible" :cell-id="currentCellId" @refresh="fetchCellList" />
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
|
<el-drawer v-model="cellFormVisible" title="新增格口" size="30%" direction="rtl">
|
||||||
|
<CellFormModal v-model="cellFormVisible" :initial-cabinet-id="cabinetId" @refresh="fetchCellList" />
|
||||||
|
</el-drawer>
|
||||||
|
<el-drawer v-model="cellEditVisible" title="编辑格口" size="30%" direction="rtl">
|
||||||
|
<CellEditModal v-model="cellEditVisible" :row="currentCell" @refresh="fetchCellList" />
|
||||||
|
</el-drawer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -418,7 +444,7 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-header {
|
.tab-header {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -214,7 +214,7 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-header {
|
.tab-header {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.order-item {
|
.order-item {
|
||||||
|
|
|
@ -222,7 +222,7 @@ async function handleModifyBalance(row: QyUserDTO) {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-header {
|
.tab-header {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
Loading…
Reference in New Issue