From 38b161e4d52362081bfe78fb5b51fbf384db7ce2 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 06 5月 2025 07:22:21 +0800
Subject: [PATCH] 222

---
 HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx |  342 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 342 insertions(+), 0 deletions(-)

diff --git a/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx b/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx
new file mode 100644
index 0000000..a2e2c16
--- /dev/null
+++ b/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx
@@ -0,0 +1,342 @@
+import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
+import type { Ref } from 'vue'
+import BaseTable from '@/components/Table/Table'
+import styles from './WmsMaterial.module.scss'
+import { useWmsMaterial } from '../../../Controllers/WmsMaterial'
+import IconButton from '@/components/IconButton/IconButton'
+import WmsMaterialDrawer from '../Dialog/WmsMaterialDrawer/WmsMaterialDrawer'
+import Search from '@/components/Search/Search'
+import { columns } from './Config'
+import TdButton from '@/components/TdButton/TdButton'
+import { vPermission } from '@/libs/Permission/Permission'
+import {
+  getWmsEnumData,
+  getWmsDataList,
+} from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
+import {
+  ElInput,
+  ElSelect,
+  ElOption,
+  ElDatePicker,
+  ElForm,
+  ElFormItem,
+} from 'element-plus'
+import { injectModel } from '@/libs/Provider/Provider'
+
+interface RenderTableType {
+  url?: string
+  dataSource: Ref<any[]>
+  isDrag?: boolean
+  isChecked?: boolean
+  isHidePagination?: boolean
+  params?: Record<string, any>
+  autoHeight?: boolean
+}
+
+export default defineComponent({
+  name: 'WmsMaterial',
+  directives: {
+    permission: vPermission,
+  },
+  setup(props, ctx) {
+    const {
+      dataSource,
+      contextMenu,
+      dialogConfig,
+      tableRef,
+      current,
+      search,
+      sort,
+      headers,
+      onError,
+      onSearch,
+      onRowClick,
+      onConfirmWmsMaterial,
+      onCheck,
+      onAddWmsMaterial,
+      onExport,
+      openDetail,
+      onSuccess,
+      onBeforeUpload,
+    } = useWmsMaterial(props, ctx)
+
+    // 鏂板鐨勬煡璇㈡潯浠�
+    const queryForm = ref({
+      materialCode: '',
+      materialName: '',
+      materialType: '',
+      purchaseType: '',
+      filter: '',
+    })
+
+    const queryParams = computed(() => ({
+      ...queryForm.value,
+      materialType: queryForm.value.materialType || '', // 澶勭悊涓嬫媺
+      purchaseType: queryForm.value.purchaseType || '',
+    }))
+
+    // 鍔ㄦ�佹灇涓鹃�夐」
+    const enumOptions = reactive({
+      materialType: [] as Array<{ label: string; value: any }>,
+      purchaseType: [] as Array<{ label: string; value: any }>,
+      isMainBranch: [] as Array<{ label: string; value: any }>,
+    })
+
+    // 鑾峰彇鏋氫妇鏁版嵁
+    const fetchEnumData = async () => {
+      try {
+        // 鑾峰彇鐗╂枡绫诲瀷鏋氫妇
+        const materialTypeData = await getWmsEnumData({
+          EnumName: 'MaterialTypeEnum',
+        })
+        enumOptions.materialType = materialTypeData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+
+        // 鑾峰彇閲囪喘绫诲瀷鏋氫妇
+        const purchaseTypeData = await getWmsEnumData({
+          EnumName: 'PurchaseTypeEnum',
+        })
+        enumOptions.purchaseType = purchaseTypeData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+      } catch (error) {
+        console.error('鑾峰彇鏋氫妇鏁版嵁澶辫触:', error)
+      }
+    }
+
+    // 缁勪欢鎸傝浇鏃惰幏鍙栨灇涓炬暟鎹�
+    onMounted(() => {
+      fetchEnumData()
+    })
+
+    // 鏂板鐨勬煡璇㈡柟娉�
+    const handleQuery = async () => {
+      console.log('鏌ヨ鏉′欢:', queryParams.value)
+      // tableRef.value.getTableList()
+      tableRef.value.getList(queryParams.value)
+    }
+
+    // 閲嶇疆鏌ヨ鏉′欢
+    const resetQuery = () => {
+      queryForm.value = {
+        materialCode: '',
+        materialName: '',
+        materialType: '',
+        purchaseType: '',
+        filter: '',
+      }
+    }
+
+    /**
+     * @returns 琛ㄦ牸
+     */
+    const RenderBaseTable = (props: RenderTableType) => {
+      const {
+        url,
+        dataSource,
+        isDrag,
+        isChecked,
+        isHidePagination,
+        params,
+        autoHeight,
+      } = props
+
+      return (
+        <div
+          class={{
+            [styles.wmsMaterialList]: true,
+          }}
+        >
+          <BaseTable
+            ref={tableRef}
+            url={url}
+            sortUrlTpl="/api/v1/hIAWms/wmsMaterial/{id}/adjustsort/{sort}"
+            v-model:dataSource={dataSource.value}
+            columns={columns}
+            contextMenu={contextMenu}
+            params={params}
+            isDrag={isDrag}
+            isChecked={isChecked}
+            autoHeight={autoHeight}
+            onCheck={onCheck}
+            onRowClick={onRowClick}
+            isHidePagination={isHidePagination}
+            pageSize={20}
+            v-slots={{
+              name: ({ row }: any) => {
+                return row?.name ? (
+                  <TdButton
+                    onClick={() => openDetail(row)}
+                    text={<span style="color:#5a84ff">璇︽儏</span>}
+                    icon="scale"
+                    tip={row?.name}
+                    hover
+                  >
+                    {row?.name}
+                  </TdButton>
+                ) : (
+                  '-'
+                )
+              },
+            }}
+          ></BaseTable>
+        </div>
+      )
+    }
+
+    return () => {
+      return (
+        <div class={styles.wmsMaterialContent}>
+          {/* 娣诲姞/缂栬緫 */}
+          <WmsMaterialDrawer
+            v-model={dialogConfig.visible}
+            title={dialogConfig.title}
+            row={current.value}
+            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}
+              />
+            </ElFormItem>
+            <ElFormItem label="鐗╂枡缂栫爜">
+              <ElInput
+                v-model={queryForm.value.materialCode}
+                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}>
+              <IconButton
+                v-permission="wmsMaterial-add"
+                icon="add-p"
+                onClick={onAddWmsMaterial}
+                type="primary"
+              >
+                娣诲姞
+              </IconButton>
+              <el-divider direction="vertical" />
+              <el-upload
+                v-permission="wmsMaterial-import"
+                name="file"
+                accept=".xlsx,.xls,.csv"
+                show-file-list={false}
+                onError={onError}
+                onSuccess={onSuccess}
+                before-upload={onBeforeUpload}
+                headers={headers.value}
+                action="/api/v1/hIAWms/wmsMaterial/import"
+              >
+                <IconButton icon="in">瀵煎叆</IconButton>
+              </el-upload>
+
+              <IconButton
+                v-permission="wmsMaterial-output"
+                icon="out"
+                onClick={onExport}
+              >
+                瀵煎嚭
+              </IconButton>
+            </div>
+            {/* <Search
+              placeholder="璇疯緭鍏ュ叧閿瓧"
+              v-model={search.value}
+              onConfirm={onSearch}
+              style={{ marginTop: '-1px' }}
+            /> */}
+          </div>
+
+          <RenderBaseTable
+            url="/api/v1/hIAWms/wmsMaterial/page"
+            dataSource={dataSource}
+            isChecked={true}
+            isDrag={true}
+          />
+        </div>
+      )
+    }
+  },
+})

--
Gitblit v1.9.3