zhou zhou
17 小时以前 1d95b134d85c3c60cf0e72739888c9741a0bb1ee
rsf-design/src/api/wh-mat.js
@@ -4,13 +4,53 @@
  return String(value ?? '').trim()
}
function normalizeIds(ids) {
  if (Array.isArray(ids)) {
    return ids
      .map((item) => Number(item))
      .filter((item) => Number.isFinite(item))
      .join(',')
  }
  return String(ids ?? '')
    .split(',')
    .map((item) => Number(item))
    .filter((item) => Number.isFinite(item))
    .join(',')
}
function normalizeIdList(ids) {
  if (Array.isArray(ids)) {
    return ids.map((item) => Number(item)).filter((item) => Number.isFinite(item))
  }
  return String(ids ?? '')
    .split(',')
    .map((item) => Number(item))
    .filter((item) => Number.isFinite(item))
}
function normalizeQueryParams(params = {}) {
  const allowKeys = new Set([
    'condition',
    'code',
    'name',
    'spec',
    'model',
    'color',
    'size',
    'barcode',
    'groupId',
    'unit',
    'status',
    'flagCheck',
    'validWarn'
  ])
  const result = {
    current: params.current || 1,
    pageSize: params.pageSize || params.size || 20
    pageSize: params.pageSize || params.size || 20,
    orderBy: normalizeText(params.orderBy) || 'create_time desc'
  }
  ;['condition', 'code', 'name', 'spec', 'model', 'color', 'size', 'barcode', 'groupId'].forEach((key) => {
  Array.from(allowKeys).forEach((key) => {
    const value = params[key]
    if (value === undefined || value === null || value === '') {
      return
@@ -19,6 +59,29 @@
      const trimmed = normalizeText(value)
      if (trimmed) {
        result[key] = trimmed
      }
      return
    }
    result[key] = value
  })
  Object.entries(params).forEach(([key, value]) => {
    if (['current', 'pageSize', 'size', 'orderBy'].includes(key) || allowKeys.has(key)) {
      return
    }
    if (value === undefined || value === null || value === '') {
      return
    }
    if (typeof value === 'string') {
      const trimmed = normalizeText(value)
      if (trimmed) {
        result[key] = trimmed
      }
      return
    }
    if (Array.isArray(value)) {
      if (value.length) {
        result[key] = value
      }
      return
    }
@@ -45,6 +108,53 @@
  return request.get({ url: `/matnr/${id}` })
}
export function fetchGetMatnrMany(ids) {
  return request.post({ url: `/matnr/many/${normalizeIds(ids)}` })
}
export function fetchEnabledFields() {
  return request.get({ url: '/fields/enable/list' })
}
export function fetchSaveMatnr(params = {}) {
  return request.post({ url: '/matnr/save', params })
}
export function fetchUpdateMatnr(params = {}) {
  return request.post({ url: '/matnr/update', params })
}
export function fetchDeleteMatnr(ids) {
  return request.post({ url: `/matnr/remove/${normalizeIds(ids)}` })
}
export function fetchBindMatnrGroup(payload = {}) {
  return request.post({
    url: '/matnr/group/bind',
    params: {
      ids: normalizeIdList(payload.ids),
      ...(payload.groupId !== undefined && payload.groupId !== null && payload.groupId !== ''
        ? { groupId: Number(payload.groupId) }
        : {})
    }
  })
}
export function fetchBatchUpdateMatnr(payload = {}) {
  const matnr = payload.matnr && typeof payload.matnr === 'object' ? payload.matnr : {}
  return request.post({
    url: '/matnr/batch/update',
    params: {
      ids: normalizeIdList(payload.ids),
      matnr: Object.fromEntries(
        Object.entries(matnr).filter(
          ([, value]) => value !== undefined && value !== null && value !== ''
        )
      )
    }
  })
}
export function fetchMatnrGroupTree(params = {}) {
  return request.post({
    url: '/matnrGroup/tree',
@@ -52,3 +162,36 @@
  })
}
export async function fetchExportMatnrReport(payload = {}, options = {}) {
  return fetch(`${import.meta.env.VITE_API_URL}/matnr/export`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      ...(options.headers || {})
    },
    body: JSON.stringify(payload)
  })
}
export async function fetchDownloadMatnrTemplate(payload = {}, options = {}) {
  return fetch(`${import.meta.env.VITE_API_URL}/matnr/template/download`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      ...(options.headers || {})
    },
    body: JSON.stringify(payload)
  })
}
export function fetchImportMatnr(file) {
  const formData = new FormData()
  formData.append('file', file)
  return request.post({
    url: '/matnr/import',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}