From d20c04c88f55e1581bb2054d99483aba95f04fee Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 13 三月 2025 13:17:51 +0800 Subject: [PATCH] Merge branch 'front' into devlop --- rsf-admin/src/page/components/MyExportButton.jsx | 145 +-- rsf-admin/src/page/asnOrder/AsnOrderEdit.jsx | 10 rsf-admin/src/page/asnOrderItem/AsnOrderItemCreate.jsx | 4 rsf-admin/src/page/asnOrderItem/AsnOrderItemList.jsx | 321 ++++---- rsf-admin/src/page/qlyInspect/QlyInspectPanel.jsx | 30 rsf-admin/src/page/components/MyCreateButton.jsx | 100 +- rsf-admin/src/page/components/ImportModal.jsx | 36 rsf-admin/src/page/asnOrder/AsnOrderCreate.jsx | 14 rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx | 3 rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx | 5 rsf-admin/src/i18n/zh.js | 38 rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx | 9 rsf-admin/src/i18n/en.js | 36 rsf-admin/src/page/ResourceContent.js | 4 rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx | 31 rsf-admin/src/page/asnOrder/AsnOrderList.jsx | 317 ++++--- rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx | 4 rsf-admin/src/page/qlyInspect/QlyInspectList.jsx | 10 rsf-admin/src/i18n/core/chineseMessages.js | 412 +++++----- rsf-admin/src/page/system/operationRecord/OperationRecordList.jsx | 3 rsf-admin/src/page/purchase/PurchaseEdit.jsx | 4 rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx | 13 rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx | 298 ++++--- rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx | 2 rsf-admin/src/config/MyDataProvider.js | 1 rsf-admin/src/page/qlyInspect/QlyInspectCreate.jsx | 31 rsf-admin/src/page/purchase/PurchaseList.jsx | 296 ++++--- rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx | 4 rsf-admin/src/page/purchase/PurchaseCreate.jsx | 4 29 files changed, 1,202 insertions(+), 983 deletions(-) diff --git a/rsf-admin/src/config/MyDataProvider.js b/rsf-admin/src/config/MyDataProvider.js index 2255bbc..cfc312f 100644 --- a/rsf-admin/src/config/MyDataProvider.js +++ b/rsf-admin/src/config/MyDataProvider.js @@ -135,7 +135,6 @@ // export excel from all data export: async (resource, params) => { - console.log("export", resource, params); const _params = Common.integrateParams(params); try { const res = await request.post(`${resource}/export`, _params, { diff --git a/rsf-admin/src/i18n/core/chineseMessages.js b/rsf-admin/src/i18n/core/chineseMessages.js index f6eafa3..0dc0430 100644 --- a/rsf-admin/src/i18n/core/chineseMessages.js +++ b/rsf-admin/src/i18n/core/chineseMessages.js @@ -1,213 +1,205 @@ const chineseMessages = { - ra: { - action: { - add_filter: '杩囨护鏉′欢', - add: '娣诲姞', - back: '杩斿洖', - bulk_actions: '1 item selected |||| %{smart_count} items selected', - cancel: '鍙栨秷', - clear_array_input: '鎯呯┖鍒楄〃', - clear_input_value: '娓呯┖', - clone: '鍏嬮殕', - confirm: '纭畾', - create: '娣诲姞', - create_item: '娣诲姞 %{item}', - delete: '鍒犻櫎', - edit: '缂栬緫', - export: '瀵煎嚭', - list: '鍒楄〃', - refresh: '鍒锋柊', - remove_filter: 'Remove this filter', - remove_all_filters: '绉婚櫎鎵�鏈�', - remove: '绉婚櫎', - save: '淇濆瓨', - search: '鎼滅储', - select_all: '鍏ㄩ儴閫変腑', - select_row: '閫変腑涓�琛�', - show: '鏄剧ず', - sort: '鎺掑簭', - undo: '鎾ら攢', - unselect: '鍙栨秷閫夋嫨', - expand: '灞曞紑', - close: '鍏抽棴', - open_menu: 'Open menu', - close_menu: 'Close menu', - update: '淇敼', - move_up: 'Move up', - move_down: 'Move down', - open: 'Open', - toggle_theme: 'Toggle light/dark mode', - select_columns: '绛涢�夊垪', - update_application: 'Reload Application', - }, - boolean: { - true: '鏄�', - false: '鍚�', - null: '鈥�', - }, - page: { - create: 'Create %{name}', - dashboard: 'Dashboard', - edit: '%{name} %{recordRepresentation}', - error: 'Something went wrong', - list: '%{name}', - loading: 'Loading', - not_found: 'Not Found', - show: '%{name} %{recordRepresentation}', - empty: 'No %{name} yet.', - invite: 'Do you want to add one?', - }, - input: { - file: { - upload_several: - '鎷栨斁涓�浜涜涓婁紶鐨勬枃浠讹紝鎴栧崟鍑讳互閫夋嫨涓�涓�', - upload_single: '鎷栨斁瑕佷笂浼犵殑鏂囦欢锛屾垨鍗曞嚮浠ラ�夋嫨瀹�', - }, - image: { - upload_several: - 'Drop some pictures to upload, or click to select one.', - upload_single: - 'Drop a picture to upload, or click to select it.', - }, - references: { - all_missing: 'Unable to find references data.', - many_missing: - 'At least one of the associated references no longer appears to be available.', - single_missing: - 'Associated reference no longer appears to be available.', - }, - password: { - toggle_visible: 'Hide password', - toggle_hidden: 'Show password', - }, - }, - message: { - about: 'About', - are_you_sure: 'Are you sure?', - auth_error: - 'An error occurred while validating the authentication token.', - bulk_delete_content: - 'Are you sure you want to delete this %{name}? |||| Are you sure you want to delete these %{smart_count} items?', - bulk_delete_title: - '鍒犻櫎 %{name} |||| 鍒犻櫎 %{smart_count} %{name}', - bulk_update_content: - 'Are you sure you want to update this %{name}? |||| Are you sure you want to update these %{smart_count} items?', - bulk_update_title: - '淇敼 %{name} |||| 淇敼 %{smart_count} %{name}', - clear_array_input: 'Are you sure you want to clear the whole list?', - delete_content: '鎮ㄧ‘瀹炶鍒犻櫎姝ら」鍚楋紵', - delete_title: '鍒犻櫎 %{name} #%{id}', - details: 'Details', - error: "A client error occurred and your request couldn't be completed.", - - invalid_form: '琛ㄥ崟鏃犳晥 璇锋鏌ユ槸鍚︽湁閿欒!', - loading: 'Please wait', - no: 'No', - not_found: - 'Either you typed a wrong URL, or you followed a bad link.', - yes: 'Yes', - unsaved_changes: - "Some of your changes weren't saved. Are you sure you want to ignore them?", - }, - navigation: { - no_results: '娌℃湁鎵惧埌鏁版嵁', - no_more_results: - 'The page number %{page} is out of boundaries. Try the previous page.', - page_out_of_boundaries: 'Page number %{page} out of boundaries', - page_out_from_end: 'Cannot go after last page', - page_out_from_begin: 'Cannot go before page 1', - page_range_info: '%{offsetBegin}-%{offsetEnd} of %{total}', - partial_page_range_info: - '%{offsetBegin}-%{offsetEnd} of more than %{offsetEnd}', - current_page: 'Page %{page}', - page: 'Go to page %{page}', - first: 'Go to first page', - last: 'Go to last page', - next: 'Go to next page', - previous: 'Go to previous page', - page_rows_per_page: '姣忛〉鏁伴噺:', - skip_nav: 'Skip to content', - }, - sort: { - sort_by: 'Sort by %{field} %{order}', - ASC: 'ascending', - DESC: 'descending', - }, - auth: { - auth_check_error: 'Please login to continue', - user_menu: 'Profile', - username: 'Username', - password: 'Password', - sign_in: 'Sign in', - sign_in_error: 'Authentication failed, please retry', - logout: 'Logout', - }, - notification: { - updated: '淇敼鎴愬姛 |||| %{smart_count} 椤� 淇敼鎴愬姛', - created: '娣诲姞鎴愬姛', - deleted: '鍒犻櫎鎴愬姛 |||| %{smart_count} 椤� 鍒犻櫎鎴愬姛', - bad_item: 'Incorrect element', - item_doesnt_exist: 'Element does not exist', - http_error: 'Server communication error', - data_provider_error: - 'dataProvider error. Check the console for details.', - i18n_error: - 'Cannot load the translations for the specified language', - canceled: 'Action cancelled', - logged_out: 'Your session has ended, please reconnect.', - not_authorized: "You're not authorized to access this resource.", - application_update_available: 'A new version is available.', - }, - validation: { - required: '蹇呭~椤�', - minLength: 'Must be %{min} characters at least', - maxLength: 'Must be %{max} characters or less', - minValue: 'Must be at least %{min}', - maxValue: 'Must be %{max} or less', - number: 'Must be a number', - email: 'Must be a valid email', - oneOf: 'Must be one of: %{options}', - regex: 'Must match a specific format (regexp): %{pattern}', - unique: 'Must be unique', - }, - saved_queries: { - label: '淇濆瓨杩囨护', - query_name: 'Query name', - new_label: '淇濆瓨杩囨护鏉′欢...', - new_dialog_title: 'Save current query as', - remove_label: '绉婚櫎杩囨护鏉′欢', - remove_label_with_name: 'Remove query "%{name}"', - remove_dialog_title: '绉婚櫎杩囨护鏉′欢?', - remove_message: - '鎮ㄧ‘瀹氳绉婚櫎宸蹭繚瀛樿繃婊ゆ潯浠跺悧锛�', - help: 'Filter the list and save this query for later', - }, - configurable: { - customize: 'Customize', - configureMode: 'Configure this page', - inspector: { - title: 'Inspector', - content: 'Hover the application UI elements to configure them', - reset: 'Reset Settings', - hideAll: 'Hide All', - showAll: 'Show All', - }, - Datagrid: { - title: 'Datagrid', - unlabeled: 'Unlabeled column #%{column}', - }, - SimpleForm: { - title: 'Form', - unlabeled: 'Unlabeled input #%{input}', - }, - SimpleList: { - title: 'List', - primaryText: 'Primary text', - secondaryText: 'Secondary text', - tertiaryText: 'Tertiary text', - }, - }, + ra: { + action: { + add_filter: "杩囨护鏉′欢", + add: "娣诲姞", + back: "杩斿洖", + bulk_actions: "1 item selected |||| %{smart_count} items selected", + cancel: "鍙栨秷", + clear_array_input: "鎯呯┖鍒楄〃", + clear_input_value: "娓呯┖", + clone: "鍏嬮殕", + confirm: "纭畾", + create: "娣诲姞", + create_item: "娣诲姞 %{item}", + delete: "鍒犻櫎", + edit: "缂栬緫", + export: "瀵煎嚭", + import: "瀵煎叆", + list: "鍒楄〃", + refresh: "鍒锋柊", + remove_filter: "Remove this filter", + remove_all_filters: "绉婚櫎鎵�鏈�", + remove: "绉婚櫎", + save: "淇濆瓨", + search: "鎼滅储", + select_all: "鍏ㄩ儴閫変腑", + select_row: "閫変腑涓�琛�", + show: "鏄剧ず", + sort: "鎺掑簭", + undo: "鎾ら攢", + unselect: "鍙栨秷閫夋嫨", + expand: "灞曞紑", + close: "鍏抽棴", + open_menu: "Open menu", + close_menu: "Close menu", + update: "淇敼", + move_up: "Move up", + move_down: "Move down", + open: "Open", + toggle_theme: "Toggle light/dark mode", + select_columns: "绛涢�夊垪", + update_application: "Reload Application", }, -} + boolean: { + true: "鏄�", + false: "鍚�", + null: "鈥�", + }, + page: { + create: "Create %{name}", + dashboard: "Dashboard", + edit: "%{name} %{recordRepresentation}", + error: "Something went wrong", + list: "%{name}", + loading: "Loading", + not_found: "Not Found", + show: "%{name} %{recordRepresentation}", + empty: "No %{name} yet.", + invite: "Do you want to add one?", + }, + input: { + file: { + upload_several: "鎷栨斁涓�浜涜涓婁紶鐨勬枃浠讹紝鎴栧崟鍑讳互閫夋嫨涓�涓�", + upload_single: "鎷栨斁瑕佷笂浼犵殑鏂囦欢锛屾垨鍗曞嚮浠ラ�夋嫨瀹�", + }, + image: { + upload_several: "Drop some pictures to upload, or click to select one.", + upload_single: "Drop a picture to upload, or click to select it.", + }, + references: { + all_missing: "Unable to find references data.", + many_missing: + "At least one of the associated references no longer appears to be available.", + single_missing: + "Associated reference no longer appears to be available.", + }, + password: { + toggle_visible: "Hide password", + toggle_hidden: "Show password", + }, + }, + message: { + about: "About", + are_you_sure: "Are you sure?", + auth_error: + "An error occurred while validating the authentication token.", + bulk_delete_content: + "Are you sure you want to delete this %{name}? |||| Are you sure you want to delete these %{smart_count} items?", + bulk_delete_title: "鍒犻櫎 %{name} |||| 鍒犻櫎 %{smart_count} %{name}", + bulk_update_content: + "Are you sure you want to update this %{name}? |||| Are you sure you want to update these %{smart_count} items?", + bulk_update_title: "淇敼 %{name} |||| 淇敼 %{smart_count} %{name}", + clear_array_input: "Are you sure you want to clear the whole list?", + delete_content: "鎮ㄧ‘瀹炶鍒犻櫎姝ら」鍚楋紵", + delete_title: "鍒犻櫎 %{name} #%{id}", + details: "Details", + error: "A client error occurred and your request couldn't be completed.", -export default chineseMessages; \ No newline at end of file + invalid_form: "琛ㄥ崟鏃犳晥 璇锋鏌ユ槸鍚︽湁閿欒!", + loading: "Please wait", + no: "No", + not_found: "Either you typed a wrong URL, or you followed a bad link.", + yes: "Yes", + unsaved_changes: + "Some of your changes weren't saved. Are you sure you want to ignore them?", + }, + navigation: { + no_results: "娌℃湁鎵惧埌鏁版嵁", + no_more_results: + "The page number %{page} is out of boundaries. Try the previous page.", + page_out_of_boundaries: "Page number %{page} out of boundaries", + page_out_from_end: "Cannot go after last page", + page_out_from_begin: "Cannot go before page 1", + page_range_info: "%{offsetBegin}-%{offsetEnd} of %{total}", + partial_page_range_info: + "%{offsetBegin}-%{offsetEnd} of more than %{offsetEnd}", + current_page: "Page %{page}", + page: "Go to page %{page}", + first: "Go to first page", + last: "Go to last page", + next: "Go to next page", + previous: "Go to previous page", + page_rows_per_page: "姣忛〉鏁伴噺:", + skip_nav: "Skip to content", + }, + sort: { + sort_by: "Sort by %{field} %{order}", + ASC: "ascending", + DESC: "descending", + }, + auth: { + auth_check_error: "Please login to continue", + user_menu: "Profile", + username: "Username", + password: "Password", + sign_in: "Sign in", + sign_in_error: "Authentication failed, please retry", + logout: "Logout", + }, + notification: { + updated: "淇敼鎴愬姛 |||| %{smart_count} 椤� 淇敼鎴愬姛", + created: "娣诲姞鎴愬姛", + deleted: "鍒犻櫎鎴愬姛 |||| %{smart_count} 椤� 鍒犻櫎鎴愬姛", + bad_item: "Incorrect element", + item_doesnt_exist: "Element does not exist", + http_error: "Server communication error", + data_provider_error: "dataProvider error. Check the console for details.", + i18n_error: "Cannot load the translations for the specified language", + canceled: "Action cancelled", + logged_out: "Your session has ended, please reconnect.", + not_authorized: "You're not authorized to access this resource.", + application_update_available: "A new version is available.", + }, + validation: { + required: "蹇呭~椤�", + minLength: "Must be %{min} characters at least", + maxLength: "Must be %{max} characters or less", + minValue: "Must be at least %{min}", + maxValue: "Must be %{max} or less", + number: "Must be a number", + email: "Must be a valid email", + oneOf: "Must be one of: %{options}", + regex: "Must match a specific format (regexp): %{pattern}", + unique: "Must be unique", + }, + saved_queries: { + label: "淇濆瓨杩囨护", + query_name: "Query name", + new_label: "淇濆瓨杩囨护鏉′欢...", + new_dialog_title: "Save current query as", + remove_label: "绉婚櫎杩囨护鏉′欢", + remove_label_with_name: 'Remove query "%{name}"', + remove_dialog_title: "绉婚櫎杩囨护鏉′欢?", + remove_message: "鎮ㄧ‘瀹氳绉婚櫎宸蹭繚瀛樿繃婊ゆ潯浠跺悧锛�", + help: "Filter the list and save this query for later", + }, + configurable: { + customize: "Customize", + configureMode: "Configure this page", + inspector: { + title: "Inspector", + content: "Hover the application UI elements to configure them", + reset: "Reset Settings", + hideAll: "Hide All", + showAll: "Show All", + }, + Datagrid: { + title: "Datagrid", + unlabeled: "Unlabeled column #%{column}", + }, + SimpleForm: { + title: "Form", + unlabeled: "Unlabeled input #%{input}", + }, + SimpleList: { + title: "List", + primaryText: "Primary text", + secondaryText: "Secondary text", + tertiaryText: "Tertiary text", + }, + }, + }, +}; + +export default chineseMessages; diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index 7b12baf..c0a1107 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -142,6 +142,7 @@ whMat: 'Warehouse Mat', fields: 'Extend Fields', fieldsItem: 'Extend Fields Items', + warehouseAreasItem: 'WarehouseAreasItem', }, table: { field: { @@ -303,6 +304,25 @@ flagLabelMange: "flagLabelMange", flagMix: "flagMix", }, + warehouseAreasItem: { + areaId: "areaId", + areaName: "areaName", + matnrId: "matnrId", + matnrName: "matnrName", + matnrCode: "matnrCode", + fieldsIndex: "fieldsIndex", + barcode: "barcode", + anfme: "anfme", + batch: "batch", + unit: "unit", + stockUnit: "stockUnit", + brand: "brand", + shipperId: "shipperId", + splrId: "splrId", + weight: "weight", + prodTime: "prodTime", + splrBtch: "splrBtch", + }, loc: { warehouseId: "Warehouse", areaId: "Area", @@ -346,8 +366,13 @@ projectName: "ProjectName", }, qlyInspect: { - code: "Code", - name: "Name", + code: "code", + name: "name", + barcode: "barcode", + asnItemId: "asnItemId", + poItemId: "poItemId", + safeQty: "safeQty", + disQty: "disQty", }, dictType: { code: "Code", @@ -553,7 +578,12 @@ shipper: 'shipper is required', groupId: 'groupId is required', } - } + }, + toolbar: { + inspection: "Inspection", + creatcode: "creatcode", + print: "print", + }, }; export default customEnglishMessages; diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index 1551bc2..1f2cd1e 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -141,6 +141,7 @@ whMat: '搴撳尯鐗╂枡鍏崇郴', fields: '鎵╁睍瀛楁', fieldsItem: '鎵╁睍瀛楁鏄庣粏', + warehouseAreasItem: '搴撳尯搴撳瓨淇℃伅', }, table: { field: { @@ -302,6 +303,25 @@ flagLabelMange: "鏍囩绠$悊", flagMix: "娣锋斁", }, + warehouseAreasItem: { + areaId: "浠撳簱鍖哄煙", + areaName: "鍖哄煙鍚嶇О ", + matnrId: "鐗╂枡鏍囪瘑", + matnrName: "鐗╂枡鍚嶇О", + matnrCode: "鐗╂枡缂栫爜", + fieldsIndex: "鎵╁睍瀛楁鍞竴鏍囪瘑", + barcode: "鏉″舰鐮�", + anfme: "鏁伴噺", + batch: "鎵规鍙�", + unit: "璁¢噺鍗曚綅", + stockUnit: "搴撳瓨鍗曚綅", + brand: "鍝佺墝", + shipperId: "璐т富鏍囪瘑", + splrId: "渚涘簲鍟嗘爣璇�", + weight: "鏀惰揣閲嶉噺", + prodTime: "鐢熶骇鏃ユ湡", + splrBtch: "渚涘簲鍟嗘壒娆�", + }, loc: { warehouseId: "浠撳簱", areaId: "搴撳尯", @@ -348,11 +368,16 @@ qlyInspect: { code: "缂栫爜", name: "鍚嶇О", + barcode: "鏍囩鐮�", + asnItemId: "閫氱煡鍗曟槑缁嗘爣璇�", + poItemId: "PO鍗曟槑缁嗘爣璇�", + safeQty: "鍚堟牸鏁伴噺", + disQty: "涓嶅悎鏍兼暟閲�", }, dictType: { code: "瀛楀吀缂栫爜", name: "瀛楀吀鍚嶇О", - description: "鍐呭鎻忚堪", + description: "鍐呭", }, dictData: { dictTypeId: "瀛楀吀鏍囪瘑", @@ -411,7 +436,7 @@ wkType: "涓氬姟绫诲瀷", anfme: "鏁伴噺", qty: "宸插畬鎴愭暟閲�", - logisNo: "logisNo", + logisNo: "鐗╂祦鍗曞彿", arrTime: "棰勮鍒拌揪鏃堕棿", rleStatus: "閲婃斁鐘舵��", ntyStatus: "璐ㄦ涓婃姤鐘舵��", @@ -460,7 +485,7 @@ anfme: "鏁伴噺", qty: "宸插畬鎴�", nromQty: "鏍囧寘鏁伴噺", - asnQty: "鍗曟嵁鏁伴噺", + asnQty: "鍗曟嵁鏁伴噺", printQty: "鎵撳嵃鏁伴噺", splrName: "渚涘簲鍟嗗悕绉�", splrCode: "渚涘簲鍟嗙紪鐮�", @@ -555,7 +580,12 @@ shipper: '璐т富涓嶈兘涓虹┖', groupId: '鍒嗙粍涓嶈兘涓虹┖', } - } + }, + toolbar: { + inspection: "鎶ユ", + creatcode: "鐢熸垚鏉$爜", + print: "鎵撳嵃", + }, }; export default customChineseMessages; diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js index 6f35cdf..1c808a1 100644 --- a/rsf-admin/src/page/ResourceContent.js +++ b/rsf-admin/src/page/ResourceContent.js @@ -33,7 +33,7 @@ import purchase from './purchase'; import fields from './fields'; import fieldsItem from './fieldsItem'; - +import warehouseAreasItem from './warehouseAreasItem'; const ResourceContent = (node) => { switch (node.component) { @@ -63,6 +63,8 @@ return warehouse; case 'warehouseAreas': return warehouseAreas; + case 'warehouseAreasItem': + return warehouseAreasItem; case 'loc': return loc; case 'container': diff --git a/rsf-admin/src/page/asnOrder/AsnOrderCreate.jsx b/rsf-admin/src/page/asnOrder/AsnOrderCreate.jsx index 8f98e05..6ace1c2 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderCreate.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderCreate.jsx @@ -84,14 +84,14 @@ </DialogTitle> <DialogContent sx={{ mt: 2 }}> <Grid container rowSpacing={2} columnSpacing={2}> - <Grid item xs={6} display="flex" gap={1}> + {/* <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.asnOrder.code" source="code" parse={v => v} autoFocus /> - </Grid> + </Grid> */} <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.asnOrder.poCode" @@ -121,20 +121,20 @@ validate={required()} /> </Grid> - <Grid item xs={6} display="flex" gap={1}> + {/* <Grid item xs={6} display="flex" gap={1}> <NumberInput label="table.field.asnOrder.anfme" source="anfme" validate={required()} /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> + </Grid> */} + {/* <Grid item xs={6} display="flex" gap={1}> <NumberInput label="table.field.asnOrder.qty" source="qty" validate={required()} /> - </Grid> + </Grid> */} <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.asnOrder.logisNo" @@ -154,7 +154,7 @@ source="rleStatus" choices={[ { id: 0, name: ' 姝e父' }, - { id: 1, name: ' 宸查噴鏀�' }, + { id: 1, name: ' 宸查噴鏀�' }, ]} /> </Grid> diff --git a/rsf-admin/src/page/asnOrder/AsnOrderEdit.jsx b/rsf-admin/src/page/asnOrder/AsnOrderEdit.jsx index 5cba002..92753d8 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderEdit.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderEdit.jsx @@ -63,14 +63,14 @@ <Typography variant="h6" gutterBottom> {translate('common.edit.title.main')} </Typography> - <Stack direction='row' gap={2}> + {/* <Stack direction='row' gap={2}> <TextInput label="table.field.asnOrder.code" source="code" parse={v => v} autoFocus /> - </Stack> + </Stack> */} <Stack direction='row' gap={2}> <TextInput label="table.field.asnOrder.poCode" @@ -100,7 +100,7 @@ validate={required()} /> </Stack> - <Stack direction='row' gap={2}> + {/* <Stack direction='row' gap={2}> <NumberInput label="table.field.asnOrder.anfme" source="anfme" @@ -113,7 +113,7 @@ source="qty" validate={required()} /> - </Stack> + </Stack> */} <Stack direction='row' gap={2}> <TextInput label="table.field.asnOrder.logisNo" @@ -133,7 +133,7 @@ source="rleStatus" choices={[ { id: 0, name: ' 姝e父' }, - { id: 1, name: ' 宸查噴鏀�' }, + { id: 1, name: ' 宸查噴鏀�' }, ]} validate={required()} /> diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx index a12b89b..2b0d2c7 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx @@ -1,36 +1,37 @@ import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; import { useNavigate } from 'react-router-dom'; import { - List, - DatagridConfigurable, - SearchInput, - TopToolbar, - SelectColumnsButton, - EditButton, - FilterButton, - CreateButton, - ExportButton, - BulkDeleteButton, - WrapperField, - useRecordContext, - useTranslate, - useNotify, - useListContext, - FunctionField, - TextField, - NumberField, - DateField, - BooleanField, - ReferenceField, - TextInput, - DateTimeInput, - DateInput, - SelectInput, - NumberInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - DeleteButton, + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + WrapperField, + useRecordContext, + useTranslate, + useNotify, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, + Button } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -43,134 +44,158 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; +import ConstructionIcon from "@mui/icons-material/Construction"; +import FileDownloadIcon from '@mui/icons-material/FileDownload'; + const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ - '& .css-1vooibu-MuiSvgIcon-root': { - height: '.9em' - }, - '& .RaDatagrid-row': { - cursor: 'auto' - }, - '& .column-name': { - }, - '& .opt': { - width: 200 - }, + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 200 + }, })); const filters = [ - <SearchInput source="condition" alwaysOn />, - <DateInput label='common.time.after' source="timeStart" alwaysOn />, - <DateInput label='common.time.before' source="timeEnd" alwaysOn />, + <SearchInput source="condition" alwaysOn />, - <TextInput source="code" label="table.field.asnOrder.code" />, - <TextInput source="poCode" label="table.field.asnOrder.poCode" />, - <NumberInput source="poId" label="table.field.asnOrder.poId" />, - <TextInput source="type" label="table.field.asnOrder.type" />, - <TextInput source="wkType" label="table.field.asnOrder.wkType" />, - <NumberInput source="anfme" label="table.field.asnOrder.anfme" />, - <NumberInput source="qty" label="table.field.asnOrder.qty" />, - <TextInput source="logisNo" label="table.field.asnOrder.logisNo" />, - <DateInput source="arrTime" label="table.field.asnOrder.arrTime" />, - <SelectInput source="rleStatus" label="table.field.asnOrder.rleStatus" - choices={[ - { id: 0, name: ' 姝e父' }, - { id: 1, name: ' 宸查噴鏀�' }, - ]} - />, + <TextInput source="code" label="table.field.asnOrder.code" />, + <TextInput source="poCode" label="table.field.asnOrder.poCode" />, + <NumberInput source="poId" label="table.field.asnOrder.poId" />, + <TextInput source="type" label="table.field.asnOrder.type" />, + <TextInput source="wkType" label="table.field.asnOrder.wkType" />, + <NumberInput source="anfme" label="table.field.asnOrder.anfme" />, + <NumberInput source="qty" label="table.field.asnOrder.qty" />, + <TextInput source="logisNo" label="table.field.asnOrder.logisNo" />, + <DateInput source="arrTime" label="table.field.asnOrder.arrTime" />, + <SelectInput source="rleStatus" label="table.field.asnOrder.rleStatus" + choices={[ + { id: 0, name: ' 姝e父' }, + { id: 1, name: ' 宸查噴鏀�' }, + ]} + />, - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, ] const AsnOrderList = () => { - const translate = useTranslate(); + const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); - return ( - <Box display="flex"> - <List - sx={{ - flexGrow: 1, - transition: (theme) => - theme.transitions.create(['all'], { - duration: theme.transitions.duration.enteringScreen, - }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, - }} - title={"menu.asnOrder"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='asnOrder' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='asnOrder' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - expand={() => <AsnOrderPanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <TextField source="code" label="table.field.asnOrder.code" /> - <TextField source="poCode" label="table.field.asnOrder.poCode" /> - <NumberField source="poId" label="table.field.asnOrder.poId" /> - <TextField source="type" label="table.field.asnOrder.type" /> - <TextField source="wkType" label="table.field.asnOrder.wkType" /> - <NumberField source="anfme" label="table.field.asnOrder.anfme" /> - <NumberField source="qty" label="table.field.asnOrder.qty" /> - <TextField source="logisNo" label="table.field.asnOrder.logisNo" /> - <DateField source="arrTime" label="table.field.asnOrder.arrTime" showTime /> - <TextField source="rleStatus$" label="table.field.asnOrder.rleStatus" sortable={false} /> - <TextField source="name" label="table.field.asnOrder.name" /> + const navigate = useNavigate(); + const assign = (record) => { + navigate(`/asnOrderItem?asnId=${record.id}`); + }; - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="createTime" label="common.field.createTime" showTime /> - <BooleanField source="statusBool" label="common.field.status" sortable={false} /> - <TextField source="memo" label="common.field.memo" sortable={false} /> - <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> - </WrapperField> - </StyledDatagrid> - </List> - <AsnOrderCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='AsnOrder Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) + const importList = () => { }; + const inspection = () => { }; + + const print = () => { }; + + return ( + <Box display="flex"> + <List + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.asnOrder"} + empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + filters={filters} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + + <Button onClick={inspection} label={"toolbar.inspection"}> + <ConstructionIcon /> + </Button> + <FilterButton /> + <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + <SelectColumnsButton preferenceKey='asnOrder' /> + + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + preferenceKey='asnOrder' + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource, record) => false} + expand={() => <AsnOrderPanel />} + expandSingle={true} + omit={['id', 'createTime', 'createBy', 'memo']} + > + <NumberField source="id" /> + <MyField + source="code" + label="table.field.asnOrder.code" + onClick={(event, record, val) => { + event.stopPropagation(); + assign(record); + }} + /> + <TextField source="poCode" label="table.field.asnOrder.poCode" /> + <NumberField source="poId" label="table.field.asnOrder.poId" /> + <TextField source="type" label="table.field.asnOrder.type" /> + <TextField source="wkType" label="table.field.asnOrder.wkType" /> + <NumberField source="anfme" label="table.field.asnOrder.anfme" /> + <NumberField source="qty" label="table.field.asnOrder.qty" /> + <TextField source="logisNo" label="table.field.asnOrder.logisNo" /> + <DateField source="arrTime" label="table.field.asnOrder.arrTime" showTime /> + <TextField source="rleStatus$" label="table.field.asnOrder.rleStatus" sortable={false} /> + + <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="updateTime" label="common.field.updateTime" showTime /> + <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="createTime" label="common.field.createTime" showTime /> + <BooleanField source="statusBool" label="common.field.status" sortable={false} /> + <TextField source="memo" label="common.field.memo" sortable={false} /> + <WrapperField cellClassName="opt" label="common.field.opt"> + <Button label="toolbar.print" onClick={print}> + <FileDownloadIcon /> + </Button> + <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> + <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + </WrapperField> + </StyledDatagrid> + </List> + <AsnOrderCreate + open={createDialog} + setOpen={setCreateDialog} + /> + <PageDrawer + title='AsnOrder Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box> + ) } - export default AsnOrderList; diff --git a/rsf-admin/src/page/asnOrderItem/AsnOrderItemCreate.jsx b/rsf-admin/src/page/asnOrderItem/AsnOrderItemCreate.jsx index 45e40f2..dc78822 100644 --- a/rsf-admin/src/page/asnOrderItem/AsnOrderItemCreate.jsx +++ b/rsf-admin/src/page/asnOrderItem/AsnOrderItemCreate.jsx @@ -32,7 +32,7 @@ import MemoInput from "../components/MemoInput"; const AsnOrderItemCreate = (props) => { - const { open, setOpen } = props; + const { open, setOpen, row } = props; const translate = useTranslate(); const notify = useNotify(); @@ -88,7 +88,7 @@ <NumberInput label="table.field.asnOrderItem.asnId" source="asnId" - autoFocus + defaultValue={row.asnId} /> </Grid> <Grid item xs={6} display="flex" gap={1}> diff --git a/rsf-admin/src/page/asnOrderItem/AsnOrderItemList.jsx b/rsf-admin/src/page/asnOrderItem/AsnOrderItemList.jsx index 5ddf5ee..84c20df 100644 --- a/rsf-admin/src/page/asnOrderItem/AsnOrderItemList.jsx +++ b/rsf-admin/src/page/asnOrderItem/AsnOrderItemList.jsx @@ -1,36 +1,37 @@ import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import { - List, - DatagridConfigurable, - SearchInput, - TopToolbar, - SelectColumnsButton, - EditButton, - FilterButton, - CreateButton, - ExportButton, - BulkDeleteButton, - WrapperField, - useRecordContext, - useTranslate, - useNotify, - useListContext, - FunctionField, - TextField, - NumberField, - DateField, - BooleanField, - ReferenceField, - TextInput, - DateTimeInput, - DateInput, - SelectInput, - NumberInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - DeleteButton, + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + WrapperField, + useRecordContext, + useTranslate, + useNotify, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, + Button } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -43,140 +44,156 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; +import CustomerTopToolBar from "../components/EditTopToolBar"; +import QrCodeIcon from "@mui/icons-material/QrCode"; +import ImportButton from "../components/ImportButton"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ - '& .css-1vooibu-MuiSvgIcon-root': { - height: '.9em' - }, - '& .RaDatagrid-row': { - cursor: 'auto' - }, - '& .column-name': { - }, - '& .opt': { - width: 200 - }, + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 200 + }, })); const filters = [ - <SearchInput source="condition" alwaysOn />, - <DateInput label='common.time.after' source="timeStart" alwaysOn />, - <DateInput label='common.time.before' source="timeEnd" alwaysOn />, + <SearchInput source="condition" alwaysOn />, - <NumberInput source="asnId" label="table.field.asnOrderItem.asnId" />, - <TextInput source="asnCode" label="table.field.asnOrderItem.asnCode" />, - <TextInput source="poDetlId" label="table.field.asnOrderItem.poDetlId" />, - <TextInput source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />, - <TextInput source="matnrId" label="table.field.asnOrderItem.matnrId" />, - <TextInput source="matnk" label="table.field.asnOrderItem.matnk" />, - <NumberInput source="anfme" label="table.field.asnOrderItem.anfme" />, - <TextInput source="stockUnit" label="table.field.asnOrderItem.stockUnit" />, - <NumberInput source="purQty" label="table.field.asnOrderItem.purQty" />, - <TextInput source="purUnit" label="table.field.asnOrderItem.purUnit" />, - <NumberInput source="qty" label="table.field.asnOrderItem.qty" />, - <TextInput source="splrCode" label="table.field.asnOrderItem.splrCode" />, - <TextInput source="splrName" label="table.field.asnOrderItem.splrName" />, - <TextInput source="qrcode" label="table.field.asnOrderItem.qrcode" />, - <TextInput source="barcode" label="table.field.asnOrderItem.barcode" />, - <TextInput source="packName" label="table.field.asnOrderItem.packName" />, + <NumberInput source="asnId" label="table.field.asnOrderItem.asnId" />, + <TextInput source="asnCode" label="table.field.asnOrderItem.asnCode" />, + <TextInput source="poDetlId" label="table.field.asnOrderItem.poDetlId" />, + <TextInput source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />, + <TextInput source="matnrId" label="table.field.asnOrderItem.matnrId" />, + <TextInput source="matnk" label="table.field.asnOrderItem.matnk" />, + <NumberInput source="anfme" label="table.field.asnOrderItem.anfme" />, + <TextInput source="stockUnit" label="table.field.asnOrderItem.stockUnit" />, + <NumberInput source="purQty" label="table.field.asnOrderItem.purQty" />, + <TextInput source="purUnit" label="table.field.asnOrderItem.purUnit" />, + <NumberInput source="qty" label="table.field.asnOrderItem.qty" />, + <TextInput source="splrCode" label="table.field.asnOrderItem.splrCode" />, + <TextInput source="splrName" label="table.field.asnOrderItem.splrName" />, + <TextInput source="qrcode" label="table.field.asnOrderItem.qrcode" />, + <TextInput source="barcode" label="table.field.asnOrderItem.barcode" />, + <TextInput source="packName" label="table.field.asnOrderItem.packName" />, - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, ] const AsnOrderItemList = () => { - const translate = useTranslate(); + const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); - return ( - <Box display="flex"> - <List - sx={{ - flexGrow: 1, - transition: (theme) => - theme.transitions.create(['all'], { - duration: theme.transitions.duration.enteringScreen, - }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, - }} - title={"menu.asnOrderItem"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='asnOrderItem' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='asnOrderItem' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - expand={() => <AsnOrderItemPanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <NumberField source="asnId" label="table.field.asnOrderItem.asnId" /> - <TextField source="asnCode" label="table.field.asnOrderItem.asnCode" /> - <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" /> - <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" /> - <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" /> - <TextField source="matnk" label="table.field.asnOrderItem.matnk" /> - <NumberField source="anfme" label="table.field.asnOrderItem.anfme" /> - <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" /> - <NumberField source="purQty" label="table.field.asnOrderItem.purQty" /> - <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" /> - <NumberField source="qty" label="table.field.asnOrderItem.qty" /> - <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" /> - <TextField source="splrName" label="table.field.asnOrderItem.splrName" /> - <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" /> - <TextField source="barcode" label="table.field.asnOrderItem.barcode" /> - <TextField source="packName" label="table.field.asnOrderItem.packName" /> + const location = useLocation(); + const queryParams = new URLSearchParams(location.search); + const asnId = queryParams.get("asnId"); - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="createTime" label="common.field.createTime" showTime /> - <BooleanField source="statusBool" label="common.field.status" sortable={false} /> - <TextField source="memo" label="common.field.memo" sortable={false} /> - <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> - </WrapperField> - </StyledDatagrid> - </List> - <AsnOrderItemCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='AsnOrderItem Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) + const creatCode = () => { }; + + return ( + <> + {asnId && <CustomerTopToolBar backPrevious={true} />} + <Box display="flex"> + <List + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.asnOrderItem"} + empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + filters={filters} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + <Button onClick={creatCode} label={"toolbar.creatcode"}> + <QrCodeIcon /> + </Button> + <FilterButton /> + <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + <SelectColumnsButton preferenceKey='asnOrderItem' /> + <ImportButton value={'asnOrder'} parmas={{ asnId: asnId }} /> + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + preferenceKey='asnOrderItem' + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource, record) => false} + expand={() => <AsnOrderItemPanel />} + expandSingle={true} + omit={['id', 'createTime', 'createBy', 'memo']} + > + <NumberField source="id" /> + <NumberField source="asnId" label="table.field.asnOrderItem.asnId" /> + <TextField source="asnCode" label="table.field.asnOrderItem.asnCode" /> + <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" /> + <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" /> + <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" /> + <TextField source="matnk" label="table.field.asnOrderItem.matnk" /> + <NumberField source="anfme" label="table.field.asnOrderItem.anfme" /> + <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" /> + <NumberField source="purQty" label="table.field.asnOrderItem.purQty" /> + <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" /> + <NumberField source="qty" label="table.field.asnOrderItem.qty" /> + <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" /> + <TextField source="splrName" label="table.field.asnOrderItem.splrName" /> + <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" /> + <TextField source="barcode" label="table.field.asnOrderItem.barcode" /> + <TextField source="packName" label="table.field.asnOrderItem.packName" /> + + <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="updateTime" label="common.field.updateTime" showTime /> + <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="createTime" label="common.field.createTime" showTime /> + <BooleanField source="statusBool" label="common.field.status" sortable={false} /> + <TextField source="memo" label="common.field.memo" sortable={false} /> + <WrapperField cellClassName="opt" label="common.field.opt"> + <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> + <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + </WrapperField> + </StyledDatagrid> + </List> + <AsnOrderItemCreate + open={createDialog} + setOpen={setCreateDialog} + row={{ asnId }} + /> + <PageDrawer + title='AsnOrderItem Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box> + </> + ) } +AsnOrderItemList.Context = React.createContext() export default AsnOrderItemList; diff --git a/rsf-admin/src/page/components/ImportModal.jsx b/rsf-admin/src/page/components/ImportModal.jsx index 1461531..70f84cf 100644 --- a/rsf-admin/src/page/components/ImportModal.jsx +++ b/rsf-admin/src/page/components/ImportModal.jsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useState, createContext, useContext } from 'react'; import { Box, CircularProgress, Stack, Typography } from '@mui/material'; import Alert from '@mui/material/Alert'; import Dialog from '@mui/material/Dialog'; @@ -13,14 +13,16 @@ Form, Toolbar, useRefresh, - useTranslate + useTranslate, + useNotify } from 'react-admin'; import { Link } from 'react-router-dom'; import DialogCloseButton from './DialogCloseButton'; import { usePapaParse } from './usePapaParse'; import MatnrList from '../basicInfo/matnr/MatnrList'; +import request from '@/utils/request' -const ImportModal = ({ open, onClose, importTemp, useCodeImport, onceBatch = 10 }) => { +const ImportModal = ({ open, onClose, importTemp, useCodeImport, onceBatch = 10, value, parmas = {} }) => { const refresh = useRefresh(); const translate = useTranslate(); @@ -31,6 +33,7 @@ }); const [file, setFile] = useState(null); + const notify = useNotify(); useEffect(() => { if (importer.state === 'complete') { @@ -46,10 +49,25 @@ if (!file) { return; } - console.log(file); - //TODO 娣诲姞涓婃枃浠朵笂浼犳帴鍙� + const form = new FormData(); + for (const key in parmas) { + if (parmas.hasOwnProperty(key)) { + form.append(key, parmas[key]); + } + } + form.append('file', file); + const { data: { code, data, msg } } = await request.post(`/${value}/import`, form) + + if (code === 200) { + handleClose() + } else { + notify(msg); + + } }; + + const handleClose = () => { reset(); @@ -211,12 +229,12 @@ </Dialog> ); } -{/**涓嬭浇鎵撳嵃妯℃澘锛屼紶鍏ype绫诲瀷锛岃皟鐢ㄤ笅杞芥ā鏉挎帴鍙� */} +{/**涓嬭浇鎵撳嵃妯℃澘锛屼紶鍏ype绫诲瀷锛岃皟鐢ㄤ笅杞芥ā鏉挎帴鍙� */ } const downloadTemplate = (type) => { // 涓嬭浇鐗╂枡妯℃澘 - if (type != undefined && type == 'matnr') { - - } + if (type != undefined && type == 'matnr') { + + } console.log('======>'); console.log(type); } diff --git a/rsf-admin/src/page/components/MyCreateButton.jsx b/rsf-admin/src/page/components/MyCreateButton.jsx index b61f9fc..1e16745 100644 --- a/rsf-admin/src/page/components/MyCreateButton.jsx +++ b/rsf-admin/src/page/components/MyCreateButton.jsx @@ -1,70 +1,64 @@ import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - Button, - useTranslate, -} from 'react-admin'; -import { Fab, useMediaQuery } from '@mui/material'; -import ContentAdd from '@mui/icons-material/Add'; -import { styled } from '@mui/material/styles'; -import { Link } from 'react-router-dom'; +import { Button, useTranslate } from "react-admin"; +import { Fab, useMediaQuery } from "@mui/material"; +import ContentAdd from "@mui/icons-material/Add"; +import { styled } from "@mui/material/styles"; +import { Link } from "react-router-dom"; const MyCreateButton = (props) => { - const translate = useTranslate(); + const translate = useTranslate(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("md")); - const isSmall = useMediaQuery((theme) => - theme.breakpoints.down('md') - ); + return isSmall ? ( + <StyledFab + color="primary" + className={CreateButtonClasses.floating} + aria-label={label && translate(label)} + onClick={props.onClick} + {...props} + > + {defaultIcon} + </StyledFab> + ) : ( + <StyledButton + className={CreateButtonClasses.floating} + label={label} + onClick={props.onClick} + {...props} + > + {defaultIcon} + </StyledButton> + ); +}; - return isSmall ? ( - <StyledFab - color="primary" - className={CreateButtonClasses.floating} - aria-label={label && translate(label)} - onClick={props.onClick} - {...props} - > - {defaultIcon} - </StyledFab> - ) : ( - <StyledButton - className={CreateButtonClasses.floating} - label={label} - onClick={props.onClick} - {...props} - > - {defaultIcon} - </StyledButton> - ); -} - -const label = 'ra.action.create'; -const PREFIX = 'RaCreateButton'; +const label = "ra.action.create"; +const PREFIX = "RaCreateButton"; const defaultIcon = <ContentAdd />; export const CreateButtonClasses = { - root: `${PREFIX}-root`, - floating: `${PREFIX}-floating`, + root: `${PREFIX}-root`, + floating: `${PREFIX}-floating`, }; const StyledFab = styled(Fab, { - name: PREFIX, - overridesResolver: (_props, styles) => styles.root, + name: PREFIX, + overridesResolver: (_props, styles) => styles.root, })(({ theme }) => ({ - [`&.${CreateButtonClasses.floating}`]: { - color: theme.palette.getContrastText(theme.palette.primary.main), - margin: 0, - top: 'auto', - right: 20, - bottom: 60, - left: 'auto', - position: 'fixed', - zIndex: 1000, - }, + [`&.${CreateButtonClasses.floating}`]: { + color: theme.palette.getContrastText(theme.palette.primary.main), + margin: 0, + top: "auto", + right: 20, + bottom: 60, + left: "auto", + position: "fixed", + zIndex: 1000, + }, })); const StyledButton = styled(Button, { - name: PREFIX, - overridesResolver: (_props, styles) => styles.root, + name: PREFIX, + overridesResolver: (_props, styles) => styles.root, })({}); -export default MyCreateButton; \ No newline at end of file +export default MyCreateButton; diff --git a/rsf-admin/src/page/components/MyExportButton.jsx b/rsf-admin/src/page/components/MyExportButton.jsx index 143bdc1..f70dced 100644 --- a/rsf-admin/src/page/components/MyExportButton.jsx +++ b/rsf-admin/src/page/components/MyExportButton.jsx @@ -1,87 +1,84 @@ -import * as React from 'react'; -import { useCallback } from 'react'; -import DownloadIcon from '@mui/icons-material/GetApp'; +import * as React from "react"; +import { useCallback } from "react"; +import DownloadIcon from "@mui/icons-material/GetApp"; import { - Button, useDataProvider, useNotify, useListContext -} from 'react-admin'; + Button, + useDataProvider, + useNotify, + useListContext, +} from "react-admin"; const MyExportButton = (props) => { - const { - maxResults = 1000, - onClick, - label = 'ra.action.export', - icon = defaultIcon, - exporter: customExporter, - meta, - ...rest - } = props; + const { + maxResults = 1000, + onClick, + label = "ra.action.export", + icon = defaultIcon, + exporter: customExporter, + meta, + ...rest + } = props; - const { - filter, - filterValues, - resource, - sort, - total, - } = useListContext(); + const { filter, filterValues, resource, sort, total } = useListContext(); - const dataProvider = useDataProvider(); - const notify = useNotify(); + const dataProvider = useDataProvider(); + const notify = useNotify(); - const handleClick = useCallback( - event => { - dataProvider.export(resource, { - sort, - filter: filter - ? { ...filterValues, ...filter } - : filterValues, - pagination: { page: 1, perPage: maxResults }, - meta, - }).then((res) => { - const url = window.URL.createObjectURL(new Blob([res.data], { type: res.headers['content-type'] })); - const link = document.createElement('a'); - link.href = url; - link.setAttribute('download', `${resource}.xlsx`); - document.body.appendChild(link); - link.click(); - link.remove(); - }).catch(error => { - console.error(error); - notify('ra.notification.http_error', { type: 'error' }); - }); - if (typeof onClick === 'function') { - onClick(event); - } - }, - [ - dataProvider, - filter, - filterValues, - maxResults, - notify, - onClick, - resource, - sort, - meta, - ] - ); + const handleClick = useCallback( + (event) => { + dataProvider + .export(resource, { + sort, + filter: filter ? { ...filterValues, ...filter } : filterValues, + pagination: { page: 1, perPage: maxResults }, + meta, + }) + .then((res) => { + const url = window.URL.createObjectURL( + new Blob([res.data], { type: res.headers["content-type"] }), + ); + const link = document.createElement("a"); + link.href = url; + link.setAttribute("download", `${resource}.xlsx`); + document.body.appendChild(link); + link.click(); + link.remove(); + }) + .catch((error) => { + console.error(error); + notify("ra.notification.http_error", { type: "error" }); + }); + if (typeof onClick === "function") { + onClick(event); + } + }, + [ + dataProvider, + filter, + filterValues, + maxResults, + notify, + onClick, + resource, + sort, + meta, + ], + ); - return ( - <Button - onClick={handleClick} - label={label} - disabled={total === 0} - {...sanitizeRestProps(rest)} - > - {icon} - </Button> - ); + return ( + <Button + onClick={handleClick} + label={label} + disabled={total === 0} + {...sanitizeRestProps(rest)} + > + {icon} + </Button> + ); }; const defaultIcon = <DownloadIcon />; -const sanitizeRestProps = ({ - resource, - ...rest -}) => rest; +const sanitizeRestProps = ({ resource, ...rest }) => rest; export default MyExportButton; diff --git a/rsf-admin/src/page/purchase/PurchaseCreate.jsx b/rsf-admin/src/page/purchase/PurchaseCreate.jsx index 4787078..768de68 100644 --- a/rsf-admin/src/page/purchase/PurchaseCreate.jsx +++ b/rsf-admin/src/page/purchase/PurchaseCreate.jsx @@ -84,14 +84,14 @@ </DialogTitle> <DialogContent sx={{ mt: 2 }}> <Grid container rowSpacing={2} columnSpacing={2}> - <Grid item xs={6} display="flex" gap={1}> + {/* <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.purchase.code" source="code" parse={v => v} autoFocus /> - </Grid> + </Grid> */} <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.purchase.type" diff --git a/rsf-admin/src/page/purchase/PurchaseEdit.jsx b/rsf-admin/src/page/purchase/PurchaseEdit.jsx index 16c0608..b12726f 100644 --- a/rsf-admin/src/page/purchase/PurchaseEdit.jsx +++ b/rsf-admin/src/page/purchase/PurchaseEdit.jsx @@ -63,14 +63,14 @@ <Typography variant="h6" gutterBottom> {translate('common.edit.title.main')} </Typography> - <Stack direction='row' gap={2}> + {/* <Stack direction='row' gap={2}> <TextInput label="table.field.purchase.code" source="code" parse={v => v} autoFocus /> - </Stack> + </Stack> */} <Stack direction='row' gap={2}> <TextInput label="table.field.purchase.type" diff --git a/rsf-admin/src/page/purchase/PurchaseList.jsx b/rsf-admin/src/page/purchase/PurchaseList.jsx index 08f1ce5..adc1921 100644 --- a/rsf-admin/src/page/purchase/PurchaseList.jsx +++ b/rsf-admin/src/page/purchase/PurchaseList.jsx @@ -1,36 +1,36 @@ import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; import { useNavigate } from 'react-router-dom'; import { - List, - DatagridConfigurable, - SearchInput, - TopToolbar, - SelectColumnsButton, - EditButton, - FilterButton, - CreateButton, - ExportButton, - BulkDeleteButton, - WrapperField, - useRecordContext, - useTranslate, - useNotify, - useListContext, - FunctionField, - TextField, - NumberField, - DateField, - BooleanField, - ReferenceField, - TextInput, - DateTimeInput, - DateInput, - SelectInput, - NumberInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - DeleteButton, + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + WrapperField, + useRecordContext, + useTranslate, + useNotify, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -45,128 +45,138 @@ import * as Common from '@/utils/common'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ - '& .css-1vooibu-MuiSvgIcon-root': { - height: '.9em' - }, - '& .RaDatagrid-row': { - cursor: 'auto' - }, - '& .column-name': { - }, - '& .opt': { - width: 200 - }, + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 200 + }, })); const filters = [ - <SearchInput source="condition" alwaysOn />, - <DateInput label='common.time.after' source="timeStart" alwaysOn />, - <DateInput label='common.time.before' source="timeEnd" alwaysOn />, - <TextInput source="code" label="table.field.purchase.code" />, - <TextInput source="type" label="table.field.purchase.type" />, - <TextInput source="source" label="table.field.purchase.source" />, - <DateInput source="preArr" label="table.field.purchase.preArr" />, - <NumberInput source="anfme" label="table.field.purchase.anfme" />, - <NumberInput source="qty" label="table.field.purchase.qty" />, - <NumberInput source="workQty" label="table.field.purchase.workQty" />, - <TextInput source="channel" label="table.field.purchase.channel" />, - <TextInput source="platCode" label="table.field.purchase.platCode" />, - <DateInput source="startTime" label="table.field.purchase.startTime" />, - <DateInput source="endTime" label="table.field.purchase.endTime" />, - <TextInput source="project" label="table.field.purchase.project" />, - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, + <SearchInput source="condition" alwaysOn />, + <TextInput source="code" label="table.field.purchase.code" />, + <TextInput source="type" label="table.field.purchase.type" />, + <TextInput source="source" label="table.field.purchase.source" />, + <DateInput source="preArr" label="table.field.purchase.preArr" />, + <NumberInput source="anfme" label="table.field.purchase.anfme" />, + <NumberInput source="qty" label="table.field.purchase.qty" />, + <NumberInput source="workQty" label="table.field.purchase.workQty" />, + <TextInput source="channel" label="table.field.purchase.channel" />, + <TextInput source="platCode" label="table.field.purchase.platCode" />, + <DateInput source="startTime" label="table.field.purchase.startTime" />, + <DateInput source="endTime" label="table.field.purchase.endTime" />, + <TextInput source="project" label="table.field.purchase.project" />, + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, ] const PurchaseList = () => { - const translate = useTranslate(); + const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); - return ( - <Box display="flex"> - <List - sx={{ - flexGrow: 1, - transition: (theme) => - theme.transitions.create(['all'], { - duration: theme.transitions.duration.enteringScreen, - }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, - }} - title={"menu.purchase"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='purchase' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='purchase' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - expand={() => <PurchasePanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <TextField source="code" label="table.field.purchase.code" /> - <TextField source="type" label="table.field.purchase.type" /> - <TextField source="source" label="table.field.purchase.source" /> - <DateField source="preArr" label="table.field.purchase.preArr" showTime /> - <NumberField source="anfme" label="table.field.purchase.anfme" /> - <NumberField source="qty" label="table.field.purchase.qty" /> - <NumberField source="workQty" label="table.field.purchase.workQty" /> - <TextField source="channel" label="table.field.purchase.channel" /> - <TextField source="platCode" label="table.field.purchase.platCode" /> - <DateField source="startTime" label="table.field.purchase.startTime" showTime /> - <DateField source="endTime" label="table.field.purchase.endTime" showTime /> - <TextField source="project" label="table.field.purchase.project" /> + const navigate = useNavigate(); + const assign = (record) => { + navigate(`/purchaseItem?poId=${record.id}`); + }; - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="createTime" label="common.field.createTime" showTime /> - <BooleanField source="statusBool" label="common.field.status" sortable={false} /> - <TextField source="memo" label="common.field.memo" sortable={false} /> - <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> - </WrapperField> - </StyledDatagrid> - </List> - <PurchaseCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='Purchase Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) + return ( + <Box display="flex"> + <List + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.purchase"} + empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + filters={filters} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + <FilterButton /> + <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + <SelectColumnsButton preferenceKey='purchase' /> + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + preferenceKey='purchase' + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource, record) => false} + expand={() => <PurchasePanel />} + expandSingle={true} + omit={['id', 'createTime', 'createBy', 'memo']} + > + <NumberField source="id" /> + <MyField + source="code" + label="table.field.purchase.code" + onClick={(event, record, val) => { + event.stopPropagation(); + assign(record); + }} + /> + <TextField source="type" label="table.field.purchase.type" /> + <TextField source="source" label="table.field.purchase.source" /> + <DateField source="preArr" label="table.field.purchase.preArr" showTime /> + <NumberField source="anfme" label="table.field.purchase.anfme" /> + <NumberField source="qty" label="table.field.purchase.qty" /> + <NumberField source="workQty" label="table.field.purchase.workQty" /> + <TextField source="channel" label="table.field.purchase.channel" /> + <TextField source="platCode" label="table.field.purchase.platCode" /> + <DateField source="startTime" label="table.field.purchase.startTime" showTime /> + <DateField source="endTime" label="table.field.purchase.endTime" showTime /> + <TextField source="project" label="table.field.purchase.project" /> + + <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="updateTime" label="common.field.updateTime" showTime /> + <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="createTime" label="common.field.createTime" showTime /> + <BooleanField source="statusBool" label="common.field.status" sortable={false} /> + <TextField source="memo" label="common.field.memo" sortable={false} /> + <WrapperField cellClassName="opt" label="common.field.opt"> + <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> + <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + </WrapperField> + </StyledDatagrid> + </List> + <PurchaseCreate + open={createDialog} + setOpen={setCreateDialog} + /> + <PageDrawer + title='Purchase Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box> + ) } export default PurchaseList; diff --git a/rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx b/rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx index 36ed82b..abc53cc 100644 --- a/rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx +++ b/rsf-admin/src/page/purchaseItem/PurchaseItemCreate.jsx @@ -32,7 +32,7 @@ import MemoInput from "../components/MemoInput"; const PurchaseItemCreate = (props) => { - const { open, setOpen } = props; + const { open, setOpen, row } = props; const translate = useTranslate(); const notify = useNotify(); @@ -88,7 +88,7 @@ <NumberInput label="table.field.purchaseItem.purchaseId" source="purchaseId" - autoFocus + defaultValue={row.poId} /> </Grid> <Grid item xs={6} display="flex" gap={1}> diff --git a/rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx b/rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx index 088c9cb..139441c 100644 --- a/rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx +++ b/rsf-admin/src/page/purchaseItem/PurchaseItemList.jsx @@ -1,36 +1,36 @@ import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import { - List, - DatagridConfigurable, - SearchInput, - TopToolbar, - SelectColumnsButton, - EditButton, - FilterButton, - CreateButton, - ExportButton, - BulkDeleteButton, - WrapperField, - useRecordContext, - useTranslate, - useNotify, - useListContext, - FunctionField, - TextField, - NumberField, - DateField, - BooleanField, - ReferenceField, - TextInput, - DateTimeInput, - DateInput, - SelectInput, - NumberInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - DeleteButton, + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + WrapperField, + useRecordContext, + useTranslate, + useNotify, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -43,134 +43,140 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; +import CustomerTopToolBar from "../components/EditTopToolBar"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ - '& .css-1vooibu-MuiSvgIcon-root': { - height: '.9em' - }, - '& .RaDatagrid-row': { - cursor: 'auto' - }, - '& .column-name': { - }, - '& .opt': { - width: 200 - }, + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 200 + }, })); const filters = [ - <SearchInput source="condition" alwaysOn />, - <DateInput label='common.time.after' source="timeStart" alwaysOn />, - <DateInput label='common.time.before' source="timeEnd" alwaysOn />, + <SearchInput source="condition" alwaysOn />, - <NumberInput source="purchaseId" label="table.field.purchaseItem.purchaseId" />, - <TextInput source="platItemId" label="table.field.purchaseItem.platItemId" />, - <TextInput source="matnrCode" label="table.field.purchaseItem.matnrCode" />, - <TextInput source="matnrName" label="table.field.purchaseItem.matnrName" />, - <TextInput source="unit" label="table.field.purchaseItem.unit" />, - <NumberInput source="anfme" label="table.field.purchaseItem.anfme" />, - <NumberInput source="qty" label="table.field.purchaseItem.qty" />, - <NumberInput source="nromQty" label="table.field.purchaseItem.nromQty" />, - <NumberInput source="asnQty" label="table.field.purchaseItem.asnQty" />, - <NumberInput source="printQty" label="table.field.purchaseItem.printQty" />, - <TextInput source="splrName" label="table.field.purchaseItem.splrName" />, - <TextInput source="splrCode" label="table.field.purchaseItem.splrCode" />, - <TextInput source="splrBatch" label="table.field.purchaseItem.splrBatch" />, + <NumberInput source="purchaseId" label="table.field.purchaseItem.purchaseId" />, + <TextInput source="platItemId" label="table.field.purchaseItem.platItemId" />, + <TextInput source="matnrCode" label="table.field.purchaseItem.matnrCode" />, + <TextInput source="matnrName" label="table.field.purchaseItem.matnrName" />, + <TextInput source="unit" label="table.field.purchaseItem.unit" />, + <NumberInput source="anfme" label="table.field.purchaseItem.anfme" />, + <NumberInput source="qty" label="table.field.purchaseItem.qty" />, + <NumberInput source="nromQty" label="table.field.purchaseItem.nromQty" />, + <NumberInput source="asnQty" label="table.field.purchaseItem.asnQty" />, + <NumberInput source="printQty" label="table.field.purchaseItem.printQty" />, + <TextInput source="splrName" label="table.field.purchaseItem.splrName" />, + <TextInput source="splrCode" label="table.field.purchaseItem.splrCode" />, + <TextInput source="splrBatch" label="table.field.purchaseItem.splrBatch" />, - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, ] const PurchaseItemList = () => { - const translate = useTranslate(); + const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); - return ( - <Box display="flex"> - <List - sx={{ - flexGrow: 1, - transition: (theme) => - theme.transitions.create(['all'], { - duration: theme.transitions.duration.enteringScreen, - }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, - }} - title={"menu.purchaseItem"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='purchaseItem' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='purchaseItem' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - expand={() => <PurchaseItemPanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <NumberField source="purchaseId" label="table.field.purchaseItem.purchaseId" /> - <TextField source="platItemId" label="table.field.purchaseItem.platItemId" /> - <TextField source="matnrCode" label="table.field.purchaseItem.matnrCode" /> - <TextField source="matnrName" label="table.field.purchaseItem.matnrName" /> - <TextField source="unit" label="table.field.purchaseItem.unit" /> - <NumberField source="anfme" label="table.field.purchaseItem.anfme" /> - <NumberField source="qty" label="table.field.purchaseItem.qty" /> - <NumberField source="nromQty" label="table.field.purchaseItem.nromQty" /> - <NumberField source="asnQty" label="table.field.purchaseItem.asnQty" /> - <NumberField source="printQty" label="table.field.purchaseItem.printQty" /> - <TextField source="splrName" label="table.field.purchaseItem.splrName" /> - <TextField source="splrCode" label="table.field.purchaseItem.splrCode" /> - <TextField source="splrBatch" label="table.field.purchaseItem.splrBatch" /> + const location = useLocation(); + const queryParams = new URLSearchParams(location.search); + const poId = queryParams.get("poId"); - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="createTime" label="common.field.createTime" showTime /> - <BooleanField source="statusBool" label="common.field.status" sortable={false} /> - <TextField source="memo" label="common.field.memo" sortable={false} /> - <WrapperField cellClassName="opt" label="common.field.opt"> - <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> - </WrapperField> - </StyledDatagrid> - </List> - <PurchaseItemCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='PurchaseItem Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) + return ( + <> + {poId && <CustomerTopToolBar backPrevious={true} />} + <Box display="flex"> + <List + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.purchaseItem"} + empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + filters={filters} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + <FilterButton /> + <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + <SelectColumnsButton preferenceKey='purchaseItem' /> + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + preferenceKey='purchaseItem' + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource, record) => false} + expand={() => <PurchaseItemPanel />} + expandSingle={true} + omit={['id', 'createTime', 'createBy', 'memo']} + > + <NumberField source="id" /> + <NumberField source="purchaseId" label="table.field.purchaseItem.purchaseId" /> + <TextField source="platItemId" label="table.field.purchaseItem.platItemId" /> + <TextField source="matnrCode" label="table.field.purchaseItem.matnrCode" /> + <TextField source="matnrName" label="table.field.purchaseItem.matnrName" /> + <TextField source="unit" label="table.field.purchaseItem.unit" /> + <NumberField source="anfme" label="table.field.purchaseItem.anfme" /> + <NumberField source="qty" label="table.field.purchaseItem.qty" /> + <NumberField source="nromQty" label="table.field.purchaseItem.nromQty" /> + <NumberField source="asnQty" label="table.field.purchaseItem.asnQty" /> + <NumberField source="printQty" label="table.field.purchaseItem.printQty" /> + <TextField source="splrName" label="table.field.purchaseItem.splrName" /> + <TextField source="splrCode" label="table.field.purchaseItem.splrCode" /> + <TextField source="splrBatch" label="table.field.purchaseItem.splrBatch" /> + + <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="updateTime" label="common.field.updateTime" showTime /> + <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField> + <DateField source="createTime" label="common.field.createTime" showTime /> + <BooleanField source="statusBool" label="common.field.status" sortable={false} /> + <TextField source="memo" label="common.field.memo" sortable={false} /> + <WrapperField cellClassName="opt" label="common.field.opt"> + <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> + <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + </WrapperField> + </StyledDatagrid> + </List> + <PurchaseItemCreate + open={createDialog} + setOpen={setCreateDialog} + row={{ poId }} + /> + <PageDrawer + title='PurchaseItem Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box></> + ) } export default PurchaseItemList; diff --git a/rsf-admin/src/page/qlyInspect/QlyInspectCreate.jsx b/rsf-admin/src/page/qlyInspect/QlyInspectCreate.jsx index 4ad8576..4aa684f 100644 --- a/rsf-admin/src/page/qlyInspect/QlyInspectCreate.jsx +++ b/rsf-admin/src/page/qlyInspect/QlyInspectCreate.jsx @@ -100,6 +100,37 @@ parse={v => v} /> </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.qlyInspect.barcode" + source="barcode" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.qlyInspect.asnItemId" + source="asnItemId" + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.qlyInspect.poItemId" + source="poItemId" + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.qlyInspect.safeQty" + source="safeQty" + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.qlyInspect.disQty" + source="disQty" + /> + </Grid> <Grid item xs={6} display="flex" gap={1}> <StatusSelectInput /> diff --git a/rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx b/rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx index d287ef3..985c367 100644 --- a/rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx +++ b/rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx @@ -79,6 +79,37 @@ parse={v => v} /> </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.qlyInspect.barcode" + source="barcode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.qlyInspect.asnItemId" + source="asnItemId" + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.qlyInspect.poItemId" + source="poItemId" + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.qlyInspect.safeQty" + source="safeQty" + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.qlyInspect.disQty" + source="disQty" + /> + </Stack> </Grid> <Grid item xs={12} md={4}> diff --git a/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx b/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx index 591d778..10bda0b 100644 --- a/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx +++ b/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx @@ -65,6 +65,11 @@ <TextInput source="code" label="table.field.qlyInspect.code" />, <TextInput source="name" label="table.field.qlyInspect.name" />, + <TextInput source="barcode" label="table.field.qlyInspect.barcode" />, + <NumberInput source="asnItemId" label="table.field.qlyInspect.asnItemId" />, + <NumberInput source="poItemId" label="table.field.qlyInspect.poItemId" />, + <NumberInput source="safeQty" label="table.field.qlyInspect.safeQty" />, + <NumberInput source="disQty" label="table.field.qlyInspect.disQty" />, <TextInput label="common.field.memo" source="memo" />, <SelectInput @@ -120,6 +125,11 @@ <NumberField source="id" /> <TextField source="code" label="table.field.qlyInspect.code" /> <TextField source="name" label="table.field.qlyInspect.name" /> + <TextField source="barcode" label="table.field.qlyInspect.barcode" /> + <NumberField source="asnItemId" label="table.field.qlyInspect.asnItemId" /> + <NumberField source="poItemId" label="table.field.qlyInspect.poItemId" /> + <NumberField source="safeQty" label="table.field.qlyInspect.safeQty" /> + <NumberField source="disQty" label="table.field.qlyInspect.disQty" /> <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> diff --git a/rsf-admin/src/page/qlyInspect/QlyInspectPanel.jsx b/rsf-admin/src/page/qlyInspect/QlyInspectPanel.jsx index de828b5..785ba88 100644 --- a/rsf-admin/src/page/qlyInspect/QlyInspectPanel.jsx +++ b/rsf-admin/src/page/qlyInspect/QlyInspectPanel.jsx @@ -52,6 +52,36 @@ property={record.name} /> </Grid> + <Grid item xs={6}> + <PanelTypography + title="table.field.qlyInspect.barcode" + property={record.barcode} + /> + </Grid> + <Grid item xs={6}> + <PanelTypography + title="table.field.qlyInspect.asnItemId" + property={record.asnItemId} + /> + </Grid> + <Grid item xs={6}> + <PanelTypography + title="table.field.qlyInspect.poItemId" + property={record.poItemId} + /> + </Grid> + <Grid item xs={6}> + <PanelTypography + title="table.field.qlyInspect.safeQty" + property={record.safeQty} + /> + </Grid> + <Grid item xs={6}> + <PanelTypography + title="table.field.qlyInspect.disQty" + property={record.disQty} + /> + </Grid> </Grid> </CardContent> diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx index cc98111..f15c25d 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx @@ -32,7 +32,7 @@ import MemoInput from "../../../components/MemoInput"; const DictDataCreate = (props) => { - const { open, setOpen } = props; + const { open, setOpen, row } = props; const translate = useTranslate(); const notify = useNotify(); @@ -91,6 +91,7 @@ parse={v => v} autoFocus validate={required()} + defaultValue={row.dictTypeId} /> </Grid> <Grid item xs={6} display="flex" gap={1}> @@ -99,6 +100,7 @@ source="dictTypeCode" parse={v => v} validate={required()} + defaultValue={row.dictTypeCode} /> </Grid> <Grid item xs={6} display="flex" gap={1}> @@ -114,7 +116,6 @@ label="table.field.dictData.label" source="label" parse={v => v} - validate={required()} /> </Grid> <Grid item xs={6} display="flex" gap={1}> @@ -123,13 +124,13 @@ source="sort" /> </Grid> - <Grid item xs={6} display="flex" gap={1}> + {/* <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.dictData.color" source="color" parse={v => v} /> - </Grid> + </Grid> */} <Grid item xs={6} display="flex" gap={1}> <StatusSelectInput /> diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx index 6190953..a52a4c2 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx @@ -94,7 +94,6 @@ label="table.field.dictData.label" source="label" parse={v => v} - validate={required()} /> </Stack> <Stack direction='row' gap={2}> @@ -103,13 +102,13 @@ source="sort" /> </Stack> - <Stack direction='row' gap={2}> + {/* <Stack direction='row' gap={2}> <TextInput label="table.field.dictData.color" source="color" parse={v => v} /> - </Stack> + </Stack> */} </Grid> <Grid item xs={12} md={4}> diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx index 65ea973..21a3f45 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx @@ -70,7 +70,7 @@ <TextInput source="value" label="table.field.dictData.value" />, <TextInput source="label" label="table.field.dictData.label" />, <NumberInput source="sort" label="table.field.dictData.sort" />, - <TextInput source="color" label="table.field.dictData.color" />, + // <TextInput source="color" label="table.field.dictData.color" />, <TextInput label="common.field.memo" source="memo" />, <SelectInput @@ -93,11 +93,7 @@ const location = useLocation(); const queryParams = new URLSearchParams(location.search); const dictTypeId = queryParams.get('dictTypeId'); - console.log(dictTypeId); - if (dictTypeId != null && dictTypeId != undefined) { - console.log(dictTypeId); - console.log(fit); - } + const dictTypeCode = queryParams.get('code'); return ( <> @@ -111,7 +107,7 @@ theme.transitions.create(['all'], { duration: theme.transitions.duration.enteringScreen, }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.dictData"} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} @@ -142,7 +138,7 @@ <TextField source="value" label="table.field.dictData.value" /> <TextField source="label" label="table.field.dictData.label" /> <NumberField source="sort" label="table.field.dictData.sort" /> - <TextField source="color" label="table.field.dictData.color" /> + {/* <TextField source="color" label="table.field.dictData.color" /> */} <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> @@ -163,6 +159,7 @@ <DictDataCreate open={createDialog} setOpen={setCreateDialog} + row={{ dictTypeId, dictTypeCode }} /> <PageDrawer title='DictData Detail' diff --git a/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx index 9c17b03..8acd215 100644 --- a/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx @@ -84,7 +84,7 @@ </DialogTitle> <DialogContent sx={{ mt: 2 }}> <Grid container rowSpacing={2} columnSpacing={2}> - <Grid item xs={6} display="flex" gap={1}> + <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.dictType.code" source="code" @@ -96,6 +96,7 @@ label="table.field.dictType.name" source="name" parse={v => v} + validate={required()} /> </Grid> <Grid item xs={6} display="flex" gap={1}> diff --git a/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx index 4fc1553..09058f4 100644 --- a/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx +++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx @@ -87,7 +87,7 @@ const navigate = useNavigate(); const assign = (record) => { - navigate(`/dictData?dictTypeId=${record.id}`); + navigate(`/dictData?dictTypeId=${record.id}&code=${record.code}`); } return ( @@ -99,7 +99,7 @@ theme.transitions.create(['all'], { duration: theme.transitions.duration.enteringScreen, }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.dictType"} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} diff --git a/rsf-admin/src/page/system/operationRecord/OperationRecordList.jsx b/rsf-admin/src/page/system/operationRecord/OperationRecordList.jsx index 249b3c1..ac5b4d6 100644 --- a/rsf-admin/src/page/system/operationRecord/OperationRecordList.jsx +++ b/rsf-admin/src/page/system/operationRecord/OperationRecordList.jsx @@ -43,6 +43,7 @@ import rowSx from './rowSx'; import { format } from 'date-fns'; import OperationDetail from './OperationDetail' +import { width } from "@mui/system"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -122,7 +123,7 @@ theme.transitions.create(['all'], { duration: theme.transitions.duration.enteringScreen, }), - marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.operation"} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx index 9e7031c..c3d15cc 100644 --- a/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx +++ b/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx @@ -54,8 +54,6 @@ }); }; - console.log(SerialRuleItem); - return ( <> <Dialog -- Gitblit v1.9.1