diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5b1a804 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 设置字符集 +charset = utf-8 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +trim_trailing_whitespace = true +# 删除一行中的前后空格 +insert_final_newline = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 0000000..a6661b6 --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +1,312 @@ +{ + "globals": { + "ComponentInternalInstance": true, + "TransferKey": true, + "ElFormRules": true, + "CheckboxValueType": true, + "PropType": true, + "DateModelType": true, + "UploadFile": true, + "ElFormInstance": true, + "ElTableInstance": true, + "ElTreeInstance": true, + "ElTreeSelectInstance": true, + "ElSelectInstance": true, + "ElUploadInstance": true, + "ElCardInstance": true, + "ElDialogInstance": true, + "ElInputInstance": true, + "ElInputNumberInstance": true, + "ElRadioInstance": true, + "ElRadioGroupInstance": true, + "ElRadioButtonInstance": true, + "ElCheckboxInstance": true, + "ElCheckboxGroupInstance": true, + "ElSwitchInstance": true, + "ElDatePickerInstance": true, + "ElTimePickerInstance": true, + "ElTimeSelectInstance": true, + "ElScrollbarInstance": true, + "ElCascaderInstance": true, + "ElColorPickerInstance": true, + "ElRateInstance": true, + "ElSliderInstance": true, + "useRouter": true, + "useRoute": true, + "EffectScope": true, + "ElTable": true, + "ElSelect": true, + "ElUpload": true, + "ElForm": true, + "ElTree": true, + "ElMessage": true, + "ElMessageBox": true, + "asyncComputed": true, + "autoResetRef": true, + "computed": true, + "computedAsync": true, + "computedEager": true, + "computedInject": true, + "computedWithControl": true, + "controlledComputed": true, + "controlledRef": true, + "createApp": true, + "createEventHook": true, + "createGlobalState": true, + "createInjectionState": true, + "createReactiveFn": true, + "createSharedComposable": true, + "createUnrefFn": true, + "customRef": true, + "debouncedRef": true, + "debouncedWatch": true, + "defineAsyncComponent": true, + "defineComponent": true, + "eagerComputed": true, + "effectScope": true, + "extendRef": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "ignorableWatch": true, + "inject": true, + "isDefined": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "makeDestructurable": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onClickOutside": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onKeyStroke": true, + "onLongPress": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onStartTyping": true, + "onUnmounted": true, + "onUpdated": true, + "pausableWatch": true, + "provide": true, + "reactify": true, + "reactifyObject": true, + "reactive": true, + "reactiveComputed": true, + "reactiveOmit": true, + "reactivePick": true, + "readonly": true, + "ref": true, + "refAutoReset": true, + "refDebounced": true, + "refDefault": true, + "refThrottled": true, + "refWithControl": true, + "resolveComponent": true, + "resolveDirective": true, + "resolveRef": true, + "resolveUnref": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "syncRef": true, + "syncRefs": true, + "templateRef": true, + "throttledRef": true, + "throttledWatch": true, + "toRaw": true, + "toReactive": true, + "toRef": true, + "toRefs": true, + "triggerRef": true, + "tryOnBeforeMount": true, + "tryOnBeforeUnmount": true, + "tryOnMounted": true, + "tryOnScopeDispose": true, + "tryOnUnmounted": true, + "unref": true, + "unrefElement": true, + "until": true, + "useActiveElement": true, + "useArrayEvery": true, + "useArrayFilter": true, + "useArrayFind": true, + "useArrayFindIndex": true, + "useArrayFindLast": true, + "useArrayJoin": true, + "useArrayMap": true, + "useArrayReduce": true, + "useArraySome": true, + "useArrayUnique": true, + "useAsyncQueue": true, + "useAsyncState": true, + "useAttrs": true, + "useBase64": true, + "useBattery": true, + "useBluetooth": true, + "useBreakpoints": true, + "useBroadcastChannel": true, + "useBrowserLocation": true, + "useCached": true, + "useClipboard": true, + "useCloned": true, + "useColorMode": true, + "useConfirmDialog": true, + "useCounter": true, + "useCssModule": true, + "useCssVar": true, + "useCssVars": true, + "useCurrentElement": true, + "useCycleList": true, + "useDark": true, + "useDateFormat": true, + "useDebounce": true, + "useDebounceFn": true, + "useDebouncedRefHistory": true, + "useDeviceMotion": true, + "useDeviceOrientation": true, + "useDevicePixelRatio": true, + "useDevicesList": true, + "useDisplayMedia": true, + "useDocumentVisibility": true, + "useDraggable": true, + "useDropZone": true, + "useElementBounding": true, + "useElementByPoint": true, + "useElementHover": true, + "useElementSize": true, + "useElementVisibility": true, + "useEventBus": true, + "useEventListener": true, + "useEventSource": true, + "useEyeDropper": true, + "useFavicon": true, + "useFetch": true, + "useFileDialog": true, + "useFileSystemAccess": true, + "useFocus": true, + "useFocusWithin": true, + "useFps": true, + "useFullscreen": true, + "useGamepad": true, + "useGeolocation": true, + "useIdle": true, + "useImage": true, + "useInfiniteScroll": true, + "useIntersectionObserver": true, + "useInterval": true, + "useIntervalFn": true, + "useKeyModifier": true, + "useLastChanged": true, + "useLocalStorage": true, + "useMagicKeys": true, + "useManualRefHistory": true, + "useMediaControls": true, + "useMediaQuery": true, + "useMemoize": true, + "useMemory": true, + "useMounted": true, + "useMouse": true, + "useMouseInElement": true, + "useMousePressed": true, + "useMutationObserver": true, + "useNavigatorLanguage": true, + "useNetwork": true, + "useNow": true, + "useObjectUrl": true, + "useOffsetPagination": true, + "useOnline": true, + "usePageLeave": true, + "useParallax": true, + "usePermission": true, + "usePointer": true, + "usePointerLock": true, + "usePointerSwipe": true, + "usePreferredColorScheme": true, + "usePreferredContrast": true, + "usePreferredDark": true, + "usePreferredLanguages": true, + "usePreferredReducedMotion": true, + "usePrevious": true, + "useRafFn": true, + "useRefHistory": true, + "useResizeObserver": true, + "useScreenOrientation": true, + "useScreenSafeArea": true, + "useScriptTag": true, + "useScroll": true, + "useScrollLock": true, + "useSessionStorage": true, + "useShare": true, + "useSlots": true, + "useSorted": true, + "useSpeechRecognition": true, + "useSpeechSynthesis": true, + "useStepper": true, + "useStorage": true, + "useStorageAsync": true, + "useStyleTag": true, + "useSupported": true, + "useSwipe": true, + "useTemplateRefsList": true, + "useTextDirection": true, + "useTextSelection": true, + "useTextareaAutosize": true, + "useThrottle": true, + "useThrottleFn": true, + "useThrottledRefHistory": true, + "useTimeAgo": true, + "useTimeout": true, + "useTimeoutFn": true, + "useTimeoutPoll": true, + "useTimestamp": true, + "useTitle": true, + "useToNumber": true, + "useToString": true, + "useToggle": true, + "useTransition": true, + "useUrlSearchParams": true, + "useUserMedia": true, + "useVModel": true, + "useVModels": true, + "useVibrate": true, + "useVirtualList": true, + "useWakeLock": true, + "useWebNotification": true, + "useWebSocket": true, + "useWebWorker": true, + "useWebWorkerFn": true, + "useWindowFocus": true, + "useWindowScroll": true, + "useWindowSize": true, + "watch": true, + "watchArray": true, + "watchAtMost": true, + "watchDebounced": true, + "watchEffect": true, + "watchIgnorable": true, + "watchOnce": true, + "watchPausable": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "watchThrottled": true, + "watchTriggerable": true, + "watchWithFilter": true, + "whenever": true, + "ImportOption": true, + "TreeType": true, + "FieldOption": true, + "PageData": true, + "storeToRefs": true, + "DictDataOption": true, + "UploadOption": true + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1fd56f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +.DS_Store +.history +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock +pnpm-lock.yaml + +# 编译生成的文件 +auto-imports.d.ts +components.d.ts diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..d251d2e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +/dist/* +.local +.output.js +/node_modules/** + +**/*.svg +**/*.sh + +/public/* \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..6ca3ce5 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,20 @@ +{ + "printWidth": 150, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "quoteProps": "preserve", + "jsxSingleQuote": false, + "bracketSameLine": false, + "trailingComma": "none", + "bracketSpacing": true, + "embeddedLanguageFormatting": "auto", + "arrowParens": "always", + "requirePragma": false, + "insertPragma": false, + "proseWrap": "preserve", + "htmlWhitespaceSensitivity": "css", + "vueIndentScriptAndStyle": false, + "endOfLine": "auto" +} diff --git a/bin/build.bat b/bin/build.bat new file mode 100644 index 0000000..ecbb454 --- /dev/null +++ b/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn build:prod + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..f5b24e0 --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/bin/run-web.bat b/bin/run-web.bat new file mode 100644 index 0000000..d2fe397 --- /dev/null +++ b/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vite Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn dev + +pause \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..8b67e9e --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,86 @@ +import globals from 'globals'; +import pluginJs from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import pluginVue from 'eslint-plugin-vue'; +import { readFile } from 'node:fs/promises'; +import prettier from 'eslint-plugin-prettier'; + +/** + * https://blog.csdn.net/sayUonly/article/details/123482912 + * 自动导入的配置 + */ +const autoImportFile = new URL('./.eslintrc-auto-import.json', import.meta.url); +const autoImportGlobals = JSON.parse(await readFile(autoImportFile, 'utf8')); + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { + /** + * 不需要.eslintignore文件 而是在这里配置 + */ + ignores: [ + '*.sh', + 'node_modules', + '*.md', + '*.woff', + '*.ttf', + '.vscode', + '.idea', + 'dist', + '/public', + '/docs', + '.husky', + '.local', + '/bin', + '.eslintrc.cjs', + 'prettier.config.js', + 'src/assets', + 'tailwind.config.js' + ] + }, + { files: ['**/*.{js,mjs,cjs,ts,vue}'] }, + { + languageOptions: { + globals: globals.browser + } + }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + ...pluginVue.configs['flat/essential'], + { + files: ['**/*.vue'], + languageOptions: { + parserOptions: { + parser: tseslint.parser + } + } + }, + { + languageOptions: { + globals: { + // 自动导入的配置 undef + ...autoImportGlobals.globals, + DialogOption: 'readonly', + LayoutSetting: 'readonly' + } + }, + plugins: { prettier }, + rules: { + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-this-alias': 'off', + + // vue + 'vue/multi-word-component-names': 'off', + 'vue/valid-define-props': 'off', + 'vue/no-v-model-argument': 'off', + 'prefer-rest-params': 'off', + // prettier + 'prettier/prettier': 'error', + // 允许使用空Object类型 {} + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unused-expressions': 'off' + } + } +]; diff --git a/html/ie.html b/html/ie.html new file mode 100644 index 0000000..4d2773d --- /dev/null +++ b/html/ie.html @@ -0,0 +1,242 @@ + + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

+ 自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 + 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 + 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明 + 。 +

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + diff --git a/package.json b/package.json index d820647..0ffb576 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@highlightjs/vue-plugin": "2.1.0", "@vueup/vue-quill": "1.2.0", "@vueuse/core": "11.3.0", + "ag-grid-vue3": "^33.1.1", "animate.css": "4.1.1", "await-to-js": "3.0.0", "axios": "1.7.8", diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..3f919d8 Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/api/amz/inquiryRequest/index.ts b/src/api/amz/inquiryRequest/index.ts index 09a618c..b7409a5 100644 --- a/src/api/amz/inquiryRequest/index.ts +++ b/src/api/amz/inquiryRequest/index.ts @@ -29,9 +29,24 @@ export const getInquiryRequest = (id: string | number): AxiosPromise => { +export const createWithDesAndChannel = (destination: string, channelId: string, date: string): AxiosPromise => { return request({ - url: '/amz/inquiryRequest/create/' + destination + '/' + channelId, + url: '/amz/inquiryRequest/create/' + destination + '/' + channelId + '/' + date, + method: 'get' + }); +}; + +/** + * 根据目的地仓库和渠道查询物流询价列表 + * @returns {*} + * @param destination + * @param channelId + * @param date + */ + +export const queryWithDesAndChannel = (destination: string, channelId: string, date: string): AxiosPromise => { + return request({ + url: '/amz/inquiryRequest/query/' + destination + '/' + channelId + '/' + date, method: 'get' }); }; diff --git a/src/api/amz/inquiryRequest/types.ts b/src/api/amz/inquiryRequest/types.ts index 891bccf..4cce91c 100644 --- a/src/api/amz/inquiryRequest/types.ts +++ b/src/api/amz/inquiryRequest/types.ts @@ -58,7 +58,6 @@ export interface InquiryRequestVO { * 报价有效的结束日期 */ effectiveEndTime: string; - } export interface InquiryRequestForm extends BaseEntity { @@ -121,11 +120,9 @@ export interface InquiryRequestForm extends BaseEntity { * 报价有效的结束日期 */ effectiveEndTime?: string; - } export interface InquiryRequestQuery extends PageQuery { - /** * 询价单号(规则:INQ+年月+6位序列) */ @@ -181,11 +178,8 @@ export interface InquiryRequestQuery extends PageQuery { */ effectiveEndTime?: string; - /** - * 日期范围参数 - */ - params?: any; + /** + * 日期范围参数 + */ + params?: any; } - - - diff --git a/src/api/amz/logisticsOrder/index.ts b/src/api/amz/logisticsOrder/index.ts new file mode 100644 index 0000000..ad7a7a6 --- /dev/null +++ b/src/api/amz/logisticsOrder/index.ts @@ -0,0 +1,75 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { LogisticsOrderVO, LogisticsOrderForm, LogisticsOrderQuery, createOrderForm } from '@/api/amz/logisticsOrder/types'; + +/** + * 查询物流订单列表 + * @param query + * @returns {*} + */ + +export const listLogisticsOrder = (query?: LogisticsOrderQuery): AxiosPromise => { + return request({ + url: '/amz/logisticsOrder/list', + method: 'get', + params: query + }); +}; + +/** + * 查询物流订单详细 + * @param id + */ +export const getLogisticsOrder = (id: string | number): AxiosPromise => { + return request({ + url: '/amz/logisticsOrder/' + id, + method: 'get' + }); +}; + +/** + * 新增物流订单 + * @param data + */ +export const addLogisticsOrder = (data: LogisticsOrderForm) => { + return request({ + url: '/amz/logisticsOrder', + method: 'post', + data: data + }); +}; + +/** + * 创建物流订单 + * @param data + */ +export const createLogisticsOrder = (data: createOrderForm) => { + return request({ + url: '/amz/logisticsOrder/createOrder', + method: 'post', + data: data + }); +}; + +/** + * 修改物流订单 + * @param data + */ +export const updateLogisticsOrder = (data: LogisticsOrderForm) => { + return request({ + url: '/amz/logisticsOrder', + method: 'put', + data: data + }); +}; + +/** + * 删除物流订单 + * @param id + */ +export const delLogisticsOrder = (id: string | number | Array) => { + return request({ + url: '/amz/logisticsOrder/' + id, + method: 'delete' + }); +}; diff --git a/src/api/amz/logisticsOrder/types.ts b/src/api/amz/logisticsOrder/types.ts new file mode 100644 index 0000000..2dda125 --- /dev/null +++ b/src/api/amz/logisticsOrder/types.ts @@ -0,0 +1,179 @@ +export interface LogisticsOrderVO { + /** + * 主键(应用层生成的全局唯一ID,如雪花算法) + */ + id: string | number; + + /** + * FBA货件编号(亚马逊系统生成的唯一标识) + */ + fbaShipmentId: string | number; + + /** + * 订单编号(应用层生成的唯一业务流水号) + */ + orderId: string; + + /** + * 物流商ID(关联物流商信息表) + */ + logisticsProviderId: string | number; + + /** + * 物流商名称(冗余存储,避免高频联表查询) + */ + logisticsProviderName: string | number; + + /** + * 物流渠道(如空运/海运/快递等) + */ + logisticsChannel: string; + + /** + * 目的地仓库名称或编码 + */ + destination: string; + + /** + * 总箱子数量(此订单包含的箱子总数) + */ + boxQuantity: number; + + /** + * 总货件数量(商品件数总和) + */ + shipmentQuantity: number; + + /** + * 亚马逊仓库实际上架日期 + */ + amazonShelfDate: string; + + /** + * 上架时效(单位:天,从发货到上架的总天数) + */ + shelfTimeliness: number; +} + +export interface LogisticsOrderForm extends BaseEntity { + /** + * 主键(应用层生成的全局唯一ID,如雪花算法) + */ + id?: string | number; + + /** + * FBA货件编号(亚马逊系统生成的唯一标识) + */ + fbaShipmentId?: string | number; + + /** + * 订单编号(应用层生成的唯一业务流水号) + */ + orderId?: string; + + /** + * 物流商ID(关联物流商信息表) + */ + logisticsProviderId?: string | number; + + /** + * 物流商名称(冗余存储,避免高频联表查询) + */ + logisticsProviderName?: string | number; + + /** + * 物流渠道(如空运/海运/快递等) + */ + logisticsChannel?: string; + + /** + * 目的地仓库名称或编码 + */ + destination?: string; + + /** + * 总箱子数量(此订单包含的箱子总数) + */ + boxQuantity?: number; + + /** + * 总货件数量(商品件数总和) + */ + shipmentQuantity?: number; + + /** + * 亚马逊仓库实际上架日期 + */ + amazonShelfDate?: string; + + /** + * 上架时效(单位:天,从发货到上架的总天数) + */ + shelfTimeliness?: number; +} + +export interface createOrderForm { + /** + * FBA货件编号(亚马逊系统生成的唯一标识) + */ + fbaShipmentId?: string | number; + + logicQuoteId?: string | number; +} + +export interface LogisticsOrderQuery extends PageQuery { + /** + * FBA货件编号(亚马逊系统生成的唯一标识) + */ + fbaShipmentId?: string | number; + + /** + * 订单编号(应用层生成的唯一业务流水号) + */ + orderId?: string; + + /** + * 物流商ID(关联物流商信息表) + */ + logisticsProviderId?: string | number; + + /** + * 物流商名称(冗余存储,避免高频联表查询) + */ + logisticsProviderName?: string | number; + + /** + * 物流渠道(如空运/海运/快递等) + */ + logisticsChannel?: string; + + /** + * 目的地仓库名称或编码 + */ + destination?: string; + + /** + * 总箱子数量(此订单包含的箱子总数) + */ + boxQuantity?: number; + + /** + * 总货件数量(商品件数总和) + */ + shipmentQuantity?: number; + + /** + * 亚马逊仓库实际上架日期 + */ + amazonShelfDate?: string; + + /** + * 上架时效(单位:天,从发货到上架的总天数) + */ + shelfTimeliness?: number; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/amz/logisticsOrderDetail/index.ts b/src/api/amz/logisticsOrderDetail/index.ts new file mode 100644 index 0000000..7908ea1 --- /dev/null +++ b/src/api/amz/logisticsOrderDetail/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { LogisticsOrderDetailVO, LogisticsOrderDetailForm, LogisticsOrderDetailQuery } from '@/api/amz/logisticsOrderDetail/types'; + +/** + * 查询物流订单明细(按箱子维度存储)列表 + * @param query + * @returns {*} + */ + +export const listLogisticsOrderDetail = (query?: LogisticsOrderDetailQuery): AxiosPromise => { + return request({ + url: '/amz/logisticsOrderDetail/list', + method: 'get', + params: query + }); +}; + +/** + * 查询物流订单明细(按箱子维度存储)详细 + * @param id + */ +export const getLogisticsOrderDetail = (id: string | number): AxiosPromise => { + return request({ + url: '/amz/logisticsOrderDetail/' + id, + method: 'get' + }); +}; + +/** + * 新增物流订单明细(按箱子维度存储) + * @param data + */ +export const addLogisticsOrderDetail = (data: LogisticsOrderDetailForm) => { + return request({ + url: '/amz/logisticsOrderDetail', + method: 'post', + data: data + }); +}; + +/** + * 修改物流订单明细(按箱子维度存储) + * @param data + */ +export const updateLogisticsOrderDetail = (data: LogisticsOrderDetailForm) => { + return request({ + url: '/amz/logisticsOrderDetail', + method: 'put', + data: data + }); +}; + +/** + * 删除物流订单明细(按箱子维度存储) + * @param id + */ +export const delLogisticsOrderDetail = (id: string | number | Array) => { + return request({ + url: '/amz/logisticsOrderDetail/' + id, + method: 'delete' + }); +}; diff --git a/src/api/amz/logisticsOrderDetail/types.ts b/src/api/amz/logisticsOrderDetail/types.ts new file mode 100644 index 0000000..ab4d29d --- /dev/null +++ b/src/api/amz/logisticsOrderDetail/types.ts @@ -0,0 +1,335 @@ +export interface LogisticsOrderDetailVO { + /** + * 主键(应用层生成的全局唯一ID) + */ + id: string | number; + + /** + * 关联主表ID(biz_logistics_order.id) + */ + orderId: string | number; + + /** + * FBA货件编号(冗余存储,避免联表查询) + */ + fbaShipmentId: string | number; + + /** + * FBA箱号(亚马逊系统中箱子的唯一标识) + */ + fbaBoxNumber: string; + + /** + * 物流商ID(冗余存储) + */ + logisticsProviderId: string | number; + + /** + * 物流商名称(冗余存储) + */ + logisticsProviderName: string | number; + + /** + * 物流渠道(与主表一致) + */ + logisticsChannel: string; + + /** + * 目的地仓库(冗余存储) + */ + destination: string; + + /** + * 计划数量(该箱子预计装载的商品数量) + */ + plannedQuantity: number; + + /** + * 实际货件数量(该箱子实际装载的商品数量) + */ + shipmentQuantity: number; + + /** + * 物流追踪号(物流商提供的唯一包裹标识) + */ + trackingNumber: string; + + /** + * 供应商称重(单位:KG,由供应商提供) + */ + supplierWeight: number; + + /** + * 物流商计重(单位:KG,物流商实际测量值) + */ + logisticsWeight: number; + + /** + * 称重差异(应用层计算:物流商计重 - 供应商称重) + */ + weightDiff: number; + + /** + * 物流单价(单位:元/KG,由合同或报价确定) + */ + pricePerKg: number; + + /** + * 物流计价重量(应用层根据业务规则计算) + */ + logisticsCalculationPrice: number; + + /** + * 其他物流费用(如报关费、保险费等) + */ + otherFee: number; + + /** + * 费用合计(应用层计算:物流计价 + 其他费用) + */ + totalFee: number; + + /** + * 物流状态(pending:待发运/in_transit:运输中/delivered:已签收) + */ + logisticsStatus: string; + + /** + * 预计签收日期(物流商提供的预估日期) + */ + estimatedDeliveryDate: string; + + /** + * 实际签收日期(物流商回传的实际日期) + */ + actualDeliveryDate: string; + + /** + * 运输时效(单位:天,实际签收日期 - 发货日期) + */ + timeliness: number; +} + +export interface LogisticsOrderDetailForm extends BaseEntity { + /** + * 主键(应用层生成的全局唯一ID) + */ + id?: string | number; + + /** + * 关联主表ID(biz_logistics_order.id) + */ + orderId?: string | number; + + /** + * FBA货件编号(冗余存储,避免联表查询) + */ + fbaShipmentId?: string | number; + + /** + * FBA箱号(亚马逊系统中箱子的唯一标识) + */ + fbaBoxNumber?: string; + + /** + * 物流商ID(冗余存储) + */ + logisticsProviderId?: string | number; + + /** + * 物流商名称(冗余存储) + */ + logisticsProviderName?: string | number; + + /** + * 物流渠道(与主表一致) + */ + logisticsChannel?: string; + + /** + * 目的地仓库(冗余存储) + */ + destination?: string; + + /** + * 计划数量(该箱子预计装载的商品数量) + */ + plannedQuantity?: number; + + /** + * 实际货件数量(该箱子实际装载的商品数量) + */ + shipmentQuantity?: number; + + /** + * 物流追踪号(物流商提供的唯一包裹标识) + */ + trackingNumber?: string; + + /** + * 供应商称重(单位:KG,由供应商提供) + */ + supplierWeight?: number; + + /** + * 物流商计重(单位:KG,物流商实际测量值) + */ + logisticsWeight?: number; + + /** + * 称重差异(应用层计算:物流商计重 - 供应商称重) + */ + weightDiff?: number; + + /** + * 物流单价(单位:元/KG,由合同或报价确定) + */ + pricePerKg?: number; + + /** + * 物流计价重量(应用层根据业务规则计算) + */ + logisticsCalculationPrice?: number; + + /** + * 其他物流费用(如报关费、保险费等) + */ + otherFee?: number; + + /** + * 费用合计(应用层计算:物流计价 + 其他费用) + */ + totalFee?: number; + + /** + * 物流状态(pending:待发运/in_transit:运输中/delivered:已签收) + */ + logisticsStatus?: string; + + /** + * 预计签收日期(物流商提供的预估日期) + */ + estimatedDeliveryDate?: string; + + /** + * 实际签收日期(物流商回传的实际日期) + */ + actualDeliveryDate?: string; + + /** + * 运输时效(单位:天,实际签收日期 - 发货日期) + */ + timeliness?: number; +} + +export interface LogisticsOrderDetailQuery extends PageQuery { + /** + * 关联主表ID(biz_logistics_order.id) + */ + orderId?: string | number; + + /** + * FBA货件编号(冗余存储,避免联表查询) + */ + fbaShipmentId?: string | number; + + /** + * FBA箱号(亚马逊系统中箱子的唯一标识) + */ + fbaBoxNumber?: string; + + /** + * 物流商ID(冗余存储) + */ + logisticsProviderId?: string | number; + + /** + * 物流商名称(冗余存储) + */ + logisticsProviderName?: string | number; + + /** + * 物流渠道(与主表一致) + */ + logisticsChannel?: string; + + /** + * 目的地仓库(冗余存储) + */ + destination?: string; + + /** + * 计划数量(该箱子预计装载的商品数量) + */ + plannedQuantity?: number; + + /** + * 实际货件数量(该箱子实际装载的商品数量) + */ + shipmentQuantity?: number; + + /** + * 物流追踪号(物流商提供的唯一包裹标识) + */ + trackingNumber?: string; + + /** + * 供应商称重(单位:KG,由供应商提供) + */ + supplierWeight?: number; + + /** + * 物流商计重(单位:KG,物流商实际测量值) + */ + logisticsWeight?: number; + + /** + * 称重差异(应用层计算:物流商计重 - 供应商称重) + */ + weightDiff?: number; + + /** + * 物流单价(单位:元/KG,由合同或报价确定) + */ + pricePerKg?: number; + + /** + * 物流计价重量(应用层根据业务规则计算) + */ + logisticsCalculationPrice?: number; + + /** + * 其他物流费用(如报关费、保险费等) + */ + otherFee?: number; + + /** + * 费用合计(应用层计算:物流计价 + 其他费用) + */ + totalFee?: number; + + /** + * 物流状态(pending:待发运/in_transit:运输中/delivered:已签收) + */ + logisticsStatus?: string; + + /** + * 预计签收日期(物流商提供的预估日期) + */ + estimatedDeliveryDate?: string; + + /** + * 实际签收日期(物流商回传的实际日期) + */ + actualDeliveryDate?: string; + + /** + * 运输时效(单位:天,实际签收日期 - 发货日期) + */ + timeliness?: number; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/amz/logisticsQuote/index.ts b/src/api/amz/logisticsQuote/index.ts index 90046d4..a60529b 100644 --- a/src/api/amz/logisticsQuote/index.ts +++ b/src/api/amz/logisticsQuote/index.ts @@ -21,11 +21,12 @@ export const listLogisticsQuote = (query?: LogisticsQuoteQuery): AxiosPromise => { +export const queryLogisticsQuote = (destination: string, channelId: string, date: string): AxiosPromise => { return request({ - url: '/amz/logisticsQuote/query/' + destination + '/' + channelId, + url: '/amz/logisticsQuote/query/' + destination + '/' + channelId + '/' + date, method: 'get' }); }; @@ -53,6 +54,18 @@ export const addLogisticsQuote = (data: LogisticsQuoteForm) => { }); }; +/** + * 新增物流报价 + * @param data + */ +export const addMostLogisticsQuote = (data: LogisticsQuoteForm) => { + return request({ + url: '/amz/logisticsQuote/most', + method: 'post', + data: data + }); +}; + /** * 修改物流报价 * @param data diff --git a/src/api/amz/logisticsQuote/types.ts b/src/api/amz/logisticsQuote/types.ts index 549a7fd..f1fb8eb 100644 --- a/src/api/amz/logisticsQuote/types.ts +++ b/src/api/amz/logisticsQuote/types.ts @@ -17,7 +17,7 @@ export interface LogisticsQuoteVO { /** * 渠道名称(冗余存储,保证查询效率) */ - transportChannel: string; + channelName: string; /** * 基础价格 @@ -59,6 +59,15 @@ export interface LogisticsQuoteVO { */ channelId: string | number; + /** + * 是否双清包税(N不是 Y是) + */ + isDdp: string; + + /** + * 单位 + */ + unit: string; } export interface LogisticsQuoteForm extends BaseEntity { @@ -122,9 +131,22 @@ export interface LogisticsQuoteForm extends BaseEntity { */ channelId?: string | number; + /** + * 是否双清包税(N不是 Y是) + */ + isDdp?: string; + + /** + * 单位 + */ + unit?: string; } -export interface LogisticsQuoteQuery extends PageQuery { +export interface LogisticsMostQuoteForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; /** * 物流商用户ID(关联sys_user表) @@ -139,7 +161,84 @@ export interface LogisticsQuoteQuery extends PageQuery { /** * 渠道名称(冗余存储,保证查询效率) */ - transportChannel?: string; + channelName?: string; + + /** + * 基础价格 + */ + price?: number; + + /** + * 时效(单位:天) + */ + leadTime?: number; + + /** + * 附加费 + */ + surcharge?: number; + + /** + * 报价生效日期 + */ + quoteDate?: string; + + /** + * 报价生效开始日期 + */ + quoteStartDate?: string; + + /** + * 报价生效结束日期 + */ + quoteEndDate?: string; + + /** + * 提交状态(Y已提交 N未提交) + */ + isSubmitted?: string; + + /** + * 报价备注 + */ + remark?: string; + + /** + * 渠道类型(system=系统/custom=自定义) + */ + channelType?: string; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + channelId?: string | number; + + /** + * 是否双清包税(N不是 Y是) + */ + isDdp?: string; + + /** + * 单位 + */ + unit?: string; +} + +export interface LogisticsQuoteQuery extends PageQuery { + /** + * 物流商用户ID(关联sys_user表) + */ + userId?: string | number; + + /** + * 目的地(建议使用ISO国家代码如CN/US/GB) + */ + destination?: string; + + /** + * 渠道名称(冗余存储,保证查询效率) + */ + channelName?: string; /** * 基础价格 @@ -176,11 +275,18 @@ export interface LogisticsQuoteQuery extends PageQuery { */ channelId?: string | number; - /** - * 日期范围参数 - */ - params?: any; + /** + * 是否双清包税(N不是 Y是) + */ + isDdp?: string; + + /** + * 单位 + */ + unit?: string; + + /** + * 日期范围参数 + */ + params?: any; } - - - diff --git a/src/api/amz/shipmentPlan/types.ts b/src/api/amz/shipmentPlan/types.ts index 49efb12..cbb3ba7 100644 --- a/src/api/amz/shipmentPlan/types.ts +++ b/src/api/amz/shipmentPlan/types.ts @@ -32,7 +32,7 @@ export interface ShipmentPlanVO { /** * 物流中心编码 */ - destinationFulfillmentCenterId: string | number; + destination: string | number; /** * 运输模式 @@ -136,7 +136,7 @@ export interface ShipmentPlanForm extends BaseEntity { /** * 物流中心编码 */ - destinationFulfillmentCenterId?: string | number; + destination?: string | number; /** * 运输模式 @@ -235,7 +235,7 @@ export interface ShipmentPlanQuery extends PageQuery { /** * 物流中心编码 */ - destinationFulfillmentCenterId?: string | number; + destination?: string | number; /** * 运输模式 diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index a896261..4a19ad3 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -17,11 +17,16 @@ @change="dynamicTenantEvent" @clear="dynamicClearEvent" > - - + + +
+ {{ roleNmae }} +
@@ -60,7 +65,9 @@
- + + +