schangxiang@126.com
2025-05-14 856cdf5c19fcc21255ef06335747040711fce530
Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo
已添加18个文件
已修改21个文件
3727 ■■■■ 文件已修改
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.d.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.tsx 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQueryOptions.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/utils/commonOptionConstants.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Controllers/WmsMaterial.ts 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Controllers/WmsMaterialQueryDrawer.tsx 567 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Models/Service/WmsMaterialQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Models/WmsMaterialQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.module.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainer.ts 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainerQueryDrawer.tsx 581 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/Service/WmsContainerQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/WmsContainerQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.module.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.tsx 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainer/GetWmsContainerInput.cs 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/GetWmsMaterialInput.cs 345 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateOrUpdateDtoBase.cs 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialDto.cs 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialExportModel.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialImportModels.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialsImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/IWmsMaterialRepository.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/托盘配置.txt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/物料基础配置.txt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/MainForm.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
import { VNode, Component, DefineComponent } from 'vue'
export interface OptionItemType {
  label?: string
  description?: string
  name?: string
  value: string | number
}
export interface FormItemPropType {
  prop?: string | Ref<string>
  highSelectProp?: string | Ref<string>
  label?: String | Ref<string>
  rules?: any[] | Ref<any[]>
  disabled?: boolean | Ref<boolean>
  isDateControl?: boolean | Ref<boolean>
  placeholder?: string | Ref<string>
  type?: string | Ref<string>
  width?: string | Ref<string>
  el?: string | Component | DefineComponent | Ref<string>
  options?: OptionItemType[] | any[] | Ref<any>
  highSelectAttrs?: object | Ref<object>
  isTitle?: boolean
  title?:string | Component
  [key: string]: any | Ref<string>
}
export interface FormPropsType {
  formData: { [key: string]: any }
  formItemProps: FormItemPropType[]
  [key: string]: any
}
export interface PropsType {
  formItemProps: FormItemPropType[]
  formData: { [key: string]: any }
  labelWidth: string
  [key: string]: any
}
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
.formStyle {
  .formItem {
    // ç§»é™¤å›ºå®šå®½åº¦é™åˆ¶
    width: auto !important;
    margin-right: 0 !important;
  }
  .formControl {
    flex: 1; // è®©æŽ§ä»¶å æ®å‰©ä½™ç©ºé—´
    min-width: 0; // å…è®¸æŽ§ä»¶æ”¶ç¼©
  }
  .formItemLabel {
    display: inline-flex;
    justify-content: flex-end;
    align-items: center;
    flex: 0 0 auto;
    font-size: var(--cs-form-label-font-size);
    color: var(--cs-text-color-regular);
    height: 32px;
    line-height: 32px;
    padding: 0 12px 0 0;
    box-sizing: border-box;
    > img {
      margin-left: 10px;
    }
  }
  :global(.cs-select) {
    width: 100%;
  }
  // ç§»é™¤å›ºå®šå®½åº¦è®¾ç½®
  :global(.cs-form--inline .cs-form-item) {
    width: auto !important;
  }
  :global(.cs-form--inline .cs-form-item:nth-last-of-type(2n)) {
    margin-right: 0 !important;
  }
}
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQuery.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,245 @@
// import { ElInput } from "element-plus";
import {
  defineComponent,
  PropType,
  ref,
  Ref,
  SetupContext,
  computed,
  unref,
  markRaw,
  DefineComponent,
} from 'vue'
import styles from './DyFormForHighQuery.module.scss'
import ElInput from 'element-plus/es/components/input/index'
import Option from '@/components/Select/Option'
import Select from '@/components/Select/Select'
import SelectInput from '@/components/SelectInput/SelectInput'
import type { FormInstance } from 'element-plus'
import Icon from '../Icon/Icon'
import {
  FormPropsType,
  FormItemPropType,
  PropsType,
  OptionItemType,
} from './DyFormForHighQuery.d'
import Variable from '../Variable/Variable'
import Title from '../Title/Title'
import TextareaFlow from '../Flow/Flow'
import get from 'lodash/get'
import set from 'lodash/set'
const formItemElementMap = markRaw<Record<string, any>>({
  input: ElInput,
  select: Select,
  selectInput: SelectInput,
  variable: Variable,
  textareaFlow: TextareaFlow,
})
const Type: Record<string, any> = {
  select: 'select',
}
export default defineComponent<FormPropsType>({
  //@ts-ignore
  name: '动态表单',
  props: {
    labelWidth: {
      type: String,
      default: '100px',
    },
    labelPosition: {
      type: String,
      default: 'left',
    },
    formData: {
      type: Object as PropType<{ [key: string]: any }>,
      default: () => ({}),
    },
    formItemProps: {
      type: Array,
      default: () => [],
    },
    inLine: {
      type: Boolean,
      default: false,
    },
  },
  setup(props: PropsType, { attrs, emit, expose }: SetupContext) {
    const formRef = ref<FormInstance>()
    const form: any = computed({
      get() {
        return props.formData
      },
      set(v) {
        emit('update:formData', v)
      },
    })
    const currentWidgetModel = computed(() => {
      return (path: string) => {
        return get(form.value, path)
      }
    })
    const validate = () => {
      if (!formRef.value) return false
      return new Promise((resolve, reject) => {
        formRef.value?.validate((valid: boolean) => {
          if (valid) {
            resolve(true)
          } else {
            reject(false)
          }
        })
      })
    }
    const resetForm = () => {
      if (!formRef.value) return false
      formRef.value.resetFields()
    }
    const formItemProps = computed(() => {
      return props.formItemProps || []
    })
    expose({ validate, resetForm })
    const FormRender: any = ($props: any) => {
      const item: FormItemPropType = $props.item
      const options = $props.item.options || []
      if (item.el && Type[item.el as string]) {
        return options.map((el: OptionItemType) => (
          <Option
            label={el.label || el.description || el.name}
            value={el.value}
          ></Option>
        ))
      }
      return null
    }
    const FormRenderForHighSelectOptions: any = ($props: any) => {
      const item: FormItemPropType = $props.item
      const options = $props.item.highSelectAttrs?.options || []
      if (1===1) {
        return options.map((el: OptionItemType) => (
          <Option
            label={el.label || el.description || el.name}
            value={el.value}
          ></Option>
        ))
      }
      return null
    }
    const onUpdateModelValue = (v: string | number, prop: string) => {
      set(form.value, prop, v)
    }
    return () => {
      return (
        <div class={styles.formStyle}>
          <el-form
            labelPosition={props.labelPosition}
            labelWidth={props.labelWidth}
            model={form.value}
            ref={formRef}
            inline={props.inLine}
          >
            {formItemProps.value.map(
              (item: FormItemPropType, index: number) => {
                if (item.isTitle) {
                  if (typeof item.title === 'string') {
                    return (
                      <Title style="margin-bottom: 10px">{item.title}</Title>
                    )
                  }
                  return item.title
                }
                const itemProps: FormItemPropType = {}
                Object.entries(item).forEach(([key, value]) => {
                  itemProps[key] = unref(value)
                })
                const el =
                  typeof itemProps.el === 'string'
                    ? formItemElementMap[itemProps.el]
                    : itemProps.el || null
                const Component = el
                const el2 =
                   formItemElementMap['select'];
                const ComponentForHighSelect = el2
                return Component && !item.isHide ? (
                  <el-form-item
                    label={itemProps.label}
                    prop={itemProps.prop}
                    rules={itemProps.rules}
                    key={itemProps.prop}
                    vSlots={
                      itemProps.labelIcon
                        ? {
                            label: () => (
                              <label class={styles.formitemPropsLabel}>
                                {itemProps.label}
                                <Icon icon={itemProps.labelIcon} />
                              </label>
                            ),
                          }
                        : null
                    }
                  >
                   {/* æ·»åŠ çš„æ¯”è¾ƒæ“ä½œç¬¦é€‰æ‹©å™¨ */}
                   {/* ä½¿ç”¨flex布局让三个元素在同一行 */}
                   <div class="flex items-center w-full" style="width:100%">
                  {/* <el-select
                  size="small"
                  style="margin-right: 8px; min-width: 10px;"
                >
                  <el-option label="等于" value="2" />
                  <el-option label="不等于" value="8" />
                </el-select>  */}
                 {/* å½“组件类型不是日期控件时显示ComponentForHighSelect */}
                 {(!itemProps.isDateControl && (
  // ComponentForHighSelect çš„æ¸²æŸ“代码
  <ComponentForHighSelect style="width:150px;"
                   {...itemProps.highSelectAttrs}
                     modelValue={currentWidgetModel.value(itemProps.highSelectAttrs?.prop || '')}
                     onUpdate:modelValue={(val: string | number) =>
                        onUpdateModelValue(val, itemProps.highSelectAttrs?.prop || '')
                      }>
                  <FormRenderForHighSelectOptions item={itemProps} />
                </ComponentForHighSelect>
))}
 {/* æ—¥æœŸæŽ§ä»¶æ—¶çš„占位元素 */}
{itemProps.isDateControl && <span style="width:150px;margin-right:8px;"></span>}
                      &nbsp;
                    <Component
                      style={{
                        width: itemProps.width, // é»˜è®¤å æ»¡å‰©ä½™å®½åº¦
                        // width: itemProps.width , // é»˜è®¤å æ»¡å‰©ä½™å®½åº¦
                        height: itemProps.height,
                      }}
                      {...itemProps}
                      // v-model={form.value[itemProps.prop as keyof any]}
                      modelValue={currentWidgetModel.value(itemProps.prop)}
                      onUpdate:modelValue={(val: string | number) =>
                        onUpdateModelValue(val, itemProps.prop)
                      }
                    >
                      <FormRender item={itemProps} />
                    </Component>
                    </div>
                  </el-form-item>
                ) : null
              }
            )}
          </el-form>
        </div>
      )
    }
  },
})
HIAWms/hiawms_web/src/components/DyFormForHighQuery/DyFormForHighQueryOptions.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
// å­—符串类查询
export const FILTER_MODE_OPTIONS_STRING = [
    { label: '模糊查询', value: 1 },
    { label: '精准查询', value: 2 },
  ];
  // æ•°å­—类查询
export const FILTER_MODE_OPTIONS_NUM = [
    { label: '精准查询', value: 2 },
    { label: '大于等于', value: 3 },
    { label: '小于等于', value: 4 },
    { label: '大于', value: 5 },
    { label: '小于', value: 6 },
    { label: '不等于', value: 7 },
  ];
    // bool查询
export const FILTER_MODE_OPTIONS_BOOL = [
    { label: '精准查询', value: 2 },
    { label: '不等于', value: 7 },
  ];
HIAWms/hiawms_web/src/utils/commonOptionConstants.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
// æ˜¯ å¦(高级查询用)
  export const BOOLEAN_OPTIONS = [
    { label: '是', value: 'true'},
    { label: '否', value: 'false' },
  ];
  // æ˜¯ å¦(新增、修改界面专用)
  export const BOOLEAN_OPTIONS_AddEdit = [
    { label: '是', value: true},
    { label: '否', value: false },
  ];
HIAWms/hiawms_web/src/widgets/HIAWms/Controllers/WmsMaterial.ts
@@ -51,6 +51,11 @@
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
@@ -149,6 +154,15 @@
    sort.value = params.totalCount + 1
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  const onConfirmWmsMaterial = async () => {
    dialogConfig.visible = false
    if (dialogConfig.isAdd) {
@@ -170,11 +184,10 @@
  /**
   * å¯¼å‡º
   */
  const onExport = () => {
    const params = tableRef.value?.getParams()
    exportFile('/api/v1/hIAWms/wmsMaterial/export', params, 'hIAWms')
  const onExport = (data = {}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsMaterial/export', data, '物料基础')
  }
  /**
   * å…³é”®å­—搜索
   */
@@ -236,6 +249,7 @@
    dataSource,
    contextMenu,
    dialogConfig,
    dialogConfigForQuery,
    dialogSettingConfig,
    tableRef,
    current,
@@ -253,6 +267,7 @@
    onRowClick,
    onConfirmWmsMaterial,
    onCheck,
    onAdvancedQuery,
    onAddWmsMaterial,
  }
}
HIAWms/hiawms_web/src/widgets/HIAWms/Controllers/WmsMaterialQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,567 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsMaterialDrawer } from '../Models/WmsMaterialDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
export const useWmsMaterialQueryDrawer = (props: any, ctx?: any) => {
  const wmsMaterialDrawer = injectModel<WmsMaterialDrawer>('WmsMaterialDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  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 inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * é«˜çº§æŸ¥è¯¢çš„form字段
   */
  const formItems = reactive([
    // {
    //   label: '物料编码(唯一标识)',
    //   prop: 'materialCode',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入物料编码(唯一标识)',
    //   highSelectAttrs: {
    //     prop: 'materialCode_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    {
      label: '物料编码',
      prop: 'materialNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料编码(唯一标识)',
      highSelectAttrs: {
        prop: 'materialNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料名称',
      highSelectAttrs: {
        prop: 'materialName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '采购类型',
      prop: 'purchaseType',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入采购类型',
      highSelectAttrs: {
        prop: 'purchaseType_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '物料类型',
      prop: 'materialType',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入物料类型',
      highSelectAttrs: {
        prop: 'materialType_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '主单位',
      prop: 'primaryUnit',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入主单位(如:kg、m、个)',
      highSelectAttrs: {
        prop: 'primaryUnit_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '规格/标准',
      prop: 'standard',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入规格/标准',
      highSelectAttrs: {
        prop: 'standard_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '外径(单位:mm)',
      prop: 'outerDiameter',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入外径(单位:mm)',
      highSelectAttrs: {
        prop: 'outerDiameter_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '壁厚(单位:mm)',
      prop: 'wallThickness',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入壁厚(单位:mm)',
      highSelectAttrs: {
        prop: 'wallThickness_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '材质',
      prop: 'materialQuality',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入材质(如:304不锈钢)',
      highSelectAttrs: {
        prop: 'materialQuality_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '长度(单位:m)',
      prop: 'length',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入长度(单位:m)',
      highSelectAttrs: {
        prop: 'length_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '是否为主支管',
      prop: 'isMainBranch',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入是否为主支管',
      highSelectAttrs: {
        prop: 'isMainBranch_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '生产工厂',
      prop: 'factory',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入生产工厂',
      highSelectAttrs: {
        prop: 'factory_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '证书编号',
      prop: 'certification',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入证书编号',
      highSelectAttrs: {
        prop: 'certification_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '冗余字段1 - é¢„留扩展用途',
    //   prop: 'redundantField1',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField1_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段2 - é¢„留扩展用途',
    //   prop: 'redundantField2',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField2_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段3 - é¢„留扩展用途',
    //   prop: 'redundantField3',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField3_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '',
    //   prop: 'creationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
    {
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入型号',
      highSelectAttrs: {
        prop: 'materialModel_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      materialCode: formData.value.materialCode || '',
      materialCode_FilterMode: formData.value.materialCode_FilterMode || '',
      materialNo: formData.value.materialNo || '',
      materialNo_FilterMode: formData.value.materialNo_FilterMode || '',
      materialName: formData.value.materialName || '',
      materialName_FilterMode: formData.value.materialName_FilterMode || '',
      purchaseType: formData.value.purchaseType || '',
      purchaseType_FilterMode: formData.value.purchaseType_FilterMode || '',
      materialType: formData.value.materialType || '',
      materialType_FilterMode: formData.value.materialType_FilterMode || '',
      primaryUnit: formData.value.primaryUnit || '',
      primaryUnit_FilterMode: formData.value.primaryUnit_FilterMode || '',
      standard: formData.value.standard || '',
      standard_FilterMode: formData.value.standard_FilterMode || '',
      outerDiameter: formData.value.outerDiameter || '',
      outerDiameter_FilterMode: formData.value.outerDiameter_FilterMode || '',
      wallThickness: formData.value.wallThickness || '',
      wallThickness_FilterMode: formData.value.wallThickness_FilterMode || '',
      materialQuality: formData.value.materialQuality || '',
      materialQuality_FilterMode:
        formData.value.materialQuality_FilterMode || '',
      length: formData.value.length || '',
      length_FilterMode: formData.value.length_FilterMode || '',
      isMainBranch: formData.value.isMainBranch || '',
      isMainBranch_FilterMode: formData.value.isMainBranch_FilterMode || '',
      factory: formData.value.factory || '',
      factory_FilterMode: formData.value.factory_FilterMode || '',
      certification: formData.value.certification || '',
      certification_FilterMode: formData.value.certification_FilterMode || '',
      redundantField1: formData.value.redundantField1 || '',
      redundantField1_FilterMode:
        formData.value.redundantField1_FilterMode || '',
      redundantField2: formData.value.redundantField2 || '',
      redundantField2_FilterMode:
        formData.value.redundantField2_FilterMode || '',
      redundantField3: formData.value.redundantField3 || '',
      redundantField3_FilterMode:
        formData.value.redundantField3_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
      materialModel: formData.value.materialModel || '',
      materialModel_FilterMode: formData.value.materialModel_FilterMode || '',
    }
    return data
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data = commonGetFormData()
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data = commonGetFormData()
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.materialCode_FilterMode = 1
    formData.value.materialNo_FilterMode = 1
    formData.value.materialName_FilterMode = 1
    formData.value.purchaseType_FilterMode = 2
    formData.value.materialType_FilterMode = 2
    formData.value.primaryUnit_FilterMode = 1
    formData.value.standard_FilterMode = 1
    formData.value.outerDiameter_FilterMode = 2
    formData.value.wallThickness_FilterMode = 2
    formData.value.materialQuality_FilterMode = 1
    formData.value.length_FilterMode = 2
    formData.value.isMainBranch_FilterMode = 2
    formData.value.factory_FilterMode = 1
    formData.value.certification_FilterMode = 1
    formData.value.redundantField1_FilterMode = 1
    formData.value.redundantField2_FilterMode = 1
    formData.value.redundantField3_FilterMode = 1
    formData.value.remark_FilterMode = 1
    formData.value.materialModel_FilterMode = 1
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    // formData.value.materialCode = ''
    formData.value.materialNo = ''
    formData.value.materialName = ''
    formData.value.purchaseType = ''
    formData.value.materialType = ''
    formData.value.primaryUnit = ''
    formData.value.standard = ''
    formData.value.outerDiameter = ''
    formData.value.wallThickness = ''
    formData.value.materialQuality = ''
    formData.value.length = ''
    formData.value.isMainBranch = ''
    formData.value.factory = ''
    formData.value.certification = ''
    formData.value.redundantField1 = ''
    formData.value.redundantField2 = ''
    formData.value.redundantField3 = ''
    formData.value.remark = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    formData.value.materialModel = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const purchaseTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
      EnumName: 'PurchaseTypeEnum',
    })
    updateFormItemOptions('purchaseType', purchaseTypeEnumEnum)
    const materialTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
      EnumName: 'MaterialTypeEnum',
    })
    updateFormItemOptions('materialType', materialTypeEnumEnum)
    const yesNoEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
      EnumName: 'YesNoEnum',
    })
    updateFormItemOptions('isMainBranch', yesNoEnumEnum)
  }
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
HIAWms/hiawms_web/src/widgets/HIAWms/Models/Service/WmsMaterialQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsMaterial = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsMaterial', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsMaterial = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsMaterial/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsMaterial = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsMaterial/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/HIAWms/Models/WmsMaterialQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsMaterial,
  getWmsMaterial,
  updateWmsMaterial,
  getWmsEnumData,
} from './Service/WmsMaterialQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsMaterialQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsMaterial: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsMaterial(data: Record<string, any>) {
    return addWmsMaterial(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsMaterial(id: string, data: Record<string, any>) {
    return updateWmsMaterial(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsMaterialDetail(current: any, id?: string) {
    return getWmsMaterial(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
 */
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsMaterialQueryDrawer.module.scss'
import { useWmsMaterialQueryDrawer } from '../../../../Controllers/WmsMaterialQueryDrawer.tsx'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    //枚举类型字典
    enumListDict: {
      type: Array as () => Array<{ key: string; value: object }>, // å®šä¹‰æ•°ç»„元素类型
      default: () => [], // é»˜è®¤å€¼
    },
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirmQuery,
      onOpen,
      onReset,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsMaterialQueryDrawer(props, ctx)
    return () => (
      <BaseQueryDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '高级查询'}
        v-model={visible.value}
        close-on-click-modal={true}
        onReset={onReset}
        onConfirmQueryForBase={onConfirmQuery}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyFormForHighQuery
          ref={formRef}
          formData={formData.value}
          labelWidth="150px"
          formItemProps={formItems}
        ></DyFormForHighQuery>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.module.scss
@@ -1,6 +1,6 @@
.wmsMaterialContent {
  width: 100%;
  height: 90%;
  height: 100%;
  .wmsMaterialList {
    width: 100%;
@@ -15,7 +15,7 @@
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-start;
    justify-content: flex-end;
    align-items: center;
  }
}
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx
@@ -9,6 +9,7 @@
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import dayjs from 'dayjs'
import {
  getWmsEnumData,
  getWmsDataList,
@@ -22,6 +23,8 @@
  ElFormItem,
} from 'element-plus'
import { injectModel } from '@/libs/Provider/Provider'
import { FILTER_MODE_OPTIONS_STRING } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import WmsMaterialQueryDrawer from '../Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer'
interface RenderTableType {
  url?: string
@@ -43,6 +46,7 @@
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
@@ -51,6 +55,7 @@
      onError,
      onSearch,
      onRowClick,
      onAdvancedQuery,
      onConfirmWmsMaterial,
      onCheck,
      onAddWmsMaterial,
@@ -60,45 +65,46 @@
      onBeforeUpload,
    } = useWmsMaterial(props, ctx)
    //定义高级查询引用
    const wmsMaterialQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      materialNo: '',
      materialName: '',
      materialType: '',
      purchaseType: '',
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    const queryParams = computed(() => ({
      ...queryForm.value,
      materialType: queryForm.value.materialType || '', // å¤„理下拉
      purchaseType: queryForm.value.purchaseType || '',
    }))
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['MaterialNo', 'MaterialName'])
    const searchFormInputAttrs_Placeholder = ref('请输入物料编号/物料名称')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      materialType: [] as Array<{ label: string; value: any }>,
      purchaseType: [] as Array<{ label: string; value: any }>,
      materialType: [] as Array<{ label: string; value: any }>,
      isMainBranch: [] as Array<{ label: string; value: any }>,
    })
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        // èŽ·å–ç‰©æ–™ç±»åž‹æžšä¸¾
        const materialTypeData = await getWmsEnumData({
          EnumName: 'MaterialTypeEnum',
        const purchaseTypeEnumData = await getWmsEnumData({
          EnumName: 'PurchaseTypeEnum',
        })
        enumOptions.materialType = materialTypeData.map((item) => ({
        enumOptions.purchaseType = purchaseTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        // èŽ·å–é‡‡è´­ç±»åž‹æžšä¸¾
        const purchaseTypeData = await getWmsEnumData({
          EnumName: 'PurchaseTypeEnum',
        const materialTypeEnumData = await getWmsEnumData({
          EnumName: 'MaterialTypeEnum',
        })
        enumOptions.purchaseType = purchaseTypeData.map((item) => ({
        enumOptions.materialType = materialTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const yesNoEnumData = await getWmsEnumData({
          EnumName: 'YesNoEnum',
        })
        enumOptions.isMainBranch = yesNoEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
@@ -107,27 +113,79 @@
      }
    }
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    })
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
    const handleQuery = async () => {
      console.log('查询条件:', queryParams.value)
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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 = {
        materialNo: '',
        materialName: '',
        materialType: '',
        purchaseType: '',
        filter: '',
      queryForm.value.searchVal = ''
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      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.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
@@ -153,7 +211,7 @@
          <BaseTable
            ref={tableRef}
            url={url}
            sortUrlTpl="/api/v1/hIAWms/wmsMaterial/{id}/adjustsort/{sort}"
            sortUrlTpl="/api/v1/HIAWms/wmsMaterial/{id}/adjustsort/{sort}"
            v-model:dataSource={dataSource.value}
            columns={columns}
            contextMenu={contextMenu}
@@ -166,6 +224,57 @@
            isHidePagination={isHidePagination}
            pageSize={20}
            v-slots={{
              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>
                )
              },
              name: ({ row }: any) => {
                return row?.name ? (
                  <TdButton
@@ -198,95 +307,17 @@
            sort={sort.value}
            onConfirm={onConfirmWmsMaterial}
          />
          {/* æ–°å¢žçš„æŸ¥è¯¢è¡¨å• */}
          <ElForm
            inline
            model={queryForm.value}
            class={styles.queryForm}
            label-width="80px"
          >
            <ElFormItem label="关键字">
              <ElInput
                v-model={queryForm.value.filter}
                placeholder="请输入关键字搜索"
                clearable
                class={styles.formItem}
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsMaterialQueryDrawer
            ref="wmsMaterialQueryDrawerRef"
            v-model={dialogConfigForQuery.visible}
            title={dialogConfigForQuery.title}
            row={current.value}
            sort={sort.value}
            onConfirmQuery={handleQuery}
            onRestQuery={resetQuery}
            onClose={closeQuery}
              />
            </ElFormItem>
            <ElFormItem label="物料编码">
              <ElInput
                v-model={queryForm.value.materialNo}
                placeholder="请输入物料编码"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="物料名称">
              <ElInput
                v-model={queryForm.value.materialName}
                placeholder="请输入物料名称"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="物料类型">
              <ElSelect
                v-model={queryForm.value.materialType}
                placeholder="请选择物料类型"
                clearable
                loading={enumOptions.materialType.length === 0}
                class={styles.formItem}
              >
                {enumOptions.materialType.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="采购类型">
              <ElSelect
                v-model={queryForm.value.purchaseType}
                placeholder="请选择采购类型"
                clearable
                loading={enumOptions.purchaseType.length === 0}
                class={styles.formItem}
              >
                {enumOptions.purchaseType.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            {/* <ElFormItem label="日期范围">
              <ElDatePicker
                v-model={queryForm.value.dateRange}
                type="daterange"
                range-separator="至"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                value-format="YYYY-MM-DD"
              />
            </ElFormItem> */}
            <ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQuery}>
                æŸ¥è¯¢
              </IconButton>
              <IconButton
                style="margin-left: 10px;"
                icon="refresh"
                onClick={resetQuery}
              >
                é‡ç½®
              </IconButton>
            </ElFormItem>
          </ElForm>
          <div class={styles.headerContent}>
            <div class={styles.header}>
@@ -299,6 +330,7 @@
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsMaterial-import"
                name="file"
@@ -308,7 +340,7 @@
                onSuccess={onSuccess}
                before-upload={onBeforeUpload}
                headers={headers.value}
                action="/api/v1/hIAWms/wmsMaterial/import"
                action="/api/v1/HIAWms/wmsMaterial/import"
              >
                <IconButton icon="in">导入</IconButton>
              </el-upload>
@@ -316,21 +348,65 @@
              <IconButton
                v-permission="wmsMaterial-output"
                icon="out"
                onClick={onExport}
                onClick={handleExport}
              >
                å¯¼å‡º
              </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>
              <ElFormItem label="" style="width:100px;">
                <ElSelect
                  v-model={queryForm.value.searchVal_FilterMode}
                  placeholder="请选择"
                  class={styles.formItem}
                >
                  {FILTER_MODE_OPTIONS_STRING.map((option) => (
                    <ElOption
                      key={option.value}
                      label={option.label}
                      value={option.value}
                    />
                  ))}
                </ElSelect>
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsMaterial-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/hIAWms/wmsMaterial/page"
            url="/api/v1/HIAWms/wmsMaterial/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainer.ts
@@ -51,7 +51,11 @@
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
@@ -149,6 +153,15 @@
    sort.value = params.totalCount + 1
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  const onConfirmWmsContainer = async () => {
    dialogConfig.visible = false
    if (dialogConfig.isAdd) {
@@ -168,11 +181,12 @@
    }
  }
  /**
   * å¯¼å‡º
   */
  const onExport = () => {
    const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsContainer/export', params, 'wmsContainer')
  const onExport = (data = {}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsContainer/export', data, '托盘管理')
  }
  /**
@@ -241,6 +255,7 @@
    current,
    search,
    sort,
    dialogConfigForQuery,
    wmsContainerColumns,
    paginationParams,
    headers,
@@ -253,6 +268,7 @@
    onRowClick,
    onConfirmWmsContainer,
    onCheck,
    onAdvancedQuery,
    onAddWmsContainer,
  }
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainerQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,581 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsContainerDrawer } from '../Models/WmsContainerDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
export const useWmsContainerQueryDrawer = (props: any, ctx?: any) => {
  const wmsContainerDrawer =
    injectModel<WmsContainerDrawer>('WmsContainerDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  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 inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * é«˜çº§æŸ¥è¯¢çš„form字段
   */
  const formItems = reactive([
    {
      label: '托盘编号',
      prop: 'containerNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入托盘编号',
      highSelectAttrs: {
        prop: 'containerNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '托盘类型',
      prop: 'containerType',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入托盘类型',
      highSelectAttrs: {
        prop: 'containerType_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '托盘状态',
      prop: 'containerStatus',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入托盘状态',
      highSelectAttrs: {
        prop: 'containerStatus_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '长度',
      prop: 'specLength',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入长度',
      highSelectAttrs: {
        prop: 'specLength_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '宽度',
      prop: 'specWidth',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入宽度',
      highSelectAttrs: {
        prop: 'specWidth_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '高度',
      prop: 'specHeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入高度',
      highSelectAttrs: {
        prop: 'specHeight_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '限长',
      prop: 'limitLength',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入限长',
      highSelectAttrs: {
        prop: 'limitLength_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '限宽',
      prop: 'limitWidth',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入限宽',
      highSelectAttrs: {
        prop: 'limitWidth_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '限高',
      prop: 'limitHeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入限高',
      highSelectAttrs: {
        prop: 'limitHeight_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '载重上限',
      prop: 'maxWeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入载重上限',
      highSelectAttrs: {
        prop: 'maxWeight_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    // {
    //   label: '异常数量',
    //   prop: 'exceptionNumber',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(inputNumber, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   step: 1,
    //   precision: 0,
    //   //disabled: disabled,
    //   placeholder: '请输入异常数量',
    //   highSelectAttrs: {
    //     prop: 'exceptionNumber_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_NUM,
    //   },
    // },
    // {
    //   label: '物料数量',
    //   prop: 'materialNumber',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(inputNumber, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   step: 1,
    //   precision: 0,
    //   //disabled: disabled,
    //   placeholder: '请输入物料数量',
    //   highSelectAttrs: {
    //     prop: 'materialNumber_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_NUM,
    //   },
    // },
    // {
    //   label: '冗余字段1 - é¢„留扩展用途',
    //   prop: 'redundantField1',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField1_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段2 - é¢„留扩展用途',
    //   prop: 'redundantField2',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField2_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段3 - é¢„留扩展用途',
    //   prop: 'redundantField3',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField3_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '',
    //   prop: 'creationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
    // {
    //   label: '',
    //   prop: 'lastModificationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      containerNo: formData.value.containerNo || '',
      containerNo_FilterMode: formData.value.containerNo_FilterMode || '',
      containerType: formData.value.containerType || '',
      containerType_FilterMode: formData.value.containerType_FilterMode || '',
      containerStatus: formData.value.containerStatus || '',
      containerStatus_FilterMode:
        formData.value.containerStatus_FilterMode || '',
      specLength: formData.value.specLength || '',
      specLength_FilterMode: formData.value.specLength_FilterMode || '',
      specWidth: formData.value.specWidth || '',
      specWidth_FilterMode: formData.value.specWidth_FilterMode || '',
      specHeight: formData.value.specHeight || '',
      specHeight_FilterMode: formData.value.specHeight_FilterMode || '',
      limitLength: formData.value.limitLength || '',
      limitLength_FilterMode: formData.value.limitLength_FilterMode || '',
      limitWidth: formData.value.limitWidth || '',
      limitWidth_FilterMode: formData.value.limitWidth_FilterMode || '',
      limitHeight: formData.value.limitHeight || '',
      limitHeight_FilterMode: formData.value.limitHeight_FilterMode || '',
      maxWeight: formData.value.maxWeight || '',
      maxWeight_FilterMode: formData.value.maxWeight_FilterMode || '',
      exceptionNumber: formData.value.exceptionNumber || '',
      exceptionNumber_FilterMode:
        formData.value.exceptionNumber_FilterMode || '',
      materialNumber: formData.value.materialNumber || '',
      materialNumber_FilterMode: formData.value.materialNumber_FilterMode || '',
      redundantField1: formData.value.redundantField1 || '',
      redundantField1_FilterMode:
        formData.value.redundantField1_FilterMode || '',
      redundantField2: formData.value.redundantField2 || '',
      redundantField2_FilterMode:
        formData.value.redundantField2_FilterMode || '',
      redundantField3: formData.value.redundantField3 || '',
      redundantField3_FilterMode:
        formData.value.redundantField3_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
    }
    return data
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data = commonGetFormData()
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data = commonGetFormData()
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.containerNo_FilterMode = 1
    formData.value.containerType_FilterMode = 2
    formData.value.containerStatus_FilterMode = 2
    formData.value.specLength_FilterMode = 2
    formData.value.specWidth_FilterMode = 2
    formData.value.specHeight_FilterMode = 2
    formData.value.limitLength_FilterMode = 2
    formData.value.limitWidth_FilterMode = 2
    formData.value.limitHeight_FilterMode = 2
    formData.value.maxWeight_FilterMode = 2
    formData.value.exceptionNumber_FilterMode = 2
    formData.value.materialNumber_FilterMode = 2
    formData.value.redundantField1_FilterMode = 1
    formData.value.redundantField2_FilterMode = 1
    formData.value.redundantField3_FilterMode = 1
    formData.value.remark_FilterMode = 1
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    formData.value.containerNo = ''
    formData.value.containerType = ''
    formData.value.containerStatus = ''
    formData.value.specLength = ''
    formData.value.specWidth = ''
    formData.value.specHeight = ''
    formData.value.limitLength = ''
    formData.value.limitWidth = ''
    formData.value.limitHeight = ''
    formData.value.maxWeight = ''
    formData.value.exceptionNumber = ''
    formData.value.materialNumber = ''
    formData.value.redundantField1 = ''
    formData.value.redundantField2 = ''
    formData.value.redundantField3 = ''
    formData.value.remark = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const containerTypeEnumEnum = await wmsContainerDrawer.getWmsEnumData({
      EnumName: 'ContainerTypeEnum',
    })
    updateFormItemOptions('containerType', containerTypeEnumEnum)
    const containerStatusEnumEnum = await wmsContainerDrawer.getWmsEnumData({
      EnumName: 'ContainerStatusEnum',
    })
    updateFormItemOptions('containerStatus', containerStatusEnumEnum)
  }
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/Service/WmsContainerQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsContainer = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsContainer', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsContainer = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsContainer/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsContainer = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsContainer/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/WmsContainerQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsContainer,
  getWmsContainer,
  updateWmsContainer,
  getWmsEnumData,
} from './Service/WmsContainerQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsContainerQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsContainer: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsContainer(data: Record<string, any>) {
    return addWmsContainer(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsContainer(id: string, data: Record<string, any>) {
    return updateWmsContainer(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsContainerDetail(current: any, id?: string) {
    return getWmsContainer(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsContainerQueryDrawer.module.scss'
import { useWmsContainerQueryDrawer } from '../../../../Controllers/WmsContainerQueryDrawer.tsx'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    //枚举类型字典
    enumListDict:{
      type: Array as () => Array<{ key: string; value: object }>, // å®šä¹‰æ•°ç»„元素类型
      default: () => [] // é»˜è®¤å€¼
    },
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirmQuery,
      onOpen,
      onReset,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsContainerQueryDrawer(props, ctx)
    return () => (
      <BaseQueryDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '高级查询'}
        v-model={visible.value}
        close-on-click-modal={true}
        onReset={onReset}
        onConfirmQueryForBase={onConfirmQuery}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyFormForHighQuery
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyFormForHighQuery>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.module.scss
@@ -1,6 +1,6 @@
.wmsContainerContent {
  width: 100%;
  height: 90%;
  height: 100%;
  .wmsContainerList {
    width: 100%;
@@ -15,7 +15,7 @@
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-start;
    justify-content: flex-end;
    align-items: center;
  }
}
@@ -75,7 +75,6 @@
.hideBlock {
  display: none;
}
.queryForm {
  padding: 10px;
  background: #f5f7fa;
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.tsx
@@ -5,12 +5,24 @@
import { useWmsContainer } from '../../../Controllers/WmsContainer'
import IconButton from '@/components/IconButton/IconButton'
import WmsContainerDrawer from '../Dialog/WmsContainerDrawer/WmsContainerDrawer'
import WmsContainerQueryDrawer from '../Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer'
import Search from '@/components/Search/Search'
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
import { ElForm, ElFormItem, ElInput, ElOption, ElSelect } from 'element-plus'
import dayjs from 'dayjs'
import { getWmsEnumData } from '@/widgets/WmsContainer/Models/Service/WmsContainerDrawer'
import {
  ElInput,
  ElSelect,
  ElOption,
  ElDatePicker,
  ElForm,
  ElFormItem,
} from 'element-plus'
import { injectModel } from '@/libs/Provider/Provider'
// å¼•入公共选项配置
import { FILTER_MODE_OPTIONS_STRING } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
interface RenderTableType {
  url?: string
@@ -32,6 +44,7 @@
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
@@ -43,25 +56,24 @@
      onConfirmWmsContainer,
      onCheck,
      onAddWmsContainer,
      onAdvancedQuery,
      onExport,
      openDetail,
      onSuccess,
      onBeforeUpload,
    } = useWmsContainer(props, ctx)
    //定义高级查询引用
    const wmsContainerQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      containerNo: '',
      containerType: '',
      containerStatus: '',
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    const queryParams = computed(() => ({
      ...queryForm.value,
      containerType: queryForm.value.containerType || '', // å¤„理下拉
      containerStatus: queryForm.value.containerStatus || '',
    }))
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['ContainerNo'])
    const searchFormInputAttrs_Placeholder = ref('请输入托盘编号')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
@@ -72,20 +84,17 @@
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        // èŽ·å–ç‰©æ–™ç±»åž‹æžšä¸¾
        const containerTypeData = await getWmsEnumData({
        const containerTypeEnumData = await getWmsEnumData({
          EnumName: 'ContainerTypeEnum',
        })
        enumOptions.containerType = containerTypeData.map((item) => ({
        enumOptions.containerType = containerTypeEnumData.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,
        }))
@@ -94,26 +103,79 @@
      }
    }
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    })
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
    const handleQuery = async () => {
      console.log('查询条件:', queryParams.value)
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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 = {
        containerNo: '',
        containerType: '',
        containerStatus: '',
        filter: '',
      queryForm.value.searchVal = ''
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      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.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
@@ -129,7 +191,7 @@
        params,
        autoHeight,
      } = props
      console.log(dataSource.value)
      return (
        <div
          class={{
@@ -150,8 +212,59 @@
            onCheck={onCheck}
            onRowClick={onRowClick}
            isHidePagination={isHidePagination}
            pageSize={50}
            pageSize={20}
            v-slots={{
              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>
                )
              },
              name: ({ row }: any) => {
                return row?.name ? (
                  <TdButton
@@ -172,6 +285,7 @@
        </div>
      )
    }
    return () => {
      return (
        <div class={styles.wmsContainerContent}>
@@ -183,87 +297,17 @@
            sort={sort.value}
            onConfirm={onConfirmWmsContainer}
          />
          {/* æ–°å¢žçš„æŸ¥è¯¢è¡¨å• */}
          <ElForm
            inline
            model={queryForm.value}
            class={styles.queryForm}
            label-width="80px"
          >
            <ElFormItem label="关键字">
              <ElInput
                v-model={queryForm.value.filter}
                placeholder="请输入关键字搜索"
                clearable
                class={styles.formItem}
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsContainerQueryDrawer
            ref="wmsContainerQueryDrawerRef"
            v-model={dialogConfigForQuery.visible}
            title={dialogConfigForQuery.title}
            row={current.value}
            sort={sort.value}
            onConfirmQuery={handleQuery}
            onRestQuery={resetQuery}
            onClose={closeQuery}
              />
            </ElFormItem>
            <ElFormItem label="物料编码">
              <ElInput
                v-model={queryForm.value.containerNo}
                placeholder="请输入托盘编码"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="物料类型">
              <ElSelect
                v-model={queryForm.value.containerType}
                placeholder="请选择托盘类型"
                clearable
                loading={enumOptions.containerType.length === 0}
                class={styles.formItem}
              >
                {enumOptions.containerType.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="托盘状态">
              <ElSelect
                v-model={queryForm.value.containerStatus}
                placeholder="请选择托盘状态"
                clearable
                loading={enumOptions.containerStatus.length === 0}
                class={styles.formItem}
              >
                {enumOptions.containerStatus.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            {/* <ElFormItem label="日期范围">
              <ElDatePicker
                v-model={queryForm.value.dateRange}
                type="daterange"
                range-separator="至"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                value-format="YYYY-MM-DD"
              />
            </ElFormItem> */}
            <ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQuery}>
                æŸ¥è¯¢
              </IconButton>
              <IconButton
                style="margin-left: 10px;"
                icon="refresh"
                onClick={resetQuery}
              >
                é‡ç½®
              </IconButton>
            </ElFormItem>
          </ElForm>
          <div class={styles.headerContent}>
            <div class={styles.header}>
@@ -276,6 +320,7 @@
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsContainer-import"
                name="file"
@@ -293,20 +338,65 @@
              <IconButton
                v-permission="wmsContainer-output"
                icon="out"
                onClick={onExport}
                onClick={handleExport}
              >
                å¯¼å‡º
              </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>
              <ElFormItem label="" style="width:100px;">
                <ElSelect
                  v-model={queryForm.value.searchVal_FilterMode}
                  placeholder="请选择"
                  class={styles.formItem}
                >
                  {FILTER_MODE_OPTIONS_STRING.map((option) => (
                    <ElOption
                      key={option.value}
                      label={option.label}
                      value={option.value}
                    />
                  ))}
                </ElSelect>
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsContainer-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsContainer"
            url="/api/v1/HIAWms/wmsContainer/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainer/GetWmsContainerInput.cs
@@ -1,22 +1,48 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainer;
/// <summary>
/// WmsContainer查询参数对象
/// æ‰˜ç›˜ç®¡ç†æŸ¥è¯¢å‚æ•°
/// </summary>
public class GetWmsContainerInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    #region å…³é”®å­—查询
    /// <summary>
    /// Gets or sets the name.
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string Name { get; set; }
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
    /// <summary>
    /// æ‰˜ç›˜ç¼–号
@@ -24,12 +50,243 @@
    public string ContainerNo { get; set; }
    /// <summary>
        /// æ‰˜ç›˜ç¼–号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
        public ContainerTypeEnum?  ContainerType { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
        public ContainerStatusEnum?  ContainerStatus { get; set; }
        /// <summary>
        /// æ‰˜ç›˜çŠ¶æ€-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerStatus_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public decimal?  SpecLength { get; set; }
        /// <summary>
        /// é•¿åº¦-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SpecLength_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public decimal?  SpecWidth { get; set; }
        /// <summary>
        /// å®½åº¦-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SpecWidth_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public decimal?  SpecHeight { get; set; }
        /// <summary>
        /// é«˜åº¦-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SpecHeight_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é™é•¿
        /// </summary>
        public decimal?  LimitLength { get; set; }
        /// <summary>
        /// é™é•¿-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LimitLength_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é™å®½
        /// </summary>
        public decimal?  LimitWidth { get; set; }
        /// <summary>
        /// é™å®½-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LimitWidth_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é™é«˜
        /// </summary>
        public decimal?  LimitHeight { get; set; }
        /// <summary>
        /// é™é«˜-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LimitHeight_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public decimal?  MaxWeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaxWeight_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¼‚常数量
        /// </summary>
        public int?  ExceptionNumber { get; set; }
        /// <summary>
        /// å¼‚常数量-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExceptionNumber_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç‰©æ–™æ•°é‡
        /// </summary>
        public int?  MaterialNumber { get; set; }
        /// <summary>
        /// ç‰©æ–™æ•°é‡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNumber_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField1_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField2_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField3_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string DeletionTime { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/GetWmsMaterialInput.cs
@@ -1,22 +1,58 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// WmsMaterial查询参数对象
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å‚æ•°
/// </summary>
public class GetWmsMaterialInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    #region å…³é”®å­—查询
    /// <summary>
    /// Gets or sets the name.
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string Name { get; set; }
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
            /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
@@ -24,9 +60,252 @@
    public string MaterialNo { get; set; }
    /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public PurchaseTypeEnum?  PurchaseType { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PurchaseType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public MaterialTypeEnum?  MaterialType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        public string PrimaryUnit { get; set; }
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PrimaryUnit_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        public string Standard { get; set; }
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Standard_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å¤–径(单位:mm)
        /// </summary>
        public decimal?  OuterDiameter { get; set; }
        /// <summary>
        /// å¤–径(单位:mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OuterDiameter_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        public decimal?  WallThickness { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum WallThickness_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        public string MaterialQuality { get; set; }
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialQuality_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        public decimal?  Length { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Length_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        public YesNoEnum?  IsMainBranch { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsMainBranch_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        public string Factory { get; set; }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Factory_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è¯ä¹¦ç¼–号
        /// </summary>
        public string Certification { get; set; }
        /// <summary>
        /// è¯ä¹¦ç¼–号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Certification_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField1_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField2_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField3_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string DeletionTime { get; set; }
    /// <summary>
@@ -35,57 +314,9 @@
    public string MaterialModel { get; set; }
    /// <summary>
    /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// åž‹å·-查询关系运算符
    /// </summary>
    public PurchaseTypeEnum PurchaseType { get; set; }
        public SearchFilterModeEnum MaterialModel_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
    /// </summary>
    public MaterialTypeEnum MaterialType { get; set; }
    /// <summary>
    /// ä¸»å•位(如:kg、m、个)
    /// </summary>
    public string PrimaryUnit { get; set; }
    /// <summary>
    /// è§„æ ¼/标准(如:GB/T 8163-2018)
    /// </summary>
    public string Standard { get; set; }
    /// <summary>
    /// å¤–径(单位:mm)
    /// </summary>
    public decimal OuterDiameter { get; set; }
    /// <summary>
    /// å£åŽšï¼ˆå•ä½ï¼šmm)
    /// </summary>
    public decimal WallThickness { get; set; }
    /// <summary>
    /// æè´¨ï¼ˆå¦‚:304不锈钢)
    /// </summary>
    public string MaterialQuality { get; set; }
    /// <summary>
    /// é•¿åº¦ï¼ˆå•位:m)
    /// </summary>
    public decimal Length { get; set; }
    /// <summary>
    /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡ï¼ˆtrue: ä¸»æ”¯ç®¡, false: éžä¸»æ”¯ç®¡ï¼‰
    /// </summary>
    public YesNoEnum IsMainBranch { get; set; }
    /// <summary>
    /// ç”Ÿäº§å·¥åŽ‚
    /// </summary>
    public string Factory { get; set; }
    /// <summary>
    /// è¯ä¹¦ç¼–号(如:压力容器认证)
    /// </summary>
    public string Certification { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs
@@ -1,7 +1,7 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// WmsMaterial创建参数对象
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯åˆ›å»ºå‚数对象
/// </summary>
public class WmsMaterialCreateDto : WmsMaterialCreateOrUpdateDtoBase
{
@@ -14,4 +14,9 @@
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreatorName { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateOrUpdateDtoBase.cs
@@ -1,13 +1,19 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// WmsMaterial创建或更新基类
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯åˆ›å»ºæˆ–更新基类
/// </summary>
public abstract class WmsMaterialCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
    /// </summary>
@@ -18,10 +24,6 @@
    /// </summary>
    public string MaterialName { get; set; }
    /// <summary>
    /// åž‹å·
    /// </summary>
    public string MaterialModel { get; set; }
    /// <summary>
    /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
    /// </summary>
@@ -35,12 +37,12 @@
    /// <summary>
    /// ä¸»å•位(如:kg、m、个)
    /// </summary>
    public string PrimaryUnit { get; set; }
        public string? PrimaryUnit { get; set; }
    /// <summary>
    /// è§„æ ¼/标准(如:GB/T 8163-2018)
    /// </summary>
    public string Standard { get; set; }
        public string? Standard { get; set; }
    /// <summary>
    /// å¤–径(单位:mm)
@@ -55,7 +57,7 @@
    /// <summary>
    /// æè´¨ï¼ˆå¦‚:304不锈钢)
    /// </summary>
    public string MaterialQuality { get; set; }
        public string? MaterialQuality { get; set; }
    /// <summary>
    /// é•¿åº¦ï¼ˆå•位:m)
@@ -63,38 +65,71 @@
    public decimal Length { get; set; }
    /// <summary>
    /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡ï¼ˆtrue: ä¸»æ”¯ç®¡, false: éžä¸»æ”¯ç®¡ï¼‰
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
    /// </summary>
    public YesNoEnum IsMainBranch { get; set; }
    /// <summary>
    /// ç”Ÿäº§å·¥åŽ‚
    /// </summary>
    public string Factory { get; set; }
        public string? Factory { get; set; }
    /// <summary>
    /// è¯ä¹¦ç¼–号(如:压力容器认证)
        /// è¯ä¹¦ç¼–号
    /// </summary>
    public string Certification { get; set; }
        public string? Certification { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
        public string? RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
        public string? RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
        public string? RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
        public string? Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string? MaterialModel { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialCreateOrUpdateDtoBase"/> class.
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialDto.cs
@@ -1,15 +1,22 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// WmsMaterial数据参数对象
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯æ•°æ®å‚数对象
/// </summary>
public class WmsMaterialDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
    /// </summary>
@@ -35,7 +42,6 @@
            return GetEnumDescriptionUtil.GetEnumDescription(PurchaseType);
        }
    }
    /// <summary>
    /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
    /// </summary>
@@ -51,16 +57,15 @@
            return GetEnumDescriptionUtil.GetEnumDescription(MaterialType);
        }
    }
    /// <summary>
    /// ä¸»å•位(如:kg、m、个)
    /// </summary>
    public string PrimaryUnit { get; set; }
        public string? PrimaryUnit { get; set; }
    /// <summary>
    /// è§„æ ¼/标准(如:GB/T 8163-2018)
    /// </summary>
    public string Standard { get; set; }
        public string? Standard { get; set; }
    /// <summary>
    /// å¤–径(单位:mm)
@@ -75,7 +80,7 @@
    /// <summary>
    /// æè´¨ï¼ˆå¦‚:304不锈钢)
    /// </summary>
    public string MaterialQuality { get; set; }
        public string? MaterialQuality { get; set; }
    /// <summary>
    /// é•¿åº¦ï¼ˆå•位:m)
@@ -83,7 +88,7 @@
    public decimal Length { get; set; }
    /// <summary>
    /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡ï¼ˆ1: ä¸»æ”¯ç®¡, 2: éžä¸»æ”¯ç®¡ï¼‰
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
    /// </summary>
    public YesNoEnum IsMainBranch { get; set; }
@@ -97,54 +102,97 @@
            return GetEnumDescriptionUtil.GetEnumDescription(IsMainBranch);
        }
    }
    /// <summary>
    /// åž‹å·
    /// </summary>
    public string MaterialModel { get; set; }
    /// <summary>
    /// ç”Ÿäº§å·¥åŽ‚
    /// </summary>
    public string Factory { get; set; }
        public string? Factory { get; set; }
    /// <summary>
    /// è¯ä¹¦ç¼–号(如:压力容器认证)
        /// è¯ä¹¦ç¼–号
    /// </summary>
    public string Certification { get; set; }
        public string? Certification { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
        public string? RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
        public string? RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
        public string? RedundantField3 { get; set; }
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int Sort { get; set; }
        public int Sort { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
        public string? Remark { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public virtual bool? IsDisabled { get; set; }
        public bool? IsDisabled { get; set; }
    /// <summary>
    /// å¹¶å‘戳
        ///
    /// </summary>
    public string ConcurrencyStamp { get; set; }
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string? MaterialModel { get; set; }
    /// <summary>
    /// Gets the export data.
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialExportModel.cs
@@ -1,144 +1,115 @@
using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial
{
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
    /// <summary>
    /// WmsMaterial导出模型
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯å¯¼å‡ºæ¨¡åž‹
    /// </summary>
    public class MaterialExportModel
public class WmsMaterialExportModel
    {
        /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        /// <example>MAT-2023-001</example>
        [ExcelColumn(Name = "物料编码", Width = 25)]
    //[ExcelColumn(Name = "物料编码(唯一标识)", Width = 25)]
    //public string MaterialCode { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
    /// </summary>
    [ExcelColumn(Name = "物料编码(唯一标识)", Width = 25)]
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        /// <example>304不锈钢管</example>
        [ExcelColumn(Name = "物料名称", Width = 25)]
        public string MaterialName { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹
    /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        /// <remarks>
        /// 0:标准采购 1:紧急采购 2:协议采购
        /// </remarks>
        /// <example>0</example>
        [ExcelColumn(Name = "采购类型", Width = 25)]
    [ExcelColumn(Name = "采购类型(枚举值)", Width = 25)]
        public PurchaseTypeEnum PurchaseType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹
    /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        /// <remarks>
        /// 1:原材料 2:半成品 3:成品
        /// </remarks>
        /// <example>1</example>
        [ExcelColumn(Name = "物料类型", Width = 25)]
    [ExcelColumn(Name = "物料类型(枚举值)", Width = 25)]
        public MaterialTypeEnum MaterialType { get; set; }
        /// <summary>
        /// ä¸»è®¡é‡å•位
    /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        /// <example>kg</example>
        [ExcelColumn(Name = "主单位", Width = 25)]
    [ExcelColumn(Name = "主单位(如:kg、m、个)", Width = 25)]
        public string PrimaryUnit { get; set; }
        /// <summary>
        /// è§„æ ¼/技术标准
    /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        /// <example>GB/T 8163-2018</example>
        [ExcelColumn(Name = "规格/标准", Width = 25)]
    [ExcelColumn(Name = "规格/标准(如:GB/T 8163-2018)", Width = 25)]
        public string Standard { get; set; }
        /// <summary>
        /// å¤–径(单位:毫米)
    /// å¤–径(单位:mm)
        /// </summary>
        /// <example>50.5</example>
        [ExcelColumn(Name = "外径(mm)", Width = 25)]
    [ExcelColumn(Name = "外径(单位:mm)", Width = 25)]
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šæ¯«ç±³ï¼‰
    /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        /// <example>2.5</example>
        [ExcelColumn(Name = "壁厚(mm)", Width = 25)]
    [ExcelColumn(Name = "壁厚(单位:mm)", Width = 25)]
        public decimal WallThickness { get; set; }
        /// <summary>
        /// æè´¨è¯´æ˜Ž
    /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        /// <example>304不锈钢</example>
        [ExcelColumn(Name = "材质", Width = 25)]
    [ExcelColumn(Name = "材质(如:304不锈钢)", Width = 25)]
        public string MaterialQuality { get; set; }
        /// <summary>
        /// åž‹å·
    /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        [ExcelColumn(Name = "型号", Width = 25)]
        public string MaterialModel { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:米)
        /// </summary>
        /// <example>6.0</example>
        [ExcelColumn(Name = "长度(m)", Width = 25)]
    [ExcelColumn(Name = "长度(单位:m)", Width = 25)]
        public decimal Length { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸»æ”¯ç®¡æ ‡è¯†
    /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        /// <example>true</example>
        [ExcelColumn(Name = "是否主支管", Width = 25)]
        [Description("是/否")]
    [ExcelColumn(Name = "是否为主支管", Width = 25)]
        public YesNoEnum IsMainBranch { get; set; }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚åç§°
    /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        /// <example>上海第一工厂</example>
        [ExcelColumn(Name = "生产工厂", Width = 25)]
        public string Factory { get; set; }
        /// <summary>
        /// è®¤è¯è¯ä¹¦ç¼–号
    /// è¯ä¹¦ç¼–号
        /// </summary>
        /// <example>CER-2023-001</example>
        [ExcelColumn(Name = "证书编号", Width = 25)]
        public string Certification { get; set; }
        /// <summary>
        /// é¢„留扩展字段1
    /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        /// <remarks>
        /// å¯ç”¨äºŽä¸´æ—¶å­˜å‚¨ä¾›åº”商编码等扩展信息
        /// </remarks>
        [ExcelColumn(Name = "扩展字段1", Width = 25)]
    [ExcelColumn(Name = "冗余字段1 - é¢„留扩展用途", Width = 25)]
        public string RedundantField1 { get; set; }
        /// <summary>
        /// é¢„留扩展字段2
    /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        /// <remarks>
        /// å¯ç”¨äºŽä¸´æ—¶å­˜å‚¨æ‰¹æ¬¡å·ç­‰æ‰©å±•信息
        /// </remarks>
        [ExcelColumn(Name = "扩展字段2", Width = 25)]
    [ExcelColumn(Name = "冗余字段2 - é¢„留扩展用途", Width = 25)]
        public string RedundantField2 { get; set; }
        /// <summary>
        /// é¢„留扩展字段3
    /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        /// <remarks>
        /// å¯ç”¨äºŽä¸´æ—¶å­˜å‚¨è‡ªå®šä¹‰åˆ†ç±»ç­‰æ‰©å±•信息
        /// </remarks>
        [ExcelColumn(Name = "扩展字段3", Width = 25)]
    [ExcelColumn(Name = "冗余字段3 - é¢„留扩展用途", Width = 25)]
        public string RedundantField3 { get; set; }
        /// <summary>
@@ -146,6 +117,24 @@
        /// </summary>
        [ExcelColumn(Name = "备注",Width = 25)]
        public string Remark { get; set; }
    /// <summary>
    ///
    /// </summary>
    [ExcelColumn(Name = "", Width = 25)]
    public DateTime CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    [ExcelColumn(Name = "", Width = 25)]
    public DateTime LastModificationTime { get; set; }
    /// <summary>
    /// åž‹å·
    /// </summary>
    [ExcelColumn(Name = "型号", Width = 25)]
    public string MaterialModel { get; set; }
        public Dictionary<string, object> GetExportData()
        {
@@ -158,5 +147,3 @@
            return exportData;
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialImportModels.cs
@@ -22,7 +22,7 @@
        /// <summary>
        /// WmsMaterial导入模型
        /// </summary>
        public class WmsMaterialImportModel : MaterialExportModel
        public class WmsMaterialImportModel : WmsMaterialExportModel
        {
            /// <summary>
            /// è¡Œå·
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs
@@ -1,9 +1,8 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// WmsMaterial更新参数对象
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯æ›´æ–°å‚数对象
/// </summary>
public class WmsMaterialUpdateDto : WmsMaterialCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
@@ -11,4 +10,9 @@
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string LastModifierName { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialsImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial
{
    /// <summary>
    /// ç‰©æ–™åŸºç¡€ä¿¡æ¯å¯¼å…¥æ¨¡åž‹
    /// </summary>
    public class WmsMaterialsImportModel
    {
        private List<WmsMaterialImportModel> _WmsMaterials = new();
        public List<WmsMaterialImportModel> WmsMaterials
        {
            get => _WmsMaterials;
            set
            {
                _WmsMaterials = value;
                var rowIndex = 2;
                _WmsMaterials?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// ç‰©æ–™åŸºç¡€ä¿¡æ¯å¯¼å…¥æ¨¡åž‹
        /// </summary>
        public class WmsMaterialImportModel : WmsMaterialExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs
@@ -4,6 +4,8 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
@@ -41,12 +43,40 @@
            input.Sorting = nameof(WmsContainer.Sort);
        }
        var specification = new WmsContainerSpecification(input.Name);
        var container = ObjectMapper.Map < GetWmsContainerInput, WmsContainer>(input);
        var count = await _wmscontainerRepository.GetCountAsync(container,input.Filter, specification);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _wmscontainerRepository.GetCountAsync(whereConditions);
        var list = await _wmscontainerRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsContainerDto>(count, ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsContainer, bool>>> DynamicGetQueryParams(GetWmsContainerInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsContainer, GetWmsContainerInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsContainer, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsContainer, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <inheritdoc />
@@ -299,6 +329,11 @@
    }
    /// <inheritdoc />
    /// <summary>
    /// å¯¼å‡ºæ‰˜ç›˜ç®¡ç†
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainerInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -308,9 +343,14 @@
            input.Sorting = nameof(WmsContainer.Sort);
        }
        var specification = new WmsContainerSpecification(input.Name);
        var container = ObjectMapper.Map<GetWmsContainerInput, WmsContainer>(input);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmscontainerRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -318,7 +358,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsContainer列表" : result.Count == 1 ? result.First()?.ContainerNo : "WmsContainer模版";
        var fileName = "托盘管理";
        return (sheets, fileName);
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
@@ -4,6 +4,8 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
@@ -42,13 +44,40 @@
            input.Sorting = nameof(WmsMaterial.Sort);
        }
        var specification = new WmsMaterialSpecification(input.Name);
        var material = ObjectMapper.Map<GetWmsMaterialInput, WmsMaterial>(input);
        var count = await _wmsmaterialRepository.GetCountAsync(material,input.Filter, specification);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        var list = await _wmsmaterialRepository.GetListAsync(material,input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _wmsmaterialRepository.GetCountAsync(whereConditions);
        var list = await _wmsmaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsMaterialDto>(count, ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> DynamicGetQueryParams(GetWmsMaterialInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsMaterial, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsMaterial, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <inheritdoc />
@@ -311,7 +340,11 @@
        }
    }
    /// <inheritdoc />
    /// <summary>
    /// å¯¼å‡ºç‰©æ–™åŸºç¡€ä¿¡æ¯
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -321,10 +354,16 @@
            input.Sorting = nameof(WmsMaterial.Sort);
        }
        var specification = new WmsMaterialSpecification(input.Name);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        var material = ObjectMapper.Map<GetWmsMaterialInput, WmsMaterial>(input);
        var list = await _wmsmaterialRepository.GetListAsync(material,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmsmaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -332,7 +371,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsMaterial列表" : result.Count == 1 ? result[0]?.MaterialNo : "WmsMaterial模版";
        var fileName = "物料基础";
        return (sheets, fileName);
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs
@@ -1,3 +1,5 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
@@ -41,7 +43,7 @@
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsContainer>> GetListAsync(WmsContainer? container, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsContainer> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    Task<List<WmsContainer>> GetListAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// Gets the count asynchronous.
@@ -50,5 +52,5 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/IWmsMaterialRepository.cs
@@ -1,3 +1,5 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
@@ -49,7 +51,7 @@
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsMaterial>> GetListAsync(WmsMaterial material, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsMaterial> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–ç‰©æ–™åŸºç¡€åˆ—è¡¨
@@ -65,7 +67,7 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsMaterial material, string filter = null, Specification<WmsMaterial> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–ç‰©æ–™åˆ—è¡¨
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs
@@ -1,6 +1,8 @@
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
@@ -51,51 +53,37 @@
    }
    /// <summary>
    /// æŸ¥è¯¢åˆ—表
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨æ‰˜ç›˜ç®¡ç†
    /// </summary>
    /// <param name="container"></param>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsContainer>> GetListAsync(WmsContainer? container,string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsContainer> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    public async Task<List<WmsContainer>> GetListAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.ContainerNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(container.ContainerNo),u=>u.ContainerNo.Contains(container.ContainerNo))
            .WhereIf(container.ContainerStatus>0, u=>u.ContainerStatus == u.ContainerStatus)
            .WhereIf(container.ContainerType>0, u=>u.ContainerType == u.ContainerType)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsContainer.Sort) : sorting)
            .OrderByDescending(x => x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥è¯¢æ•°é‡
    /// èŽ·å–æ€»æ•°æ‰˜ç›˜ç®¡ç†
    /// </summary>
    /// <param name="container"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default)
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .WhereIf(!string.IsNullOrEmpty(container.ContainerNo), u => u.ContainerNo.Contains(container.ContainerNo))
            .WhereIf(container.ContainerStatus > 0, u => u.ContainerStatus == u.ContainerStatus)
            .WhereIf(container.ContainerType > 0, u => u.ContainerType == u.ContainerType)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.ContainerNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs
@@ -5,6 +5,7 @@
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
@@ -71,19 +72,23 @@
    }
    /// <inheritdoc />
    public async Task<List<WmsMaterial>> GetListAsync(WmsMaterial? material, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsMaterial> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    /// <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<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsMaterialSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialName), u => u.MaterialName.Contains(material.MaterialName))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialNo), u => u.MaterialName.Contains(material.MaterialNo))
            .WhereIf(material.MaterialType > 0, u => u.MaterialType == material.MaterialType)
            .WhereIf(material.PurchaseType > 0, u => u.PurchaseType == material.PurchaseType)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsMaterial.Sort) : sorting)
            .OrderByDescending(x => x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
@@ -106,24 +111,16 @@
    }
    /// <summary>
    /// èŽ·å–æ€»æ•°
    /// èŽ·å–æ€»æ•°ç‰©æ–™åŸºç¡€ä¿¡æ¯
    /// </summary>
    /// <param name="material"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(WmsMaterial? material, string filter = null, Specification<WmsMaterial> specification = null, CancellationToken cancellationToken = default)
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsMaterialSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(!string.IsNullOrEmpty(material.MaterialName), u => u.MaterialName.Contains(material.MaterialName))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialNo), u => u.MaterialName.Contains(material.MaterialNo))
            .WhereIf(material.MaterialType > 0, u => u.MaterialType == material.MaterialType)
            .WhereIf(material.PurchaseType > 0, u => u.PurchaseType == material.PurchaseType)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/ÍÐÅÌÅäÖÃ.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
[表名]:scms_wmscontainers
[实体类名]:WmsContainer
[实体类对象名]:WmsContainer
[页面菜单名]:托盘管理
[页面菜单对象缩写]:wmsContainer
[表的中文注解]:托盘管理
[重复性校验字段]:ContainerNo
[删除提示字段]:ContainerNo
[模糊查询字段]:'ContainerNo'
[模糊查询字段名]:请输入托盘编号
[项目命名空间]:HIAWms
[枚举类型字段集合]:ContainerType,ContainerTypeEnum&ContainerStatus,ContainerStatusEnum
[前端根文件夹名称]:web
[排序]:CreationTime
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/ÎïÁÏ»ù´¡ÅäÖÃ.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
[表名]:scms_wmsmaterials
[实体类名]:WmsMaterial
[实体类对象名]:WmsMaterial
[页面菜单名]:物料基础
[页面菜单对象缩写]:wmsMaterial
[表的中文注解]:物料基础信息
[重复性校验字段]:MaterialNo
[删除提示字段]:MaterialNo
[模糊查询字段]:'MaterialNo', 'MaterialName',
[模糊查询字段名]:请输入物料编号/物料名称
[项目命名空间]:HIAWms
[枚举类型字段集合]:PurchaseType,PurchaseTypeEnum&MaterialType,MaterialTypeEnum&IsMainBranch,YesNoEnum
[前端根文件夹名称]:web
[排序]:CreationTime
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/MainForm.cs
@@ -215,11 +215,11 @@
                    return;
                }
                //增加校验
                if (columnList.Where(x => x.ColumnName.ToUpper() == SystemCommonVar.c_creator.ToUpper()).Count() == 0)
                {
                    MessageBox.Show($"表中没有字段{SystemCommonVar.c_creator}!");
                    return;
                }
                //if (columnList.Where(x => x.ColumnName.ToUpper() == SystemCommonVar.c_creator.ToUpper()).Count() == 0)
                //{
                //    MessageBox.Show($"表中没有字段{SystemCommonVar.c_creator}!");
                //    return;
                //}