| | |
| | | |
| | | import { type FormSchemaGetter } from '#/adapter/form'; |
| | | import { getDictOptions } from '#/utils/dict'; |
| | | import { renderDict } from '#/utils/render'; |
| | | |
| | | export const querySchema: FormSchemaGetter = () => [ |
| | | { |
| | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | 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); |
| | | } |
| | | }, |
| | | { |
| | |
| | | |
| | | import { type FormSchemaGetter, z } from '#/adapter/form'; |
| | | import { getDictOptions } from '#/utils/dict'; |
| | | import { renderDict } from '#/utils/render'; |
| | | |
| | | export const querySchema: FormSchemaGetter = () => [ |
| | | { |
| | |
| | | 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, |
| | |
| | | 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', |
| | |
| | | }, |
| | | 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>; |
| | | return renderDict(row.equStatus, DictEnum.SYS_EQU_STATUS); |
| | | } |
| | | 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 ''; |
| | | } |
| | | }, |
| | | minWidth: 80, |
| | | { |
| | | title: '使ç¨é¨é¨', |
| | | field: 'deptName', |
| | | minWidth: 100 |
| | | }, |
| | | |
| | | { |
| | | title: '设å¤ç±»å', |
| | | field: 'equTypeName', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | title: '设å¤ä½ç½®', |
| | | field: 'location', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | title: 'çç¹äºº', |
| | | field: 'inventoryUser', |
| | |
| | | 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' |
| | | dependencies: { |
| | | show: () => false, |
| | | triggerFields: [''] |
| | | }, |
| | | { |
| | | 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 |
| | | }, |
| | | 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', |
| | | // å¨draweréæ´æ° è¿éä¸éè¦é»è®¤çcomponentProps |
| | | defaultValue: undefined, |
| | | fieldName: 'deptUsed', |
| | | label: '使ç¨é¨é¨' |
| | | // rules: 'selectRequired', |
| | | }, |
| | | { |
| | | component: 'Select', |
| | | componentProps: { |
| | | allowClear: true, |
| | | showSearch: true, |
| | | getPopupContainer |
| | | }, |
| | | fieldName: 'respPerson', |
| | | label: '责任人', |
| | | 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: 'æ£å¼ä½¿ç¨æ¥æ' |
| | | }, |
| | | { |
| | | 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: '䏿¬¡çç¹æ¥æ' |
| | | } |
| | | ]; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | <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'; |
| | |
| | | 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(); |
| | |
| | | |
| | | // 左边é¨é¨ç¨ |
| | | const selectTypeId = ref<string[]>([]); |
| | | // å·²çç¹ |
| | | const check = ref<string>('å·²ç'); |
| | | // æªçç¹ |
| | | const noCheck = ref<string>('æªç'); |
| | | // æ¥è¯¢æ·»å çç¹æ è®°è¿æ»¤ |
| | | const checkFilter = ref<string>(); |
| | | |
| | | const formOptions: VbenFormProps = { |
| | | commonConfig: { |
| | |
| | | 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(); |
| | |
| | | columns, |
| | | height: 'auto', |
| | | keepSource: true, |
| | | pagerConfig: {}, |
| | | pagerConfig: { |
| | | // é»è®¤æ¡æ° |
| | | pageSize: 1000, |
| | | // å页å¯éæ¡æ° |
| | | pageSizes: [1000, 2000, 3000, 4000, 5000] |
| | | }, |
| | | proxyConfig: { |
| | | ajax: { |
| | | query: async ({ page }, formValues = {}) => { |
| | |
| | | } 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})`; |
| | | } |
| | | }); |
| | | } |
| | | } |
| | |
| | | } |
| | | }); |
| | | |
| | | 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>) { |
| | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleDownloadExcel() { |
| | | commonDownloadExcel(inventoryDetailExport, 'çç¹æç»', tableApi.formApi.form.values, { |
| | | fieldMappingTime: formOptions.fieldMappingTime |
| | |
| | | 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> |
| | |
| | | <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> |
| | |
| | | </template> |
| | | </BasicTable> |
| | | </div> |
| | | <EquDrawer @reload="tableApi.query()" /> |
| | | <DetailDrawer @reload="tableApi.query()" /> |
| | | </Page> |
| | | </template> |
| | |
| | | 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', // 设å¤ç¶æ |
| | |
| | | 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', // æ§å« |
| | |
| | | layout: 'sidebar-nav', |
| | | locale: 'zh-CN', |
| | | loginExpiredMode: 'page', |
| | | name: 'Vben Admin', |
| | | name: 'eims', |
| | | preferencesButtonPosition: 'auto', |
| | | watermark: false, |
| | | }, |
| | |
| | | styleType: 'normal', |
| | | }, |
| | | copyright: { |
| | | companyName: 'Vben', |
| | | companySiteLink: 'https://www.vben.pro', |
| | | companyName: '䏿µ·å
°æµ¦', |
| | | companySiteLink: 'https://shlanpu.cn/', |
| | | date: '2024', |
| | | enable: true, |
| | | icp: '', |
| | |
| | | /** |
| | | * æ¥è¯¢çç¹æç»å表 |
| | | */ |
| | | @SaCheckPermission("eims:inventoryDetail:list") |
| | | @SaCheckPermission("eims:inventory:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<EimsInventoryDetailVo> list(EimsInventoryDetailBo bo, PageQuery pageQuery) { |
| | | //return eimsInventoryDetailService.queryPageList(bo, pageQuery); |
| | |
| | | /** |
| | | * 导åºçç¹æç»å表 |
| | | */ |
| | | @SaCheckPermission("eims:inventoryDetail:export") |
| | | @SaCheckPermission("eims:inventory:export") |
| | | @Log(title = "çç¹æç»", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(EimsInventoryDetailBo bo, HttpServletResponse response) { |
| | |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("eims:inventoryDetail:query") |
| | | @SaCheckPermission("eims:inventory:query") |
| | | @GetMapping("/{id}") |
| | | public R<EimsInventoryDetailVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable Long id) { |
| | |
| | | /** |
| | | * æ°å¢çç¹æç» |
| | | */ |
| | | @SaCheckPermission("eims:inventoryDetail:add") |
| | | @SaCheckPermission("eims:inventory:add") |
| | | @Log(title = "çç¹æç»", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | |
| | | /** |
| | | * ä¿®æ¹çç¹æç» |
| | | */ |
| | | @SaCheckPermission("eims:inventoryDetail:edit") |
| | | @SaCheckPermission("eims:inventory:edit") |
| | | @Log(title = "çç¹æç»", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("eims:inventoryDetail:remove") |
| | | @SaCheckPermission("eims:inventory:remove") |
| | | @Log(title = "çç¹æç»", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | |
| | | private String deptName; |
| | | //设å¤ç±»ååç§° |
| | | private String equTypeName; |
| | | //设å¤ç±»å |
| | | private Long equTypeId; |
| | | //è®¾å¤æå¨ä½ç½® |
| | | private String location; |
| | | //设å¤ç¶æ |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | public class EimsInventoryDetailServiceImpl implements IEimsInventoryDetailService { |
| | | |
| | | private final EimsInventoryDetailMapper baseMapper; |
| | | private final EimsEquTypeMapper equTypeMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢çç¹æç» |
| | |
| | | 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 æ¶æ¥è¯¢ææè®¾å¤ï¼é»è®¤æ ¹ç®å½id为0ï¼è¯¦è§SysEquTypeServiceImplä¸selectEquTypeTreeListï¼ |
| | | * equTypeId 为å
¶ä»å¼æ¶åªæ¥å½å设å¤ç±»åidåå代设å¤ç±»åid |
| | | */ |
| | | if (bo.getEquTypeId() != null && bo.getEquTypeId() > 0) { |
| | | List<Long> allDescendantIds = getAllDescendantIds(bo.getEquTypeId()); |
| | | qw.in("c.equ_type_id", allDescendantIds); |
| | | } |
| | | |
| | | return qw; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®idï¼è·åææå代id |
| | | * @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 çç¹æç» |
| | |
| | | </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> |