|
@@ -23,14 +23,14 @@
|
|
|
<el-col :span="1.5">
|
|
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
|
|
|
</el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
+ <!-- <el-col :span="1.5">
|
|
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"> 修改
|
|
|
</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"> 删除
|
|
|
</el-button>
|
|
|
- </el-col>
|
|
|
+ </el-col> -->
|
|
|
<right-toolbar v-model:showSearch="showSearch" @query-table="getList" />
|
|
|
</el-row>
|
|
|
</template>
|
|
@@ -39,18 +39,16 @@
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
<el-table-column label="库房名称" align="center" show-overflow-tooltip prop="name" width="150" />
|
|
|
<el-table-column label="库房编号" align="center" show-overflow-tooltip prop="id" width="150" />
|
|
|
- <el-table-column label="仓库类型" align="center" show-overflow-tooltip prop="storeType" width="150" />
|
|
|
<el-table-column label="管理人员" align="center" show-overflow-tooltip prop="managePerson" width="150" />
|
|
|
<el-table-column label="联系电话" align="center" show-overflow-tooltip prop="linkPhone" width="150" />
|
|
|
- <el-table-column label="库房地址" align="center" show-overflow-tooltip prop="storeAddress" width="150"/>
|
|
|
+ <el-table-column label="库房地址" align="center" show-overflow-tooltip prop="storeAddress" width="150" />
|
|
|
<el-table-column label="库位总数" align="center" show-overflow-tooltip prop="storeNum" />
|
|
|
<el-table-column label="备注" align="center" show-overflow-tooltip prop="remark" width="150" />
|
|
|
<el-table-column label="创建人" align="center" show-overflow-tooltip prop="creator" width="150" />
|
|
|
<el-table-column label="创建时间" align="center" show-overflow-tooltip prop="createTime" width="150" />
|
|
|
<el-table-column label="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
|
|
|
<template #default="scope">
|
|
|
- <el-button size="small" link type="primary" @click="handleDelete(scope.row)">修改</el-button>
|
|
|
- <el-button size="small" link type="danger" @click="handleDelete(scope.row)">删除</el-button>
|
|
|
+ <el-button size="small" link type="primary" @click="showDetail(scope.row)">详情</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -60,69 +58,85 @@
|
|
|
<!-- 添加或修改对话框 -->
|
|
|
<el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
|
|
|
<el-form ref="addFormRef" :model="form" label-width="110px">
|
|
|
+ <SubTitle title="基本信息" />
|
|
|
<el-row :gutter="20">
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="计划名称" prop="name" :rules="[{ required: true, message: '计划名称不能为空', trigger: 'blur' }]">
|
|
|
- <el-input v-model="form.name" placeholder="请输入计划名称" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="计划开始时间" prop="startTime"
|
|
|
- :rules="[{ required: true, message: '计划开始时间不能为空', trigger: 'change' }]">
|
|
|
- <el-date-picker v-model="form.startTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
|
|
|
- type="datetime" placeholder="请选择开始时间" />
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="库房名称" prop="name" :rules="[{ required: true, message: '库房名称不能为空', trigger: 'blur' }]">
|
|
|
+ <el-input v-model="form.name" placeholder="请输入库房名称" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="计划结束时间" prop="endTime"
|
|
|
- :rules="[{ required: true, message: '计划结束时间不能为空', trigger: 'change' }]">
|
|
|
- <el-date-picker v-model="form.endTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
|
|
|
- type="datetime" placeholder="请选择结束时间" />
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="库房编号" prop="sn" :rules="[{ required: true, message: '库房编号不能为空', trigger: 'blur' }]">
|
|
|
+ <el-input v-model="form.sn" placeholder="请输入库房编号" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检类型" prop="inspectionType"
|
|
|
- :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
|
|
|
- <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
|
|
|
- <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
|
|
|
- :value="dict.value"></el-option>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="管理人员" prop="managerId"
|
|
|
+ :rules="[{ required: true, message: '管理人员不能为空', trigger: 'change' }]">
|
|
|
+ <el-select v-model="form.managerId" clearable placeholder="请选择管理人员" @change="setUserInfo('manager')">
|
|
|
+ <el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName"
|
|
|
+ :value="item.userId"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检周期(天)" prop="inspectionCycle"
|
|
|
- :rules="[{ required: true, message: '巡检周期不能为空', trigger: 'blur' }]">
|
|
|
- <el-input-number v-model="form.inspectionCycle" :disabled="cycleDisabled" style="width:100%" :min="1" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检范围" prop="inspectionRange"
|
|
|
- :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
|
|
|
- <el-select v-model="form.inspectionRange" clearable placeholder="请选择巡检范围">
|
|
|
- <el-option label="按设备" :value="1"></el-option>
|
|
|
- <el-option label="按道路点位" :value="2"></el-option>
|
|
|
- <el-option label="按项目" :value="3"></el-option>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="仓库负责人" prop="headerId"
|
|
|
+ :rules="[{ required: true, message: '仓库负责人不能为空', trigger: 'change' }]">
|
|
|
+ <el-select v-model="form.headerId" clearable placeholder="请选择仓库负责人" @change="setUserInfo('header')">
|
|
|
+ <el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName"
|
|
|
+ :value="item.userId"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检员" prop="inspectionPersonId"
|
|
|
- :rules="[{ required: true, message: '巡检员不能为空', trigger: 'change' }]">
|
|
|
- <el-cascader v-model="form.inspectionPersonId" :props="{ emitPath: false }" :options="userOptions"
|
|
|
- placeholder="请选择巡检员" clearable :show-all-levels="false" @change="setUserInfo" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="联系电话" prop="ext1.phone">
|
|
|
- <el-input v-model="form.ext1.phone" disabled placeholder="选巡检员带出" />
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="仓库地址" prop="address">
|
|
|
+ <el-input v-model="form.address" placeholder="请输入仓库地址" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="8">
|
|
|
+ <el-col :span="12">
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
+ <SubTitle title="库位管理" />
|
|
|
+ <el-table :data="form.shelfs" max-height="300">
|
|
|
+ <el-table-column label="库位前缀" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.suffix" placeholder="请输入" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="货架号" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.shelfNum" placeholder="请输入" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="层数" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.layerNum" placeholder="请输入" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="货位数" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.placeNum" placeholder="请输入" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" align="center" width="80">
|
|
|
+ <template #header>
|
|
|
+ <div class="operateBtn">
|
|
|
+ <span>操作</span>
|
|
|
+ <el-icon @click="addShelfs">
|
|
|
+ <CirclePlus />
|
|
|
+ </el-icon>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #default="scope">
|
|
|
+ <el-icon @click="delShelfs(scope.$index)">
|
|
|
+ <Delete />
|
|
|
+ </el-icon>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
@@ -131,19 +145,47 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+ <el-drawer v-model="detailDrawer" title="库房详情" class="customDrawer" size="80%">
|
|
|
+ <div>
|
|
|
+ <el-tabs v-model="detailTab">
|
|
|
+ <el-tab-pane label="基础信息" name="1">
|
|
|
+ <div>
|
|
|
+ <el-descriptions class="detail-descriptions" :column="2" border>
|
|
|
+ <el-descriptions-item label-align="right" label="库房名称">{{ curRow.name }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="库房编号">{{ curRow.id }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="管理人员">{{ curRow.managePerson }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="联系电话">{{ curRow.linkPhone }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="库房地址">{{ curRow.storeAddress }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="库位总数">{{ curRow.storeNum }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="创建人">{{ curRow.creator }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="right" label="备注">{{ curRow.remark }}</el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="库位管理" name="2">
|
|
|
+ <el-table :data="curRow.shelfs" >
|
|
|
+ <el-table-column label="库位名称" align="center" prop="name">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="前缀" align="center" prop="suffix">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="货架号" align="center" prop="shelfNum">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="层号" align="center" prop="layerNum">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="货位号" align="center" prop="placeNum">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ </div>
|
|
|
+ </el-drawer>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<script setup name="PatrolPlan" lang="ts">
|
|
|
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
|
|
|
-import {
|
|
|
- listDeviceType,
|
|
|
- getDeviceTypeDetailList
|
|
|
-} from '@/api/deviceManage/deviceType';
|
|
|
-import {
|
|
|
- listDevice,
|
|
|
-} from '@/api/deviceManage/device';
|
|
|
+<script setup name="WarehouseManage" lang="ts">
|
|
|
+import { listWarehouse, getWarehouse, delWarehouse, addWarehouse, updateWarehouse } from '@/api/sparesManage/index';
|
|
|
import { deepClone } from '@/utils';
|
|
|
+import { listUser } from '@/api/system/user/index'
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const tableList = ref([]);
|
|
|
const buttonLoading = ref(false);
|
|
@@ -162,23 +204,20 @@ const dialog = reactive<DialogOption>({
|
|
|
const initFormData = {
|
|
|
id: undefined,
|
|
|
name: undefined,
|
|
|
- startTime: undefined,
|
|
|
- endTime: undefined,
|
|
|
- inspectionType: undefined,
|
|
|
- inspectionCycle: 1,
|
|
|
- status: 0,
|
|
|
- inspectionRange: undefined,
|
|
|
- inspectionPersonId: undefined,
|
|
|
- inspectionItem: [{
|
|
|
- deviceTypeId: undefined,
|
|
|
- deviceTypeDetailIds: [],
|
|
|
- items: [],
|
|
|
- deviceOptions: [],
|
|
|
+ sn: undefined,
|
|
|
+ managerId: undefined,
|
|
|
+ address: undefined,
|
|
|
+ headerId: undefined,
|
|
|
+ shelfs: [{
|
|
|
+ suffix: '',
|
|
|
+ shelfNum: '',
|
|
|
+ layerNum: '',
|
|
|
+ placeNum: ''
|
|
|
}],
|
|
|
remark: undefined,
|
|
|
ext1: <any>{
|
|
|
- phone: undefined,
|
|
|
- inspectionPersonName: undefined,
|
|
|
+ headerName: undefined,
|
|
|
+ managerName: undefined,
|
|
|
},
|
|
|
ext2: undefined
|
|
|
};
|
|
@@ -192,19 +231,15 @@ const formData = reactive({
|
|
|
params: {}
|
|
|
}
|
|
|
});
|
|
|
-const cycleDisabled = ref(false)
|
|
|
+const detailTab = ref('1')
|
|
|
+const detailDrawer = ref(false)
|
|
|
+const curRow = ref({} as any)
|
|
|
const { queryParams, form } = toRefs(formData);
|
|
|
-const { inspection_type } = toRefs<any>(proxy?.useDict('inspection_type'));
|
|
|
-const { inspection_status } = toRefs<any>(proxy?.useDict('inspection_status'));
|
|
|
-const dictGroup = reactive({
|
|
|
- deviceTypeOptions: [],
|
|
|
- inspectionItemOptions: []
|
|
|
-})
|
|
|
const userOptions = ref([])
|
|
|
/** 查询列表 */
|
|
|
const getList = async () => {
|
|
|
loading.value = true;
|
|
|
- // const res = await listInspectionTask(queryParams.value);
|
|
|
+ // const res = await listWarehouse(queryParams.value);
|
|
|
// tableList.value = res.rows.map((item) => ({
|
|
|
// ...item,
|
|
|
// ext1: item.ext1 ? JSON.parse(item.ext1) : null,
|
|
@@ -218,7 +253,7 @@ const getList = async () => {
|
|
|
managePerson: '王乐',
|
|
|
linkPhone: '13218816060',
|
|
|
storeAddress: '112号',
|
|
|
- storeNum:'300',
|
|
|
+ storeNum: '300',
|
|
|
remark: '--',
|
|
|
creator: '王乐',
|
|
|
createTime: '2024-12-19 12:13:02',
|
|
@@ -229,8 +264,8 @@ const getList = async () => {
|
|
|
storeType: '半成品库房',
|
|
|
managePerson: '王乐',
|
|
|
linkPhone: '13218816060',
|
|
|
- storeAddress: '112号',
|
|
|
- storeNum:'300',
|
|
|
+ storeAddress: '102号',
|
|
|
+ storeNum: '250',
|
|
|
remark: '--',
|
|
|
creator: '王乐',
|
|
|
createTime: '2024-12-19 12:13:02',
|
|
@@ -242,7 +277,7 @@ const getList = async () => {
|
|
|
managePerson: '王乐',
|
|
|
linkPhone: '13218816060',
|
|
|
storeAddress: '112号',
|
|
|
- storeNum:'300',
|
|
|
+ storeNum: '500',
|
|
|
remark: '--',
|
|
|
creator: '王乐',
|
|
|
createTime: '2024-12-19 12:13:02',
|
|
@@ -284,19 +319,18 @@ const handleSelectionChange = (selection) => {
|
|
|
/** 新增按钮操作 */
|
|
|
const handleAdd = () => {
|
|
|
reset();
|
|
|
- // dialog.visible = true;
|
|
|
- dialog.title = '新增故障类型';
|
|
|
+ dialog.visible = true;
|
|
|
+ dialog.title = '新增库房库位';
|
|
|
};
|
|
|
/** 修改按钮操作 */
|
|
|
const handleUpdate = (row) => {
|
|
|
reset();
|
|
|
const _id = row?.id || ids.value[0];
|
|
|
- getInspectionTask(_id).then(({ data }) => {
|
|
|
+ getWarehouse(_id).then(({ data }) => {
|
|
|
data.ext1 = data.ext1 && JSON.parse(data.ext1);
|
|
|
- data.inspectionItem = data.inspectionItem && JSON.parse(data.inspectionItem);
|
|
|
Object.assign(form.value, data);
|
|
|
});
|
|
|
- // dialog.visible = true;
|
|
|
+ dialog.visible = true;
|
|
|
dialog.title = '修改故障类型';
|
|
|
};
|
|
|
|
|
@@ -304,19 +338,97 @@ const handleUpdate = (row) => {
|
|
|
const submitForm = () => {
|
|
|
addFormRef.value?.validate(async (valid: boolean) => {
|
|
|
if (valid) {
|
|
|
+ // buttonLoading.value = true;
|
|
|
+ // if (form.value.id) {
|
|
|
+ // await updateWarehouse(form.value).finally(() => (buttonLoading.value = false));
|
|
|
+ // } else {
|
|
|
+ // await addWarehouse(form.value).finally(() => (buttonLoading.value = false));
|
|
|
+ // }
|
|
|
+ // proxy?.$modal.msgSuccess('操作成功');
|
|
|
+ // dialog.visible = false;
|
|
|
+ // await getList();
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
/** 删除按钮操作 */
|
|
|
const handleDelete = async (row) => {
|
|
|
- // const _ids = row?.id || ids.value;
|
|
|
- // await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
|
|
|
- // await delInspectionTask(_ids);
|
|
|
- // proxy?.$modal.msgSuccess('删除成功');
|
|
|
- // await getList();
|
|
|
+ const _ids = row?.id || ids.value;
|
|
|
+ await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
|
|
|
+ await delWarehouse(_ids);
|
|
|
+ proxy?.$modal.msgSuccess('删除成功');
|
|
|
+ await getList();
|
|
|
};
|
|
|
+const showDetail = (row) => {
|
|
|
+ detailDrawer.value = true
|
|
|
+ curRow.value = row
|
|
|
+ detailTab.value = '1'
|
|
|
+ curRow.value.shelfs = [
|
|
|
+ {
|
|
|
+ name:'A-1-1-1',
|
|
|
+ suffix: '1',
|
|
|
+ shelfNum: '1',
|
|
|
+ layerNum: '1',
|
|
|
+ placeNum: '1'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'A-1-1-2',
|
|
|
+ suffix: '1',
|
|
|
+ shelfNum: '1',
|
|
|
+ layerNum: '1',
|
|
|
+ placeNum: '2'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'A-1-1-3',
|
|
|
+ suffix: '1',
|
|
|
+ shelfNum: '1',
|
|
|
+ layerNum: '1',
|
|
|
+ placeNum: '3'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'A-1-1-4',
|
|
|
+ suffix: '1',
|
|
|
+ shelfNum: '1',
|
|
|
+ layerNum: '1',
|
|
|
+ placeNum: '4'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'A-1-1-5',
|
|
|
+ suffix: '1',
|
|
|
+ shelfNum: '1',
|
|
|
+ layerNum: '1',
|
|
|
+ placeNum: '5'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+const getUserList = () => {
|
|
|
+ listUser({ status: '0', pageSize: 10000, pageNum: 1 }).then(({ code, rows }) => {
|
|
|
+ if (code === 200) {
|
|
|
+ userOptions.value = rows
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+const setUserInfo = (key) => {
|
|
|
+ form.value.ext1[`${key}Name`] = ''
|
|
|
+ userOptions.value.forEach(item => {
|
|
|
+ if (form.value[`${key}Id`] === item.userId) {
|
|
|
+ form.value.ext1[`${key}Name`] = item.nickName
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+const addShelfs = () => {
|
|
|
+ form.value.shelfs.push({
|
|
|
+ suffix: '',
|
|
|
+ shelfNum: '',
|
|
|
+ layerNum: '',
|
|
|
+ placeNum: ''
|
|
|
+ })
|
|
|
+}
|
|
|
+const delShelfs = (index) => {
|
|
|
+ form.value.shelfs.splice(index, 1)
|
|
|
+}
|
|
|
onMounted(() => {
|
|
|
getList();
|
|
|
+ getUserList()
|
|
|
});
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|