Browse Source

处理问题

yangg 11 months ago
parent
commit
daeeda47fb

+ 1 - 1
.env

@@ -1,4 +1,4 @@
-VITE_API_URL=https://api.raycos.net
+VITE_API_URL=http://192.168.8.101:9998
 #线下地址
 #http://192.168.8.104:9998
 #线上地址

+ 2 - 2
src/components/TableLayout/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="containers dark:!bg-[#060818] p-3 grid xl:grid-cols-1" v-loading="loading">
+  <div class="containers dark:!bg-[#060818] p-3 " v-loading="loading">
     <!-- 操作提示 -->
     <div class="tips-info dark:!bg-[#060818]" v-if="tips">
       <slot name="tips"></slot>
@@ -28,7 +28,7 @@
       <slot name="table-columns" class="dark:!bg-[#060818]"></slot>
     </el-table>
     <!-- 分页 -->
-    <div v-if="pagination" class="pagination dark:!bg-[#060818]">
+    <div v-if="pagination" class="pagination dark:!bg-[#060818] ">
       <div class="pagination-toolbar dark:!bg-[#060818]">
         <slot name="pagination-toolbar"></slot>
       </div>

+ 540 - 12
src/components/layout/Header.vue

@@ -48,10 +48,9 @@
               </router-link>
             </li>
           </ul>
-        </div><!-- items-center -->
-        <div
-          class="sm:flex-1 ltr:sm:ml-0 ltr:ml-auto sm:rtl:mr-0 rtl:mr-auto flex  space-x-1.5 lg:space-x-2 rtl:space-x-reverse dark:text-[#d0d2d6]"
-        >
+        </div>
+        <!-- items-center -->
+        <div class="sm:flex-1 ltr:sm:ml-0 ltr:ml-auto sm:rtl:mr-0 rtl:mr-auto flex space-x-1.5 lg:space-x-2 rtl:space-x-reverse dark:text-[#d0d2d6]">
           <div class="sm:ltr:mr-auto sm:rtl:ml-auto">
             <form
               class="sm:relative absolute inset-x-0 sm:top-0 top-1/2 sm:translate-y-0 -translate-y-1/2 sm:mx-0 mx-4 z-10 sm:block hidden"
@@ -215,26 +214,28 @@
                         <h4 class="text-base">
                           {{ store.state.user.user.username }}<span class="text-xs bg-success-light rounded text-success px-1 ltr:ml-2 rtl:ml-2">Pro</span>
                         </h4>
-                        <a class="text-black/60 hover:text-primary dark:text-dark-light/60 dark:hover:text-white" href="javascript:;">{{store.state.user.user.company_vo.name}}</a>
+                        <a class="text-black/60 hover:text-primary dark:text-dark-light/60 dark:hover:text-white" href="javascript:;">{{
+                          store.state.user.user?.company_vo?.name || '未知公司'
+                        }}</a>
                       </div>
                     </div>
                   </li>
                   <li>
                     <a href="javascript:;" class="dark:hover:text-white" @click="goInfo">
                       <icon-user class="w-4.5 h-4.5 ltr:mr-2 rtl:ml-2 shrink-0" />
-                      {{$t('info')}}
+                      {{ $t('info') }}
                     </a>
                   </li>
                   <li>
                     <a href="javascript:;" class="dark:hover:text-white" @click="editPassword">
                       <icon-lock-dots class="w-4.5 h-4.5 ltr:mr-2 rtl:ml-2 shrink-0" />
-                      {{$t('edit_password')}}
+                      {{ $t('edit_password') }}
                     </a>
                   </li>
                   <li class="border-t border-white-light dark:border-white-light/10">
                     <a class="text-danger !py-3 dark:hover:text-white" @click="handleLogoutClick">
                       <icon-logout class="w-4.5 h-4.5 ltr:mr-2 rtl:ml-2 rotate-90 shrink-0" />
-                      {{$t('logout')}}
+                      {{ $t('logout') }}
                     </a>
                   </li>
                 </ul>
@@ -243,6 +244,534 @@
           </div>
         </div>
       </div>
+      <ul
+        class="horizontal-menu hidden py-1.5 font-semibold px-6 lg:space-x-1.5 xl:space-x-8 rtl:space-x-reverse bg-white border-t border-[#ebedf2] dark:border-[#191e3a] dark:bg-[#0e1726] text-black dark:text-white-dark"
+      >
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-dashboard class="shrink-0" />
+
+              <span class="px-2">{{ $t('warehouse') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/stock/warehouseList">{{ $t('warehouseList') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/warehouseLocation">{{ $t('warehouseLocation') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsLend">{{ $t('goodsLend') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsTransfer">{{ $t('goodsTransfer') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsExchange">{{ $t('goodsExchange') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsOutBound">{{ $t('goodsOutBound') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsInventory">{{ $t('goodsInventory') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsInventoryLoss">{{ $t('goodsInventoryLoss') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/stock/goodsUnderstock">{{ $t('goodsUnderstock') }}</router-link>
+            </li>
+          </ul>
+        </li>
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-apps class="shrink-0" />
+
+              <span class="px-2">{{ $t('goods') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/goods/SKUlist">{{ $t('SKUList') }}</router-link>
+            </li>
+           <!--  <li>
+              <router-link to="/apps/mailbox">{{ $t('mailbox') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/apps/todolist">{{ $t('todo_list') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/apps/notes">{{ $t('notes') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/apps/scrumboard">{{ $t('scrumboard') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/apps/contacts">{{ $t('contacts') }}</router-link>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('invoice') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/apps/invoice/list">{{ $t('list') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/apps/invoice/preview">{{ $t('preview') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/apps/invoice/add">{{ $t('add') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/apps/invoice/edit">{{ $t('edit') }}</router-link>
+                </li>
+              </ul>
+            </li>
+            <li>
+              <router-link to="/apps/calendar">{{ $t('calendar') }}</router-link>
+            </li> -->
+          </ul>
+        </li>
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-components class="shrink-0" />
+              <span class="px-2">{{ $t('companyMent') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/companyMent/administratorManage">{{ $t('administratorManage') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/setting/roleManage">{{ $t('roleManage') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/companyMent/branch">{{ $t('branch') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/companyMent/configMsg">{{ $t('configMsg') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/setting/systemLog">{{ $t('systemLog') }}</router-link>
+            </li>
+          <!--   <li>
+              <router-link to="/components/countdown">{{ $t('countdown') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/counter">{{ $t('counter') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/sweetalert">{{ $t('sweet_alerts') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/timeline">{{ $t('timeline') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/notifications">{{ $t('notifications') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/media-object">{{ $t('media_object') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/list-group">{{ $t('list_group') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/pricing-table">{{ $t('pricing_tables') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/components/lightbox">{{ $t('lightbox') }}</router-link>
+            </li> -->
+          </ul>
+        </li>
+        <!-- <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-elements class="shrink-0" />
+              <span class="px-2">{{ $t('elements') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/elements/alerts">{{ $t('alerts') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/avatar">{{ $t('avatar') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/badges">{{ $t('badges') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/breadcrumbs">{{ $t('breadcrumbs') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/buttons">{{ $t('buttons') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/buttons-group">{{ $t('button_groups') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/color-library">{{ $t('color_library') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/dropdown">{{ $t('dropdown') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/infobox">{{ $t('infobox') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/jumbotron">{{ $t('jumbotron') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/loader">{{ $t('loader') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/pagination">{{ $t('pagination') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/popovers">{{ $t('popovers') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/progress-bar">{{ $t('progress_bar') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/search">{{ $t('search') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/tooltips">{{ $t('tooltips') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/treeview">{{ $t('treeview') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/elements/typography">{{ $t('typography') }}</router-link>
+            </li>
+          </ul>
+        </li>
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-datatables class="shrink-0" />
+              <span class="px-2">{{ $t('tables') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/tables">{{ $t('tables') }}</router-link>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('datatables') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/datatables/basic">{{ $t('basic') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/advanced">{{ $t('advanced') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/skin">{{ $t('skin') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/order-sorting">{{ $t('order_sorting') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/columns-filter">{{ $t('columns_filter') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/multi-column">{{ $t('multi_column') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/multiple-tables">{{ $t('multiple_tables') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/alt-pagination">{{ $t('alt_pagination') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/checkbox">{{ $t('checkbox') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/range-search">{{ $t('range_search') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/export">{{ $t('export') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/sticky-header">{{ $t('sticky_header') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/clone-header">{{ $t('clone_header') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/datatables/column-chooser">{{ $t('column_chooser') }}</router-link>
+                </li>
+              </ul>
+            </li>
+          </ul>
+        </li>
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-forms class="shrink-0" />
+              <span class="px-2">{{ $t('forms') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/forms/basic">{{ $t('basic') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/input-group">{{ $t('input_group') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/layouts">{{ $t('layouts') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/validation">{{ $t('validation') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/input-mask">{{ $t('input_mask') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/select2">{{ $t('select2') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/touchspin">{{ $t('touchspin') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/checkbox-radio">{{ $t('checkbox_and_radio') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/switches">{{ $t('switches') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/wizards">{{ $t('wizards') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/file-upload">{{ $t('file_upload') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/quill-editor">{{ $t('quill_editor') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/markdown-editor">{{ $t('markdown_editor') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/date-picker">{{ $t('date_and_range_picker') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/forms/clipboard">{{ $t('clipboard') }}</router-link>
+            </li>
+          </ul>
+        </li>
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-pages class="shrink-0" />
+              <span class="px-2">{{ $t('pages') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('users') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/users/profile">{{ $t('profile') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/users/user-account-settings">{{ $t('account_settings') }}</router-link>
+                </li>
+              </ul>
+            </li>
+            <li>
+              <router-link to="/pages/knowledge-base">{{ $t('knowledge_base') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/pages/contact-us-boxed" target="_blank">{{ $t('contact_us_boxed') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/pages/contact-us-cover" target="_blank">{{ $t('contact_us_cover') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/pages/faq">FAQ</router-link>
+            </li>
+            <li>
+              <router-link to="/pages/coming-soon-boxed" target="_blank">{{ $t('coming_soon_boxed') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/pages/coming-soon-cover" target="_blank">{{ $t('coming_soon_cover') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/pages/maintenence" target="_blank">{{ $t('maintenence') }}</router-link>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('error') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/pages/error404" target="_blank">{{ $t('404') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/pages/error500" target="_blank">{{ $t('500') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/pages/error503" target="_blank">{{ $t('503') }}</router-link>
+                </li>
+              </ul>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('login') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/auth/cover-login" target="_blank">{{ $t('login_cover') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/auth/boxed-signin" target="_blank">{{ $t('login_boxed') }}</router-link>
+                </li>
+              </ul>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('register') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/auth/cover-register" target="_blank">{{ $t('register_cover') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/auth/boxed-signup" target="_blank">{{ $t('register_boxed') }}</router-link>
+                </li>
+              </ul>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('password_recovery') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/auth/cover-password-reset" target="_blank">{{ $t('recover_id_cover') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/auth/boxed-password-reset" target="_blank">{{ $t('recover_id_boxed') }}</router-link>
+                </li>
+              </ul>
+            </li>
+            <li class="relative">
+              <a href="javascript:;"
+                >{{ $t('lockscreen') }}
+                <div class="ltr:ml-auto rtl:mr-auto rtl:rotate-90 -rotate-90">
+                  <icon-caret-down />
+                </div>
+              </a>
+              <ul
+                class="rounded absolute top-0 ltr:left-[95%] rtl:right-[95%] min-w-[180px] bg-white z-[10] text-dark dark:text-white-dark dark:bg-[#1b2e4b] shadow p-0 py-2 hidden"
+              >
+                <li>
+                  <router-link to="/auth/cover-lockscreen" target="_blank">{{ $t('unlock_cover') }}</router-link>
+                </li>
+                <li>
+                  <router-link to="/auth/boxed-lockscreen" target="_blank">{{ $t('unlock_boxed') }}</router-link>
+                </li>
+              </ul>
+            </li>
+          </ul>
+        </li>
+        <li class="menu nav-item relative">
+          <a href="javascript:;" class="nav-link">
+            <div class="flex items-center">
+              <icon-menu-more class="shrink-0" />
+
+              <span class="px-2">{{ $t('more') }}</span>
+            </div>
+            <div class="right_arrow">
+              <icon-caret-down />
+            </div>
+          </a>
+          <ul class="sub-menu">
+            <li>
+              <router-link to="/dragndrop">{{ $t('drag_and_drop') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/charts">{{ $t('charts') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/font-icons">{{ $t('font_icons') }}</router-link>
+            </li>
+            <li>
+              <router-link to="/widgets">{{ $t('widgets') }}</router-link>
+            </li>
+            <li>
+              <a href="https://vristo.sbthemes.com" target="_blank">{{ $t('documentation') }}</a>
+            </li>
+          </ul>
+        </li> -->
+      </ul>
     </div>
   </header>
 </template>
@@ -267,12 +796,12 @@ import IconMoon from '@/components/icon/icon-moon.vue';
 import IconLaptop from '@/components/icon/icon-laptop.vue';
 import IconMailDot from '@/components/icon/icon-mail-dot.vue';
 import IconArrowLeft from '@/components/icon/icon-arrow-left.vue';
- import IconInfoCircle from '@/components/icon/icon-info-circle.vue';
+import IconInfoCircle from '@/components/icon/icon-info-circle.vue';
 import IconBellBing from '@/components/icon/icon-bell-bing.vue';
 import IconUser from '@/components/icon/icon-user.vue';
 import IconMail from '@/components/icon/icon-mail.vue';
 import IconLockDots from '@/components/icon/icon-lock-dots.vue';
-import IconLogout from '@/components/icon/icon-logout.vue';/* */
+import IconLogout from '@/components/icon/icon-logout.vue'; /* */
 import IconMenuDashboard from '@/components/icon/menu/icon-menu-dashboard.vue';
 import IconCaretDown from '@/components/icon/icon-caret-down.vue';
 import IconMenuApps from '@/components/icon/menu/icon-menu-apps.vue';
@@ -424,8 +953,7 @@ const toggleSidebars = () => {
 const toggleTheme = (theme) => {
   store.dispatch('toggleTheme', theme);
 };
-const closes = () => {
-};
+const closes = () => {};
 const handleLogoutClick = () => {
   ElMessageBox.confirm('确定退出吗?', '提示', {
     confirmButtonText: '确定',

+ 4 - 1
src/components/layout/Sidebar.vue

@@ -162,7 +162,10 @@
                   <li>
                     <router-link to="/setting/menuManage" @click="toggleMobileMenu">{{ $t('menuManage') }}</router-link>
                   </li>
-                  <!-- systemLog -->
+                  <li>
+                    <router-link to="/setting/express" @click="toggleMobileMenu">{{ $t('express') }}</router-link>
+                  </li>
+                  <!-- express -->
                 </ul>
               </vue-collapsible>
               <vue-collapsible :isOpen="activeDropdown === 'users'">

+ 2 - 0
src/locales/zh.json

@@ -170,6 +170,8 @@
     "delivery_method":"配送方式",
     "transfer_order":"调拨单",
 
+    "express":"物流公司",
+
     
 
     "brand":"品牌",

+ 1 - 0
src/router/index.ts

@@ -99,6 +99,7 @@ const asyncRouterMap: RouteRecordRaw[] = [
             { path: 'dicData', component: () => import('@/views/setting/dicData.vue'), name: 'dicData', meta: { title: 'dicData', layout: 'app' } },
             { path: 'menuManage', component: () => import('@/views/setting/menuManage.vue'), name: 'menuManage', meta: { title: 'menuManage', layout: 'app' } },
             { path: 'systemLog', component: () => import('@/views/setting/systemLog.vue'), name: 'systemLog', meta: { title: 'systemLog', layout: 'app' } },
+            { path: 'express', component: () => import('@/views/setting/express.vue'), name: 'express', meta: { title: 'express', layout: 'app' } },
         ]
     },
     {

+ 7 - 8
src/views/auth/boxed-signup.vue

@@ -89,8 +89,8 @@
                       <img v-if="companyForm.id_card_front" :src="companyForm.id_card_front" class="avatar w-28 h-28" />
                       <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
                     </el-upload>
-                    <!--  <p>姓名:{{ companyForm.value.id_card_front.name }}</p>
-              <p>身份证号码:{{ companyForm.value.id_card_front.id_card_number }}</p> -->
+                    <!--<p>姓名:{{ companyForm.value.id_card_front.name }}</p>
+                        <p>身份证号码:{{ companyForm.value.id_card_front.id_card_number }}</p> -->
                   </el-form-item>
                 </el-col>
                 <el-col :span="8">
@@ -365,9 +365,9 @@ const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
 /* 身份证正面 */
 const handleFrontSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
   API_Company.checkIdCardOpposite({ image_url: response.url }, 'front').then((res) => {
-    if(res.name!==companyForm.value.name){
-        ElMessage.error('请上传法人身份证!');
-        return
+    if (res.name !== companyForm.value.name) {
+      ElMessage.error('请上传法人身份证!');
+      return;
     }
     companyForm.value.user_name = res.name;
     companyForm.value.id_card_num = res.id_card_number;
@@ -475,9 +475,8 @@ const getCode = () => {
   });
 };
 onMounted(() => {
-    GET_PackageList()
-})
-
+  GET_PackageList();
+});
 </script>
 <style>
 .avatar-uploader .el-upload {

+ 3 - 1
src/views/companyMent/administratorManage.vue

@@ -352,7 +352,9 @@ const handleAddAdmin = () => {
 };
 
 const handleEditAdmin = (index, row) => {
-  Object.assign(adminForm, row);
+  console.log(row);
+  adminForm.value=row
+ /*  Object.assign(adminForm, row); */
   adminForm.value.role_id = parseInt(adminForm.value.role_id) === 0 ? '超级人员' : adminForm.value.role_id;
   fileList.value = adminForm.value.face ? [{ name: 'face', url: adminForm.value.face }] : [];
   dialogVisible.value = true;

+ 22 - 0
src/views/companyMent/companyInfo.vue

@@ -271,6 +271,8 @@ const submitInfo = () => {
   API_Auth.editAdministrator(store.state.user.user.uid, { face: infoForm.value.face }).then((res) => {
     ElMessage.success('修改成功!');
     GET_Info();
+    store.dispatch('updateUserAction', res)
+/*     location.reload(); */
   });
 };
 
@@ -344,4 +346,24 @@ onMounted(() => {
 :deep(.el-tabs__item.is-active) {
   @apply dark:bg-[#060818]; /* 替换为你想要的 Tailwind CSS 背景色类 */
 }
+.avatar-uploader .el-upload {
+  border: 1px dashed var(--el-border-color);
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  transition: var(--el-transition-duration-fast);
+}
+
+.avatar-uploader .el-upload:hover {
+  border-color: var(--el-color-primary);
+}
+
+.el-icon.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 112px;
+  height: 112px;
+  text-align: center;
+}
 </style>

+ 218 - 0
src/views/setting/express.vue

@@ -0,0 +1,218 @@
+<template>
+  <div class="container">
+    <en-table-layout :tableData="tableData.data" :loading="loading" @selection-change="handleSelectionChange">
+      <template #toolbar>
+        <div class="inner-toolbar w-11/12 flex justify-between">
+          <div class="toolbar-btns">
+            <el-button size="small" type="primary" @click="handleAddExpress">添加</el-button>
+          </div>
+          <div class="toolbar-search">
+            <!--  <en-table-search @search="searchEvent" placeholder="请输入关键字" /> -->
+          </div>
+        </div>
+      </template>
+      <template #table-columns>
+        <el-table-column prop="name" label="公司名称" />
+        <el-table-column prop="code" label="快递查询代码" />
+        <el-table-column prop="kdcode" label="菜鸟代码" />
+        <el-table-column label="状态" :formatter="disabledStatus" />
+        <el-table-column label="操作" min-width="200">
+          <template #default="scope">
+            <el-button size="small" type="primary" v-if="checkPermission(['logisticsCompany:edit'])" @click="handleEditExpress(scope.$index, scope.row)"
+              >编辑</el-button
+            >
+            <el-button
+              v-if="scope.row.disabled === 'OPEN' && checkPermission(['logisticsCompany:editStatus'])"
+              size="small"
+              type="danger"
+              @click="handleDisabledExpress(scope.$index, scope.row)"
+              >禁用</el-button
+            >
+            <el-button
+              v-if="scope.row.disabled === 'CLOSE' && checkPermission(['logisticsCompany:editStatus'])"
+              size="small"
+              type="success"
+              @click="handleDisabledExpress(scope.$index, scope.row)"
+              >开启</el-button
+            >
+            <el-button size="small" v-if="checkPermission(['logisticsCompany:delete'])" type="danger" @click="handleDeleteExpress(scope.$index, scope.row)"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </template>
+    </en-table-layout>
+
+    <el-pagination
+      v-if="tableData"
+      v-model:current-page="params.page_no"
+      v-model:page-size="params.page_size"
+      :page-sizes="[10, 20, 50, 100]"
+      layout="total, sizes, prev, pager, next, jumper"
+      :total="tableData.data_total"
+      @size-change="handlePageSizeChange"
+      @current-change="handlePageCurrentChange"
+    />
+
+    <el-dialog v-model="dialogExpressVisible" title="物流公司" :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="expressForm" :rules="expressRules" ref="expressFormRef" label-width="120px">
+        <el-form-item label="物流公司名称" prop="name">
+          <el-input v-model="expressForm.name"></el-input>
+        </el-form-item>
+        <el-form-item label="快递查询代码" prop="code">
+          <el-input v-model="expressForm.code"></el-input>
+        </el-form-item>
+        <el-form-item label="菜鸟物流代码" prop="kdcode" v-if="expressForm.is_waybill">
+          <el-input v-model="expressForm.kdcode"></el-input>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogExpressVisible = false">取 消</el-button>
+          <el-button type="primary" @click="submitExpressForm">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+  
+  <script lang="ts" setup>
+import { ref, reactive, computed, onMounted } from 'vue';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import * as API_Express from '@/api/express';
+
+// 定义响应式数据
+const loading = ref(false);
+const params = reactive({
+  page_no: 1,
+  page_size: 20,
+});
+const tableData = ref<any>({});
+const expressForm = ref<any>({});
+const dialogExpressVisible = ref(false);
+const expressFormRef = ref();
+
+// 计算属性:表单验证规则
+const expressRules = computed(() => {
+  return {
+    name: [{ required: true, message: '请输入物流公司名称!', trigger: 'blur' }],
+    code: [{ required: true, message: '请输入快递查询代码!', trigger: 'blur' }],
+    kdcode: [{ required: expressForm.value.is_waybill, message: '请输入菜鸟物流代码!', trigger: 'blur' }],
+  };
+});
+
+// 生命周期钩子
+onMounted(() => {
+  getExpressList();
+});
+
+const handleSelectionChange = (val: any[]) => {
+};
+// 方法定义
+const handlePageSizeChange = (size: number) => {
+  params.page_size = size;
+  getExpressList();
+};
+
+const handlePageCurrentChange = (page: number) => {
+  params.page_no = page;
+  getExpressList();
+};
+
+const disabledStatus = (row: any) => {
+  return row.disabled === 'OPEN' ? '已开启' : '已禁用';
+};
+
+const handleAddExpress = () => {
+  expressForm.value = { is_waybill: 0, formItems: [] };
+  dialogExpressVisible.value = true;
+  expressFormRef.value?.clearValidate();
+};
+
+const handleEditExpress = (index: number, row: any) => {
+  const params = JSON.parse(JSON.stringify(row));
+  if (typeof params.is_waybill !== 'number') {
+    params.is_waybill = 0;
+  }
+
+  expressForm.value = {
+    name: params.name,
+    code: params.code,
+    is_waybill: params.is_waybill,
+    kdcode: params.kdcode,
+    id: params.id,
+  };
+
+  dialogExpressVisible.value = true;
+  expressFormRef.value?.clearValidate();
+};
+
+const submitExpressForm = () => {
+  expressFormRef.value?.validate((valid: boolean) => {
+    if (valid) {
+      const { id } = expressForm.value;
+      let form = JSON.parse(JSON.stringify(expressForm.value));
+      if (!id) {
+        API_Express.addExpress(form).then(() => {
+          dialogExpressVisible.value = false;
+          ElMessage.success('添加成功!');
+          getExpressList();
+        });
+      } else {
+        form.formItems = [];
+        API_Express.editExpress(id, form).then((response) => {
+          dialogExpressVisible.value = false;
+          ElMessage.success('保存成功!');
+          // 更新表格数据
+          const index = tableData.value.data.findIndex((item: any) => item.id === id);
+          if (index !== -1) {
+            tableData.value.data[index] = response;
+          }
+        });
+      }
+    } else {
+      ElMessage.error('表单填写有误,请检查!');
+    }
+  });
+};
+
+const handleDeleteExpress = (index: number, row: any) => {
+  ElMessageBox.confirm('确定要删除此物流公司吗?', '提示', { type: 'warning' })
+    .then(() => {
+      API_Express.deleteExpress(row.id).then(() => {
+        ElMessage.success('删除成功!');
+        getExpressList();
+      });
+    })
+    .catch(() => {});
+};
+
+const handleDisabledExpress = (index: number, row: any) => {
+  ElMessageBox.confirm('确定要执行此操作吗?', '提示', { type: 'warning' })
+    .then(() => {
+      API_Express.openDisableExpress(row.id, row.disabled === 'OPEN' ? 'CLOSE' : 'OPEN').then(() => {
+        ElMessage.success('操作成功!');
+        getExpressList();
+      });
+    })
+    .catch(() => {});
+};
+
+const getExpressList = () => {
+  loading.value = true;
+  API_Express.getExpressList(params)
+    .then((response) => {
+      loading.value = false;
+      tableData.value = response;
+    })
+    .catch(() => {
+      loading.value = false;
+    });
+};
+
+// 权限检查函数(需要根据实际情况实现)
+const checkPermission = (permissions: string[]) => {
+  // 实现权限检查逻辑
+  return true;
+};
+</script>

+ 36 - 34
src/views/stock/goodsLend.vue

@@ -15,13 +15,13 @@
             > -->
           </div>
           <div class="toolbar-search dark:!bg-[#060818]">
-            <en-table-search @search="searchEvent" @advancedSearch="advancedSearchEvent" :placeholder="$t('place')+$t('warechouse_sn')" advanced >
+            <en-table-search @search="searchEvent" @advancedSearch="advancedSearchEvent" :placeholder="$t('place') + $t('warechouse_sn')" advanced>
             </en-table-search>
           </div>
         </div>
       </template>
 
-      <template #table-columns >
+      <template #table-columns>
         <el-table-column type="selection" width="55" />
         <el-table-column prop="warehouse.sn" :label="$t('warechouse_sn')"></el-table-column>
         <el-table-column class="dark:!bg-[#060818]" prop="warehouse.name" :label="$t('warechouse_name')"></el-table-column>
@@ -68,7 +68,7 @@
       <div id="deliverySheet" style="width: 900px">
         <div class="tips-t" v-for="(item, index) in codeList" :key="index">
           <div>
-          <!--   <barcode :value="item" height="20" format="CODE128" fontSize="20"></barcode> -->
+            <!--   <barcode :value="item" height="20" format="CODE128" fontSize="20"></barcode> -->
           </div>
         </div>
       </div>
@@ -106,7 +106,7 @@
   </div>
 </template>
 
-<script setup>
+<script lang="ts" setup>
 import { ref, reactive, onMounted, watch, nextTick } from 'vue';
 import * as API_GoodsLend from '@/api/goodsLend';
 import Print from 'print-js';
@@ -126,36 +126,38 @@ const router = useRouter();
 const route = useRoute();
 
 const warehouseSn = ref('');
-const warehouseList = ref([]);
+const warehouseList = ref<any>([]);
 const loading = ref(false);
-const params = reactive({
+const params = reactive<any>({
   page_no: 1,
   page_size: 10,
   company_id: store.state.companId,
 });
-const advancedForm = reactive({});
-const tableData = ref('');
+const advancedForm = ref<any>({});
+const tableData = ref<any>({});
 const dialogVisible = ref(false);
 const multipleSelection = ref([]);
-const goodsLendForm = reactive({});
-const codeList = ref([]);
+const goodsLendForm = ref<any>({});
+const codeList = ref<any>([]);
 const title = ref('');
 const dialogVisibleForm = ref(false);
-let addLendForm = reactive({
+let addLendForm = ref<any>({
   warehouse_id: '',
   type: '',
   code: '',
   intro: '',
+  status:"",
+  goodsLend_time_range:[]
 });
 
-const rules = reactive({
+const rules =ref<any>({
   warehouse_id: [{ required: true, message: t('change') + t('warechouse_code'), trigger: 'change' }],
   name: [{ required: true, message: '请输入仓库名称', trigger: 'blur' }],
   code: [{ required: true, message: '请输入库位号', trigger: 'blur' }],
   type: [{ required: true, message: t('change') + t('warechouse_area'), trigger: 'change' }],
 });
-const typeList = ref([]);
-const AreaTableData = ref([]);
+const typeList = ref<any>([]);
+const AreaTableData = ref<any>([]);
 const AreaTab = ref('');
 
 const GET_GoodsLendList = () => {
@@ -180,7 +182,7 @@ watch(
   (newVal) => {
     if (newVal.query.status) {
       params.status = newVal.query.status;
-      advancedForm.status = newVal.query.status;
+      advancedForm.value.status = newVal.query.status;
     }
     params.page_no = 1;
     GET_GoodsLendList();
@@ -220,11 +222,11 @@ const selAreaTableData = (val) => {
 };
 const addLendFormRef = ref();
 const lendCommit = () => {
-  addLendForm.code = warehouseSn.value + '-' + addLendForm.type + '-' + addLendForm.code;
+  addLendForm.value.code = warehouseSn.value + '-' + addLendForm.value.type + '-' + addLendForm.value.code;
   addLendFormRef.value.validate((valid) => {
     if (valid) {
       if (!id.value) {
-        API_GoodsLend.create(addLendForm).then(() => {
+        API_GoodsLend.create(addLendForm.value).then(() => {
           ElMessage.success(t('add_success'));
           dialogVisibleForm.value = false;
           warehouseSn.value = '';
@@ -232,7 +234,7 @@ const lendCommit = () => {
           GET_GoodsLendList();
         });
       } else {
-        API_GoodsLend.update(addLendForm).then(() => {
+        API_GoodsLend.update(addLendForm.value).then(() => {
           ElMessage.success(t('edit_success'));
           dialogVisibleForm.value = false;
           addLendForm.value = {};
@@ -255,7 +257,7 @@ const handleCancle = () => {
   codeList.value = [];
 };
 
-const creatQrCode = () => {
+/* const creatQrCode = () => {
   nextTick(() => {
     codeList.value.forEach((item, index) => {
       document.getElementById(`codeItem${index}`).innerHTML = '';
@@ -270,7 +272,7 @@ const creatQrCode = () => {
       });
     });
   });
-};
+}; */
 
 const id = ref('');
 const handleEditGoodsLend = (row) => {
@@ -281,8 +283,8 @@ const handleEditGoodsLend = (row) => {
   AreaTab.value = str.split('-')[1];
   // 使用 Object.assign 或者手动赋值来更新 reactive 对象的属性
   /* Object.assign(addLendForm, row); */
-  addLendForm=row
-  addLendForm.code = str.split('-').pop();
+  addLendForm.value = row;
+  addLendForm.value.code = str.split('-').pop();
 
   dialogVisibleForm.value = true;
 };
@@ -305,10 +307,10 @@ const statusFilter = (val) => {
 
 const handleConfirmGoodsLend = () => {
   if (!multipleSelection.value.length) return ElMessage.error('请先选择!');
-  const ids = multipleSelection.value.map((item) => item.code);
+  const ids = multipleSelection.value.map((item:any) => item.code);
   codeList.value = ids;
   dialogVisible.value = true;
-  creatQrCode();
+ /*  creatQrCode(); */
 };
 
 const GET_DeptList = () => {
@@ -318,7 +320,6 @@ const GET_DeptList = () => {
   API_Setting.getPage({
     dictType: 'Warehouse_location_type',
     page_no: 1,
-    page_size: 1,
     page_size: 50,
   }).then((res) => {
     typeList.value = res.data;
@@ -359,7 +360,8 @@ const handlePageCurrentChange = (page) => {
 const handleAddGoodsLend = () => {
   id.value = '';
   title.value = t('add');
-  addLendForm={}
+  addLendForm.value = {
+ };
   warehouseSn.value = '';
   AreaTab.value = '';
   dialogVisibleForm.value = true;
@@ -368,10 +370,10 @@ const handleAddGoodsLend = () => {
 const handlePrintGoodsLendDialog = (row) => {
   dialogVisible.value = true;
   codeList.value.push(row.code);
-  creatQrCode();
+ /*  creatQrCode(); */
 };
 
-const GET_GoodsLendDetail = (id) => {
+/* const GET_GoodsLendDetail = (id) => {
   API_GoodsLend.getGoodsLendInfo(id).then((response) => {
     goodsLendForm.value = response;
     if (response.product_list && response.product_list.length) {
@@ -382,7 +384,7 @@ const GET_GoodsLendDetail = (id) => {
     }
     goodsLendForm.value.illustrate = str;
   });
-};
+}; */
 
 const searchEvent = (data) => {
   params.sn = data;
@@ -393,13 +395,13 @@ const searchEvent = (data) => {
 
 const advancedSearchEvent = () => {
   Object.assign(params, advancedForm);
-  delete params.start_time;
+  /* delete params.start_time;
   delete params.end_time;
-  if (advancedForm.goodsLend_time_range) {
-    params.start_time = parseInt(Number(advancedForm.goodsLend_time_range[0]) / 1000);
-    params.end_time = parseInt(Number(advancedForm.goodsLend_time_range[1]) / 1000);
+  if (advancedForm.value.goodsLend_time_range) {
+    params.start_time = parseInt(Number(advancedForm.value.goodsLend_time_range[0]) / 1000);
+    params.end_time = parseInt(Number(advancedForm.value.goodsLend_time_range[1]) / 1000);
   }
-  delete params.goodsLend_time_range;
+  delete params.goodsLend_time_range; */
   params.page_no = 1;
   GET_GoodsLendList();
 };

+ 44 - 54
src/views/stock/goodsUnderstock.vue

@@ -1,31 +1,32 @@
 <template>
   <div>
     <div class="search bg-white p-3">
-      <el-form :model="advancedForm" label-width="160px">
-        <el-row>
-          <el-col :span="8">
-            <el-form-item :label="$t('out_warehouse')">
-              <el-select v-model="advancedForm.out_warehouse_id">
+      <!-- label-width="160px" -->
+      <el-form :model="advancedForm" class="advanced-form">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8" class="mb-4">
+            <el-form-item :label="$t('out_warehouse') + ':'">
+              <el-select v-model="advancedForm.out_warehouse_id" class="w-full">
                 <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item :label="$t('to_warehouse')">
-              <el-select v-model="advancedForm.in_warehouse_id">
+          <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8" class="mb-4">
+            <el-form-item :label="$t('to_warehouse') + ':'">
+              <el-select v-model="advancedForm.in_warehouse_id" class="w-full">
                 <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item :label="$t('warehousing_state')">
-              <el-select v-model="advancedForm.status">
+          <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8" class="mb-4">
+            <el-form-item :label="$t('warehousing_state') + ':'">
+              <el-select v-model="advancedForm.status" class="w-full">
                 <el-option v-for="item in statusList" :key="item.id" :label="item.label" :value="item.value" />
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item :label="$t('transfer_time')">
+          <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8" class="mb-4">
+            <el-form-item :label="$t('transfer_time') + ':'">
               <el-date-picker
                 v-model="advancedForm.purchasePlan_time_range"
                 type="daterange"
@@ -38,84 +39,81 @@
                 :start-placeholder="$t('start_time')"
                 :end-placeholder="$t('end_time')"
                 value-format="timestamp"
+                class="w-full"
                 :picker-options="{
                   disabledDate(time) {
                     return time.getTime() - 1 >= new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime() + 86400000 - 1;
                   },
-                  /*  shortcuts: MixinPickerShortcuts, */
                 }"
               >
               </el-date-picker>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item :label="$t('transfer_sn')">
-              <el-input v-model="advancedForm.sn" placeholder="请输入调拨单号"></el-input>
+          <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8" class="mb-4">
+            <el-form-item :label="$t('transfer_sn') + ':'">
+              <el-input v-model="advancedForm.sn" placeholder="请输入调拨单号" class="w-full"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
       <div class="flex justify-end">
-        <el-button @click="advancedSearchEvent"> {{$t('search')}} </el-button>
+        <el-button @click="advancedSearchEvent"> {{ $t('search') }} </el-button>
       </div>
     </div>
     <en-table-layout :tableData="tableData.data" :loading="loading" @selection-change="handleSelectionChange">
       <template #toolbar>
         <div class="inner-toolbar">
           <div class="toolbar-btns">
-           <!--  v-if="checkPermission(['goodsUnderstock:add'])" -->
-            <el-button size="small"  type="primary" v-if="store.state.user.user.founder!==1" @click="handleAddGoodsUnderstock">{{$t('add')}}</el-button>
+            <!--  v-if="checkPermission(['goodsUnderstock:add'])" -->
+            <el-button size="small" type="primary" v-if="store.state.user.user.founder !== 1" @click="handleAddGoodsUnderstock">{{ $t('add') }}</el-button>
           </div>
         </div>
       </template>
 
       <template #table-columns>
-        <el-table-column type="selection" width="55" />
-        <el-table-column prop="sn" :label="$t('transfer_sn')">
-          <template #default="scope">
-            <span>{{ scope.row.sn }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('transfer_time')">
+        <el-table-column type="selection" width="50" fixed="left" />
+        <el-table-column prop="sn" :label="$t('transfer_sn')" min-width="100" show-overflow-tooltip />
+        <el-table-column :label="$t('transfer_time')" min-width="100" show-overflow-tooltip>
           <template #default="scope">{{ scope.row.transfer_time }}</template>
         </el-table-column>
-        <el-table-column prop="out_warehouse_name" :label="$t('out_warehouse')">
+        <el-table-column prop="out_warehouse_name" :label="$t('out_warehouse')" min-width="100" show-overflow-tooltip>
           <template #default="scope">
             {{ warehouseName(scope.row.out_warehouse_id) }}
           </template>
         </el-table-column>
-        <el-table-column prop="in_warehouse_name" :label="$t('to_warehouse')">
+        <el-table-column prop="in_warehouse_name" :label="$t('to_warehouse')" min-width="100" show-overflow-tooltip>
           <template #default="scope">
             {{ warehouseName(scope.row.in_warehouse_id) }}
           </template>
         </el-table-column>
-        <el-table-column prop="" :label="$t('delivery_method')">
+        <el-table-column prop="" :label="$t('delivery_method')" min-width="100" show-overflow-tooltip>
           <template #default="scope">
             {{ getTypename(scope.row.send_type) }}
           </template>
         </el-table-column>
-        <el-table-column prop="status" :label="$t('warehousing_state')">
+        <el-table-column prop="status" :label="$t('warehousing_state')" min-width="100" show-overflow-tooltip>
           <template #default="scope">{{ get_typeName(scope.row.status) }}</template>
         </el-table-column>
-        <el-table-column :label="$t('operate')" width="250">
+        <el-table-column :label="$t('operate')" width="80" fixed="right">
           <template #default="scope">
-            <el-button size="small" @click="handleSubmitGoodsTransfer(scope.row)">{{$t('view')}}</el-button
-            ><!-- v-if="checkPermission(['goodsUnderstockDetail'])" -->
+            <el-button size="small" @click="handleSubmitGoodsTransfer(scope.row)">{{ $t('view') }}</el-button>
           </template>
         </el-table-column>
       </template>
       <template #pagination>
-        <el-pagination
-          v-if="tableData"
-          @size-change="handlePageSizeChange"
-          @current-change="handlePageCurrentChange"
-          :current-page="tableData.page_no"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="tableData.page_size"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="tableData.data_total"
-        >
-        </el-pagination>
+        <div class="overflow-x-auto w-full">
+          <el-pagination
+            v-if="tableData"
+            @size-change="handlePageSizeChange"
+            @current-change="handlePageCurrentChange"
+            :current-page="tableData.page_no"
+            :page-sizes="[10, 20, 50, 100]"
+            :page-size="tableData.page_size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="tableData.data_total"
+          >
+          </el-pagination>
+        </div>
       </template>
     </en-table-layout>
   </div>
@@ -287,7 +285,7 @@ const handleEditGoodsTransfer = (row: any) => {
 };
 
 const searchEvent = (data: any) => {
- /*  params.value = {
+  /*  params.value = {
     ...params.value,
     sn: data,
   };
@@ -318,14 +316,6 @@ onMounted(() => {
   GET_WarehouseList();
   GET_ExpressList();
 });
-
-/* watch(
-  () => store.state.route.query,
-  () => {
-    params.value.page_no = 1;
-    GET_GoodsTransferList();
-  }
-); */
 </script>
   
  <!--  <style lang="scss" scoped>

+ 1 - 1
src/views/stock/goodsUnderstockAdd.vue

@@ -91,7 +91,7 @@
     </el-form>
     <div class="footer">
       <el-button v-if="type !== 'view'" type="primary" @click="submitGoodsTransferForm">{{$t('save')}}</el-button>
-      <el-button @click="printIng">{{$t('print')}}</el-button>
+      <!-- <el-button @click="printIng">{{$t('print')}}</el-button> -->
       <el-button @click="roBack">{{$t('return')}}</el-button>
     </div>
     <el-dialog :title="$t('transfer_goods')" v-model="goodsVisible" width="1000px" @close="closeGoosData">

+ 3 - 4
src/views/stock/outbound.vue

@@ -21,9 +21,8 @@
                   disabledDate(time) {
                     return time.getTime() - 1 >= new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime() + 86400000 - 1;
                   },
-                  shortcuts: MixinPickerShortcuts,
                 }"
-              ></el-date-picker>
+              ></el-date-picker><!--  shortcuts: MixinPickerShortcuts, -->
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -115,13 +114,13 @@
         <el-table-column :label="$t('operate')" width="300">
           <template #default="scope">
             <!-- v-if="checkPermission(['checkInventory'])" -->
-            <el-button size="small"  @click="handleAuditGoodsExchange(scope.row)">{{$('view')}}</el-button>
+            <el-button size="small"  @click="handleAuditGoodsExchange(scope.row)">{{$t('view')}}</el-button>
             <!-- && checkPermission(['editInventory']) && checkPermission(['goodsExchangeEdit']) -->
             <el-button
               size="small"
               v-if="scope.row.has_submit === 'N' && store.state.user.user.founder!==1"
               @click="handleEditGoodsExchange(scope.row)"
-              >{{$('outBound')}}</el-button
+              >{{$t('outBound')}}</el-button
             >
           </template>
         </el-table-column>

+ 9 - 8
src/views/stock/warehouseList.vue

@@ -1,5 +1,6 @@
 <template>
-  <div class="grid xl:grid-cols-1">
+  <div>
+    <!--  class="grid xl:grid-cols-1" -->
     <en-table-layout :tableData="tableData.data" :loading="loading">
       <template #toolbar>
         <div class="inner-toolbar w-11/12 flex justify-between">
@@ -19,19 +20,19 @@
       </template>
 
       <template #table-columns>
-        <el-table-column prop="sn" :label="$t('warechouse_sn')" />
-        <el-table-column prop="name" :label="$t('warechouse_name')" />
-        <el-table-column prop="phone" :label="$t('warechouse_phone')" />
-        <el-table-column prop="name" :label="$t('warechouse_address')">
+        <el-table-column prop="sn" :label="$t('warechouse_sn')" min-width="120" />
+        <el-table-column prop="name" :label="$t('warechouse_name')" min-width="150" />
+        <el-table-column prop="phone" :label="$t('warechouse_phone')" min-width="130" />
+        <el-table-column prop="" :label="$t('warechouse_address')" min-width="200">
           <template #default="scope">
             {{ adminName(scope.row.ware_pro_city_area) + scope.row.warehouse_address || '' }}
           </template>
         </el-table-column>
-        <el-table-column prop="description" :label="$t('warechouse_remark')" />
-        <el-table-column :label="$t('operate')">
+        <el-table-column prop="description" :label="$t('warechouse_remark')" min-width="150" />
+        <el-table-column :label="$t('operate')" fixed="right" width="100">
           <template #default="scope">
             <el-button
-              size="default"
+              size="small"
               v-if="checkPermission(['warehouse:update']) && store.state.user.user.founder !== 1"
               @click="handleEditWarehouse(scope.$index, scope.row)"
               >{{ $t('edit') }}</el-button