zs
2025-05-13 e8d564377d20526c643f00132ccc3466360f9c5b
HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.tsx
@@ -4,21 +4,22 @@
import styles from './WmsMaterialStockDetail.module.scss'
import { useWmsMaterialStock } from '../../../Controllers/WmsMaterialStock'
import IconButton from '@/components/IconButton/IconButton'
import WmsMaterialStockDrawer from '../Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer'
import WmsMaterialStockDetailQueryDrawer from '../Dialog/WmsMaterialStockDetailQuery/WmsMaterialStockDetailQueryDrawer'
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 { getWmsEnumData } from '@/widgets/WmsMaterialStock/Models/Service/WmsMaterialStockDrawer'
import {
  ElInput,
  ElSelect,
  ElOption,
  ElDatePicker,
  ElForm,
  ElFormItem,
  ElInput,
  ElOption,
  ElSelect,
} from 'element-plus'
import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
import { injectModel } from '@/libs/Provider/Provider'
interface RenderTableType {
  url?: string
@@ -31,7 +32,7 @@
}
export default defineComponent({
  name: 'WmsMaterialStock',
  name: 'WmsMaterialStockDetail',
  directives: {
    permission: vPermission,
  },
@@ -40,6 +41,7 @@
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
@@ -51,91 +53,81 @@
      onConfirmWmsMaterialStock,
      onCheck,
      onAddWmsMaterialStock,
      onAdvancedQuery,
      onExport,
      openDetail,
      onSuccess,
      onBeforeUpload,
    } = useWmsMaterialStock(props, ctx)
    //定义高级查询引用
    const wmsMaterialStockDetailQueryDrawerRef = ref(null)
    // 新增的查询条件
    const queryForm = ref({
      containerNo: '',
      materialNo: '',
      materialName: '',
      containerType: '',
      containerStatus: '',
      storageTypeNo: 1,
      placeStatus: '',
      placeNo: '',
      isLock: '',
      emptyContainer: '',
      dateRange: [],
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
    })
    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 _searchFormInputAttrs = ref(['OrderNo', 'MaterialNo', 'MaterialId'])
    const searchFormInputAttrs_Placeholder = ref('请输入单据号/物料编号/物料ID')
    // 动态枚举选项
    const enumOptions = reactive({
      containerType: [] as Array<{ label: string; value: any }>,
      containerStatus: [] as Array<{ label: string; value: any }>,
      storageTypeNo: [] as Array<{ label: string; value: any }>,
      containerType: [] as Array<{ label: string; value: any }>,
      placeStatus: [] as Array<{ label: string; value: any }>,
      yesOrNo: [] as Array<{ label: string; value: any }>,
      storageTypeNo: [] as Array<{ label: string; value: any }>,
      checkStatus: [] as Array<{ label: string; value: any }>,
      isLock: [] as Array<{ label: string; value: any }>,
      emptyContainer: [] 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({
        const containerStatusEnumData = await getWmsEnumData({
          EnumName: 'ContainerStatusEnum',
        })
        enumOptions.containerStatus = containerStatusData.map((item) => ({
        enumOptions.containerStatus = containerStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const yesNoData = await getWmsEnumData({
        const containerTypeEnumData = await getWmsEnumData({
          EnumName: 'ContainerTypeEnum',
        })
        enumOptions.containerType = containerTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const placeStatusEnumData = await getWmsEnumData({
          EnumName: 'PlaceStatusEnum',
        })
        enumOptions.placeStatus = placeStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const placeTypeEnumData = await getWmsEnumData({
          EnumName: 'PlaceTypeEnum',
        })
        enumOptions.storageTypeNo = placeTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const materialCheckStatusEnumData = await getWmsEnumData({
          EnumName: 'MaterialCheckStatusEnum',
        })
        enumOptions.checkStatus = materialCheckStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const yesNoEnumData = await getWmsEnumData({
          EnumName: 'YesNoEnum',
        })
        enumOptions.yesOrNo = yesNoData.map((item) => ({
        enumOptions.isLock = yesNoEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        enumOptions.emptyContainer = yesNoEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
@@ -147,33 +139,65 @@
    // 组件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      handleQuery()
      handleQueryForMain()
    })
    // 新增的查询方法
    const handleQuery = async () => {
      console.log('查询条件:', queryParams.value)
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    // 定义响应式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
    })
    // 新版的查询方法(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
      tableRef.value.getList(_curHighQueryData.value)
    }
    // 新版的查询方法(高级查询中的按钮【查询】)
    const handleQuery = async (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams)
      commonSaveCurHighQueryData(filteredData)
      tableRef.value.getList(filteredData)
    }
    // 新版的查询重置
    const resetQuery = () => {
      queryForm.value.searchVal = ''
      queryForm.value.str_searchFormInputAttrs = _searchFormInputAttrs.value
    }
    //新版的导出方法
    const handleExport = () => {
      onExport(_curHighQueryData.value)
    }
    // 新版的查询弹出框关闭方法
    const closeQuery = (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams)
      console.log('closeQuery方法')
      console.log(filteredData)
      commonSaveCurHighQueryData(filteredData)
    }
    //保存查询值
    const commonSaveCurHighQueryData = (filteredData = {}) => {
      _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    }
    //获取高级查询弹出框的查询值
    const commonGetHighQueryForm = (extraParams = {}) => {
      // 过滤掉 undefined 的值
      let filteredData = Object.assign(
        {},
        ...Object.entries(extraParams).map(([key, value]) =>
          value !== undefined ? { [key]: value } : {}
        )
      )
      //组合模糊查询
      filteredData.searchVal = queryForm.value.searchVal
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    // 重置查询条件
    const resetQuery = () => {
      queryForm.value = {
        containerNo: '',
        materialNo: '',
        materialName: '',
        containerType: '',
        containerStatus: '',
        storageTypeNo: 1,
        placeStatus: '',
        placeNo: '',
        isLock: '',
        emptyContainer: '',
        dateRange: [],
        filter: '',
      }
    }
    /**
     * @returns 表格
     */
@@ -187,20 +211,17 @@
        params,
        autoHeight,
      } = props
      props.params = {
        ...queryParams.value,
        ...params,
      }
      return (
        <div
          class={{
            [styles.wmsMaterialStockList]: true,
            [styles.wmsMaterialStockDetailList]: true,
          }}
        >
          <BaseTable
            ref={tableRef}
            url={url}
            sortUrlTpl="/api/v1/HIAWms/wmsMaterialStock/{id}/adjustsort/{sort}"
            sortUrlTpl="/api/v1/HIAWms/wmsMaterialStockDetail/{id}/adjustsort/{sort}"
            v-model:dataSource={dataSource.value}
            columns={columns}
            contextMenu={contextMenu}
@@ -218,6 +239,57 @@
                  <div>
                    {row.inStockTime != null
                      ? dayjs(row.inStockTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              isDisabled: ({ row }: any) => {
                return (
                  <div>
                    {row.isDisabled != null
                      ? row.isDisabled
                        ? '是'
                        : '否'
                      : '-'}
                  </div>
                )
              },
              creationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.creationTime != null
                      ? dayjs(row.creationTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              lastModificationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.lastModificationTime != null
                      ? dayjs(row.lastModificationTime).format(
                          'YYYY-MM-DD HH:mm:ss'
                        )
                      : '-'}
                  </div>
                )
              },
              isDeleted: ({ row }: any) => {
                return (
                  <div>
                    {row.isDeleted != null
                      ? row.isDeleted
                        ? '是'
                        : '否'
                      : '-'}
                  </div>
                )
              },
              deletionTime: ({ row }: any) => {
                return (
                  <div>
                    {row.deletionTime != null
                      ? dayjs(row.deletionTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
@@ -242,20 +314,13 @@
        </div>
      )
    }
    return () => {
      return (
        <div class={styles.wmsMaterialStockContent}>
          {/* 添加/编辑 */}
          <WmsMaterialStockDrawer
            v-model={dialogConfig.visible}
            title={dialogConfig.title}
            row={current.value}
            sort={sort.value}
            onConfirm={onConfirmWmsMaterialStock}
          />
        <div class={styles.wmsMaterialStockDetailContent}>
          {/* 高级查询 */}
          {/* <WmsMaterialStockDetailDrawer
            ref="wmsTaskQueryDrawerRef"
          <WmsMaterialStockDetailQueryDrawer
            ref="wmsMaterialStockDetailQueryDrawerRef"
            v-model={dialogConfigForQuery.visible}
            title={dialogConfigForQuery.title}
            row={current.value}
@@ -263,49 +328,57 @@
            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"
                v-permission="wmsMaterialStockDetail-output"
                icon="out"
                onClick={onExport}
              >
                导出
              </IconButton>
            </div>
            {/* <Search
              placeholder="请输入关键字"
              v-model={search.value}
              onConfirm={onSearch}
              style={{ marginTop: '-1px' }}
            /> */}
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                <el-tooltip
                  class="box-item"
                  effect="dark"
                  content={searchFormInputAttrs_Placeholder.value}
                  placement="top-start"
                >
                  <ElInput
                    v-model={queryForm.value.searchVal}
                    placeholder={searchFormInputAttrs_Placeholder.value}
                    clearable
                    class={styles.formItem}
                  />
                </el-tooltip>
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                查询
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                重置
              </IconButton> */}
              <IconButton
                v-permission="wmsMaterialStockDetail-hightQuery"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                高级查询
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsMaterialStock"
            url="/api/v1/HIAWms/wmsMaterialStock/StockDetail"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}