#
zhou zhou
3 天以前 2812a2504ec3d0a98fa7e6204e6048584723adab
#
31个文件已修改
265 ■■■■■ 已修改文件
rsf-design/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/components/core/layouts/art-menus/art-sidebar-menu/style.scss 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/components/core/layouts/art-settings-panel/composables/useSettingsState.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/components/core/tables/art-table/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/config/modules/fastEnter.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/hooks/core/useTable.js 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/main.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/plugins/iconify.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/utils/http/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/auth/login/index.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/bas-station-area/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/device-bind/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/loc-area-mat-rela/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/loc-area-mat/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/loc-area-rela/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/loc-area/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/loc-type/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/task-path-template-merge/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/task-path-template-node/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/basic-info/warehouse-areas/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/manager/loc-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/manager/stock-item/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/asn-order-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/delivery-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/out-stock-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/preparation-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/purchase-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/transfer-item/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/views/orders/transfer/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-design/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
@@ -69,12 +69,20 @@
      <!-- Logo -->
      <div
        class="header"
        :class="{ 'header-dual-menu': isDualMenu }"
        @click="navigateToHome"
        :style="{
          background: getMenuTheme.background
        }"
      >
        <ArtLogo v-if="!isDualMenu" class="logo" fill />
        <ArtLogo v-if="!isDualMenu" class="logo" :fill="menuOpen" :size="30" />
        <span
          v-else-if="menuOpen"
          class="dual-menu-system-name"
          :style="{ color: getMenuTheme.systemNameColor }"
        >
          {{ systemName }}
        </span>
      </div>
      <ElScrollbar :style="scrollbarStyle">
        <ElMenu
@@ -136,6 +144,7 @@
  import SidebarSubmenu from './widget/SidebarSubmenu.vue'
  import AppConfig from '@/config'
  import { useSettingStore } from '@/store/modules/setting'
  import { MenuTypeEnum, MenuWidth } from '@/enums/appEnum'
  import { useMenuStore } from '@/store/modules/menu'
@@ -157,6 +166,7 @@
  const { width } = useWindowSize()
  const menuopenwidth = computed(() => getMenuOpenWidth.value)
  const menuclosewidth = computed(() => MENU_CLOSE_WIDTH)
  const systemName = AppConfig.systemInfo.name
  const isTopLeftMenu = computed(() => menuType.value === MenuTypeEnum.TOP_LEFT)
  const showLeftMenu = computed(
    () => menuType.value === MenuTypeEnum.LEFT || menuType.value === MenuTypeEnum.TOP_LEFT
@@ -307,6 +317,16 @@
  @use './theme';
  .layout-sidebar {
    .menu-left-open {
      width: v-bind(menuopenwidth);
      min-width: v-bind(menuopenwidth);
    }
    .menu-left-close {
      width: v-bind(menuclosewidth);
      min-width: v-bind(menuclosewidth);
    }
    // 展开的宽度
    .el-menu:not(.el-menu--collapse) {
      width: v-bind(menuopenwidth);
rsf-design/src/components/core/layouts/art-menus/art-sidebar-menu/style.scss
@@ -105,6 +105,10 @@
    display: flex;
    flex-direction: column;
    height: 100vh;
    overflow: hidden;
    transition:
      width 0.25s ease,
      min-width 0.25s ease;
    @media only screen and (width <= 640px) {
      height: 100dvh;
@@ -188,6 +192,26 @@
      height: 100%;
      max-width: 126px;
      max-height: 40px;
      transition:
        width 0.25s ease,
        height 0.25s ease,
        max-width 0.25s ease,
        max-height 0.25s ease;
    }
  }
  .header-dual-menu {
    justify-content: flex-start;
    .dual-menu-system-name {
      display: block;
      width: 100%;
      overflow: hidden;
      font-size: 20px;
      font-weight: 600;
      line-height: 1.2;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
  }
@@ -249,6 +273,23 @@
  }
}
@media only screen and (width > 800px) {
  .layout-sidebar {
    .menu-left-close {
      .header {
        padding: 10px;
        .logo {
          width: 30px;
          height: 30px;
          max-width: 30px;
          max-height: 30px;
        }
      }
    }
  }
}
@media only screen and (width <= 640px) {
  .layout-sidebar {
    border-right: 0 !important;
rsf-design/src/components/core/layouts/art-settings-panel/composables/useSettingsState.js
@@ -24,7 +24,7 @@
      settingStore.setMenuOpen(true)
    }
    nextTick(() => {
      settingStore.reload()
      window.dispatchEvent(new Event('resize'))
    })
  }
  return {
rsf-design/src/components/core/tables/art-table/index.vue
@@ -118,7 +118,7 @@
    }
  })
  const DEFAULT_PAGINATION_OPTIONS = {
    pageSizes: [10, 20, 30, 50, 100],
    pageSizes: [20, 30, 50, 100],
    align: 'center',
    background: true,
    layout: layout.value,
rsf-design/src/config/modules/fastEnter.js
@@ -54,15 +54,9 @@
      routeName: 'Register'
    },
    {
      name: '忘记密码',
      enabled: true,
      order: 3,
      routeName: 'ForgetPassword'
    },
    {
      name: '个人中心',
      enabled: true,
      order: 4,
      order: 3,
      routeName: 'UserCenter'
    }
  ]
rsf-design/src/hooks/core/useTable.js
@@ -1,5 +1,6 @@
import { ref, reactive, computed, onMounted, onUnmounted, nextTick, readonly } from 'vue'
import { useWindowSize } from '@vueuse/core'
import { hash } from 'ohash'
import { useTableColumns } from './useTableColumns'
import { TableCache, CacheInvalidationStrategy } from '../../utils/table/tableCache'
import {
@@ -59,12 +60,14 @@
  const error = ref(null)
  const data = ref([])
  let abortController = null
  let inflightRequest = null
  let inflightRequestKey = ''
  let cacheCleanupTimer = null
  const searchParams = reactive(
    Object.assign(
      {
        [pageKey]: 1,
        [sizeKey]: 10
        [sizeKey]: 20
      },
      apiParams || {}
    )
@@ -113,14 +116,6 @@
    cacheUpdateTrigger.value++
  }
  const fetchData = async (params, useCache = enableCache) => {
    if (abortController) {
      abortController.abort()
    }
    const currentController = new AbortController()
    abortController = currentController
    loadingState.value = 'loading'
    error.value = null
    try {
      let requestParams = Object.assign(
        {},
        searchParams,
@@ -137,6 +132,20 @@
        })
        requestParams = filteredParams
      }
    const requestKey = hash(requestParams)
    if (inflightRequest && inflightRequestKey === requestKey) {
      logger.log('复用进行中的请求')
      return inflightRequest
    }
    if (abortController) {
      abortController.abort()
    }
    const currentController = new AbortController()
    abortController = currentController
    loadingState.value = 'loading'
    error.value = null
    const currentRequest = (async () => {
      try {
      if (useCache && cache) {
        const cachedItem = cache.get(requestParams)
        if (cachedItem) {
@@ -201,8 +210,16 @@
      if (abortController === currentController) {
        abortController = null
      }
        if (inflightRequest === currentRequest) {
          inflightRequest = null
          inflightRequestKey = ''
    }
  }
    })()
    inflightRequest = currentRequest
    inflightRequestKey = requestKey
    return currentRequest
  }
  const getData = async (params) => {
    try {
      return await fetchData(params)
rsf-design/src/main.js
@@ -10,7 +10,10 @@
import { registerLocalIconCollections } from './plugins/iconify'
import { setupErrorHandle } from './utils/sys/error-handle'
document.addEventListener('touchstart', function () {}, { passive: false })
registerLocalIconCollections()
async function bootstrap() {
  await registerLocalIconCollections()
const app = createApp(App)
initStore(app)
@@ -19,3 +22,6 @@
setupErrorHandle(app)
app.use(language)
app.mount('#app')
}
void bootstrap()
rsf-design/src/plugins/iconify.js
@@ -1,36 +1,26 @@
import { addCollection } from '@iconify/vue/offline'
import { icons as fluentIcons } from '@iconify-json/fluent'
import { icons as iconParkOutlineIcons } from '@iconify-json/icon-park-outline'
import { icons as iconamoonIcons } from '@iconify-json/iconamoon'
import { icons as ixIcons } from '@iconify-json/ix'
import { icons as lineMdIcons } from '@iconify-json/line-md'
import { icons as remixIcons } from '@iconify-json/ri'
import { icons as svgSpinnersIcons } from '@iconify-json/svg-spinners'
import { icons as systemUiconsIcons } from '@iconify-json/system-uicons'
import { icons as vaadinIcons } from '@iconify-json/vaadin'
let iconCollectionsRegistered = false
let iconCollectionsPromise = null
export const LOCAL_ICON_COLLECTIONS = Object.freeze({
  fluent: fluentIcons,
  'icon-park-outline': iconParkOutlineIcons,
  iconamoon: iconamoonIcons,
  ix: ixIcons,
  'line-md': lineMdIcons,
  ri: remixIcons,
  'svg-spinners': svgSpinnersIcons,
  'system-uicons': systemUiconsIcons,
  vaadin: vaadinIcons
})
export function registerLocalIconCollections() {
export async function registerLocalIconCollections() {
  if (iconCollectionsRegistered) {
    return
  }
  if (!iconCollectionsPromise) {
    iconCollectionsPromise = import('./iconify.collections.js')
      .then(({ LOCAL_ICON_COLLECTIONS }) => {
  Object.values(LOCAL_ICON_COLLECTIONS).forEach((collection) => {
    addCollection(collection)
  })
  iconCollectionsRegistered = true
      })
      .catch((error) => {
        iconCollectionsPromise = null
        throw error
      })
  }
  await iconCollectionsPromise
}
rsf-design/src/utils/http/index.js
@@ -3,7 +3,7 @@
import { ApiStatus } from './status'
import { HttpError, handleError, showError, showSuccess } from './error'
import { $t } from '@/locales'
const REQUEST_TIMEOUT = 15e3
const REQUEST_TIMEOUT = 30e3
const LOGOUT_DELAY = 500
const MAX_RETRIES = 0
const RETRY_DELAY = 1e3
rsf-design/src/views/auth/login/index.vue
@@ -10,7 +10,26 @@
        <div class="form">
          <h3 class="title">{{ $t('login.title') }}</h3>
          <p class="sub-title">{{ $t('login.subTitle') }}</p>
          <div v-if="initLoading" class="mt-6">
            <ElSkeleton :rows="6" animated />
          </div>
          <ElResult
            v-else-if="initErrorMessage"
            class="mt-6"
            icon="error"
            :title="$t('crud.messages.loadFailed')"
            :sub-title="initErrorMessage"
          >
            <template #extra>
              <ElButton type="primary" @click="handleRetryInit" v-ripple>
                {{ $t('common.actions.reload') }}
              </ElButton>
            </template>
          </ElResult>
          <ElForm
            v-else
            ref="formRef"
            :model="formData"
            :rules="rules"
@@ -24,6 +43,7 @@
                class="custom-height"
                :placeholder="$t('login.placeholder.username')"
                v-model.trim="formData.username"
                :disabled="loading"
              />
            </ElFormItem>
            <ElFormItem prop="password">
@@ -34,6 +54,7 @@
                type="password"
                autocomplete="off"
                show-password
                :disabled="loading"
              />
            </ElFormItem>
            <ElFormItem v-if="requiresTenantSelection" prop="tenantId">
@@ -44,6 +65,7 @@
                filterable
                :loading="tenantLoading"
                :placeholder="$t('login.placeholder.tenant')"
                :disabled="loading || tenantLoading"
              >
                <ElOption
                  v-for="tenant in tenantOptions"
@@ -54,13 +76,10 @@
              </ElSelect>
            </ElFormItem>
            <div class="flex-cb mt-2 text-sm">
              <ElCheckbox v-model="formData.rememberPassword">{{
            <div class="mt-2 text-sm">
              <ElCheckbox v-model="formData.rememberPassword" :disabled="loading">{{
                $t('login.rememberPwd')
              }}</ElCheckbox>
              <RouterLink class="text-theme" :to="{ name: 'ForgetPassword' }">{{
                $t('login.forgetPwd')
              }}</RouterLink>
            </div>
            <div style="margin-top: 30px">
@@ -69,18 +88,12 @@
                type="primary"
                @click="handleSubmit"
                :loading="loading"
                :disabled="loading"
                v-ripple
              >
                {{ $t('login.btnText') }}
              </ElButton>
            </div>
<!--            <div class="mt-5 text-sm text-gray-600">-->
<!--              <span>{{ $t('login.noAccount') }}</span>-->
<!--              <RouterLink class="text-theme" :to="{ name: 'Register' }">{{-->
<!--                $t('login.register')-->
<!--              }}</RouterLink>-->
<!--            </div>-->
          </ElForm>
        </div>
      </div>
@@ -130,6 +143,8 @@
      : []
  }))
  const loading = ref(false)
  const initLoading = ref(true)
  const initErrorMessage = ref('')
  const hydrateRememberedLogin = () => {
    const rememberEnabled =
@@ -184,6 +199,22 @@
    }
  }
  const initializeLoginPage = async () => {
    initLoading.value = true
    initErrorMessage.value = ''
    try {
      await loadLoginSupports()
      await nextTick()
      formRef.value?.clearValidate()
    } catch (error) {
      tenantOptions.value = []
      formData.tenantId = ''
      initErrorMessage.value = error?.message || t('httpMsg.requestFailed')
    } finally {
      initLoading.value = false
    }
  }
  const persistRememberedLogin = () => {
    localStorage.setItem(
      StorageConfig.LOGIN_REMEMBER_ENABLED_KEY,
@@ -202,7 +233,7 @@
  }
  const handleSubmit = async () => {
    if (!formRef.value) return
    if (!formRef.value || initLoading.value || initErrorMessage.value) return
    try {
      const valid = await formRef.value.validate()
      if (!valid) return
@@ -225,6 +256,10 @@
    }
  }
  const handleRetryInit = () => {
    void initializeLoginPage()
  }
  watch(
    () => formData.tenantId,
    (value) => {
@@ -236,9 +271,7 @@
  onMounted(async () => {
    hydrateRememberedLogin()
    await loadLoginSupports()
    await nextTick()
    formRef.value?.clearValidate()
    await initializeLoginPage()
  })
  const showLoginSuccessNotice = () => {
rsf-design/src/views/basic-info/bas-station-area/index.vue
@@ -492,6 +492,7 @@
    core: {
      apiFn: fetchBasStationAreaPage,
      apiParams: buildBasStationAreaPageQueryParams(searchForm.value),
      immediate: false,
      paginationKey: getBasStationAreaPaginationKey(),
      columnsFactory: () =>
        createBasStationAreaTableColumns({
rsf-design/src/views/basic-info/device-bind/index.vue
@@ -319,6 +319,7 @@
      core: {
        apiFn: fetchDeviceBindPage,
        apiParams: buildDeviceBindPageQueryParams(searchForm.value),
        immediate: false,
        paginationKey: getDeviceBindPaginationKey(),
        columnsFactory: () =>
          createDeviceBindTableColumns({
rsf-design/src/views/basic-info/loc-area-mat-rela/index.vue
@@ -306,6 +306,7 @@
    core: {
      apiFn: fetchLocAreaMatRelaPage,
      apiParams: buildLocAreaMatRelaPageQueryParams(searchForm.value),
      immediate: false,
      paginationKey: getLocAreaMatRelaPaginationKey(),
      columnsFactory: () =>
        createLocAreaMatRelaTableColumns({
rsf-design/src/views/basic-info/loc-area-mat/index.vue
@@ -360,6 +360,6 @@
  }
  onMounted(async () => {
    await Promise.all([loadWarehouseOptions(), loadAreaOptions(), getData()])
    await Promise.all([loadWarehouseOptions(), loadAreaOptions()])
  })
</script>
rsf-design/src/views/basic-info/loc-area-rela/index.vue
@@ -68,7 +68,7 @@
</template>
<script setup>
  import { computed, onMounted, ref } from 'vue'
  import { computed, ref } from 'vue'
  import { ElMessage } from 'element-plus'
  import { useUserStore } from '@/store/modules/user'
  import { useAuth } from '@/hooks/core/useAuth'
@@ -355,7 +355,4 @@
    resetSearchParams()
  }
  onMounted(async () => {
    await getData()
  })
</script>
rsf-design/src/views/basic-info/loc-area/index.vue
@@ -340,6 +340,6 @@
  }
  onMounted(async () => {
    await Promise.all([loadAreaOptions(), getData()])
    await Promise.all([loadAreaOptions()])
  })
</script>
rsf-design/src/views/basic-info/loc-type/index.vue
@@ -68,7 +68,7 @@
</template>
<script setup>
  import { computed, onMounted, ref } from 'vue'
  import { computed, ref } from 'vue'
  import { ElMessage } from 'element-plus'
  import { useUserStore } from '@/store/modules/user'
  import { useAuth } from '@/hooks/core/useAuth'
@@ -336,7 +336,4 @@
    resetSearchParams()
  }
  onMounted(async () => {
    await getData()
  })
</script>
rsf-design/src/views/basic-info/task-path-template-merge/index.vue
@@ -198,6 +198,7 @@
      core: {
        apiFn: fetchTaskPathTemplateMergePage,
        apiParams: buildTaskPathTemplateMergePageQueryParams(searchForm.value),
        immediate: false,
        paginationKey: getTaskPathTemplateMergePaginationKey(),
        columnsFactory: () =>
          createTaskPathTemplateMergeTableColumns({
rsf-design/src/views/basic-info/task-path-template-node/index.vue
@@ -53,7 +53,7 @@
</template>
<script setup>
  import { computed, onMounted, ref } from 'vue'
  import { computed, ref } from 'vue'
  import { ElMessage } from 'element-plus'
  import { useAuth } from '@/hooks/core/useAuth'
  import { useTable } from '@/hooks/core/useTable'
@@ -356,7 +356,4 @@
    resetSearchParams()
  }
  onMounted(() => {
    getData()
  })
</script>
rsf-design/src/views/basic-info/warehouse-areas/index.vue
@@ -411,6 +411,6 @@
  }
  onMounted(async () => {
    await Promise.all([loadWarehouseOptions(), loadTypeOptions(), getData()])
    await Promise.all([loadWarehouseOptions(), loadTypeOptions()])
  })
</script>
rsf-design/src/views/manager/loc-item/index.vue
@@ -184,6 +184,7 @@
          { timeoutMessage: t('pages.manager.locItem.messages.pageTimeout') }
        ),
      apiParams: buildLocItemPageQueryParams(searchForm.value),
      immediate: false,
      paginationKey: getLocItemPaginationKey()
    },
    transform: {
rsf-design/src/views/manager/stock-item/index.vue
@@ -75,7 +75,7 @@
</template>
<script setup>
  import { computed, onMounted, reactive, ref } from 'vue'
  import { computed, reactive, ref } from 'vue'
  import { ElMessage } from 'element-plus'
  import { useUserStore } from '@/store/modules/user'
  import { useTable } from '@/hooks/core/useTable'
@@ -486,7 +486,4 @@
    })
  )
  onMounted(() => {
    getData()
  })
</script>
rsf-design/src/views/orders/asn-order-item/index.vue
@@ -268,6 +268,7 @@
        pageSize: DEFAULT_PAGE_SIZE,
        orderBy: 'id desc'
      }),
      immediate: false,
      columnsFactory: () =>
        createAsnOrderItemTableColumns({
          handleView: openDetail,
rsf-design/src/views/orders/delivery-item/index.vue
@@ -178,6 +178,7 @@
        ...searchForm.value,
        pageSize: 20
      }),
      immediate: false,
      columnsFactory: () => createDeliveryItemTableColumns({ handleActionClick: openDetail, t })
    },
    transform: {
rsf-design/src/views/orders/out-stock-item/index.vue
@@ -221,6 +221,7 @@
        ...searchForm.value,
        pageSize: 20
      }),
      immediate: false,
      columnsFactory: () => createOutStockItemTableColumns({ handleActionClick: openDetail, t })
    },
    transform: {
rsf-design/src/views/orders/preparation-item/index.vue
@@ -241,6 +241,7 @@
    core: {
      apiFn: fetchPreparationItemPage,
      apiParams: buildPreparationItemPageQueryParams(searchForm.value),
      immediate: false,
      paginationKey: getPreparationItemPaginationKey(),
      columnsFactory: () => createOutStockItemTableColumns({ handleActionClick: openDetail })
    },
rsf-design/src/views/orders/purchase-item/index.vue
@@ -278,6 +278,7 @@
      core: {
        apiFn: fetchPurchaseItemPage,
        apiParams: buildPurchaseItemPageQueryParams(searchForm.value),
        immediate: false,
        paginationKey: getPurchaseItemPaginationKey(),
        columnsFactory: () =>
          createPurchaseItemTableColumns({
rsf-design/src/views/orders/transfer-item/index.vue
@@ -353,6 +353,7 @@
    core: {
      apiFn: fetchTransferItemPage,
      apiParams: buildTransferItemPageQueryParams(searchForm.value),
      immediate: false,
      paginationKey: getTransferItemPaginationKey(),
      columnsFactory: () =>
        createTransferItemTableColumns({
rsf-design/src/views/orders/transfer/index.vue
@@ -484,6 +484,6 @@
  )
  onMounted(async () => {
    await Promise.allSettled([loadTypeOptions(), loadAreaOptions(), getData()])
    await Promise.allSettled([loadTypeOptions(), loadAreaOptions()])
  })
</script>
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java
@@ -63,6 +63,7 @@
        QueryWrapper<WkOrder> queryWrapper = pageParam.buildWrapper(true);
        List<String> asList = Arrays.asList(OrderType.ORDER_IN.type);
        queryWrapper.in("type", asList);
        pageParam.setSearchCount(false);
        return R.ok().add(asnOrderService.page(pageParam, queryWrapper));
    }
rsf-server/src/main/resources/application-dev.yml
@@ -114,8 +114,8 @@
pressure:
  asn-order:
    enabled: true
    enabled: false
    cron: "0/10 * * * * ?"
    order-count-per-run: 2000
    item-count-per-order: 10
    item-count-per-order: 1
    item-qty: 10.0