From 34c674d503e23c0cf6d0b6dec063f3049885e5f8 Mon Sep 17 00:00:00 2001
From: 朱桂飞 <zhuguifei@zhuguifeideMacBook-Air.local>
Date: 星期一, 10 二月 2025 13:17:10 +0800
Subject: [PATCH] 新增盘点明细
---
/dev/null | 211 --------------
eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts | 4
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInventoryDetailController.java | 12
eims-ui/packages/@core/preferences/src/config.ts | 6
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInventoryDetailBo.java | 2
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInventoryDetailMapper.xml | 15
eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx | 79 ----
eims-ui/apps/web-antd/src/views/eims/inventory-detail/index.vue | 98 ++++--
eims-ui/apps/web-antd/src/views/eims/equ/data.tsx | 22 -
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInventoryDetailServiceImpl.java | 45 +++
eims-ui/apps/web-antd/src/views/eims/inventory-detail/detail-drawer.vue | 79 +++++
eims-ui/apps/web-antd/src/views/eims/inventory-detail/data.tsx | 277 +++---------------
12 files changed, 268 insertions(+), 582 deletions(-)
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx b/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx
index abaf3a6..3790277 100644
--- a/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx
+++ b/eims-ui/apps/web-antd/src/views/eims/equ-statu/data.tsx
@@ -8,6 +8,7 @@
import { type FormSchemaGetter } from '#/adapter/form';
import { getDictOptions } from '#/utils/dict';
+import { renderDict } from '#/utils/render';
export const querySchema: FormSchemaGetter = () => [
{
@@ -48,26 +49,7 @@
sortable: true,
slots: {
default: ({ row }) => {
- const statu = row.beforeChange;
- switch (statu) {
- case '0': {
- return <Tag color="cyan">璇曠敤</Tag>;
- }
- case '1': {
- return <Tag color="green">鍏ュ浐</Tag>;
- }
- case '2': {
- return <Tag color="orange">杩佺Щ</Tag>;
- }
- case '3': {
- return <Tag color="red">鎶ュ簾</Tag>;
- }
- case null: {
- return '';
- }
- // No default
- }
- return '';
+ return renderDict(row.beforeChange, DictEnum.SYS_EQU_STATUS);
}
},
minWidth: 80,
@@ -79,26 +61,7 @@
sortable: true,
slots: {
default: ({ row }) => {
- const statu = row.afterChange;
- switch (statu) {
- case '0': {
- return <Tag color="cyan">璇曠敤</Tag>;
- }
- case '1': {
- return <Tag color="green">鍏ュ浐</Tag>;
- }
- case '2': {
- return <Tag color="orange">杩佺Щ</Tag>;
- }
- case '3': {
- return <Tag color="red">鎶ュ簾</Tag>;
- }
- case null: {
- return '';
- }
- // No default
- }
- return '';
+ return renderDict(row.afterChange, DictEnum.SYS_EQU_STATUS);
}
},
minWidth: 80,
@@ -212,46 +175,14 @@
field: 'beforeChange',
label: '鍙樻洿鍓�',
render(value) {
- switch (value) {
- case '0': {
- return <Tag color="cyan">璇曠敤</Tag>;
- }
- case '1': {
- return <Tag color="green">鍏ュ浐</Tag>;
- }
- case '2': {
- return <Tag color="orange">杩佺Щ</Tag>;
- }
- case '3': {
- return <Tag color="red">鎶ュ簾</Tag>;
- }
- case null: {
- return '';
- }
- }
+ return renderDict(value, DictEnum.SYS_EQU_STATUS);
}
},
{
field: 'afterChange',
label: '鍙樻洿鍚�',
render(value) {
- switch (value) {
- case '0': {
- return <Tag color="cyan">璇曠敤</Tag>;
- }
- case '1': {
- return <Tag color="green">鍏ュ浐</Tag>;
- }
- case '2': {
- return <Tag color="orange">杩佺Щ</Tag>;
- }
- case '3': {
- return <Tag color="red">鎶ュ簾</Tag>;
- }
- case null: {
- return '';
- }
- }
+ return renderDict(value, DictEnum.SYS_EQU_STATUS);
}
},
{
diff --git a/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx b/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
index 47e65ee..ff11e78 100644
--- a/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
+++ b/eims-ui/apps/web-antd/src/views/eims/equ/data.tsx
@@ -7,6 +7,7 @@
import { type FormSchemaGetter, z } from '#/adapter/form';
import { getDictOptions } from '#/utils/dict';
+import { renderDict } from '#/utils/render';
export const querySchema: FormSchemaGetter = () => [
{
@@ -50,26 +51,7 @@
sortable: true,
slots: {
default: ({ row }) => {
- const statu = row.status;
- switch (statu) {
- case '0': {
- return <Tag color="cyan">璇曠敤</Tag>;
- }
- case '1': {
- return <Tag color="green">鍏ュ浐</Tag>;
- }
- case '2': {
- return <Tag color="orange">杩佺Щ</Tag>;
- }
- case '3': {
- return <Tag color="red">鎶ュ簾</Tag>;
- }
- case null: {
- return '';
- }
- // No default
- }
- return '';
+ return renderDict(row.status, DictEnum.SYS_EQU_STATUS);
}
},
minWidth: 80,
diff --git a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/data.tsx b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/data.tsx
index adec6df..6acc5ef 100644
--- a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/data.tsx
+++ b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/data.tsx
@@ -1,18 +1,16 @@
import type { VxeGridProps } from '#/adapter/vxe-table';
import { DictEnum } from '@vben/constants';
-import { getPopupContainer } from '@vben/utils';
-import { Tag } from 'ant-design-vue';
-
-import { type FormSchemaGetter, z } from '#/adapter/form';
+import { type FormSchemaGetter } from '#/adapter/form';
import { getDictOptions } from '#/utils/dict';
+import { renderDict } from '#/utils/render';
export const querySchema: FormSchemaGetter = () => [
{
component: 'Input',
fieldName: 'equCode',
- label: '璁惧缂栫爜'
+ label: '璁惧缂栧彿'
},
{
component: 'Input',
@@ -36,83 +34,73 @@
},
fieldName: 'equStatus',
label: '璁惧鐘舵��'
- },
- {
+ }
+ /* {
component: 'Select',
componentProps: {
options: getDictOptions(DictEnum.EIMS_INVENTORY_DETAIL_STATU)
},
fieldName: 'status',
label: '鐩樼偣鏄庣粏'
- }
+ }*/
];
export const columns: VxeGridProps['columns'] = [
{ type: 'checkbox', width: 60, fixed: 'left' },
{
+ title: '鐩樼偣鐘舵��',
+ field: 'status',
+ sortable: true,
+ minWidth: 100,
+ fixed: 'left',
+ slots: {
+ default: ({ row }) => {
+ return renderDict(row.status, DictEnum.EIMS_INVENTORY_DETAIL_STATU);
+ }
+ }
+ },
+ {
title: '璁惧缂栧彿',
field: 'equCode',
minWidth: 120,
- fixed: 'left',
+ fixed: 'left'
},
{
title: '璁惧鍚嶇О',
field: 'equName',
- minWidth: 100,
- fixed: 'left',
+ minWidth: 100
},
{
title: '璧勪骇缂栧彿',
field: 'equAssetNo',
- sortable: true,
- minWidth: 100,
- },
- {
- title: '浣跨敤閮ㄩ棬',
- field: 'deptName',
- minWidth: 100,
- },
- {
- title: '璁惧绫诲瀷',
- field: 'equTypeName',
- minWidth: 100,
- },
- {
- title: '璁惧浣嶇疆',
- field: 'location',
- minWidth: 100,
+ minWidth: 100
},
{
title: '璁惧鐘舵��',
field: 'equStatus',
sortable: true,
+ minWidth: 100,
slots: {
default: ({ row }) => {
- const statu = row.status;
- switch (statu) {
- case '0': {
- return <Tag color="cyan">璇曠敤</Tag>;
- }
- case '1': {
- return <Tag color="green">鍏ュ浐</Tag>;
- }
- case '2': {
- return <Tag color="orange">杩佺Щ</Tag>;
- }
- case '3': {
- return <Tag color="red">鎶ュ簾</Tag>;
- }
- case null: {
- return '';
- }
- // No default
- }
- return '';
+ return renderDict(row.equStatus, DictEnum.SYS_EQU_STATUS);
}
- },
- minWidth: 80,
+ }
},
-
+ {
+ title: '浣跨敤閮ㄩ棬',
+ field: 'deptName',
+ minWidth: 100
+ },
+ {
+ title: '璁惧绫诲瀷',
+ field: 'equTypeName',
+ minWidth: 100
+ },
+ {
+ title: '璁惧浣嶇疆',
+ field: 'location',
+ minWidth: 100
+ },
{
title: '鐩樼偣浜�',
field: 'inventoryUser',
@@ -135,194 +123,33 @@
show: () => false,
triggerFields: ['']
},
+ fieldName: 'id'
+ },
+ {
+ component: 'Input',
+ dependencies: {
+ show: () => false,
+ triggerFields: ['']
+ },
fieldName: 'equId'
},
{
- component: 'TreeSelect',
- defaultValue: 0,
- fieldName: 'equTypeId',
- label: '璁惧绫诲瀷',
- rules: 'selectRequired'
- },
- {
component: 'Input',
- fieldName: 'equName',
- label: '璁惧鍚嶇О',
- rules: 'required'
- },
- {
- component: 'Input',
- fieldName: 'equCode',
- label: '璁惧缂栫爜',
- help: '璁惧鍞竴缂栫爜'
- },
- {
- component: 'Input',
- fieldName: 'assetNo',
- label: '璧勪骇缂栧彿'
- },
- {
- component: 'Input',
- fieldName: 'modelNo',
- label: '鍨嬪彿'
- },
- {
- component: 'Input',
- fieldName: 'madeIn',
- label: '鍒堕�犲晢'
- },
- {
- component: 'Input',
- fieldName: 'ratedPower',
- label: '棰濆畾鍔熺巼'
- },
- {
- component: 'Input',
- fieldName: 'plateInfo',
- label: '閾墝淇℃伅'
- },
- {
- component: 'DatePicker',
- componentProps: {
- format: 'YYYY-MM-DD',
- showTime: false,
- valueFormat: 'YYYY-MM-DD',
- getPopupContainer
+ dependencies: {
+ show: () => false,
+ triggerFields: ['']
},
- fieldName: 'purchaseDate',
- label: '閲囪喘鏃ユ湡'
+ fieldName: 'inventoryId'
},
{
component: 'RadioGroup',
componentProps: {
buttonStyle: 'solid',
- options: getDictOptions(DictEnum.SYS_EQU_STATUS),
+ options: getDictOptions(DictEnum.EIMS_INVENTORY_DETAIL_STATU),
optionType: 'button'
},
defaultValue: '0',
fieldName: 'status',
label: '鐘舵��'
- },
- {
- component: 'Input',
- fieldName: 'location',
- label: '鎵�鍦ㄥ満鎵�',
- help: `璁惧瀹為檯鎽嗘斁鍦烘墍`
- },
-
- {
- component: 'TreeSelect',
- // 鍦╠rawer閲屾洿鏂� 杩欓噷涓嶉渶瑕侀粯璁ょ殑componentProps
- defaultValue: undefined,
- fieldName: 'deptUsed',
- label: '浣跨敤閮ㄩ棬'
- // rules: 'selectRequired',
- },
- {
- component: 'Select',
- componentProps: {
- allowClear: true,
- showSearch: true,
- getPopupContainer
- },
- fieldName: 'respPerson',
- label: '璐d换浜�',
- help: `璁惧璐熻矗浜猴紝绠$悊浜哄憳`
- },
- {
- component: 'Input',
- fieldName: 'contactPhone',
- label: '鑱旂郴鐢佃瘽',
- defaultValue: undefined,
- rules: z
- .string()
- .regex(/^1[3-9]\d{9}$/, '璇疯緭鍏ユ纭殑鎵嬫満鍙风爜')
- .optional()
- .or(z.literal(''))
- },
- {
- component: 'DatePicker',
- componentProps: {
- format: 'YYYY-MM-DD',
- showTime: false,
- valueFormat: 'YYYY-MM-DD',
- getPopupContainer
- },
- fieldName: 'deployDate',
- label: '姝e紡浣跨敤鏃ユ湡'
- },
- {
- component: 'DatePicker',
- componentProps: {
- format: 'YYYY-MM-DD',
- showTime: false,
- valueFormat: 'YYYY-MM-DD',
- getPopupContainer
- },
- fieldName: 'trialDate',
- label: '寮�濮嬭瘯鐢ㄦ棩鏈�'
- },
- {
- component: 'DatePicker',
- componentProps: {
- format: 'YYYY-MM-DD',
- showTime: false,
- valueFormat: 'YYYY-MM-DD',
- getPopupContainer
- },
- fieldName: 'planAcceptDate',
- label: '璁″垝楠屾敹鏃ユ湡'
- },
- {
- component: 'DatePicker',
- componentProps: {
- format: 'YYYY-MM-DD',
- showTime: false,
- valueFormat: 'YYYY-MM-DD',
- getPopupContainer
- },
- fieldName: 'actualAcceptDate',
- label: '瀹為檯楠屾敹鏃ユ湡'
- },
- {
- component: 'RadioGroup',
- componentProps: {
- buttonStyle: 'solid',
- options: getDictOptions(DictEnum.SYS_NORMAL_DISABLE),
- optionType: 'button'
- },
- defaultValue: '0',
- fieldName: 'importStatus',
- formItemClass: 'col-span-2 lg:col-span-1',
- label: '瀵煎叆鐘舵��'
- },
-
- {
- component: 'Input',
- fieldName: 'serviceLife',
- label: '浣跨敤骞撮檺'
- },
- {
- component: 'RadioGroup',
- componentProps: {
- buttonStyle: 'solid',
- options: getDictOptions(DictEnum.SYS_NORMAL_DISABLE),
- optionType: 'button'
- },
- defaultValue: '0',
- fieldName: 'inventoryFlag',
- formItemClass: 'col-span-2 lg:col-span-1',
- label: '鐩樼偣鏍囧織'
- },
- {
- component: 'DatePicker',
- componentProps: {
- format: 'YYYY-MM-DD',
- showTime: false,
- valueFormat: 'YYYY-MM-DD',
- getPopupContainer
- },
- fieldName: 'inventoryDate',
- label: '涓婃鐩樼偣鏃ユ湡'
}
];
diff --git a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/detail-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/detail-drawer.vue
new file mode 100644
index 0000000..2e8f1fc
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/detail-drawer.vue
@@ -0,0 +1,79 @@
+<script setup lang="ts">
+import { computed, ref } from 'vue';
+
+import { useVbenDrawer } from '@vben/common-ui';
+import { $t } from '@vben/locales';
+import { cloneDeep } from '@vben/utils';
+
+import { useVbenForm } from '#/adapter/form';
+import { addInventoryDetail, getInventoryDetail, updateInventoryDetail } from '#/api/eims/inventory-detail';
+
+import { drawerSchema } from './data';
+
+const emit = defineEmits<{ reload: [] }>();
+
+const isUpdate = ref(false);
+const title = computed(() => {
+ return isUpdate.value ? $t('pages.common.edit') : $t('pages.common.add');
+});
+
+const [BasicForm, formApi] = useVbenForm({
+ commonConfig: {
+ formItemClass: 'col-span-2',
+ componentProps: {
+ class: 'w-full'
+ },
+ labelWidth: 120
+ },
+ schema: drawerSchema(),
+ showDefaultActions: false,
+ wrapperClass: 'grid-cols-2'
+});
+
+const [BasicDrawer, drawerApi] = useVbenDrawer({
+ onCancel: handleCancel,
+ onConfirm: handleConfirm,
+ async onOpenChange(isOpen) {
+ if (!isOpen) {
+ return null;
+ }
+ drawerApi.drawerLoading(true);
+ const { id } = drawerApi.getData() as { id?: number | string };
+ isUpdate.value = !!id;
+ // 鏇存柊 && 璧嬪��
+ if (isUpdate.value && id) {
+ const record = await getInventoryDetail(id);
+ await formApi.setValues(record);
+ }
+ drawerApi.drawerLoading(false);
+ }
+});
+async function handleConfirm() {
+ try {
+ drawerApi.drawerLoading(true);
+ const { valid } = await formApi.validate();
+ if (!valid) {
+ return;
+ }
+ const data = cloneDeep(await formApi.getValues());
+ await (isUpdate.value ? updateInventoryDetail(data) : addInventoryDetail(data));
+ emit('reload');
+ await handleCancel();
+ } catch (error) {
+ console.error(error);
+ } finally {
+ drawerApi.drawerLoading(false);
+ }
+}
+
+async function handleCancel() {
+ drawerApi.close();
+ await formApi.resetForm();
+}
+</script>
+
+<template>
+ <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
+ <BasicForm />
+ </BasicDrawer>
+</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/equ-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/equ-drawer.vue
deleted file mode 100644
index eafef4a..0000000
--- a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/equ-drawer.vue
+++ /dev/null
@@ -1,211 +0,0 @@
-<script setup lang="ts">
-import { computed, ref } from 'vue';
-
-import { useVbenDrawer } from '@vben/common-ui';
-import { $t } from '@vben/locales';
-import { addFullName, cloneDeep, getPopupContainer, listToTree } from '@vben/utils';
-
-import { useVbenForm } from '#/adapter/form';
-import { addEqu, getEqu, updateEqu } from '#/api/eims/equ';
-import { getEquType, listEquType } from '#/api/eims/equ-type';
-import { getDeptTree, userList } from '#/api/system/user';
-
-import { drawerSchema } from './data';
-
-const emit = defineEmits<{ reload: [] }>();
-const typeDisabled = ref(false);
-
-const isUpdate = ref(false);
-const title = computed(() => {
- return isUpdate.value ? $t('pages.common.edit') : $t('pages.common.add');
-});
-
-const [BasicForm, formApi] = useVbenForm({
- commonConfig: {
- formItemClass: 'col-span-2',
- componentProps: {
- class: 'w-full'
- },
- labelWidth: 120
- },
- schema: drawerSchema(),
- showDefaultActions: false,
- wrapperClass: 'grid-cols-2'
-});
-
-const [BasicDrawer, drawerApi] = useVbenDrawer({
- onCancel: handleCancel,
- onConfirm: handleConfirm,
- async onOpenChange(isOpen) {
- if (!isOpen) {
- return null;
- }
- drawerApi.drawerLoading(true);
- const { id } = drawerApi.getData() as { id?: number | string };
- const { typeDisable } = drawerApi.getData() as { typeDisable?: boolean };
- typeDisabled.value = !!typeDisable;
- isUpdate.value = !!id;
- // 鍒濆鍖�
- await setupDeptSelect();
- // 鏇存柊 && 璧嬪��
- if (isUpdate.value && id) {
- const record = await getEqu(id);
- await formApi.setValues(record);
- if(isUpdate.value && record.deptUsed){
- await setupUserOptions(record.deptUsed)
- }
-
- }
-
- // 鍔犺浇璁惧绫诲瀷鏍戦�夋嫨
- await setupEquTypeSelect();
- if (id) {
- await formApi.setFieldValue('parentId', id);
- if (isUpdate.value && id) {
- const record = await getEquType(id);
- await formApi.setValues(record);
- }
- }
- drawerApi.drawerLoading(false);
- }
-});
-
-
-async function setupEquTypeSelect() {
- // status-0 鍙煡璇㈡湭鍋滅敤璁惧
- const equArray = await listEquType({ status: 0 });
- // support i18n
- equArray.forEach((item) => {
- item.typeName = $t(item.typeName);
- });
- const equTree = listToTree(equArray, { id: 'equTypeId', pid: 'parentId' });
- const fullEquTree = [
- {
- equTypeId: 0,
- typeName: $t('menu.root'),
- children: equTree,
- },
- ];
- addFullName(fullEquTree, 'typeName', ' / ');
- formApi.updateSchema([
- {
- componentProps: {
- fieldNames: {
- label: 'typeName',
- value: 'equTypeId',
- },
- getPopupContainer,
- // 璁剧疆寮圭獥婊氬姩楂樺害 榛樿256
- listHeight: 300,
- showSearch: true,
- treeData: fullEquTree,
- disabled: typeDisabled.value,
- treeDefaultExpandAll: false,
- // 榛樿灞曞紑鐨勬爲鑺傜偣
- treeDefaultExpandedKeys: [0],
- treeLine: { showLeafIcon: false },
- // 绛涢�夌殑瀛楁
- treeNodeFilterProp: 'typeName',
- treeNodeLabelProp: 'fullName',
- },
- fieldName: 'equTypeId',
- },
- ]);
-}
-
-/**
- * 鐢ㄦ埛鐨勫姞杞�
- */
-async function setupUserOptions(deptId: any) {
- const params = { deptId };
- const userPageResult = await userList({
- pageNum: 1,
- pageSize: 500,
- ...params
- });
- const options = userPageResult.rows.map((item) => ({
- label: item.nickName || item.userName,
- value: item.userId
- }));
- // 绛涢��
- const filterOption = (input: string, option: any) => {
- return option.label.toLowerCase().includes(input.toLowerCase());
- };
-
- const placeholder = options.length > 0 ? '璇烽�夋嫨' : '璇ラ儴闂ㄤ笅鏆傛棤鐢ㄦ埛';
- formApi.updateSchema([
- {
- componentProps: { options, placeholder ,filterOption },
- fieldName: 'respPerson'
- }
- ]);
-}
-
-/**
- * 鍒濆鍖栭儴闂ㄩ�夋嫨
- */
-async function setupDeptSelect() {
- // updateSchema
- const deptTree = await getDeptTree();
- // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊� 鍗崇埗鑺傜偣 / 瀛愯妭鐐�
- addFullName(deptTree, 'label', ' / ');
- formApi.updateSchema([
- {
- componentProps: (formModel) => ({
- class: 'w-full',
- fieldNames: {
- key: 'id',
- value: 'id',
- children: 'children'
- },
- getPopupContainer,
- async onSelect(deptId: number | string) {
- /** 鏍规嵁閮ㄩ棬ID鍔犺浇鐢ㄦ埛 */
- await setupUserOptions(deptId);
- /** 鍙樺寲鍚庨渶瑕侀噸鏂伴�夋嫨鐢ㄦ埛 */
- formModel.respPerson = undefined;
- },
- placeholder: '璇烽�夋嫨',
- showSearch: true,
- treeData: deptTree,
- treeDefaultExpandAll: true,
- treeLine: { showLeafIcon: false },
- // 绛涢�夌殑瀛楁
- treeNodeFilterProp: 'label',
- // 閫変腑鍚庢樉绀哄湪杈撳叆妗嗙殑鍊�
- treeNodeLabelProp: 'fullName'
- }),
- fieldName: 'deptUsed'
- }
- ]);
-}
-
-async function handleConfirm() {
- try {
- drawerApi.drawerLoading(true);
- const { valid } = await formApi.validate();
- if (!valid) {
- return;
- }
- const data = cloneDeep(await formApi.getValues());
- await (isUpdate.value ? updateEqu(data) : addEqu(data));
- emit('reload');
- await handleCancel();
- } catch (error) {
- console.error(error);
- } finally {
- drawerApi.drawerLoading(false);
- }
-}
-
-async function handleCancel() {
- drawerApi.close();
- await formApi.resetForm();
-}
-</script>
-
-<template>
- <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
- <BasicForm />
- </BasicDrawer>
-</template>
diff --git a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/index.vue b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/index.vue
index 85ce23f..d8fdaae 100644
--- a/eims-ui/apps/web-antd/src/views/eims/inventory-detail/index.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/inventory-detail/index.vue
@@ -1,9 +1,10 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
-import { ref } from 'vue';
-import { useRoute, useRouter } from 'vue-router';
+import { computed, nextTick, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import { useAccess } from '@vben/access';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { getVxePopupContainer } from '@vben/utils';
@@ -15,7 +16,7 @@
import { commonDownloadExcel } from '#/utils/file/download';
import { columns, querySchema } from './data';
-import equDrawer from './equ-drawer.vue';
+import detailDrawer from './detail-drawer.vue';
import EquTypeTree from './equ-type-tree.vue';
const route = useRoute();
@@ -23,6 +24,12 @@
// 宸﹁竟閮ㄩ棬鐢�
const selectTypeId = ref<string[]>([]);
+// 宸茬洏鐐�
+const check = ref<string>('宸茬洏');
+// 鏈洏鐐�
+const noCheck = ref<string>('鏈洏');
+// 鏌ヨ娣诲姞鐩樼偣鏍囪杩囨护
+const checkFilter = ref<string>();
const formOptions: VbenFormProps = {
commonConfig: {
@@ -35,6 +42,7 @@
wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
handleReset: async () => {
selectTypeId.value = [];
+ checkFilter.value = undefined;
// eslint-disable-next-line no-use-before-define
const { formApi, reload } = tableApi;
await formApi.resetForm();
@@ -58,7 +66,12 @@
columns,
height: 'auto',
keepSource: true,
- pagerConfig: {},
+ pagerConfig: {
+ // 榛樿鏉℃暟
+ pageSize: 1000,
+ // 鍒嗛〉鍙�夋潯鏁�
+ pageSizes: [1000, 2000, 3000, 4000, 5000]
+ },
proxyConfig: {
ajax: {
query: async ({ page }, formValues = {}) => {
@@ -68,10 +81,36 @@
} else {
Reflect.deleteProperty(formValues, 'equTypeId');
}
+ // 鏄惁鐩樼偣
+ if (checkFilter.value === '0' || checkFilter.value === '1') {
+ formValues.status = checkFilter.value;
+ } else {
+ Reflect.deleteProperty(formValues, 'status');
+ }
return await listInventoryDetail({
pageNum: page.currentPage,
pageSize: page.pageSize,
+ inventoryId,
...formValues
+ });
+ },
+ querySuccess: () => {
+ nextTick(() => {
+ // 杩囨护宸茬洏鍜屾湭鐩樼殑鏁版嵁
+ // eslint-disable-next-line no-use-before-define
+ const data = tableApi.grid.getData();
+ const data0 = data.filter((item) => {
+ return item.status === '' || item.status === null || item.status === '0';
+ });
+ if (data0 !== null && data0.length > 0) {
+ noCheck.value = `鏈洏(${data0.length})`;
+ }
+ const data1 = data.filter((item) => {
+ return item.status !== '' && item.status !== null && item.status === '1';
+ });
+ if (data1 !== null && data1.length > 0) {
+ check.value = `宸茬洏(${data1.length})`;
+ }
});
}
}
@@ -97,18 +136,13 @@
}
});
-const [EquDrawer, equDrawerApi] = useVbenDrawer({
- connectedComponent: equDrawer
+const [DetailDrawer, detailDrawerApi] = useVbenDrawer({
+ connectedComponent: detailDrawer
});
-function handleAdd() {
- equDrawerApi.setData({});
- equDrawerApi.open();
-}
-
async function handleEdit(record: Recordable<any>) {
- equDrawerApi.setData({ id: record.equId });
- equDrawerApi.open();
+ detailDrawerApi.setData({ id: record.id });
+ detailDrawerApi.open();
}
async function handleDelete(row: Recordable<any>) {
@@ -129,7 +163,6 @@
}
});
}
-
function handleDownloadExcel() {
commonDownloadExcel(inventoryDetailExport, '鐩樼偣鏄庣粏', tableApi.formApi.form.values, {
fieldMappingTime: formOptions.fieldMappingTime
@@ -145,11 +178,12 @@
const inventoryFlag = row.inventoryFlag === null || row.inventoryFlag;
return inventoryFlag ? '鏈洏鐐�' : '宸茬洏鐐�';
}
-
-const router = useRouter();
-function handleDetail(record: Recordable<any>) {
- router.push(`/equ/detail/${record.id}`);
+function handleQuery(isChecked: string) {
+ checkFilter.value = isChecked;
+ tableApi.query();
}
+const { hasAccessByRoles } = useAccess();
+const isSuperAdmin = computed(() => hasAccessByRoles(['superadmin']));
</script>
<template>
@@ -159,34 +193,30 @@
<BasicTable class="flex-1 overflow-hidden" table-title="鐩樼偣鏄庣粏鍒楄〃">
<template #toolbar-tools>
<Space>
+ <a-button @click="handleQuery('0')">{{ noCheck }}</a-button>
+ <a-button type="primary" @click="handleQuery('1')"> {{ check }}</a-button>
<a-button v-access:code="['eims:inventory:export']" @click="handleDownloadExcel">
{{ $t('pages.common.export') }}
</a-button>
- <a-button :disabled="!vxeCheckboxChecked(tableApi)" danger type="primary" v-access:code="['eims:inventory:remove']" @click="handleMultiDelete">
+ <a-button
+ :disabled="!vxeCheckboxChecked(tableApi) || !isSuperAdmin"
+ danger
+ type="primary"
+ v-access:code="['eims:inventory:remove']"
+ @click="handleMultiDelete"
+ >
{{ $t('pages.common.delete') }}
</a-button>
- <a-button type="primary" v-access:code="['eims:inventory:add']" @click="handleAdd">
- {{ $t('pages.common.add') }}
- </a-button>
- </Space>
- </template>
-
- <template #equName="{ row }">
- <Space>
- <a-button type="link" @click="handleDetail(row)"> {{ row.equName }}</a-button>
</Space>
</template>
<template #action="{ row }">
<Space>
- <ghost-button v-access:code="['eims:inventory:edit']" @click.stop="handleEdit(row)">
+ <ghost-button :disabled="!isSuperAdmin" v-access:code="['eims:inventory:edit']" @click.stop="handleEdit(row)">
{{ $t('pages.common.edit') }}
</ghost-button>
- <ghost-button v-if="row.menuType !== 'F'" class="btn-success" v-access:code="['eims:inventory:list']" @click="handleDetail(row)">
- {{ $t('pages.common.info') }}
- </ghost-button>
<Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�" @confirm="handleDelete(row)">
- <ghost-button danger v-access:code="['eims:inventory:remove']" @click.stop="">
+ <ghost-button :disabled="!isSuperAdmin" danger v-access:code="['eims:inventory:remove']" @click.stop="">
{{ $t('pages.common.delete') }}
</ghost-button>
</Popconfirm>
@@ -202,6 +232,6 @@
</template>
</BasicTable>
</div>
- <EquDrawer @reload="tableApi.query()" />
+ <DetailDrawer @reload="tableApi.query()" />
</Page>
</template>
diff --git a/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts b/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
index bcad996..529282a 100644
--- a/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
+++ b/eims-ui/packages/@core/base/shared/src/constants/dict-enum.ts
@@ -1,6 +1,6 @@
export enum DictEnum {
- EIMS_INVENTORY_STATU = 'inventory_statu', // 璁惧鐩樼偣鐘舵��
EIMS_INVENTORY_DETAIL_STATU = 'inventory_detail_statu', // 璁惧鐩樼偣鐘舵��
+ EIMS_INVENTORY_STATU = 'inventory_statu', // 璁惧鐩樼偣鐘舵��
SYS_COMMON_STATUS = 'sys_common_status',
SYS_DEVICE_TYPE = 'sys_device_type', // 璁惧绫诲瀷
SYS_EQU_STATUS = 'sys_equ_status', // 璁惧鐘舵��
@@ -8,7 +8,7 @@
SYS_NORMAL_DISABLE = 'sys_normal_disable',
SYS_NOTICE_STATUS = 'sys_notice_status', // 閫氱煡鐘舵��
SYS_NOTICE_TYPE = 'sys_notice_type', // 閫氱煡绫诲瀷
- SYS_OPER_TYPE = 'sys_oper_type', // 鎿嶄綔绫诲瀷
+ SYS_OPER_TYPE = 'sys_oper_type', // 鎿嶄綔绫诲瀷S
SYS_OSS_ACCESS_POLICY = 'oss_access_policy', // oss鏉冮檺妗剁被鍨�
SYS_SHOW_HIDE = 'sys_show_hide', // 鏄剧ず鐘舵��
SYS_USER_SEX = 'sys_user_sex', // 鎬у埆
diff --git a/eims-ui/packages/@core/preferences/src/config.ts b/eims-ui/packages/@core/preferences/src/config.ts
index 8a3d191..b3616b9 100644
--- a/eims-ui/packages/@core/preferences/src/config.ts
+++ b/eims-ui/packages/@core/preferences/src/config.ts
@@ -19,7 +19,7 @@
layout: 'sidebar-nav',
locale: 'zh-CN',
loginExpiredMode: 'page',
- name: 'Vben Admin',
+ name: 'eims',
preferencesButtonPosition: 'auto',
watermark: false,
},
@@ -31,8 +31,8 @@
styleType: 'normal',
},
copyright: {
- companyName: 'Vben',
- companySiteLink: 'https://www.vben.pro',
+ companyName: '涓婃捣鍏版郸',
+ companySiteLink: 'https://shlanpu.cn/',
date: '2024',
enable: true,
icp: '',
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInventoryDetailController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInventoryDetailController.java
index cddc0b9..611d31f 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInventoryDetailController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInventoryDetailController.java
@@ -39,7 +39,7 @@
/**
* 鏌ヨ鐩樼偣鏄庣粏鍒楄〃
*/
- @SaCheckPermission("eims:inventoryDetail:list")
+ @SaCheckPermission("eims:inventory:list")
@GetMapping("/list")
public TableDataInfo<EimsInventoryDetailVo> list(EimsInventoryDetailBo bo, PageQuery pageQuery) {
//return eimsInventoryDetailService.queryPageList(bo, pageQuery);
@@ -49,7 +49,7 @@
/**
* 瀵煎嚭鐩樼偣鏄庣粏鍒楄〃
*/
- @SaCheckPermission("eims:inventoryDetail:export")
+ @SaCheckPermission("eims:inventory:export")
@Log(title = "鐩樼偣鏄庣粏", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(EimsInventoryDetailBo bo, HttpServletResponse response) {
@@ -62,7 +62,7 @@
*
* @param id 涓婚敭
*/
- @SaCheckPermission("eims:inventoryDetail:query")
+ @SaCheckPermission("eims:inventory:query")
@GetMapping("/{id}")
public R<EimsInventoryDetailVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
@PathVariable Long id) {
@@ -72,7 +72,7 @@
/**
* 鏂板鐩樼偣鏄庣粏
*/
- @SaCheckPermission("eims:inventoryDetail:add")
+ @SaCheckPermission("eims:inventory:add")
@Log(title = "鐩樼偣鏄庣粏", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
@@ -83,7 +83,7 @@
/**
* 淇敼鐩樼偣鏄庣粏
*/
- @SaCheckPermission("eims:inventoryDetail:edit")
+ @SaCheckPermission("eims:inventory:edit")
@Log(title = "鐩樼偣鏄庣粏", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
@@ -96,7 +96,7 @@
*
* @param ids 涓婚敭涓�
*/
- @SaCheckPermission("eims:inventoryDetail:remove")
+ @SaCheckPermission("eims:inventory:remove")
@Log(title = "鐩樼偣鏄庣粏", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInventoryDetailBo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInventoryDetailBo.java
index 0d454c2..fac9f73 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInventoryDetailBo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsInventoryDetailBo.java
@@ -59,6 +59,8 @@
private String deptName;
//璁惧绫诲瀷鍚嶇О
private String equTypeName;
+ //璁惧绫诲瀷
+ private Long equTypeId;
//璁惧鎵�鍦ㄤ綅缃�
private String location;
//璁惧鐘舵��
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInventoryDetailServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInventoryDetailServiceImpl.java
index 16528cb..f0a9401 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInventoryDetailServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInventoryDetailServiceImpl.java
@@ -9,6 +9,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
+import org.dromara.eims.domain.EimsEqu;
+import org.dromara.eims.domain.EimsEquType;
+import org.dromara.eims.domain.vo.EimsEquTypeVo;
+import org.dromara.eims.mapper.EimsEquTypeMapper;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsInventoryDetailBo;
import org.dromara.eims.domain.vo.EimsInventoryDetailVo;
@@ -16,6 +20,7 @@
import org.dromara.eims.mapper.EimsInventoryDetailMapper;
import org.dromara.eims.service.IEimsInventoryDetailService;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@@ -31,6 +36,7 @@
public class EimsInventoryDetailServiceImpl implements IEimsInventoryDetailService {
private final EimsInventoryDetailMapper baseMapper;
+ private final EimsEquTypeMapper equTypeMapper;
/**
* 鏌ヨ鐩樼偣鏄庣粏
@@ -82,10 +88,49 @@
qw.eq(StringUtils.isNotBlank(bo.getStatus()), "a.status", bo.getStatus());
qw.like(StringUtils.isNotBlank(bo.getEquName()), "c.equ_name", bo.getEquName());
+ qw.like(StringUtils.isNotBlank(bo.getEquCode()), "c.equ_code", bo.getEquCode());
+ qw.like(StringUtils.isNotBlank(bo.getEquAssetNo()), "c.asset_no", bo.getEquAssetNo());
+ qw.like(StringUtils.isNotBlank(bo.getLocation()), "c.location", bo.getLocation());
+ qw.like(StringUtils.isNotBlank(bo.getEquStatus()), "c.status", bo.getEquStatus());
+ /**
+ * equTypeId = 0 鏃舵煡璇㈡墍鏈夎澶囷紙榛樿鏍圭洰褰昳d涓�0锛岃瑙丼ysEquTypeServiceImpl涓璼electEquTypeTreeList锛�
+ * equTypeId 涓哄叾浠栧�兼椂鍙煡褰撳墠璁惧绫诲瀷id鍜屽悗浠h澶囩被鍨媔d
+ */
+ if (bo.getEquTypeId() != null && bo.getEquTypeId() > 0) {
+ List<Long> allDescendantIds = getAllDescendantIds(bo.getEquTypeId());
+ qw.in("c.equ_type_id", allDescendantIds);
+ }
+
return qw;
}
/**
+ * 鏍规嵁id锛岃幏鍙栨墍鏈夊悗浠d
+ * @param rootId
+ * @return
+ */
+ public List<Long> getAllDescendantIds(Long rootId) {
+ List<Long> result = new ArrayList<>();
+ result.add(rootId);
+ collectDescendants(rootId, result);
+ return result;
+ }
+
+ private void collectDescendants(Long currentId, List<Long> collector) {
+ QueryWrapper<EimsEquType> equTypeWrapper = new QueryWrapper<>();
+ equTypeWrapper.lambda().eq(EimsEquType::getParentId, currentId);
+
+ List<EimsEquTypeVo> children = equTypeMapper.selectVoList(equTypeWrapper);
+ if (children != null && !children.isEmpty()) {
+ for (EimsEquTypeVo child : children) {
+ Long childId = child.getEquTypeId();
+ collector.add(childId);
+ collectDescendants(childId, collector);
+ }
+ }
+ }
+
+ /**
* 鏂板鐩樼偣鏄庣粏
*
* @param bo 鐩樼偣鏄庣粏
diff --git a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInventoryDetailMapper.xml b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInventoryDetailMapper.xml
index a97f8f8..b1667ae 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInventoryDetailMapper.xml
+++ b/eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsInventoryDetailMapper.xml
@@ -7,23 +7,24 @@
</resultMap>
<select id="selectInventoryDetailList" resultMap="EimsInventoryDetailResult">
- SELECT c.equ_code equCode,
+ SELECT a.id id, c.equ_code equCode,
c.equ_name equName,
c.asset_no equAssetNo,
e.dept_name deptName,
d.type_name equTypeName,
c.location location,
+ a.`status` status,
b.`status` inventoryStatus,
c.`status` equStatus,
d.`status` typeStatus,
- b.inventory_user inventoryUser
+ f.nick_name inventoryUser
FROM eims_inventory_detail a
- JOIN eims_inventory b on a.inventory_id = b.inventory_id
- JOIN eims_equ c on a.equ_id = c.equ_id
- JOIN eims_equ_type d on c.equ_type_id = d.equ_type_id
- JOIN sys_dept e on e.dept_id = c.dept_used
+ LEFT JOIN eims_inventory b on a.inventory_id = b.inventory_id
+ LEFT JOIN eims_equ c on a.equ_id = c.equ_id
+ LEFT JOIN eims_equ_type d on c.equ_type_id = d.equ_type_id
+ LEFT JOIN sys_dept e on e.dept_id = c.dept_used
+ LEFT JOIN sys_user f on b.inventory_user = f.user_id
${ew.getCustomSqlSegment}
</select>
-
</mapper>
--
Gitblit v1.9.3