浏览代码

feat: 线上环境配置

lanjianrong 4 年之前
父节点
当前提交
7305088b68

+ 2 - 2
.env.production

@@ -13,11 +13,11 @@ VITE_DROP_CONSOLE = false
 VITE_BUILD_COMPRESS = 'none'
 
 # Basic interface address SPA
-VITE_GLOB_API_URL=http://ljr.com
+VITE_GLOB_API_URL=
 
 # File upload address, optional
 # It can be forwarded by nginx or write the actual address directly
-VITE_GLOB_UPLOAD_URL=/upload
+VITE_GLOB_UPLOAD_URL=/api/upload
 
 # Interface prefix
 VITE_GLOB_API_URL_PREFIX=/api

+ 1 - 0
.eslintignore

@@ -13,3 +13,4 @@ dist
 .local
 /bin
 Dockerfile
+/deploy.config.js

+ 1 - 1
.gitignore

@@ -3,7 +3,7 @@ node_modules
 dist
 .npmrc
 .cache
-
+.deploy.config.js
 test/upload-server/static
 
 .local

+ 15 - 0
deploy.config.js

@@ -0,0 +1,15 @@
+module.exports = {
+  win: {
+    script: 'npm run build',
+    host: '39.108.111.147',
+    port: 22,
+    username: 'root',
+    password: 'SmartCost3850888',
+    localPath: 'dist',
+    remotePath: '/mnt/html/design_quality/',
+    needEmail: false,
+    addressee: '',
+    title: '',
+    content: ''
+  }
+}

+ 1 - 0
package.json

@@ -11,6 +11,7 @@
     "serve": "npx --max_old_space_size=4096 vite",
     "dev": "npx --max_old_space_size=4096 vite",
     "build": "vite build && esno ./build/script/postBuild.ts",
+    "deploy": "auto-deploy build -t win",
     "build:no-cache": "yarn clean:cache && npm run build",
     "report": "cross-env REPORT=true npm run build ",
     "preview": "npm run build && vite preview",

+ 1 - 1
src/api/sys/tree.ts

@@ -24,7 +24,7 @@ enum Api {
  * @description: 获取设计表树结构
  */
 export function sectionAllApi(mode: ErrorMessageMode = 'message') {
-  return defHttp.get<TreeResultModel>(
+  return defHttp.get<TreeResultModel[]>(
     {
       url: Api.SectionAll
     },

二进制
src/assets/images/bg.png


+ 1 - 6
src/components/Application/src/AppLogo.vue

@@ -8,7 +8,7 @@
     :class="[prefixCls, theme, { 'collapsed-show-title': getCollapsedShowTitle }]"
     @click="handleGoHome"
   >
-    <img src="../../../assets/images/logo.png" />
+    <!-- <img src="../../../assets/images/logo.png" /> -->
     <div
       class="ml-2 truncate md:opacity-100"
       :class="[
@@ -73,23 +73,18 @@
     padding-left: 7px;
     cursor: pointer;
     transition: all 0.2s ease;
-
     &.light {
       border-bottom: 1px solid @border-color-base;
     }
-
     &.collapsed-show-title {
       padding-left: 20px;
     }
-
     &.light &__title {
       color: @primary-color;
     }
-
     &.dark &__title {
       color: @white;
     }
-
     &__title {
       font-size: 16px;
       font-weight: 700;

+ 6 - 3
src/components/Upload/src/BasicUpload.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
     <a-button-group>
-      <a-button type="primary" @click="openUploadModal" preIcon="carbon:cloud-upload">
-        {{ t('component.upload.upload') }}
+      <a-button :type="btnType" @click="openUploadModal" pre-icon="carbon:cloud-upload">
+        {{ btnText || t('component.upload.upload') }}
       </a-button>
       <Tooltip placement="bottom" v-if="showPreview">
         <template #title>
@@ -66,7 +66,8 @@
       })
 
       const bindValue = computed(() => {
-        const value = { ...attrs, ...props }
+        const { btnText, btnType, ...resetProps } = props
+        const value = { ...attrs, ...resetProps }
         return omit(value, 'onChange')
       })
 
@@ -100,6 +101,8 @@
         fileListRef,
         showPreview,
         bindValue,
+        btnText: props.btnText,
+        btnType: props.btnType,
         t
       }
     }

+ 9 - 0
src/components/Upload/src/props.ts

@@ -6,6 +6,15 @@ export const basicProps = {
     type: String as PropType<string>,
     default: ''
   },
+  // 上传按钮文本
+  btnText: {
+    type: String as PropType<string>,
+    default: ''
+  },
+  btnType: {
+    type: String as PropType<string>,
+    default: 'primary'
+  },
   // 文件最大多少MB
   maxSize: {
     type: Number as PropType<number>,

+ 10 - 10
src/layouts/default/header/index.vue

@@ -23,34 +23,34 @@
     <!-- menu start -->
     <div :class="`${prefixCls}-menu`" v-if="getShowTopMenu && !getIsMobile">
       <LayoutMenu
-        :isHorizontal="true"
+        :is-horizontal="true"
         :theme="getHeaderTheme"
-        :splitType="getSplitType"
-        :menuMode="getMenuMode"
+        :split-type="getSplitType"
+        :menu-mode="getMenuMode"
       />
     </div>
     <!-- menu-end -->
 
     <!-- action  -->
     <div :class="`${prefixCls}-action`">
-      <AppSearch :class="`${prefixCls}-action__item `" />
+      <!-- <AppSearch :class="`${prefixCls}-action__item `" /> -->
 
-      <ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
+      <!-- <ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" /> -->
 
-      <Notify v-if="getShowNotice" :class="`${prefixCls}-action__item notify-item`" />
+      <!-- <Notify v-if="getShowNotice" :class="`${prefixCls}-action__item notify-item`" /> -->
 
-      <FullScreen v-if="getShowFullScreen" :class="`${prefixCls}-action__item fullscreen-item`" />
+      <!-- <FullScreen v-if="getShowFullScreen" :class="`${prefixCls}-action__item fullscreen-item`" /> -->
 
-      <AppLocalePicker
+      <!-- <AppLocalePicker
         v-if="getShowLocalePicker"
         :reload="true"
         :showText="false"
         :class="`${prefixCls}-action__item`"
-      />
+      /> -->
 
       <UserDropDown :theme="getHeaderTheme" />
 
-      <SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" />
+      <!-- <SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" /> -->
     </div>
   </Header>
 </template>

+ 2 - 12
src/router/menus/modules/design.ts

@@ -4,18 +4,8 @@ import { t } from '/@/hooks/web/useI18n'
 const menu: MenuModule = {
   orderNo: 10,
   menu: {
-    name: '设计表管理',
-    path: '/design',
-    children: [
-      {
-        path: 'catalog',
-        name: '数量表列表'
-      },
-      {
-        path: 'management',
-        name: '目录管理'
-      }
-    ]
+    name: '目录管理',
+    path: '/design/main'
   }
 }
 export default menu

+ 2 - 2
src/router/menus/modules/home.ts

@@ -4,8 +4,8 @@ import { t } from '/@/hooks/web/useI18n'
 const menu: MenuModule = {
   orderNo: 0,
   menu: {
-    path: '/home/welcome',
-    name: t('routes.dashboard.welcome')
+    path: '/home/catalog',
+    name: '数量表列表'
   }
 }
 export default menu

+ 4 - 14
src/router/routes/modules/design.ts

@@ -9,26 +9,16 @@ const catalog: AppRouteModule = {
   component: LAYOUT,
   redirect: '/design/main',
   meta: {
-    title: '设计表管理',
-    icon: 'mdi:file-table-box-multiple'
+    title: '设计表管理'
   },
   children: [
     {
-      path: 'catalog',
-      name: 'Catalog',
-      component: () => import('/@/views/design-directive/catalog/index.vue'),
-      meta: {
-        title: '数量表列表'
-        // icon: 'bx:bx-home'
-      }
-    },
-    {
-      path: 'management',
+      path: 'main',
       name: 'Management',
       component: () => import('/@/views/design-directive/management/index.vue'),
       meta: {
-        title: '目录管理'
-        // icon: 'bx:bx-home'
+        title: '目录管理',
+        icon: 'mdi:file-table-box-multiple'
       }
     }
   ]

+ 5 - 6
src/router/routes/modules/home.ts

@@ -7,19 +7,18 @@ const dashboard: AppRouteModule = {
   path: '/home',
   name: 'Home',
   component: LAYOUT,
-  redirect: '/home/welcome',
+  redirect: '/home/catalog',
   meta: {
     icon: 'ion:home-outline',
     title: t('routes.dashboard.welcome')
   },
   children: [
     {
-      path: 'welcome',
-      name: 'Welcome',
-      component: () => import('/@/views/dashboard/welcome/index.vue'),
+      path: 'catalog',
+      name: 'Catalog',
+      component: () => import('/@/views/design-directive/catalog/index.vue'),
       meta: {
-        title: t('routes.dashboard.welcome'),
-        affix: true,
+        title: '数量表列表',
         icon: 'bx:bx-home'
       }
     }

+ 4 - 4
src/store/modules/user.ts

@@ -116,10 +116,10 @@ class User extends VuexModule {
   @Action
   async logout(goLogin = false) {
     goLogin && router.push(PageEnum.BASE_LOGIN)
-    if (!goLogin && !router.hasRoute('Preview')) {
-      router.addRoute('', mainOutRoutes[0])
-      router.push(PageEnum.BASE_HOME)
-    }
+    !goLogin && router.push(PageEnum.BASE_HOME)
+    // if (!goLogin && !router.hasRoute('Preview')) {
+    //   router.addRoute('', mainOutRoutes[0])
+    // }
   }
 
   /**

+ 57 - 37
src/views/design-directive/catalog/index.vue

@@ -4,7 +4,7 @@
       <div class="w-1/4 border-gray-400 border h-full">
         <header class="p-2 flex justify-between items-center h-12">
           <div class="w-1/2">
-            <BasicUpload
+            <!-- <BasicUpload
               v-show="showUploadBtn"
               :max-size="20"
               :max-number="1"
@@ -13,7 +13,7 @@
               :show-preview-number="false"
               :empty-hide-preview="true"
               :accept="['xlsx', 'xls', 'pdf']"
-            />
+            /> -->
           </div>
           <div class="flex flex-row w-1/2 justify-end">
             <span class="flex align-middle cursor-pointer" @click="handleTreeOpreate('upSerial')">
@@ -31,8 +31,8 @@
         </header>
         <div class="tree">
           <Tree
-            v-if="treeData.length"
-            :tree-data="treeData"
+            v-if="treeData && treeData[0] && treeData[0].children"
+            :tree-data="treeData[0].children"
             :replace-fields="replaceFields"
             :show-line="true"
             :default-expand-all="true"
@@ -42,29 +42,53 @@
       </div>
       <div class="w-3/4 ml-4 flex flex-col">
         <header class="h-1/12 mt-2 flex justify-between items-center">
-          <span class="text-3xl font-bold">{{ detail.name }}</span>
-          <section>
-            <AButton
-              v-show="showExcel"
-              type="primary"
-              size="small"
-              class="mr-4"
-              @click="uploadExecl"
+          <div class="flex">
+            <span class="text-2xl font-bold">{{ detail.name }}</span>
+            <span v-show="showUploadBtn" class="flex ml-3">
+              <BasicUpload
+                :max-size="20"
+                :max-number="1"
+                @change="handleChange"
+                :api="uploadApi"
+                :show-preview-number="false"
+                :empty-hide-preview="true"
+                :accept="['pdf', 'PDF']"
+                btn-text="上传PDF"
+              />
+
+              <BasicUpload
+                :max-size="20"
+                :max-number="1"
+                @change="handleChange"
+                :api="uploadApi"
+                :show-preview-number="false"
+                :empty-hide-preview="true"
+                :accept="['xlsx', 'xls']"
+                btn-text="上传excel"
+                class="ml-2"
+                btn-type="success"
+              />
+            </span>
+          </div>
+
+          <span class="mr-4" v-show="showExcelDownload">
+            <AButton v-if="detail.excelData.fid" type="primary" @click="uploadExecl"
               >下载Excel</AButton
             >
-            <!-- <AButton type="primary" size="small" class="mx-1">下载PDF</AButton> -->
-            <!-- <AButton type="primary" size="small" class="mx-1">编辑</AButton> -->
-            <!-- <span class="h-full border-l-1 border-gray-400 mx-1"></span> -->
-            <!-- <AButton type="primary" size="small" class="mx-1 mr-4">下载</AButton> -->
-          </section>
+          </span>
+
+          <!-- <AButton type="primary" size="small" class="mx-1">下载PDF</AButton> -->
+          <!-- <AButton type="primary" size="small" class="mx-1">编辑</AButton> -->
+
+          <!-- <AButton type="primary" class="mx-1 mr-4">下载</AButton> -->
         </header>
         <section class="h-11/12 border-gray-400 border">
           <!-- <PreviewPdf v-show="!showExcel" :url="pdfUrl" /> -->
           <iframe v-if="showPdf" :src="pdfUrl" frameborder="0" width="100%" height="100%"></iframe>
           <div
-            v-if="detail.name && !detail.fid"
+            v-if="detail.name && !detail.pdfData.fid"
             class="h-full flex justify-center items-center text-2xl"
-            >暂未上传数据表</div
+            >暂未上传可供预览的pdf文件</div
           >
         </section>
       </div>
@@ -72,17 +96,16 @@
   </div>
 </template>
 <script lang="ts">
-  import { computed, defineComponent, ref, watch } from 'vue'
+  import { computed, defineComponent, onActivated, ref, watch } from 'vue'
   import { saveSectionFileApi, sectionAllApi, treeDetailApi, treeResfulApi } from '/@/api/sys/tree'
   import { useDesign } from '/@/hooks/web/useDesign'
-  import { BasicTree } from '/@/components/Tree/index'
-  import { Icon } from '/@/components/Icon'
   import { message, Tree } from 'ant-design-vue'
   import { TreeResultModel } from '/@/api/model/tree'
   import { BasicUpload } from '/@/components/Upload'
   import { uploadApi } from '/@/api/sys/upload'
   import { TreeRow } from '/#/tree'
   import { downloadByUrl } from '/@/utils/file/download'
+  import { Icon } from '/@/components/Icon'
   interface ATreeRow extends TreeRow {
     showUpload: boolean
   }
@@ -104,10 +127,14 @@
         createTime: '',
         showUpload: false
       })
-      const detail = ref({ name: '', content: '', filepath: '', filename: '', ext: '', fid: '' })
+      const detail = ref({
+        name: '',
+        pdfData: { content: '', filepath: '', filename: '', ext: '', fid: '' },
+        excelData: { content: '', filepath: '', filename: '', ext: '', fid: '' }
+      })
       async function initData() {
         const result = await sectionAllApi()
-        treeData.value = result.children || []
+        treeData.value = result
       }
 
       async function initSectionDetail(id: string) {
@@ -124,7 +151,7 @@
         await treeResfulApi({ id, type: 'serial', operation })
         await initData()
       }
-
+      onActivated(() => initData())
       const { prefixCls } = useDesign('catalog')
       const replaceFields = { children: 'children', title: 'name', key: 'id' }
 
@@ -171,27 +198,20 @@
       }
 
       const showUploadBtn = computed(() => row.value.showUpload)
-
-      const showExcel = computed(() => {
-        return /.(excel)|(xls)|(xlsl)$/.test(detail.value.ext)
-      })
+      const showExcelDownload = computed(() => detail.value.excelData.fid)
       const showPdf = computed(() => {
-        if (!detail.value.fid) {
-          return false
-        }
-        const isPdf = /.(pdf)|(PDF)$/.test(detail.value.ext)
-        if (!isPdf) {
+        if (!detail.value.pdfData.fid) {
           return false
         }
         return true
       })
       const uploadExecl = () => {
         downloadByUrl({
-          url: 'http://localhost:7070' + detail.value.filepath
+          url: 'http://sj.6jlzf.cn/static' + detail.value.excelData.filepath
         })
       }
 
-      const pdfUrl = computed(() => 'http://localhost:7070' + detail.value.filepath)
+      const pdfUrl = computed(() => 'http://sj.6jlzf.cn/static' + detail.value.pdfData.filepath)
       return {
         treeData,
         replaceFields,
@@ -203,7 +223,7 @@
         handleChange,
         row,
         showUploadBtn,
-        showExcel,
+        showExcelDownload,
         uploadExecl,
         pdfUrl,
         showPdf

+ 26 - 10
src/views/design-directive/management/index.vue

@@ -12,8 +12,8 @@
     </header>
     <section class="p-3">
       <ATable
-        v-if="treeData && treeData.length"
-        :data-source="treeData"
+        v-if="treeData && treeData[0] && treeData[0].children.length"
+        :data-source="treeData[0].children"
         :columns="columns"
         size="small"
         :bordered="true"
@@ -24,7 +24,7 @@
         :row-class-name="rowClassName"
         :scroll="{ y: scrollY }"
       >
-        <template #name="{ text, record }">
+        <!-- <template #name="{ text, record }">
           <div class="editable-cell">
             <div v-if="editableData[record.id]" class="editable-cell-input-wrapper">
               <AInput
@@ -44,7 +44,7 @@
               <EditOutlined class="editable-cell-icon" @click="onEdit(record.id, record)" />
             </div>
           </div>
-        </template>
+        </template> -->
         <template #operation="{ record }">
           <APopconfirm v-if="treeData.length" title="确认删除?" @confirm="onDelete(record.id)">
             <a>删除</a>
@@ -79,7 +79,7 @@
               :dropdown-style="{ height: '20rem' }"
             />
           </AFormItem>
-          <AFormItem name="code2" label="图编码">
+          <AFormItem name="code2" label="图编码">
             <AInput v-model:value="formState.code2" autocomplete="off" />
           </AFormItem>
         </AForm>
@@ -88,7 +88,17 @@
   </div>
 </template>
 <script lang="ts">
-  import { computed, defineComponent, reactive, ref, toRaw, toRefs, unref, UnwrapRef } from 'vue'
+  import {
+    computed,
+    defineComponent,
+    onActivated,
+    reactive,
+    ref,
+    toRaw,
+    toRefs,
+    unref,
+    UnwrapRef
+  } from 'vue'
   import { useDesign } from '/@/hooks/web/useDesign'
   import { Table, Modal, Form, Input, TreeSelect, Popconfirm, message } from 'ant-design-vue'
   import { CheckOutlined, EditOutlined, CloseOutlined } from '@ant-design/icons-vue'
@@ -179,7 +189,7 @@
               formState.name = unRow.name
               formState.code2 = unRow.code2
             }
-          } else {
+          } else if (!row.value.id && type !== ModalType.ADD) {
             const { createMessage } = useMessage()
             return createMessage.warning('请先选择节点再进行操作')
           }
@@ -209,10 +219,10 @@
       }
       async function initData() {
         const result = await sectionAllApi()
-        treeData.value = result.children || []
+        treeData.value = result || []
       }
       initData()
-
+      onActivated(() => initData())
       const handleTreeOpreate = async (operation: 'upSerial' | 'downSerial') => {
         const id = row.value.id
         if (!id) {
@@ -307,7 +317,13 @@
           return treeData.value.map(item => {
             const newItem = { ...item }
             if (item.children && item.children.length) {
-              newItem.children = item.children.map(item => ({ ...item, children: [] }))
+              newItem.children = item.children.map(item => {
+                const newItem = { ...item }
+                if (item.children && item.children.length) {
+                  newItem.children = item.children.map(item => ({ ...item, children: [] }))
+                }
+                return newItem
+              })
             }
             return newItem
           })

+ 2 - 2
src/views/sys/login/Login.vue

@@ -1,9 +1,9 @@
 <template>
   <div :class="prefixCls" class="relative w-full h-full px-4">
-    <AppLocalePicker
+    <!-- <AppLocalePicker
       class="absolute top-4 right-4 enter-x text-white xl:text-gray-600"
       :show-text="false"
-    />
+    /> -->
 
     <span class="-enter-x xl:hidden">
       <AppLogo :always-show-title="true" />

+ 64 - 7
src/views/sys/preview/index.vue

@@ -1,6 +1,46 @@
 <template>
-  <div :class="prefixCls" class="w-full h-full py-15 px-20">
-    <div class="border-b-1 border-gray-400 flex justify-between pb-2">
+  <div :class="prefixCls" class="w-full h-full">
+    <div
+      class="w-full py-4 sm:max-w-540px md:max-w-720px lg:max-w-960px xl:max-w-1140px mx-auto py-4"
+    >
+      <nav class="flex justify-between items-center">
+        <span
+          ><h2 class="text-3xl text-white m-0">{{ title }}</h2></span
+        >
+        <a-button @click="$router.push('/login')" ghost>登录</a-button>
+      </nav>
+    </div>
+    <div
+      class="container w-full py-4 sm:max-w-540px md:max-w-720px lg:max-w-960px xl:max-w-1140px mx-auto"
+    >
+      <div class="flex flex-col h-full">
+        <section class="content flex h-full">
+          <div class="rounded-md bg-white h-full left-menu">
+            <Tree
+              v-if="treeData && treeData.length"
+              :tree-data="treeData"
+              :replace-fields="replaceFields"
+              :default-expand-all="true"
+              @select="onSelect"
+            />
+          </div>
+          <div class="rounded-md bg-white h-full right-menu">
+            <header class="flex justify-between border-">
+              <span class="text-xl">{{ detail.name }}</span>
+              <a-button type="success" pre-icon="ic:outline-file-download">下载</a-button>
+            </header>
+            <section> </section>
+          </div>
+        </section>
+        <footer>
+          <p class="m-0 p-0 text-right text-light-blue-50"
+            >主办单位:广东省交通运输工程造价事务中心<span class="px-2">|</span
+            >技术支持:珠海纵横创新软件有限公司</p
+          >
+        </footer>
+      </div>
+    </div>
+    <!-- <div class="border-b-1 border-gray-400 flex justify-between pb-2">
       <span class="text-lg font-black">设计数量表管理平台</span>
       <AButton size="small" @click="$router.push('/login')">登录</AButton>
     </div>
@@ -10,7 +50,6 @@
           v-if="treeData && treeData.length"
           :tree-data="treeData"
           :replace-fields="replaceFields"
-          :show-line="true"
           :default-expand-all="true"
           @select="onSelect"
         />
@@ -23,7 +62,7 @@
           </AButton>
         </div>
       </div>
-    </div>
+    </div> -->
   </div>
 </template>
 
@@ -35,6 +74,7 @@
   import { TreeRow } from '/#/tree'
   import { Tree } from 'ant-design-vue'
   import { downloadByUrl } from '/@/utils/file/download'
+  import { useGlobSetting } from '/@/hooks/setting'
   interface ATreeRow extends TreeRow {
     showUpload: boolean
   }
@@ -44,6 +84,7 @@
       Tree
     },
     setup() {
+      const globSetting = useGlobSetting()
       const treeData = ref<TreeResultModel[]>([])
       const row = ref<ATreeRow>({
         id: '',
@@ -61,7 +102,7 @@
       const detail = ref({ name: '', content: '', filepath: '', filename: '', ext: '', fid: '' })
       async function initData() {
         const result = await sectionAllApi()
-        treeData.value = result.children || []
+        treeData.value = (result && result[0].children) || []
       }
 
       initData()
@@ -143,7 +184,9 @@
         showPdf,
         pdfUrl,
         uploadExecl,
-        showExcel
+        title: computed(() => globSetting?.title ?? ''),
+        showExcel,
+        detail
       }
     }
   }
@@ -153,8 +196,22 @@
   @prefix-cls: ~'@{namespace}-preview';
 
   .@{prefix-cls} {
+    background: url('../../../assets/images/bg.png');
     .container {
-      height: calc(100% - 37px);
+      height: calc(100% - 4.25rem);
+      .content {
+        height: calc(100% - 22px);
+        .left-menu {
+          flex: 0 0 25%;
+          max-width: 25%;
+          overflow: auto auto;
+        }
+        .right-menu {
+          flex: 0 0 75%;
+          max-width: 75%;
+          margin-left: 15px;
+        }
+      }
     }
   }
 </style>

+ 7 - 7
windi.config.ts

@@ -12,14 +12,14 @@ export default defineConfig({
       colors: {
         ...colors,
         primary: primaryColor
+      },
+      screens: {
+        sm: '576px',
+        md: '768px',
+        lg: '992px',
+        xl: '1200px',
+        '2xl': '1600px'
       }
-      // screens: {
-      //   sm: '576px',
-      //   md: '768px',
-      //   lg: '992px',
-      //   xl: '1200px',
-      //   '2xl': '1600px'
-      // }
     }
   }
 })