¶Ô±ÈÐÂÎļþ |
| | |
| | | export const columns = [ |
| | | { |
| | | type: 'seq', |
| | | width: 60, |
| | | title: 'åºå·', |
| | | }, |
| | | { |
| | | field: 'materialNo', |
| | | title: 'ç©æç¼å·', |
| | | }, |
| | | { |
| | | field: 'materialName', |
| | | title: 'ç©æåç§°', |
| | | }, |
| | | { |
| | | field: 'placeNo', |
| | | title: 'åºä½ç¼å·', |
| | | }, |
| | | { |
| | | field: 'placeStatusDesc', |
| | | title: 'åºä½ç¶æ', |
| | | }, |
| | | { |
| | | field: 'containerNo', |
| | | title: '容å¨ç¼å·', |
| | | }, |
| | | { |
| | | field: 'stockNumber', |
| | | title: 'åºåæ°é', |
| | | }, |
| | | { |
| | | field: 'materialBatch', |
| | | title: 'ç©ææ¹æ¬¡', |
| | | }, |
| | | { |
| | | field: 'materialModel', |
| | | title: 'åå·', |
| | | }, |
| | | { |
| | | field: 'areaName', |
| | | title: 'æå±åºåº', |
| | | }, |
| | | { |
| | | field: 'checkStatusDesc', |
| | | title: 'æ£éªç¶æ', |
| | | }, |
| | | { |
| | | field: 'inStockTime', |
| | | title: 'å
¥åºæ¶é´', |
| | | width: 180, |
| | | }, |
| | | { |
| | | field: 'isLockDesc', |
| | | title: 'éå®ç¶æ', |
| | | }, |
| | | { |
| | | field: 'remark', |
| | | title: '夿³¨', |
| | | }, |
| | | ] |
¶Ô±ÈÐÂÎļþ |
| | |
| | | .wmsMaterialStockContent { |
| | | width: 100%; |
| | | height: 80%; |
| | | |
| | | .wmsMaterialStockList { |
| | | width: 100%; |
| | | height: calc(100% - 70px); |
| | | } |
| | | .headerContent { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 43px; |
| | | } |
| | | .header { |
| | | margin-bottom: 12px; |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | } |
| | | |
| | | .tagBox { |
| | | width: auto; |
| | | min-width: 80px; |
| | | height: 24px; |
| | | background: #ffffff; |
| | | border-radius: 19px 19px 19px 19px; |
| | | opacity: 1; |
| | | border: 1px dashed #bcc4cc; |
| | | width: 50px; |
| | | height: 20px; |
| | | font-size: 14px; |
| | | font-family: PingFang SC, PingFang SC; |
| | | font-weight: 400; |
| | | color: #5a84ff; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | // cursor: pointer; |
| | | } |
| | | |
| | | .group { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .groupTable { |
| | | width: 100%; |
| | | } |
| | | |
| | | .overBox { |
| | | width: 100%; |
| | | height: calc(100% - 20px); |
| | | overflow: auto; |
| | | :global(.cs-collapse-item__header) { |
| | | background-color: #f1f1f1; |
| | | padding: 0 20px; |
| | | height: 35px; |
| | | font-size: 16px; |
| | | font-family: PingFang SC, PingFang SC; |
| | | font-weight: 500; |
| | | } |
| | | :global(.cs-collapse-item__content) { |
| | | padding-bottom: 0px; |
| | | } |
| | | } |
| | | .groupHeader { |
| | | width: 100%; |
| | | height: 30px; |
| | | background: #ccc; |
| | | } |
| | | |
| | | .hideBlock { |
| | | display: none; |
| | | } |
| | | .queryForm { |
| | | padding: 10px; |
| | | background: #f5f7fa; |
| | | margin-bottom: 0px; |
| | | border-radius: 4px; |
| | | |
| | | .el-form-item { |
| | | margin-right: 20px; |
| | | margin-bottom: 0; |
| | | |
| | | // ç»ä¸è¾å
¥æ¡åéæ©æ¡ç宽度 |
| | | .el-input, .el-select { |
| | | width: 200px; // 设置ç»ä¸ç宽度 |
| | | } |
| | | |
| | | // éæ©æ¡å
é¨è¾å
¥æ¡æ ·å¼ |
| | | .el-select .el-input__wrapper { |
| | | height: 32px; // ä¸è¾å
¥æ¡é«åº¦ä¸è´ |
| | | padding: 1px 11px; // ä¸è¾å
¥æ¡å
è¾¹è·ä¸è´ |
| | | } |
| | | |
| | | // æ¥æéæ©å¨å®½åº¦ |
| | | .el-date-editor { |
| | | width: 220px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 妿éè¦æ´ç²¾ç¡®çæ§å¶ï¼å¯ä»¥åç¬è®¾ç½® |
| | | .formItem { |
| | | width: 200px; |
| | | |
| | | &.el-input, &.el-select { |
| | | width: 100%; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { computed, defineComponent, onMounted, reactive, ref } from 'vue' |
| | | import type { Ref } from 'vue' |
| | | import BaseTable from '@/components/Table/Table' |
| | | import styles from './WmsMaterialStockDetail.module.scss' |
| | | import { useWmsMaterialStock } from '../../../Controllers/WmsMaterialStock' |
| | | import IconButton from '@/components/IconButton/IconButton' |
| | | import WmsMaterialStockDrawer from '../Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer' |
| | | import Search from '@/components/Search/Search' |
| | | import { columns } from './Config' |
| | | import TdButton from '@/components/TdButton/TdButton' |
| | | import { vPermission } from '@/libs/Permission/Permission' |
| | | import dayjs from 'dayjs' |
| | | import { |
| | | ElDatePicker, |
| | | ElForm, |
| | | ElFormItem, |
| | | ElInput, |
| | | ElOption, |
| | | ElSelect, |
| | | } from 'element-plus' |
| | | import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer' |
| | | |
| | | interface RenderTableType { |
| | | url?: string |
| | | dataSource: Ref<any[]> |
| | | isDrag?: boolean |
| | | isChecked?: boolean |
| | | isHidePagination?: boolean |
| | | params?: Record<string, any> |
| | | autoHeight?: boolean |
| | | } |
| | | |
| | | export default defineComponent({ |
| | | name: 'WmsMaterialStock', |
| | | directives: { |
| | | permission: vPermission, |
| | | }, |
| | | setup(props, ctx) { |
| | | const { |
| | | dataSource, |
| | | contextMenu, |
| | | dialogConfig, |
| | | tableRef, |
| | | current, |
| | | search, |
| | | sort, |
| | | headers, |
| | | onError, |
| | | onSearch, |
| | | onRowClick, |
| | | onConfirmWmsMaterialStock, |
| | | onCheck, |
| | | onAddWmsMaterialStock, |
| | | onExport, |
| | | openDetail, |
| | | onSuccess, |
| | | onBeforeUpload, |
| | | } = useWmsMaterialStock(props, ctx) |
| | | |
| | | // æ°å¢çæ¥è¯¢æ¡ä»¶ |
| | | const queryForm = ref({ |
| | | containerNo: '', |
| | | materialNo: '', |
| | | materialName: '', |
| | | containerType: '', |
| | | containerStatus: '', |
| | | storageTypeNo: 1, |
| | | placeStatus: '', |
| | | placeNo: '', |
| | | isLock: '', |
| | | emptyContainer: '', |
| | | dateRange: [], |
| | | filter: '', |
| | | }) |
| | | |
| | | const queryParams = computed(() => ({ |
| | | ...queryForm.value, |
| | | containerType: queryForm.value.containerType || '', // å¤ç䏿 |
| | | containerStatus: queryForm.value.containerStatus || '', |
| | | storageTypeNo: queryForm.value.storageTypeNo || 1, // å¤ç䏿 |
| | | placeStatus: queryForm.value.placeStatus || '', |
| | | islock: queryForm.value.isLock || '', |
| | | emptyContainer: queryForm.value.emptyContainer || '', |
| | | startTime: queryForm.value.dateRange[0] || '', |
| | | endTime: queryForm.value.dateRange[1] || '', |
| | | })) |
| | | |
| | | // 卿æä¸¾é项 |
| | | const enumOptions = reactive({ |
| | | containerType: [] as Array<{ label: string; value: any }>, |
| | | containerStatus: [] as Array<{ label: string; value: any }>, |
| | | storageTypeNo: [] as Array<{ label: string; value: any }>, |
| | | placeStatus: [] as Array<{ label: string; value: any }>, |
| | | yesOrNo: [] as Array<{ label: string; value: any }>, |
| | | }) |
| | | |
| | | // è·åæä¸¾æ°æ® |
| | | const fetchEnumData = async () => { |
| | | try { |
| | | // è·åç©æç±»åæä¸¾ |
| | | const containerTypeData = await getWmsEnumData({ |
| | | EnumName: 'ContainerTypeEnum', |
| | | }) |
| | | enumOptions.containerType = containerTypeData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | // è·åç©æç±»åæä¸¾ |
| | | const storageTypeNoData = await getWmsEnumData({ |
| | | EnumName: 'PlaceTypeEnum', |
| | | }) |
| | | enumOptions.storageTypeNo = storageTypeNoData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | |
| | | // è·åéè´ç±»åæä¸¾ |
| | | const placeStatusData = await getWmsEnumData({ |
| | | EnumName: 'PlaceStatusEnum', |
| | | }) |
| | | enumOptions.placeStatus = placeStatusData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | |
| | | // è·åéè´ç±»åæä¸¾ |
| | | const containerStatusData = await getWmsEnumData({ |
| | | EnumName: 'ContainerStatusEnum', |
| | | }) |
| | | enumOptions.containerStatus = containerStatusData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | |
| | | const yesNoData = await getWmsEnumData({ |
| | | EnumName: 'YesNoEnum', |
| | | }) |
| | | enumOptions.yesOrNo = yesNoData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | } catch (error) { |
| | | console.error('è·åæä¸¾æ°æ®å¤±è´¥:', error) |
| | | } |
| | | } |
| | | |
| | | // ç»ä»¶æè½½æ¶è·åæä¸¾æ°æ® |
| | | onMounted(() => { |
| | | fetchEnumData() |
| | | handleQuery() |
| | | }) |
| | | |
| | | // æ°å¢çæ¥è¯¢æ¹æ³ |
| | | const handleQuery = async () => { |
| | | console.log('æ¥è¯¢æ¡ä»¶:', queryParams.value) |
| | | // tableRef.value.getTableList() |
| | | tableRef.value.getList(queryParams.value) |
| | | } |
| | | |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | const resetQuery = () => { |
| | | queryForm.value = { |
| | | containerNo: '', |
| | | materialNo: '', |
| | | materialName: '', |
| | | containerType: '', |
| | | containerStatus: '', |
| | | storageTypeNo: 1, |
| | | placeStatus: '', |
| | | placeNo: '', |
| | | isLock: '', |
| | | emptyContainer: '', |
| | | dateRange: [], |
| | | filter: '', |
| | | } |
| | | } |
| | | /** |
| | | * @returns è¡¨æ ¼ |
| | | */ |
| | | const RenderBaseTable = (props: RenderTableType) => { |
| | | const { |
| | | url, |
| | | dataSource, |
| | | isDrag, |
| | | isChecked, |
| | | isHidePagination, |
| | | params, |
| | | autoHeight, |
| | | } = props |
| | | props.params = { |
| | | ...queryParams.value, |
| | | ...params, |
| | | } |
| | | return ( |
| | | <div |
| | | class={{ |
| | | [styles.wmsMaterialStockList]: true, |
| | | }} |
| | | > |
| | | <BaseTable |
| | | ref={tableRef} |
| | | url={url} |
| | | sortUrlTpl="/api/v1/HIAWms/wmsMaterialStock/{id}/adjustsort/{sort}" |
| | | v-model:dataSource={dataSource.value} |
| | | columns={columns} |
| | | contextMenu={contextMenu} |
| | | params={params} |
| | | isDrag={isDrag} |
| | | isChecked={isChecked} |
| | | autoHeight={autoHeight} |
| | | onCheck={onCheck} |
| | | onRowClick={onRowClick} |
| | | isHidePagination={isHidePagination} |
| | | pageSize={20} |
| | | v-slots={{ |
| | | inStockTime: ({ row }: any) => { |
| | | return ( |
| | | <div> |
| | | {row.inStockTime != null |
| | | ? dayjs(row.inStockTime).format('YYYY-MM-DD HH:mm:ss') |
| | | : '-'} |
| | | </div> |
| | | ) |
| | | }, |
| | | name: ({ row }: any) => { |
| | | return row?.name ? ( |
| | | <TdButton |
| | | onClick={() => openDetail(row)} |
| | | text={<span style="color:#5a84ff">详æ
</span>} |
| | | icon="scale" |
| | | tip={row?.name} |
| | | hover |
| | | > |
| | | {row?.name} |
| | | </TdButton> |
| | | ) : ( |
| | | '-' |
| | | ) |
| | | }, |
| | | }} |
| | | ></BaseTable> |
| | | </div> |
| | | ) |
| | | } |
| | | return () => { |
| | | return ( |
| | | <div class={styles.wmsMaterialStockContent}> |
| | | {/* æ·»å /ç¼è¾ */} |
| | | <WmsMaterialStockDrawer |
| | | v-model={dialogConfig.visible} |
| | | title={dialogConfig.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirm={onConfirmWmsMaterialStock} |
| | | /> |
| | | {/* é«çº§æ¥è¯¢ */} |
| | | {/* <WmsMaterialStockDetailDrawer |
| | | ref="wmsTaskQueryDrawerRef" |
| | | v-model={dialogConfigForQuery.visible} |
| | | title={dialogConfigForQuery.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirmQuery={handleQuery} |
| | | onRestQuery={resetQuery} |
| | | onClose={closeQuery} |
| | | /> */} |
| | | <div class={styles.headerContent}> |
| | | <div class={styles.header}> |
| | | <IconButton |
| | | v-permission="wmsMaterialStock-add" |
| | | icon="add-p" |
| | | onClick={onAddWmsMaterialStock} |
| | | type="primary" |
| | | > |
| | | æ·»å |
| | | </IconButton> |
| | | <el-divider direction="vertical" /> |
| | | <el-upload |
| | | v-permission="wmsMaterialStock-import" |
| | | name="file" |
| | | accept=".xlsx,.xls,.csv" |
| | | show-file-list={false} |
| | | onError={onError} |
| | | onSuccess={onSuccess} |
| | | before-upload={onBeforeUpload} |
| | | headers={headers.value} |
| | | action="/api/v1/HIAWms/wmsMaterialStock/import" |
| | | > |
| | | <IconButton icon="in">导å
¥</IconButton> |
| | | </el-upload> |
| | | |
| | | <IconButton |
| | | v-permission="wmsMaterialStock-output" |
| | | icon="out" |
| | | onClick={onExport} |
| | | > |
| | | å¯¼åº |
| | | </IconButton> |
| | | </div> |
| | | {/* <Search |
| | | placeholder="请è¾å
¥å
³é®å" |
| | | v-model={search.value} |
| | | onConfirm={onSearch} |
| | | style={{ marginTop: '-1px' }} |
| | | /> */} |
| | | </div> |
| | | <RenderBaseTable |
| | | url="/api/v1/HIAWms/wmsMaterialStock" |
| | | dataSource={dataSource} |
| | | isChecked={true} |
| | | isDrag={true} |
| | | /> |
| | | </div> |
| | | ) |
| | | } |
| | | }, |
| | | }) |
| | |
| | | }) |
| | | |
| | | const entityNames = getEntityNames(Models) |
| | | const nameToLabelMap = [{ name: 'WmsMaterialStock', label: 'åºå' }] |
| | | const nameToLabelMap = [ |
| | | { name: 'WmsMaterialStock', label: 'åºå' }, |
| | | { name: 'WmsMaterialStockDetail', label: 'åºåæç»' }, |
| | | ] |
| | | |
| | | export default defineComponent({ |
| | | name: 'WmsMaterialStock', |
¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "name": "WmsMaterialStockDetail" |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { |
| | | ref, |
| | | onMounted, |
| | | reactive, |
| | | computed, |
| | | Ref, |
| | | watch, |
| | | SetupContext, |
| | | h, |
| | | } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsTaskDrawer } from '../Models/WmsTaskDrawer' |
| | | import { ElMessage } from 'element-plus' |
| | | import isEqual from 'lodash/isEqual' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { cloneDeep } from 'lodash' |
| | | |
| | | export const ChangeToPlace = (props: any, ctx?: any) => { |
| | | const wmsTaskDrawer = injectModel<WmsTaskDrawer>('wmsTaskDrawer') |
| | | /** |
| | | * ç¨æ¥å¯¹æ¯çåå§åæ°æ® |
| | | */ |
| | | const initiateData: Ref<Record<string, any>> = ref({}) |
| | | const formData = ref<Record<string, any>>({}) |
| | | // ref |
| | | const formRef = ref() |
| | | |
| | | const disabled = ref(false) |
| | | |
| | | const current = computed(() => { |
| | | return props.row || null |
| | | }) |
| | | |
| | | const visible = computed({ |
| | | get() { |
| | | return props.modelValue |
| | | }, |
| | | set(val) { |
| | | ctx.emit('update:modelValue', val) |
| | | }, |
| | | }) |
| | | /** |
| | | * æ·»å çformåæ®µ |
| | | */ |
| | | const formItems = reactive([ |
| | | { |
| | | label: 'ä»»å¡å·', |
| | | prop: 'taskNo', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请è¾å
¥ä»»å¡å·', |
| | | rules: [{ required: true, message: 'ä»»å¡å·ä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'èµ·å§åºä½', |
| | | prop: 'sourcePlace', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | rules: [{ required: true, message: 'èµ·å§åºä½ä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | placeholder: '请è¾å
¥èµ·å§åºä½', |
| | | }, |
| | | { |
| | | label: 'ç®æ åºä½', |
| | | prop: 'toPlace', |
| | | el: 'input', |
| | | // disabled: disabled, |
| | | rules: [{ required: true, message: 'ç®æ åºä½ä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | placeholder: '请è¾å
¥ç®æ åºä½', |
| | | }, |
| | | { |
| | | label: 'åå·', |
| | | prop: 'mutableParam1', |
| | | el: 'input', |
| | | disabled: disabled, |
| | | placeholder: '请è¾å
¥å¯ååé1', |
| | | }, |
| | | ]) |
| | | /** |
| | | * æ ¡éªæ¯å¦ææ°æ®åå |
| | | */ |
| | | const checkIsEqualObject = () => { |
| | | const data = { |
| | | formData: formData.value, |
| | | } |
| | | const check = isEqual(initiateData.value, data) |
| | | return check |
| | | } |
| | | |
| | | const onClose = (done: () => void) => { |
| | | if (visible.value) { |
| | | if (checkIsEqualObject()) { |
| | | visible.value = false |
| | | done && done() |
| | | } else { |
| | | ConfirmBox('æ¯å¦ä¿å设置ï¼') |
| | | .then(() => { |
| | | onConfirm() |
| | | }) |
| | | .catch(() => { |
| | | visible.value = false |
| | | done && done() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * ä¿å |
| | | */ |
| | | const onConfirm = async () => { |
| | | await formRef.value?.validate() |
| | | const data = { |
| | | taskNo: formData.value.taskNo, |
| | | sourcePlace: formData.value.sourcePlace, |
| | | toPlace: formData.value.toPlace, |
| | | mutableParam1: formData.value.mutableParam1, |
| | | } |
| | | const id = current.value.id |
| | | await wmsTaskDrawer.changeTaskToPlace(data) |
| | | ElMessage.success('ä¿®æ¹æå') |
| | | ctx.emit('confirm') |
| | | } |
| | | |
| | | const updateCheckData = () => { |
| | | initiateData.value = { |
| | | formData: { |
| | | ...formData.value, |
| | | }, |
| | | } |
| | | } |
| | | /** |
| | | * å¼¹çªæå¼è·å详æ
|
| | | */ |
| | | const onOpenChange = async () => { |
| | | if (current.value) { |
| | | const res = await wmsTaskDrawer.getWmsTaskDetail(current.value) |
| | | |
| | | formData.value = { |
| | | taskNo: res.taskNo, |
| | | sourcePlace: res.sourcePlace, |
| | | toPlace: res.toPlace, |
| | | mutableParam1: res.mutableParam1, |
| | | id: res.id, |
| | | } |
| | | if (res.taskStatus != 1) { |
| | | disabled.value = true |
| | | } |
| | | updateCheckData() |
| | | } else { |
| | | ElMessage.warning('请å
鿩䏿¡æ°æ®') |
| | | visible.value = false |
| | | return |
| | | } |
| | | } |
| | | |
| | | watch(() => current.value, onOpenChange) |
| | | |
| | | return { |
| | | formItems, |
| | | formData, |
| | | visible, |
| | | formRef, |
| | | onOpenChange, |
| | | onClose, |
| | | onConfirm, |
| | | } |
| | | } |
| | |
| | | title: '', |
| | | }) |
| | | |
| | | const dialogChangeToPlaceConfig = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | isAdd: false, |
| | | }) |
| | | /** |
| | | * åé¡µæ°æ® |
| | | */ |
| | |
| | | sort.value = row.sort |
| | | } |
| | | |
| | | const openChangToPlace = (row: any) => { |
| | | current.value = row |
| | | dialogChangeToPlaceConfig.visible = true |
| | | dialogChangeToPlaceConfig.title = 'ä¿®æ¹ç®æ åºä½' |
| | | dialogChangeToPlaceConfig.isAdd = false |
| | | console.log('row', row) |
| | | } |
| | | |
| | | const contextMenu = [ |
| | | { |
| | | label: 'å±å¼è¯¦æ
', |
| | |
| | | divided: true, |
| | | icon: 'o', |
| | | }, |
| | | // { |
| | | // label: 'å䏿·»å ', |
| | | // fn: (c: CurrentType, pageNum: number) => { |
| | | // current.value = null |
| | | // sort.value = c.index + 1 + (pageNum - 1) * 50 |
| | | // dialogConfig.visible = true |
| | | // dialogConfig.title = 'æ·»å ' |
| | | // dialogConfig.isAdd = false |
| | | // }, |
| | | // divided: true, |
| | | // icon: 'up', |
| | | // }, |
| | | { |
| | | label: 'ä¿®æ¹ç®æ åºä½', |
| | | fn: (c: CurrentType) => { |
| | | current.value = null |
| | | sort.value = c.row.sort |
| | | nextTick(() => openChangToPlace(c.row)) |
| | | }, |
| | | divided: true, |
| | | icon: 'up', |
| | | }, |
| | | { |
| | | label: '强å¶å®æ', |
| | | fn: async (c: CurrentType) => { |
| | |
| | | dialogConfig, |
| | | dialogConfigForQuery, |
| | | dialogSettingConfig, |
| | | dialogChangeToPlaceConfig, |
| | | tableRef, |
| | | current, |
| | | search, |
| | |
| | | onError, |
| | | onSuccess, |
| | | openDetail, |
| | | openChangToPlace, |
| | | onSearch, |
| | | onExport, |
| | | onRowClick, |
| | |
| | | import { Base } from '@/libs/Base/Base' |
| | | const request = Base.request |
| | | |
| | | /** |
| | | * æ·»å |
| | | * @returns |
| | | */ |
| | | export const addWmsTask = (data: any) => { |
| | | return request.post('/api/v1/HIAWms/wmsTask', data) |
| | | } |
| | | |
| | | /** |
| | | * è·å详æ
|
| | | * @returns |
| | | */ |
| | | export const getWmsTask = (id: string) => { |
| | | return request.get(`/api/v1/HIAWms/wmsTask/${id}`) |
| | | } |
| | | |
| | | /** |
| | | * æ´æ° |
| | | * @returns |
| | | */ |
| | | export const updateWmsTask = (id: string, data: Record<string, any>) => { |
| | | return request.put(`/api/v1/HIAWms/wmsTask/${id}`, data) |
| | | } |
| | | |
| | | /** |
| | | * è·åæä¸¾ |
| | | * @returns |
| | | */ |
| | | export const getWmsEnumData = (data: any) => { |
| | | return request.post('/api/v1/HIAWms/WmsEnum', data) |
| | | } |
| | | import { Base } from '@/libs/Base/Base' |
| | | const request = Base.request |
| | | |
| | | /** |
| | | * æ·»å |
| | | * @returns |
| | | */ |
| | | export const addWmsTask = (data: any) => { |
| | | return request.post('/api/v1/HIAWms/wmsTask', data) |
| | | } |
| | | |
| | | /** |
| | | * è·å详æ
|
| | | * @returns |
| | | */ |
| | | export const getWmsTask = (id: string) => { |
| | | return request.get(`/api/v1/HIAWms/wmsTask/${id}`) |
| | | } |
| | | |
| | | /** |
| | | * æ´æ° |
| | | * @returns |
| | | */ |
| | | export const updateWmsTask = (id: string, data: Record<string, any>) => { |
| | | return request.put(`/api/v1/HIAWms/wmsTask/${id}`, data) |
| | | } |
| | | |
| | | /** |
| | | * è·åæä¸¾ |
| | | * @returns |
| | | */ |
| | | export const getWmsEnumData = (data: any) => { |
| | | return request.post('/api/v1/HIAWms/WmsEnum', data) |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹ç®æ åºä½ |
| | | * @returns |
| | | */ |
| | | export const changeToPlace = (data: any) => { |
| | | return request.post('/api/v1/HIAWms/wmsTask/ChangeTaskToPlace', data) |
| | | } |
| | |
| | | import { Base } from '@/libs/Base/Base' |
| | | import { |
| | | addWmsTask, |
| | | getWmsTask, |
| | | updateWmsTask, |
| | | getWmsEnumData, |
| | | } from './Service/WmsTaskDrawer' |
| | | import { useGlobalState } from '@/libs/Store/Store' |
| | | |
| | | export class WmsTaskDrawer extends Base<{ [key: string]: any }> { |
| | | constructor() { |
| | | super({ |
| | | data: [], |
| | | wmsTask: {}, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * æ·»å |
| | | * @param data |
| | | */ |
| | | async addWmsTask(data: Record<string, any>) { |
| | | return addWmsTask(data) |
| | | } |
| | | /** |
| | | * æ´æ° |
| | | * @param data |
| | | */ |
| | | async updateWmsTask(id: string, data: Record<string, any>) { |
| | | return updateWmsTask(id, data) |
| | | } |
| | | |
| | | /** |
| | | * è·å详æ
|
| | | */ |
| | | async getWmsTaskDetail(current: any, id?: string) { |
| | | return getWmsTask(id || current?.id) |
| | | } |
| | | |
| | | // è·åæä¸¾å¼ |
| | | async getWmsEnumData(data: Record<string, any>) { |
| | | return getWmsEnumData(data) |
| | | } |
| | | } |
| | | import { Base } from '@/libs/Base/Base' |
| | | import { |
| | | addWmsTask, |
| | | getWmsTask, |
| | | updateWmsTask, |
| | | getWmsEnumData, |
| | | changeToPlace, |
| | | } from './Service/WmsTaskDrawer' |
| | | import { useGlobalState } from '@/libs/Store/Store' |
| | | |
| | | export class WmsTaskDrawer extends Base<{ [key: string]: any }> { |
| | | constructor() { |
| | | super({ |
| | | data: [], |
| | | wmsTask: {}, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * æ·»å |
| | | * @param data |
| | | */ |
| | | async addWmsTask(data: Record<string, any>) { |
| | | return addWmsTask(data) |
| | | } |
| | | /** |
| | | * æ´æ° |
| | | * @param data |
| | | */ |
| | | async updateWmsTask(id: string, data: Record<string, any>) { |
| | | return updateWmsTask(id, data) |
| | | } |
| | | |
| | | /** |
| | | * æ´æ° |
| | | * @param data |
| | | */ |
| | | async changeTaskToPlace(data: Record<string, any>) { |
| | | return changeToPlace(data) |
| | | } |
| | | |
| | | /** |
| | | * è·å详æ
|
| | | */ |
| | | async getWmsTaskDetail(current: any, id?: string) { |
| | | return getWmsTask(id || current?.id) |
| | | } |
| | | |
| | | // è·åæä¸¾å¼ |
| | | async getWmsEnumData(data: Record<string, any>) { |
| | | return getWmsEnumData(data) |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | .drawer { |
| | | width: 800px; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseDrawer from '@/components/BaseDrawer/BaseDrawer' |
| | | import styles from './ChangeToPlaceDialog.module.scss' |
| | | import { ChangeToPlace } from '../../../../Controllers/ChangeToPlace.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: 'å¼¹çª', |
| | | props: { |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirm'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirm, |
| | | onOpenChange, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = ChangeToPlace(props, ctx) |
| | | return () => ( |
| | | <BaseDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || 'æ·»å '} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onConfirm={onConfirm} |
| | | onOpen={onOpenChange} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="150px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | |
| | | import { useWmsTask } from '../../../Controllers/WmsTask' |
| | | import IconButton from '@/components/IconButton/IconButton' |
| | | import WmsTaskDrawer from '../Dialog/WmsTaskDrawer/WmsTaskDrawer' |
| | | import ChangeToPlaceDialog from '../Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog' |
| | | import WmsTaskQueryDrawer from '../Dialog/WmsTaskQueryDrawer/WmsTaskQueryDrawer' |
| | | import Search from '@/components/Search/Search' |
| | | import { columns } from './Config' |
| | |
| | | contextMenu, |
| | | dialogConfig, |
| | | dialogConfigForQuery, |
| | | dialogChangeToPlaceConfig, |
| | | tableRef, |
| | | current, |
| | | search, |
| | |
| | | onRestQuery={resetQuery} |
| | | onClose={closeQuery} |
| | | /> |
| | | <ChangeToPlaceDialog |
| | | ref="changeToPlace" |
| | | v-model={dialogChangeToPlaceConfig.visible} |
| | | title={dialogChangeToPlaceConfig.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirmQuery={handleQuery} |
| | | onRestQuery={resetQuery} |
| | | onClose={closeQuery} |
| | | /> |
| | | |
| | | <div class={styles.headerContent}> |
| | | <div class={styles.header}> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using CMS.Plugin.HIAWms.Domain.Shared.Enums; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask |
| | | { |
| | | /// <summary> |
| | | /// ä¿®æ¹ç®æ åºä½åæ° |
| | | /// </summary> |
| | | public class ChangeTaskToPlaceInput |
| | | { |
| | | |
| | | /// <summary> |
| | | /// ä»»å¡å· |
| | | /// </summary> |
| | | public string TaskNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä»»å¡ç±»å |
| | | /// </summary> |
| | | public TaskTypeEnum TaskType { get; set; } |
| | | /// <summary> |
| | | /// èµ·å§åºä½ |
| | | /// </summary> |
| | | public string? SourcePlace { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç®æ åºä½ |
| | | /// </summary> |
| | | public string? ToPlace { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å¯ååé1 |
| | | /// </summary> |
| | | public string? MutableParam1 { get; set; } |
| | | } |
| | | } |
| | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; |
| | | using Volo.Abp.Application.Dtos; |
| | | using Volo.Abp.Application.Services; |
| | | |
| | | namespace CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | |
| | | Task<List<WmsMaterialStockDto>> CloneAsync(IEnumerable<Guid> ids); |
| | | |
| | | /// <summary> |
| | | /// è·ååºåæç» |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input); |
| | | |
| | | /// <summary> |
| | | /// Deletes the many asynchronous. |
| | | /// </summary> |
| | | /// <param name="ids">The ids.</param> |
| | |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | Task CancelTaskAysnc(WmsTaskStatusDto input); |
| | | |
| | | /// <summary> |
| | | /// ä¿®æ¹ç®æ åºä½ |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input); |
| | | } |
| | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; |
| | | using CMS.Plugin.HIAWms.Domain.WmsAreas; |
| | |
| | | using CMS.Plugin.HIAWms.Domain.WmsMaterials; |
| | | using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; |
| | | using CMS.Plugin.HIAWms.Domain.WmsPlaces; |
| | | using CMS.Plugin.HIAWms.Domain.WmsTask; |
| | | using CmsQueryExtensions; |
| | | using CmsQueryExtensions.Extension; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using System.Linq.Expressions; |
| | | using System.Text.Json; |
| | | using Volo.Abp; |
| | | using Volo.Abp.Application.Dtos; |
| | |
| | | return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list)); |
| | | } |
| | | |
| | | public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WmsMaterialStock.Sort); |
| | | } |
| | | |
| | | #region 卿æé æ¥è¯¢æ¡ä»¶ |
| | | |
| | | //卿æé æ¥è¯¢æ¡ä»¶ |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var count = await _wmsmaterialstockRepository.GetDetailCountAsync(whereConditions); |
| | | var list = await _wmsmaterialstockRepository.GetStockDetailListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); |
| | | |
| | | return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 卿æé æ¥è¯¢æ¡ä»¶ |
| | | /// </summary> |
| | | /// <param name="input">è¾å
¥åæ°</param> |
| | | /// <returns></returns> |
| | | private FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> DynamicGetQueryParams(GetWmsMaterialStocksInput input) |
| | | { |
| | | //卿æé æ¥è¯¢æ¡ä»¶ |
| | | var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterialStock, GetWmsMaterialStocksInput>(input); |
| | | if (!whereConditions.IsSuccess) |
| | | { |
| | | throw new Exception("卿æé æ¥è¯¢æ¡ä»¶å¤±è´¥:" + whereConditions.ErrMsg); |
| | | } |
| | | |
| | | //ä¹å¯å次èªå®ä¹æå»ºæ¥è¯¢æ¡ä»¶ |
| | | Expression<Func<WmsMaterialStock, bool>> extendExpression = a => a.IsDeleted == false ; |
| | | // ä½¿ç¨ System.Linq.PredicateBuilder ç And |
| | | var pres = (System.Linq.Expressions.Expression<Func<WmsMaterialStock, bool>>)(whereConditions.data); |
| | | whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); |
| | | |
| | | return whereConditions; |
| | | } |
| | | |
| | | /// <inheritdoc /> |
| | | public virtual async Task<WmsMaterialStockDto> CreateAsync(WmsMaterialStockCreateDto input) |
| | | { |
| | |
| | | await uow.SaveChangesAsync(); |
| | | await uow.CompleteAsync(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä¿®æ¹ç®æ åºä½ |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input) |
| | | { |
| | | var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); |
| | | if (task == null) |
| | | { |
| | | throw new UserFriendlyException("ä»»å¡ä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | |
| | | if (task.TaskStatus != WmsTaskStatus.WEIZHIXING) |
| | | { |
| | | throw new UserFriendlyException("å·²å¼å§æè
ç»æçä»»å¡ä¸å
许修æ¹"); |
| | | } |
| | | |
| | | var toplaceStock = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { PlaceNo = input.ToPlace }); |
| | | if (toplaceStock != null && toplaceStock.Count>0) |
| | | { |
| | | var model = toplaceStock.FirstOrDefault(); |
| | | if (model.MaterialModel != input.MutableParam1) |
| | | { |
| | | throw new UserFriendlyException("ç®æ åºä½åå·ä¸å½ååå·ä¸ä¸è´ä¸å
许修æ¹"); |
| | | } |
| | | } |
| | | |
| | | task.ToPlace = input.ToPlace; |
| | | |
| | | await wmsTaskRepository.UpdateAsync(task); |
| | | } |
| | | } |
| | |
| | | using CmsQueryExtensions.Extension; |
| | | using System.Linq.Expressions; |
| | | using Volo.Abp.Domain.Repositories; |
| | | using Volo.Abp.Specifications; |
| | | |
| | |
| | | /// <param name="stock"></param> |
| | | /// <returns></returns> |
| | | Task<List<WmsMaterialStock>> GetStockListAsync(WmsMaterialStock? stock); |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢åºåæç» |
| | | /// </summary> |
| | | /// <param name="whereConditions"></param> |
| | | /// <param name="sorting"></param> |
| | | /// <param name="maxResultCount"></param> |
| | | /// <param name="skipCount"></param> |
| | | /// <param name="includeDetails"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | Task<List<WmsMaterialStock>> GetStockDetailListAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); |
| | | |
| | | /// <summary> |
| | | /// è·ååºåæ»æ° |
| | | /// </summary> |
| | | /// <param name="whereConditions"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | Task<long> GetDetailCountAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, CancellationToken cancellationToken = default); |
| | | |
| | | /// <summary> |
| | | /// Gets the count asynchronous. |
| | | /// </summary> |
| | |
| | | using System.Linq.Dynamic.Core; |
| | | using System.Linq.Expressions; |
| | | using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; |
| | | using CMS.Plugin.HIAWms.Domain.WmsTask; |
| | | using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; |
| | | using CmsQueryExtensions.Extension; |
| | | using DatabaseSchemaReader.Filters; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using SqlKata; |
| | |
| | | .WhereIf(!string.IsNullOrEmpty(stock?.AreaName), u => u.AreaName.Contains(stock.AreaName)) |
| | | .WhereIf(stock.IsLock > 0, u => u.IsLock == stock.IsLock) |
| | | .Where(u => !u.IsDeleted) |
| | | .OrderByDescending(x=>x.InStockTime) |
| | | .ToListAsync(); |
| | | return baseQuery; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢åºåæç» |
| | | /// </summary> |
| | | /// <param name="whereConditions"></param> |
| | | /// <param name="sorting"></param> |
| | | /// <param name="maxResultCount"></param> |
| | | /// <param name="skipCount"></param> |
| | | /// <param name="includeDetails"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<List<WmsMaterialStock>> GetStockDetailListAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) |
| | | { |
| | | return await (await GetDbSetAsync()) |
| | | .IncludeDetails(includeDetails) |
| | | .WhereIf(whereConditions != null, whereConditions.data) |
| | | .Where(x => !x.IsDeleted) |
| | | .OrderBy(x=>x.PlaceNo) |
| | | .ThenByDescending(x => x.CreationTime) |
| | | .PageBy(skipCount, maxResultCount) |
| | | .ToListAsync(GetCancellationToken(cancellationToken)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæ»æ°åºå管ç |
| | | /// </summary> |
| | | /// <param name="whereConditions"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<long> GetDetailCountAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, CancellationToken cancellationToken = default) |
| | | { |
| | | return await (await GetQueryableAsync()) |
| | | .WhereIf(whereConditions != null, whereConditions.data) |
| | | .Where(x => !x.IsDeleted) |
| | | .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); |
| | | } |
| | | |
| | | |
| | | /// <inheritdoc /> |
| | | public override async Task<IQueryable<WmsMaterialStock>> WithDetailsAsync() |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ååºæ¥æç» |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | [Route("StockDetail")] |
| | | public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input) |
| | | { |
| | | return await _wmsmaterialstockAppService.GetStockDetailAsync(input); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建wmsmaterialstock. |
| | | /// </summary> |
| | | /// <param name="input">è¾å
¥.</param> |
| | |
| | | { |
| | | await _wmsTaskAppService.CancelTaskAysnc(input); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä¿®æ¹ä»»å¡ç®æ åºä½ |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [Route("ChangeTaskToPlace")] |
| | | public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input) |
| | | { |
| | | await _wmsTaskAppService.ChangeTaskToPlaceAsync(input); |
| | | } |
| | | } |
| | | } |