周玉环 1 день назад
Родитель
Сommit
e535c8d224
39 измененных файлов с 1421 добавлено и 365 удалено
  1. 65 41
      xinkeaboard-admin/src/pages/manage/store/edit_settled_store.js
  2. 1 1
      xinkeaboard-admin/src/pages/manage/store/own_list.js
  3. 1 1
      xinkeaboard-admin/src/pages/manage/store/settled_store_list_data.js
  4. 1 1
      xinkeaboard-admin/src/utils/utils.js
  5. 10 0
      xinkeaboard-promotion-portal/auto-imports.d.ts
  6. 25 0
      xinkeaboard-promotion-portal/components.d.ts
  7. 6 0
      xinkeaboard-promotion-portal/index.html
  8. 5 0
      xinkeaboard-promotion-portal/package.json
  9. 547 4
      xinkeaboard-promotion-portal/pnpm-lock.yaml
  10. BIN
      xinkeaboard-promotion-portal/src/assets/images/ai-bg.png
  11. BIN
      xinkeaboard-promotion-portal/src/assets/images/cando.png
  12. 55 0
      xinkeaboard-promotion-portal/src/assets/images/logo.svg
  13. BIN
      xinkeaboard-promotion-portal/src/assets/images/record.png
  14. 23 0
      xinkeaboard-promotion-portal/src/components/ConfirmInfoDialog.vue
  15. 158 0
      xinkeaboard-promotion-portal/src/components/CountrySelct.vue
  16. 0 27
      xinkeaboard-promotion-portal/src/components/Home.vue
  17. 68 0
      xinkeaboard-promotion-portal/src/components/TopContent.vue
  18. 3 0
      xinkeaboard-promotion-portal/src/main.ts
  19. 1 1
      xinkeaboard-promotion-portal/src/router/index.ts
  20. 111 0
      xinkeaboard-promotion-portal/src/views/Home.vue
  21. 2 1
      xinkeaboard-promotion-portal/tsconfig.json
  22. 17 6
      xinkeaboard-promotion-portal/vite.config.ts
  23. 4 4
      xinkeaboard-seller/src/components/SldTableRowTwo/index.js
  24. 1 1
      xinkeaboard-seller/src/pages/goods/add_goods.js
  25. 1 1
      xinkeaboard-seller/src/pages/store/apply_detail.js
  26. 5 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/cms/front/FrontArticleController.java
  27. 24 43
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminOwnStoreController.java
  28. 13 33
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminStoreAuditController.java
  29. 28 43
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminStoreController.java
  30. 56 127
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/front/FrontStoreController.java
  31. 4 3
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/seller/SellerStoreController.java
  32. 4 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/seller/StoreApplyReadMapper.java
  33. 4 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/seller/StoreReadMapper.java
  34. 5 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreApplyModel.java
  35. 26 22
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreModel.java
  36. 64 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreApplyReadMapper.xml
  37. 4 1
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreBindCategoryReadMapper.xml
  38. 75 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreReadMapper.xml
  39. 4 4
      xinkeaboard-web/pages/member/enquiry/list.vue

+ 65 - 41
xinkeaboard-admin/src/pages/manage/store/edit_settled_store.js

@@ -47,6 +47,8 @@ export default class EditSettledStore extends Component {
       show_radio_flag: false,
       query: props.location.query,
       siteList: [],
+      storeGradeIdList: {},
+      openTimeList: {},
       currentSite: {}, // 当前站点
       store_detail: {},
       store_base_info: [{ //店铺信息
@@ -322,31 +324,32 @@ export default class EditSettledStore extends Component {
       type: 'global/getLayoutCollapsed',
     });
     const { query } = this.state;
-    await this.getStoreOpenTime();
     this.get_detail({ storeId: query.id });
-    this.get_store_grade();
   }
 
   //获取开店时长列表
-  getStoreOpenTime = async () => {
-    let { store_business_info } = this.state;
-    const { dispatch } = this.props;
-    await dispatch({
-      type: 'store/get_store_open_time',
-      callback: (res) => {
-        if (res.state == 200) {
-          let tmp_data = [];
-          res.data.map(item => {
-            tmp_data.push({ key: item, name: item + '年' });
-          });
-          let tar_data = store_business_info.filter(item => item.name == 'openTime')[0];
-          tar_data.sel_data = tmp_data;
-          this.setState({
-            store_business_info,
-          });
-        }
-      },
-    });
+  getStoreOpenTime = (webSite) => {
+    return new Promise((resolve) => {
+      let { openTimeList } = this.state;
+      const { dispatch } = this.props;
+      dispatch({
+        type: 'store/get_store_open_time',
+        payload: {webSite},
+        callback: (res) => {
+          if (res.state == 200) {
+            let tmp_data = [];
+            res.data.map(item => {
+              tmp_data.push({ key: item, name: item + '年' });
+            });
+            openTimeList[webSite] = tmp_data;
+            this.setState({
+              openTimeList,
+            }, () => resolve());
+          }
+        },
+      });
+    })
+    
   };
 
   switchBillType = (e) => {
@@ -376,31 +379,42 @@ export default class EditSettledStore extends Component {
   };
 
   //获取店铺等级
-  get_store_grade = () => {
-    let { store_business_info } = this.state;
-    const { dispatch } = this.props;
-    dispatch({
-      type: 'store/get_grade_lists',
-      payload: { pageSize: list_com_page_more },
-      callback: (res) => {
-        if (res.state == 200) {
-          let tar_data = store_business_info.filter(item => item.name == 'storeGradeId')[0];
-          tar_data.sel_data = res.data.list;
-          this.setState({
-            store_business_info,
-          });
-        }
-      },
-    });
+  get_store_grade = (webSite) => {
+    return new Promise((resolve) => {
+      let { storeGradeIdList } = this.state;
+      const { dispatch } = this.props;
+      dispatch({
+        type: 'store/get_grade_lists',
+        payload: { pageSize: list_com_page_more, webSite },
+        callback: (res) => {
+          if (res.state == 200) {
+            storeGradeIdList[webSite] = res.data.list
+            this.setState({
+              storeGradeIdList,
+            }, () => resolve());
+          }
+        },
+      });
+    })
+    
   };
 
+  getInitData = async (siteList) => {
+    const promiseList = [];
+    siteList.forEach(site => {
+      promiseList.push(this.get_store_grade(site.webSite));
+      promiseList.push(this.getStoreOpenTime(site.webSite))
+    })
+    await Promise.all(promiseList)
+  }
+
   get_detail = (params) => {
     const { dispatch } = this.props;
     let { store_detail, store_base_info, personal_front_card_img, store_business_info, replenish_img, business_license_img, settle_info } = this.state;
     dispatch({
       type: 'store/get_settled_store_apply_detail',
       payload: params,
-      callback: res => {
+      callback: async res => {
         if (res.state == 200) {
           store_detail = res.data;
           for (let i = 0; i < store_base_info.length; i++) {
@@ -562,6 +576,7 @@ export default class EditSettledStore extends Component {
             }
           });
           if (siteListData.length) {
+            await this.getInitData(siteListData)
             siteListData.forEach(item => {
               const matchItem = storeBusinessVOList.find(vo => vo.webSite === item.webSite);
               if (matchItem) {
@@ -570,7 +585,7 @@ export default class EditSettledStore extends Component {
                   name: `${info.name}_${matchItem.webSite}`,
                   text: matchItem[info.name] ?? '',
                   initialValue: matchItem[info.name]
-                })).map(this.parseSiteItem)
+                })).map((tag) => this.parseSiteItem(tag, item.webSite))
               }
             })
             const sortSiteList = siteListData.sort((a, b) => Number(a.webSite) - Number(b.webSite));
@@ -595,11 +610,20 @@ export default class EditSettledStore extends Component {
     });
   };
 
-  parseSiteItem = (item) => {
+  parseSiteItem = (item, webSite) => {
+    const { storeGradeIdList, openTimeList} = this.state;
     if (item.name == 'billCycle') {
      item.initialValue = 1;
     }
 
+    if (item.name.includes('storeGradeId')) {
+      item.sel_data = storeGradeIdList[webSite]
+    }
+
+    if (item.name.includes('openTime')) {
+      item.sel_data = openTimeList[webSite]
+    }
+
    return item;
   }
 
@@ -833,7 +857,7 @@ export default class EditSettledStore extends Component {
             <Scrollbars autoHeight
                         autoHeightMax={300}>
               <Table rowKey={'bindId'} pagination={false} columns={columns}
-                     dataSource={store_detail.storeGoodsCateVOList} size={'small'}/>
+                     dataSource={store_detail.storeGoodsCateVOList?.filter(item => item.webSite === currentSite.webSite)} size={'small'}/>
             </Scrollbars>
           </div>
           {getSldEmptyH(10)}

+ 1 - 1
xinkeaboard-admin/src/pages/manage/store/own_list.js

@@ -245,7 +245,7 @@ export default class OwnList extends Component {
               <Fragment>
                 <span className={global.splitLine}></span>
                 {/*删除后不可恢复,是否确定删除?*/}
-                {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operate(record.storeId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
+                {sldPopConfirmDiy('leftBottom', `${sldComLanguage('国内站与海外站店铺将同步删除,是否确认删除')}`, () => this.operate(record.storeId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
                   sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
               </Fragment>
               }

+ 1 - 1
xinkeaboard-admin/src/pages/manage/store/settled_store_list_data.js

@@ -187,7 +187,7 @@ export default class SettledStoreListData extends Component {
               {record.state == 2 &&
               <Fragment>
                 <span className={global.splitLine}></span>
-                {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operate(record.storeId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
+                {sldPopConfirmDiy('leftBottom', `${sldComLanguage('国内站与海外站店铺将同步删除,是否确认删除')}`, () => this.operate(record.storeId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
                   sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))//删除后不可恢复,是否确定删除?
                 }
               </Fragment>

+ 1 - 1
xinkeaboard-admin/src/utils/utils.js

@@ -1332,7 +1332,7 @@ export function sldComRequest(method, url, params, data_type = '') {
   const currentSite = state.global.currentSite || localStorage.getItem('currentSite');
   const currentPath = state.routing.location.pathname;
   if (!currentPath.includes('/user/login')) {
-    params = Object.assign({}, params ?? {}, { webSite: currentSite })
+    params = Object.assign({}, { webSite: currentSite }, params ?? {})
   }
 
   if (params && params.isAll) {

+ 10 - 0
xinkeaboard-promotion-portal/auto-imports.d.ts

@@ -0,0 +1,10 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// noinspection JSUnusedGlobalSymbols
+// Generated by unplugin-auto-import
+// biome-ignore lint: disable
+export {}
+declare global {
+
+}

+ 25 - 0
xinkeaboard-promotion-portal/components.d.ts

@@ -0,0 +1,25 @@
+/* eslint-disable */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+// biome-ignore lint: disable
+export {}
+
+/* prettier-ignore */
+declare module 'vue' {
+  export interface GlobalComponents {
+    ConfirmInfoDialog: typeof import('./src/components/ConfirmInfoDialog.vue')['default']
+    CountrySelct: typeof import('./src/components/CountrySelct.vue')['default']
+    ElButton: typeof import('element-plus/es')['ElButton']
+    ElDropdown: typeof import('element-plus/es')['ElDropdown']
+    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
+    ElIcon: typeof import('element-plus/es')['ElIcon']
+    ElInput: typeof import('element-plus/es')['ElInput']
+    Home: typeof import('./src/components/Home.vue')['default']
+    RouterLink: typeof import('vue-router')['RouterLink']
+    RouterView: typeof import('vue-router')['RouterView']
+    TopContent: typeof import('./src/components/TopContent.vue')['default']
+    TopHeaderContent: typeof import('./src/components/TopHeaderContent.vue')['default']
+  }
+}

+ 6 - 0
xinkeaboard-promotion-portal/index.html

@@ -4,6 +4,12 @@
     <meta charset="UTF-8" />
     <title>招商门户</title>
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <style>
+      html,body {
+        padding: 0;
+        margin: 0;
+      }
+    </style>
   </head>
   <body>
     <div id="app"></div>

+ 5 - 0
xinkeaboard-promotion-portal/package.json

@@ -8,10 +8,12 @@
   },
   "dependencies": {
     "axios": "^1.11.0",
+    "element-plus": "^2.10.7",
     "pinia": "^2.0.0",
     "vue": "^3.2.0",
     "vue-router": "^4.0.0"
   },
+  "type": "module",
   "devDependencies": {
     "@types/node": "^24.2.1",
     "@typescript-eslint/eslint-plugin": "^5.0.0",
@@ -22,7 +24,10 @@
     "eslint-plugin-prettier": "^4.0.0",
     "eslint-plugin-vue": "^9.0.0",
     "prettier": "^2.8.0",
+    "sass": "^1.90.0",
     "typescript": "^5.0.0",
+    "unplugin-auto-import": "^20.0.0",
+    "unplugin-vue-components": "^29.0.0",
     "vite": "^4.0.0"
   }
 }

Разница между файлами не показана из-за своего большого размера
+ 547 - 4
xinkeaboard-promotion-portal/pnpm-lock.yaml


BIN
xinkeaboard-promotion-portal/src/assets/images/ai-bg.png


BIN
xinkeaboard-promotion-portal/src/assets/images/cando.png


+ 55 - 0
xinkeaboard-promotion-portal/src/assets/images/logo.svg

@@ -0,0 +1,55 @@
+<svg width="194" height="88" viewBox="0 0 194 88" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_543_763)">
+<path d="M18.5522 65.8144L25.0746 54.9229L31.5997 65.8144H18.5522Z" fill="#DAE000"/>
+<path d="M31.5998 65.8144L25.0747 54.9229H38.1222L31.5998 65.8144Z" fill="#8FC31F"/>
+<path d="M25.0747 54.9228L31.5998 44.0312L38.1222 54.9228H25.0747Z" fill="#22AC38"/>
+<path d="M38.122 54.9228L31.5996 44.0312H44.6471L38.122 54.9228Z" fill="#009A3E"/>
+<path d="M31.5996 44.0312L38.122 33.1396L44.6471 44.0312H31.5996Z" fill="#006934"/>
+<path d="M44.6472 44.0312L38.1221 33.1396H51.1723L44.6472 44.0312Z" fill="#009A3E"/>
+<path d="M38.1221 33.1396L44.6472 22.248L51.1723 33.1396H38.1221Z" fill="#22AC38"/>
+<path d="M51.1724 33.1396L57.6947 22.248L64.2171 33.1396H51.1724Z" fill="#DAE000"/>
+<path d="M51.1723 33.1396L44.6472 22.248H57.6947L51.1723 33.1396Z" fill="#8FC31F"/>
+<path d="M57.6947 44.0312L51.1724 33.1396H64.2171L57.6947 44.0312Z" fill="#A8C13A"/>
+<path d="M91.6144 22.248L85.092 33.1396L78.5669 22.248H91.6144Z" fill="#7ECEF4"/>
+<path d="M78.5668 22.248L85.0919 33.1396H72.0444L78.5668 22.248Z" fill="#2EA7E0"/>
+<path d="M85.0919 33.1396L78.5668 44.0312L72.0444 33.1396H85.0919Z" fill="#036EB8"/>
+<path d="M72.0444 33.1396L78.5668 44.0312H65.5193L72.0444 33.1396Z" fill="#004E9D"/>
+<path d="M78.5668 44.0312L72.0444 54.9228L65.5193 44.0312H78.5668Z" fill="#171C61"/>
+<path d="M65.5194 44.0312L72.0445 54.9228H58.9971L65.5194 44.0312Z" fill="#004E9D"/>
+<path d="M72.0445 54.9229L65.5194 65.8144L58.9971 54.9229H72.0445Z" fill="#036EB8"/>
+<path d="M58.9969 54.9229L52.4718 65.8144L45.9495 54.9229H58.9969Z" fill="#7ECEF4"/>
+<path d="M58.997 54.9229L65.5194 65.8144H52.4719L58.997 54.9229Z" fill="#2EA7E0"/>
+<path d="M52.4718 44.0312L58.9969 54.9228H45.9495L52.4718 44.0312Z" fill="#00A29A"/>
+</g>
+<path d="M130.46 45.6741H132.611C133.294 44.2774 134.037 42.4773 134.425 40.109H132.782C132.25 42.2669 131.428 44.015 130.462 45.6741" fill="#036EB8"/>
+<path d="M131.374 35.5264C132.067 36.8971 132.52 37.9533 132.739 38.7015H134.761C134.5 37.7451 133.868 36.7149 132.997 35.5242H131.374V35.5264Z" fill="#036EB8"/>
+<path d="M108.994 41.638H105.979V39.7837L108.994 39.7794V38.9032H107.031C107.311 38.7275 107.868 38.2265 108.1 36.9621H106.27C106.27 36.9621 106.245 38.2265 105.717 38.9032H103.966C103.438 38.2287 103.409 36.9665 103.409 36.9665H101.581C101.813 38.233 102.375 38.7319 102.653 38.9075H100.773V39.7859L103.695 39.7815V41.6402L100.775 41.6423V42.5185L103.7 42.5164V45.6654H105.984V42.5164L108.996 42.512V41.6358L108.994 41.638Z" fill="#036EB8"/>
+<path d="M103.752 32.0954V33.2948L97.5188 33.3013V34.1796L103.754 34.1731V35.4809L98.2725 35.4852V35.5026H98.0288L98.0378 45.7001H100.322L100.313 36.3614L109.414 36.3527L109.423 44.4075C109.389 44.6352 109.191 44.8152 108.945 44.8152C108.94 44.8152 108.933 44.8152 108.926 44.8109H108.444V45.6936H110.411C110.411 45.6936 111.628 45.6437 111.7 44.414H111.704L111.695 35.4874H111.673V35.4722L106.04 35.4765V34.1688L112.42 34.1623V33.2861L106.038 33.2926V32.0954H103.752Z" fill="#036EB8"/>
+<path d="M171.534 32.8805L168.978 32.8827L168.975 32L166.694 32.0022L166.696 32.8849L164.166 32.887V33.7654L171.537 33.7567L171.534 32.8805Z" fill="#036EB8"/>
+<path d="M171.541 39.0636H169.005V37.3568H171.765V36.4741H169.734C170.02 36.2898 170.557 35.7866 170.783 34.5504H168.955C168.955 34.5504 168.93 35.7975 168.413 36.4784H167.24C166.721 35.7996 166.692 34.5569 166.692 34.5569H164.866C165.096 35.7931 165.635 36.2963 165.92 36.4828H163.835V37.3633H166.723L166.725 39.0701H164.173V39.9485H166.725L166.73 44.3511C166.696 44.5788 166.497 44.7566 166.251 44.7588C166.247 44.7588 166.242 44.7566 166.233 44.7566H165.75V45.6372H167.716C167.716 45.6372 168.932 45.5873 169.007 44.3619H169.011L169.007 39.9441H171.543V39.0658L171.541 39.0636Z" fill="#036EB8"/>
+<path d="M122.699 32.0759L120.418 32.0781L120.42 33.2817L114.184 33.2861L114.187 34.1622L129.086 34.1492L129.083 33.2709L122.701 33.2774L122.699 32.0759Z" fill="#036EB8"/>
+<path d="M141.608 34.1363L145.3 34.132L145.298 33.2558L135.835 33.2666L135.838 34.1406L139.329 34.1385L139.34 44.7871L135.592 44.7914L135.594 45.6698L145.566 45.659V44.7806L141.619 44.7849L141.608 34.1363Z" fill="#036EB8"/>
+<path d="M151.461 34.5309L147.112 34.5353V35.4136L151.463 35.4093L151.472 44.3641C151.436 44.594 151.238 44.774 150.992 44.774H147.13V45.6567L152.458 45.6524C152.458 45.6524 153.677 45.6047 153.749 44.375H153.754L153.74 32.0043H151.461V34.5331V34.5309Z" fill="#036EB8"/>
+<path d="M155.331 32L155.342 44.3728H155.349C155.424 45.6025 156.64 45.6481 156.64 45.6481L161.966 45.6437V44.761L158.12 44.7654C158.116 44.7654 158.109 44.7675 158.102 44.7675C157.854 44.7675 157.66 44.5897 157.624 44.3598L157.615 35.405L161.966 35.4006V34.5223L157.615 34.5266V32H155.331Z" fill="#036EB8"/>
+<path d="M183.985 44.7394C183.985 44.7394 183.976 44.7437 183.969 44.7437C183.723 44.7437 183.524 44.5615 183.488 44.3338L183.477 33.4553L193.653 33.4466V32.5704L181.191 32.5834V33.4596H181.195L181.207 44.3512H181.211C181.286 45.5808 182.502 45.6242 182.502 45.6242L194 45.6134V44.7307L183.983 44.7394H183.985Z" fill="#036EB8"/>
+<path d="M127.269 38.8338H127.274V35.4592L115.913 35.47V36.3462H115.929V39.2372L115.931 40.1199H118.213L120.433 40.1155V44.3988C120.402 44.6266 120.205 44.8066 119.957 44.8066C119.95 44.8066 119.946 44.8066 119.939 44.8044H119.454V45.6871H121.422C121.422 45.6871 122.638 45.6372 122.71 44.4075H122.715L122.71 40.1155L125.976 40.1112C125.976 40.1112 127.19 40.0635 127.264 38.836M124.992 38.8229C124.958 39.0507 124.762 39.2307 124.514 39.2307C124.507 39.2307 124.502 39.2307 124.498 39.2285L118.215 39.2328V36.3419L124.992 36.3354V38.8229Z" fill="#036EB8"/>
+<path d="M114.243 44.1386V45.0082C118.581 44.1689 119.039 41.1977 119.039 41.1977H116.904C116.633 42.9176 114.243 44.1386 114.243 44.1386Z" fill="#036EB8"/>
+<path d="M126.305 41.1934H124.171C124.171 41.1934 124.635 44.1646 128.971 44.9953V44.1256C128.971 44.1256 126.578 42.9111 126.305 41.1934Z" fill="#036EB8"/>
+<path d="M166.353 40.8507H164.651C164.654 43.219 163.636 43.9672 163.636 43.9672V44.8413C166.597 43.5855 166.353 40.8507 166.353 40.8507Z" fill="#036EB8"/>
+<path d="M177.377 32.874L172.372 32.8783L172.381 41.6944C172.381 41.9069 172.381 43.0152 172.053 43.8718C171.787 43.5986 171.146 42.7397 171.144 40.8659H169.442C169.442 40.8659 169.239 43.2364 171.604 44.5723V45.6307C171.604 45.6307 174.518 45.0733 174.477 41.69L174.473 37.3395H175.296L175.303 45.6198H177.585L177.576 37.3352H178.657V36.4568L174.47 36.4611V33.748L178.654 33.7437H178.661V32.579H178.217C178.115 32.8068 177.63 32.8588 177.375 32.8675" fill="#036EB8"/>
+<path d="M132.604 34.8389H134.529C134.231 33.7654 133.739 32.8068 133.152 32.0651H131.435C131.94 32.9586 132.335 33.8803 132.606 34.8389" fill="#036EB8"/>
+<path d="M184.147 43.3448C184.147 43.3448 186.384 42.4318 188.81 40.4625C191.245 42.4274 193.483 43.3383 193.483 43.3383V42.4014C192.043 41.5274 190.841 40.5319 189.859 39.5538C191.188 38.3133 192.488 36.7539 193.422 34.8498H191.26C191.055 35.264 190.274 36.7301 188.807 38.4282C187.34 36.7323 186.557 35.2683 186.35 34.8563H184.188C185.129 36.7626 186.431 38.3176 187.765 39.556C186.783 40.5363 185.585 41.5339 184.147 42.4101V43.347V43.3448Z" fill="#036EB8"/>
+<path d="M191.35 55.9913H185.798V58.2722H191.35V55.9913ZM184.651 59.9535V54.945H192.558V59.9299H191.35V59.3303H185.798V59.9535H184.651ZM189.715 50.9476L190.594 50.3715C191.741 51.3708 193.168 52.8169 193.803 53.781L192.851 54.4629C192.668 54.169 192.424 53.8398 192.143 53.4988C185.432 53.8398 184.651 53.8633 184.102 54.0514C184.054 53.828 183.858 53.2872 183.736 52.9815C184.029 52.9345 184.334 52.6876 184.737 52.3114C185.164 51.9234 186.543 50.4773 187.433 49.0547L188.568 49.525C187.69 50.7124 186.653 51.8529 185.652 52.7699L191.326 52.5465C190.801 51.9822 190.24 51.4179 189.715 50.9476Z" fill="#036EB8"/>
+<path d="M181.869 54.851V55.9562H176.976V59.9535H175.805V55.9562H170.973V54.851H175.805V50.9947H171.608V49.9248H181.174V50.9947H176.976V54.851H181.869ZM172.401 51.7824L173.426 51.4767C173.877 52.288 174.341 53.3343 174.499 54.0163L173.413 54.369C173.255 53.6988 172.84 52.6054 172.401 51.7824ZM179.124 54.3807L178.148 54.075C178.563 53.3696 179.075 52.2527 179.344 51.4297L180.552 51.7471C180.112 52.6642 179.575 53.7223 179.124 54.3807Z" fill="#036EB8"/>
+<path d="M164.348 55.65H168.765C168.765 55.65 168.728 55.9557 168.704 56.0968C168.423 58.1778 168.155 59.0831 167.715 59.4593C167.41 59.718 167.105 59.7885 166.605 59.812C166.202 59.8355 165.458 59.8355 164.714 59.7885C164.701 59.5063 164.543 59.1066 164.348 58.8362C165.129 58.9067 165.946 58.9185 166.263 58.9185C166.532 58.9185 166.678 58.9067 166.812 58.8009C167.093 58.5893 167.313 57.9309 167.52 56.5906H164.018C163.225 58.4129 161.761 59.3653 159.467 59.9414C159.357 59.6945 159.028 59.2359 158.82 59.0243C160.797 58.6481 162.09 57.9191 162.798 56.5906H159.638V55.65H163.176C163.274 55.3208 163.347 54.9564 163.396 54.5566L164.579 54.6507C164.518 55.0034 164.445 55.3444 164.348 55.65ZM162.261 51.2529L162.127 51.3822C162.627 51.9466 163.359 52.4051 164.262 52.7696C165.324 52.3581 166.251 51.8643 166.947 51.2529H162.261ZM168.069 50.2771L168.765 50.7238C168.045 51.7585 166.947 52.5815 165.641 53.2046C166.861 53.5103 168.289 53.6866 169.814 53.7689C169.57 54.0041 169.314 54.4508 169.18 54.733C167.325 54.5919 165.653 54.298 164.262 53.7689C162.676 54.3332 160.895 54.6742 159.15 54.8741C159.064 54.6037 158.881 54.1687 158.71 53.9218C160.162 53.7924 161.627 53.5455 162.981 53.1811C162.371 52.8401 161.846 52.4404 161.383 51.9701C160.931 52.311 160.419 52.6402 159.845 52.9224C159.711 52.6755 159.394 52.264 159.162 52.0994C160.87 51.2882 162.042 50.1595 162.664 49.1602L163.823 49.3835C163.628 49.701 163.396 50.0184 163.14 50.3241H167.874L168.069 50.2771Z" fill="#036EB8"/>
+<path d="M148.181 55.0157H149.767V53.2874H148.205V53.7812C148.205 54.1575 148.205 54.5807 148.181 55.0157ZM149.767 50.5951H148.205V52.2646H149.767V50.5951ZM150.816 49.584V58.7192C150.816 59.2483 150.719 59.5775 150.377 59.7538C150.035 59.9419 149.535 59.9654 148.717 59.9537C148.693 59.6833 148.547 59.1777 148.412 58.9073C148.913 58.9308 149.401 58.9191 149.559 58.9191C149.706 58.9073 149.767 58.8603 149.767 58.6957V56.0503H148.12C148.01 57.4377 147.778 58.8955 147.241 59.9772C147.046 59.8126 146.582 59.5657 146.314 59.4599C147.119 57.8374 147.18 55.4978 147.18 53.7812V49.584H150.816ZM152.793 54.6042V59.0954C153.427 58.778 154.013 58.2959 154.525 57.7198C153.879 56.8146 153.379 55.7564 153.012 54.6042H152.793ZM156.161 54.6042H153.976C154.257 55.4272 154.647 56.1914 155.136 56.8733C155.563 56.2032 155.916 55.4507 156.161 54.6042ZM156.722 53.5696L157.381 53.793C157.088 55.3684 156.539 56.6617 155.807 57.7081C156.368 58.2959 157.015 58.7897 157.747 59.1189C157.49 59.3188 157.185 59.695 157.015 59.9654C156.319 59.601 155.697 59.1072 155.16 58.5193C154.647 59.0837 154.086 59.5422 153.452 59.9067C153.305 59.6598 153.025 59.307 152.793 59.1189V59.9537H151.719V49.6075H157.027V51.8648C157.027 52.3704 156.917 52.6526 156.49 52.7937C156.063 52.9465 155.416 52.9465 154.513 52.9465C154.464 52.6643 154.294 52.2763 154.159 52.0177C154.831 52.0412 155.514 52.0412 155.685 52.0294C155.88 52.0294 155.941 51.9942 155.941 51.8531V50.6304H152.793V53.6049H156.539L156.722 53.5696Z" fill="#036EB8"/>
+<path d="M145.13 51.394H139.273C138.895 52.123 138.468 52.7931 138.029 53.2987C137.809 53.1223 137.309 52.8284 137.053 52.6873C137.87 51.8408 138.615 50.4887 139.042 49.1484L140.14 49.4188C140.018 49.748 139.884 50.089 139.737 50.4182H145.13V51.394ZM137.663 50.5123L136.992 51.347C136.54 50.959 135.613 50.4182 134.893 50.0772L135.528 49.3248C136.247 49.6305 137.187 50.136 137.663 50.5123ZM136.858 53.8395L136.211 54.6742C135.796 54.298 134.917 53.7572 134.246 53.428L134.869 52.6873C135.54 52.993 136.43 53.475 136.858 53.8395ZM135.564 59.7533L134.588 59.1772C135.064 58.2484 135.759 56.7317 136.247 55.3914L137.138 55.991C136.674 57.2255 136.089 58.6481 135.564 59.7533ZM141.775 57.2843H143.276C143.324 56.8728 143.373 56.3555 143.41 55.7324H140.945C141.433 56.0968 141.982 56.6024 142.251 56.9669L141.775 57.2843ZM140.75 55.7324H139.383C139.298 56.285 139.225 56.814 139.139 57.2843H141.482C141.189 56.9081 140.664 56.4025 140.225 56.0498L140.75 55.7324ZM140.994 53.3222H139.688C139.652 53.7807 139.578 54.2627 139.517 54.733H141.689C141.409 54.3803 140.933 53.9335 140.53 53.6161L140.994 53.3222ZM143.544 53.3222H141.262C141.702 53.6631 142.19 54.1217 142.421 54.4391L141.994 54.733H143.471C143.495 54.3098 143.52 53.8277 143.544 53.3222ZM145.448 55.7324H144.447C144.41 56.3437 144.374 56.8493 144.325 57.2843H145.118V58.2249H144.191C144.093 58.8362 143.971 59.1889 143.812 59.3653C143.568 59.6945 143.288 59.7885 142.91 59.8356C142.568 59.8826 141.97 59.8708 141.384 59.8356C141.36 59.5769 141.262 59.1772 141.091 58.9185C141.677 58.9773 142.202 58.9773 142.434 58.9773C142.653 58.9773 142.763 58.9538 142.885 58.801C142.971 58.7069 143.056 58.5188 143.117 58.2249H137.895C138.029 57.543 138.187 56.6612 138.322 55.7324H137.224V54.733H138.468C138.578 53.91 138.663 53.087 138.737 52.3816H144.63C144.63 52.3816 144.618 52.7226 144.606 52.8637C144.581 53.5573 144.545 54.1804 144.52 54.733H145.448V55.7324Z" fill="#036EB8"/>
+<path d="M131.184 54.9798H132.44V59.9413H131.184V59.2947H122.716V54.9798H123.985V58.2013H126.937V54.2979H123.301V50.183H124.497V53.2398H126.937V49.1719H128.194V53.2398H130.708V50.183H131.964V54.2979H128.194V58.2013H131.184V54.9798Z" fill="#036EB8"/>
+<path d="M120.275 49.9481V50.8534H114.15V49.9481H116.663C116.578 49.713 116.493 49.4779 116.395 49.278L117.444 49.0781C117.591 49.3485 117.737 49.666 117.835 49.9481H120.275ZM120.592 52.0879V53.005H113.796V52.0879H115.407C115.321 51.794 115.199 51.4178 115.077 51.1121L115.992 50.9122C116.163 51.2649 116.334 51.7235 116.407 52.0291L116.175 52.0879H117.896C118.042 51.7235 118.237 51.2767 118.335 50.9357L119.372 51.1356C119.201 51.4648 119.055 51.794 118.896 52.0879H120.592ZM113.479 56.0853L113.711 57.0847C112.466 57.5785 111.136 58.0958 110.087 58.4837L109.708 57.3668C110.123 57.2375 110.624 57.0847 111.173 56.8965V53.0167H109.904V51.9821H111.173V49.3133H112.283V51.9821H113.393V53.0167H112.283V56.5086L113.479 56.0853ZM115.37 55.5445V56.2029H118.884V55.5445H115.37ZM115.37 54.2395V54.8626H118.884V54.2395H115.37ZM118.957 58.9423H119.433C119.58 58.9423 119.714 58.9305 119.787 58.907C119.86 58.8717 119.921 58.8012 119.958 58.6601C119.995 58.5073 120.007 58.1781 120.019 57.7195C120.226 57.8959 120.617 58.084 120.91 58.1781C120.885 58.6366 120.836 59.1069 120.751 59.295C120.641 59.4949 120.483 59.6242 120.275 59.6947C120.092 59.7653 119.763 59.7888 119.531 59.7888H118.726C118.433 59.7888 118.067 59.7182 117.859 59.5536C117.64 59.389 117.554 59.1774 117.554 58.519V56.9201H116.566C116.346 58.5425 115.736 59.4596 113.479 60.0004C113.393 59.7417 113.113 59.342 112.893 59.1421C114.833 58.7777 115.309 58.1428 115.48 56.9201H114.333V53.5105H119.97V56.9201H118.604V58.5778C118.604 58.7424 118.616 58.8482 118.689 58.8835C118.75 58.9305 118.835 58.9423 118.957 58.9423Z" fill="#036EB8"/>
+<path d="M102.18 55.5447V54.6394H108.598V55.5447H104.559C104.462 55.8857 104.364 56.2384 104.254 56.5676H108L107.964 56.9791C107.805 58.5898 107.646 59.3187 107.293 59.6361C107.024 59.883 106.707 59.9653 106.219 59.9771C105.816 60.0006 105.011 60.0006 104.206 59.9536C104.181 59.6714 104.01 59.2834 103.791 59.013C104.645 59.0836 105.548 59.0953 105.889 59.0953C106.146 59.0953 106.317 59.0836 106.451 59.0013C106.634 58.8367 106.768 58.3899 106.878 57.4611H102.888C103.107 56.932 103.339 56.2031 103.522 55.5447H102.18ZM103.925 52.9229H106.695C106.341 52.4879 106.011 51.9941 105.78 51.5238H104.999C104.694 52.0293 104.328 52.4996 103.925 52.9229ZM100.814 52.3938V50.5832H99.0077V52.3938H100.814ZM108.659 51.5238H106.866C107.39 52.3233 108.196 53.0875 108.94 53.499C108.708 53.6988 108.366 54.0751 108.196 54.3337C107.732 54.0163 107.256 53.5813 106.829 53.0875V53.8047H103.632V53.2051C103.217 53.593 102.766 53.9457 102.266 54.2514C102.192 54.0398 101.96 53.5695 101.777 53.3226H100.728V54.7922H101.875V55.7446H100.728V57.6022L102.205 57.226L102.351 58.1665C100.789 58.6015 99.1053 59.0483 97.8363 59.3892L97.5801 58.3664L98.117 58.2488V54.322H99.0077V58.0372L99.7398 57.8491V53.3226H98.0926V49.6427H101.777V53.2286C102.546 52.7936 103.217 52.2175 103.766 51.5238H102.278V50.5715H104.401C104.62 50.1835 104.791 49.7485 104.938 49.3135L105.926 49.5604C105.816 49.9013 105.682 50.254 105.523 50.5715H108.659V51.5238Z" fill="#036EB8"/>
+<defs>
+<clipPath id="clip0_543_763">
+<rect width="73.062" height="43.5663" fill="white" transform="translate(18.5522 22.248)"/>
+</clipPath>
+</defs>
+</svg>

BIN
xinkeaboard-promotion-portal/src/assets/images/record.png


+ 23 - 0
xinkeaboard-promotion-portal/src/components/ConfirmInfoDialog.vue

@@ -0,0 +1,23 @@
+<template>
+  <!-- <el-dialog 
+    v-model="dialogVisible" 
+    title="Notice" 
+    width="500" 
+    destroy-on-close center
+  >
+  </el-dialog> -->
+</template>
+
+<script setup lang="ts">
+import { defineProps } from 'vue';
+
+interface DialogProps {
+  dialogVisible: Boolean
+}
+
+const { dialogVisible = false } = defineProps<DialogProps>()
+
+
+</script>
+
+<style lang="scss" scoped></style>

+ 158 - 0
xinkeaboard-promotion-portal/src/components/CountrySelct.vue

@@ -0,0 +1,158 @@
+<template>
+  <div class="country-select">
+    <el-input
+      v-model="productName"
+      style="width: 240px"
+      placeholder="第一步:输入你的产品名称,选择目标区域市场"
+    />
+    <span class="country-wrap">
+      <el-dropdown ref="dropdown" trigger="contextmenu" popper-class="country-popper">
+        <span class="country-wrap-item" @click="showCountryList" :title="countryInfo.name">
+          <img :src="countryInfo.flag" />
+        </span>
+        <template #dropdown>
+          <div class="custom-dropdown">
+            <div class="custom-dropdown-filter">
+              <el-input v-model="search" placeholder="Select Country">
+                <template #prefix>
+                  <el-icon class="el-input__icon"><search /></el-icon>
+                </template>
+              </el-input>
+            </div>
+            <div class="custom-dropdown-list">
+              <el-dropdown-menu>
+                <el-dropdown-item
+                  v-for="item in countryList"
+                  :key="item.code"
+                  @click="() => selectCountry(item)"
+                >
+                  <img :src="item.flag" />
+                  <span :class="{ 'country-name': true, active: countryInfo.code === item.code }">
+                    {{ item.code }}
+                    {{ '-' }}
+                    {{ item.name }}
+                  </span>
+                </el-dropdown-item>
+              </el-dropdown-menu>
+            </div>
+          </div>
+        </template>
+      </el-dropdown>
+    </span>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { reactive, ref } from 'vue';
+import countryData from '../assets/country.json';
+
+import type { DropdownInstance } from 'element-plus';
+
+interface countryItem {
+  code: string;
+  name: string;
+  flag: any;
+}
+
+const images = import.meta.glob('@/assets/flags/4x3/*.svg', { eager: true, import: 'default' });
+const step = ref<number>(1);
+const productName = ref<string>('');
+const search = ref<string>('');
+const countryList: countryItem[] = countryData.map((item) => ({
+  code: item.code.toUpperCase(),
+  name: item.name,
+  flag: images[`/src/assets/flags/4x3/${item.code}.svg`]
+}));
+const countryInfo = ref<countryItem>(countryList[0]);
+const dropdown = ref<DropdownInstance>();
+
+const selectCountry = (item: countryItem) => {
+  countryInfo.value = item;
+};
+
+function showCountryList() {
+  if (!dropdown.value) return;
+  dropdown.value.handleOpen();
+}
+</script>
+
+<style lang="scss">
+.country-popper {
+  .custom-dropdown {
+    display: flex;
+    flex-direction: column;
+    width: 240px;
+    height: 400px;
+    padding: 5px;
+    box-sizing: border-box;
+    overflow: hidden;
+
+    &-filter {
+      height: 48px;
+
+      .el-input__wrapper {
+        height: 45px;
+      }
+    }
+
+    &-list {
+      flex: 1;
+      overflow: auto;
+      height: 100%;
+
+      .el-dropdown-menu__item {
+        padding: 10px;
+        font-weight: 400;
+
+        .country-name {
+          color: #282e30;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          white-space: nowrap;
+
+          &.active {
+            color: #036eb8;
+          }
+        }
+        img {
+          width: 30px;
+          margin: 0 6px;
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.country-select {
+  display: flex;
+  align-items: center;
+  :deep(.el-input) {
+    width: 25rem !important;
+    height: 3rem !important;
+  }
+
+  :deep(.el-input__inner) {
+    &::placeholder {
+      font-size: 1rem !important;
+    }
+  }
+}
+
+.country-wrap {
+  &-item {
+    display: inline-flex;
+    justify-content: center;
+    align-items: center;
+    width: 5.75rem;
+    height: 4.25rem;
+    background-color: #ffffff;
+    margin-left: 0.625rem;
+    cursor: pointer;
+
+    img {
+      width: 4.5rem;
+    }
+  }
+}
+</style>

+ 0 - 27
xinkeaboard-promotion-portal/src/components/Home.vue

@@ -1,27 +0,0 @@
-<template>
-  <div class="promotion-portal">
-    <h1 @click="action">招商门户网站</h1>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { useMainStore } from '../store'
-import { request } from "@/utils/http";
-
-const store = useMainStore()
-
-const action = () => {
-console.log(request, 'request')
-}
-</script>
-
-<style scoped>
-h1 {
-  width: 100%;
-  text-align: center;
-  color: #42b983;
-}
-button {
-  margin-top: 1em;
-}
-</style>

+ 68 - 0
xinkeaboard-promotion-portal/src/components/TopContent.vue

@@ -0,0 +1,68 @@
+<template>
+  <div class="head-content">
+    <img :src="Logo" />
+    <div class="head-content-wrap">
+      <h2>市场迷雾?罗经开路!</h2>
+      <span class="head-content-wrap__title">
+        Lookeen 是一个服务于首次出海客户的 AI 商情系统(GTM Analytics
+        Tools 市场进入分析工具)。目的是提供客户自己的产品品类在目标市场的商业情报,降低用户对产品在目标市场的不确定性。
+      </span>
+      <div class="head-content-wrap__step">
+        <span class="label">只需三步</span>
+        <span class="tip">(每月可免费获取3次商品分析)</span>
+      </div>
+      <div class="head-content-wrap__select">
+        <CountrySelct></CountrySelct>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import CountrySelct from '@/components/CountrySelct.vue';
+import Logo from '@/assets/images/logo.svg';
+</script>
+
+<style lang="scss" scoped>
+.head-content {
+  &-wrap {
+    margin-top: 1rem;
+    h2 {
+      margin: 0;
+      font-weight: bold;
+      font-size: 2.5rem;
+      color: #282e30;
+    }
+    padding-left: 1.25rem;
+
+    &__title {
+      display: inline-block;
+      font-weight: 400;
+      font-size: 1rem;
+      color: #282e30;
+      margin-top: 1.25rem;
+    }
+
+    &__step {
+      margin-top: 3.75rem;
+
+      .label {
+        font-weight: bold;
+        font-size: 1.5rem;
+        color: #036eb8;
+      }
+
+      .tip {
+        font-weight: 400;
+        font-size: 0.75rem;
+        color: #282e30;
+        margin-left: 0.625rem;
+      }
+    }
+
+    &__select {
+      margin-top: 10px;
+    }
+  }
+}
+</style>

+ 3 - 0
xinkeaboard-promotion-portal/src/main.ts

@@ -1,4 +1,6 @@
 import { createApp } from 'vue'
+import ElementPlus from 'element-plus'
+import 'element-plus/dist/index.css'
 import App from './App.vue'
 import router from './router'
 import { createPinia } from 'pinia'
@@ -6,4 +8,5 @@ import { createPinia } from 'pinia'
 const app = createApp(App)
 app.use(createPinia())
 app.use(router)
+app.use(ElementPlus)
 app.mount('#app')

+ 1 - 1
xinkeaboard-promotion-portal/src/router/index.ts

@@ -4,7 +4,7 @@ const routes = [
   {
     path: '/',
     name: 'Home',
-    component: () => import('../components/Home.vue'),
+    component: () => import('../views/Home.vue'),
   },
 ]
 

+ 111 - 0
xinkeaboard-promotion-portal/src/views/Home.vue

@@ -0,0 +1,111 @@
+<template>
+  <div class="promotion-portal">
+    <div
+      class="promotion-portal-top"
+      ref="topRef"
+      :style="{ height: topHeight + 'px', backgroundImage: `url(${AiBgImage})` }"
+    >
+      <div class="promotion-portal-top__wrapper">
+        <TopContent></TopContent>
+      </div>
+    </div>
+    <div
+      class="promotion-portal-tab record"
+      ref="tab1Ref"
+      :style="{ height: tab1Height + 'px', backgroundImage: `url(${Tab1Image})` }"
+    ></div>
+    <div
+      class="promotion-portal-tab cando"
+      ref="tab2Ref"
+      :style="{ height: tab2Height + 'px', backgroundImage: `url(${Tab2Image})` }"
+    ></div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted, onUnmounted } from 'vue';
+import TopContent from '@/components/TopContent.vue';
+import AiBgImage from '@/assets/images/ai-bg.png';
+import Tab1Image from '@/assets/images/record.png';
+import Tab2Image from '@/assets/images/cando.png';
+
+const topRef = ref<HTMLElement | null>(null);
+const tab1Ref = ref<HTMLElement | null>(null);
+const tab2Ref = ref<HTMLElement | null>(null);
+
+const topHeight = ref(0);
+const tab1Height = ref(0);
+const tab2Height = ref(0);
+
+function setHeight(refEl: HTMLElement | null, imgUrl: string, heightRef: typeof topHeight) {
+  if (!refEl) return;
+  const img = new Image();
+  img.src = imgUrl;
+  img.onload = () => {
+    const ratio = img.height / img.width;
+    heightRef.value = refEl.offsetWidth * ratio;
+  };
+}
+
+function setRem() {
+  const baseSize = 16; // 基准字体大小
+  const designWidth = 1920; // 设计稿宽度
+  const scale = window.innerWidth / designWidth;
+  document.documentElement.style.fontSize = baseSize * scale + 'px';
+}
+
+setRem();
+
+function updateAllHeights() {
+  setHeight(topRef.value, AiBgImage, topHeight);
+  setHeight(tab1Ref.value, Tab1Image, tab1Height);
+  setHeight(tab2Ref.value, Tab2Image, tab2Height);
+}
+
+onMounted(() => {
+  updateAllHeights();
+  window.addEventListener('resize', updateAllHeights);
+  window.addEventListener('resize', setRem);
+});
+
+onUnmounted(() => {
+  window.removeEventListener('resize', updateAllHeights);
+  window.addEventListener('resize', setRem);
+});
+</script>
+
+<style lang="scss" scoped>
+.promotion-portal {
+  width: 100%;
+  overflow: auto;
+
+  &-top,
+  &-tab {
+    width: 100%;
+    background-repeat: no-repeat;
+    background-position: center;
+    background-size: contain; /* 或 cover,根据你需求 */
+    // transition: height 0.1s;
+  }
+
+  &-top {
+    position: relative;
+    &__wrapper {
+      position: absolute;
+      top: 2rem;
+      left: 16.25rem;
+      width: 41rem;
+      height: 34rem;
+      overflow: auto;
+    }
+  }
+
+  &-tab.record {
+    /* backgroundImage 由绑定 style 设置 */
+  }
+
+  &-tab.cando {
+    /* backgroundImage 由绑定 style 设置 */
+  }
+}
+</style>

+ 2 - 1
xinkeaboard-promotion-portal/tsconfig.json

@@ -14,7 +14,8 @@
     "baseUrl": ".",
     "paths": {
       "@/*": ["src/*"]
-    }
+    },
+    "types": ["element-plus/global", "vite/client"]
   },
   "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "vite.config.ts"],
   "exclude": ["node_modules"]

+ 17 - 6
xinkeaboard-promotion-portal/vite.config.ts

@@ -1,9 +1,20 @@
-import { defineConfig } from 'vite'
+import { defineConfig } from 'vite';
 import path from 'path';
-import vue from '@vitejs/plugin-vue'
+import AutoImport from 'unplugin-auto-import/vite';
+import Components from 'unplugin-vue-components/vite';
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
+import vue from '@vitejs/plugin-vue';
 
 export default defineConfig({
-  plugins: [vue()],
+  plugins: [
+    vue(),
+    AutoImport({
+      resolvers: [ElementPlusResolver()]
+    }),
+    Components({
+      resolvers: [ElementPlusResolver()]
+    })
+  ],
   resolve: {
     alias: {
       '@': path.resolve(__dirname, 'src')
@@ -13,9 +24,9 @@ export default defineConfig({
     proxy: {
       '/api': {
         target: '',
-        changeOrigin: true,
-        // rewrite: () => 
+        changeOrigin: true
+        // rewrite: () =>
       }
     }
   }
-})
+});

+ 4 - 4
xinkeaboard-seller/src/components/SldTableRowTwo/index.js

@@ -169,7 +169,7 @@ export default class SldTableRowTwo extends PureComponent {
             fontWeight: this.props.r_fontw != undefined ? this.props.r_fontw : '500',
             lineHeight: '16px',
           }}>
-            {val.text.length > 62
+            {val.text?.length > 62
               ? <Tooltip placement="bottomRight" title={val.text}>
                 <span className={styles.word_break}>{val.text.substring(0, 61)}...</span>
               </Tooltip>
@@ -190,7 +190,7 @@ export default class SldTableRowTwo extends PureComponent {
             fontWeight: this.props.r_fontw != undefined ? this.props.r_fontw : '500',
             lineHeight: '16px',
           }}>
-            {val.text.length > 62
+            {val.text?.length > 62
               ? <Tooltip placement="bottomRight" title={val.text}>
                 <div>
                   <span className={styles.word_break}>{val.text.substring(0, 61)}...</span>
@@ -268,7 +268,7 @@ export default class SldTableRowTwo extends PureComponent {
             color: this.props.r_color != undefined ? this.props.r_color : '#999',
             fontWeight: this.props.r_fontw != undefined ? this.props.r_fontw : '500',
             lineHeight: '16px',
-          }} title={val.text}>{val.text.length > 30 ? val.text.substring(0, 30) + '...' : val.text}</div>
+          }} title={val.text}>{val.text?.length > 30 ? val.text.substring(0, 30) + '...' : val.text}</div>
         </FormItem>
       );
     } else if (val.type == 'show_goods_img_more') {
@@ -279,7 +279,7 @@ export default class SldTableRowTwo extends PureComponent {
           style={{ width: '100%' }}
         >
           <div className={`${global.flex_row_start_center}`}>
-            {val.data.length > 0 ? val.data.map((item, index) => {
+            {val.data?.length > 0 ? val.data.map((item, index) => {
                 return <div key={index} className={global.flex_row_center_center} onClick={() => this.sldShowImgPre(val, item.imageUrl)} style={{
                   overFlow: 'hidden',
                   width: 100,

+ 1 - 1
xinkeaboard-seller/src/pages/goods/add_goods.js

@@ -2973,7 +2973,6 @@ export default class AddGoods extends Component {
             type: dis_type,
             payload: params,
             callback: (res) => {
-              sthis.setState({ pageLoading: false });
               if (res.state == 200) {
                 sucTip(res.msg, 1);
                 //提示并返回上级页面
@@ -2981,6 +2980,7 @@ export default class AddGoods extends Component {
                   sthis.props.history.goBack();
                 }, 500);
               } else {
+                sthis.setState({ pageLoading: false });
                 failTip(res.msg);
               }
             },

+ 1 - 1
xinkeaboard-seller/src/pages/store/apply_detail.js

@@ -232,7 +232,7 @@ export default class ApplyDetail extends Component {
           //店铺经营信息-start
           store_business_info.map(item => {
             if (item.name == 'openTime') {
-              item.text = `${store_detail[item.name]}${sldComLanguage('年')}`;
+              item.text = store_detail[item.name] ? `${store_detail[item.name]}${sldComLanguage('年')}` : '';
             } else if (item.name == 'payAmount') {
               item.text = `${store_detail[item.name]}${sldComLanguage('元')}`;
             } else if (item.name == 'billCycle') {

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/cms/front/FrontArticleController.java

@@ -45,6 +45,7 @@ public class FrontArticleController {
     })
     @GetMapping("helpList")
     public JsonResult<List<FrontArticleCategoryVO>> helpList(HttpServletRequest request, Integer cateSize, Integer articleSize) {
+        String webSite = WebUtil.getWebSite(request);
         PagerInfo pager = new PagerInfo(cateSize, 1);
         PagerInfo articlePager = null;
         if (!StringUtil.isNullOrZero(articleSize)) {
@@ -53,6 +54,7 @@ public class FrontArticleController {
         ArticleCategoryExample example = new ArticleCategoryExample();
         example.setWebSite(WebUtil.getWebSite(request));
         example.setIsShow(ArticleConst.STATE_YES);
+        example.setWebSite(webSite);
         example.setOrderBy("sort asc, create_time desc");
         List<ArticleCategory> list = articleCategoryModel.getArticleCategoryList(example, pager);
         List<FrontArticleCategoryVO> vos = new ArrayList<>();
@@ -62,6 +64,7 @@ public class FrontArticleController {
                 //查询文章列表
                 ArticleExample articleExample = new ArticleExample();
                 articleExample.setCategoryId(articleCategory.getCategoryId());
+                articleExample.setWebSite(webSite);
                 articleExample.setState(ArticleConst.STATE_YES);
                 articleExample.setOrderBy("sort asc, create_time desc");
                 List<Article> articleList = articleModel.getArticleList(articleExample, articlePager);
@@ -85,9 +88,11 @@ public class FrontArticleController {
     })
     @GetMapping("articleList")
     public JsonResult<List<ArticleVO>> articleList(HttpServletRequest request, Integer categoryId, Integer size) {
+        String webSite = WebUtil.getWebSite(request);
         PagerInfo pager = new PagerInfo(size, 1);
         ArticleExample example = new ArticleExample();
         example.setCategoryId(categoryId);
+        example.setWebSite(webSite);
         example.setState(ArticleConst.STATE_YES);
         example.setOrderBy("sort asc, create_time desc");
         List<Article> list = articleModel.getArticleList(example, pager);

+ 24 - 43
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminOwnStoreController.java

@@ -21,6 +21,7 @@ import com.slodon.b2b2c.seller.pojo.*;
 import com.slodon.b2b2c.system.pojo.Admin;
 import com.slodon.b2b2c.vo.seller.OwnStoreDetailVO;
 import com.slodon.b2b2c.vo.seller.OwnStoreVO;
+import com.slodon.b2b2c.vo.seller.StoreVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -34,6 +35,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -67,66 +69,44 @@ public class AdminOwnStoreController extends BaseController {
     })
     @GetMapping("list")
     public JsonResult<PageVO<OwnStoreVO>> getList(HttpServletRequest request,
-                                                  @RequestParam(value = "webSite", required = false,defaultValue = "1") String webSite,
+                                                  @RequestParam(value = "webSite", required = false, defaultValue = "1") String webSite,
                                                   @RequestParam(value = "storeName", required = false) String storeName,
                                                   @RequestParam(value = "state", required = false) Integer state,
                                                   @RequestParam(value = "businessState", required = false) Integer businessState) {
         PagerInfo pager = WebUtil.handlerPagerInfo(request);
-
+        List<Store> storeList = new ArrayList<>();
+        List<OwnStoreVO> vos = new ArrayList<>();
         StoreExample storeExample = new StoreExample();
-        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            storeExample.setStoreNameLike(storeName);
-            storeExample.setBusinessState(businessState);
-        }
+        storeExample.setStoreNameLike(storeName);
+        storeExample.setBusinessState(businessState);
         storeExample.setState(state);
         storeExample.setStateNotEquals(StoreConst.STORE_STATE_DELETE);
         storeExample.setIsOwnStore(StoreConst.IS_OWN_STORE);
         storeExample.setPager(pager);
-        List<Store> storeList = storeModel.getStoreList(storeExample, pager);
-        List<StoreName> storeNameList = Collections.emptyList();
-        List<StoreSiteInfo> storeSiteInfoList = Collections.emptyList();
-        if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            StoreNameExample storeNameExample = new StoreNameExample();
-            storeNameExample.setStoreNameLike(storeName);
-            storeNameExample.setWebSite(webSite);
-            storeNameList = storeNameModel.getStoreNameList(new StoreNameExample(), null);
-            StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-            storeSiteInfoExample.setBusinessState(businessState);
-            storeSiteInfoExample.setStoreIdIn(storeNameList.stream().map(StoreName::getStoreId).collect(Collectors.toList()));
-            storeSiteInfoList = storeSiteInfoModel.getStoreSiteInfoList(storeSiteInfoExample, null);
-        }
-        List<OwnStoreVO> vos = new ArrayList<>();
-        if (CollectionUtils.isEmpty(storeNameList) && !WebSiteConstant.MEMBER_OVERSEA.equals(webSite) && CollectionUtils.isEmpty(storeSiteInfoList)) {
-            return SldResponse.success(new PageVO<>(vos, new PagerInfo(10, 1)));
+        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
+            storeList = storeModel.getStoreList(storeExample, pager);
+        } else {
+            if (pager != null) {
+                storeList = storeModel.getStoreCnList(storeExample, pager);
+            }
         }
         if (!CollectionUtils.isEmpty(storeList)) {
-            List<StoreName> finalStoreNameList = storeNameList;
             storeList.forEach(store -> {
                 OwnStoreVO vo = new OwnStoreVO(store);
-                if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-                    vo.setStoreName(finalStoreNameList.stream()
-                            .filter(storeNameWebSite -> storeNameWebSite.getStoreId().equals(store.getStoreId()))
-                            .findFirst()
-                            .map(StoreName::getStoreName)
-                            .orElse(""));
-                   StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-                   storeSiteInfoExample.setStoreId(store.getStoreId());
-                   StoreSiteInfo storeSiteInfo = storeSiteInfoModel.getStoreSiteInfo(storeSiteInfoExample);
-                   vo.setBusinessState(storeSiteInfo != null ? storeSiteInfo.getBusinessState() : StoreConst.STORE_BUSINESS_STATE_DECORATION);
-                }
                 //根据店铺id获取商户账号
                 VendorExample vendorExample = new VendorExample();
                 vendorExample.setStoreId(store.getStoreId());
                 vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
                 List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
-                vo.setVendorName(vendorList.get(0).getVendorName());
-
-                //通过vendorId查询资质表获取联系人电话
-                StoreCertificateExample storeCertificateExample = new StoreCertificateExample();
-                storeCertificateExample.setVendorId(vendorList.get(0).getVendorId());
-                List<StoreCertificate> storeCertificateList = storeCertificateModel.getStoreCertificateList(storeCertificateExample, null);
-                if (!CollectionUtils.isEmpty(storeCertificateList)) {
-                    vo.setContactPhone(CommonUtil.dealMobile(storeCertificateList.get(0).getContactPhone()));
+                if (!CollectionUtils.isEmpty(vendorList)) {
+                    vo.setVendorName(vendorList.get(0).getVendorName());
+                    //通过vendorId查询资质表获取联系人电话
+                    StoreCertificateExample storeCertificateExample = new StoreCertificateExample();
+                    storeCertificateExample.setVendorId(vendorList.get(0).getVendorId());
+                    List<StoreCertificate> storeCertificateList = storeCertificateModel.getStoreCertificateList(storeCertificateExample, null);
+                    if (!CollectionUtils.isEmpty(storeCertificateList)) {
+                        vo.setContactPhone(CommonUtil.dealMobile(storeCertificateList.get(0).getContactPhone()));
+                    }
                 }
                 vos.add(vo);
             });
@@ -134,6 +114,7 @@ public class AdminOwnStoreController extends BaseController {
         return SldResponse.success(new PageVO<>(vos, storeExample.getPager()));
     }
 
+
     @ApiOperation("新增自营店铺")
     @OperationLogger(option = "新增自营店铺")
     @PostMapping("add")
@@ -175,7 +156,7 @@ public class AdminOwnStoreController extends BaseController {
             storeSiteInfoExample.setStoreId(storeId);
             storeSiteInfoExample.setWebSite(webSite);
             StoreSiteInfo storeSiteInfo = storeSiteInfoModel.getStoreSiteInfo(storeSiteInfoExample);
-            vo.setBusinessState(storeSiteInfo != null ? storeSiteInfo.getBusinessState() : 2);
+            vo.setBusinessState(storeSiteInfo != null ? storeSiteInfo.getBusinessState() : StoreConst.STORE_BUSINESS_STATE_DECORATION);
         }
 
         return SldResponse.success(vo);

+ 13 - 33
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminStoreAuditController.java

@@ -86,11 +86,12 @@ public class AdminStoreAuditController {
                                                     @RequestParam(value = "state", required = false) Integer state) {
         PagerInfo pager = WebUtil.handlerPagerInfo(request);
 
+        List<StoreApplyVO> vos = new ArrayList<>();
+        List<StoreApply> storeApplyList = new ArrayList<>();
+
         StoreApplyExample example = new StoreApplyExample();
-        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            example.setStoreNameLike(storeName);
-            example.setStoreGradeId(storeGradeId);
-        }
+        example.setStoreNameLike(storeName);
+        example.setStoreGradeId(storeGradeId);
         example.setVendorNameLike(vendorName);
         example.setStoreType(StoreConst.NO_OWN_STORE);
         example.setPager(pager);
@@ -100,25 +101,16 @@ public class AdminStoreAuditController {
         } else {
             example.setStateNotEquals(StoreConst.STATE_4_STORE_OPEN);
         }
-        List<StoreApply> storeApplyList = storeApplyModel.getStoreApplyList(example, pager);
-        List<StoreName> storeNameList = Collections.emptyList();
-        List<StoreSiteInfo> storeSiteInfoList = Collections.emptyList();
-        if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            StoreNameExample storeNameExample = new StoreNameExample();
-            storeNameExample.setStoreNameLike(storeName);
-            storeNameExample.setWebSite(webSite);
-            storeNameList = storeNameModel.getStoreNameList(new StoreNameExample(), null);
-            StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-            storeSiteInfoExample.setStoreGradeId(storeGradeId);
-            storeSiteInfoExample.setStoreIdIn(storeNameList.stream().map(StoreName::getStoreId).collect(Collectors.toList()));
-            storeSiteInfoList = storeSiteInfoModel.getStoreSiteInfoList(storeSiteInfoExample, null);
-        }
-        List<StoreApplyVO> vos = new ArrayList<>();
-        if (CollectionUtils.isEmpty(storeNameList) && !WebSiteConstant.MEMBER_OVERSEA.equals(webSite) && CollectionUtils.isEmpty(storeSiteInfoList)) {
-            return SldResponse.success(new PageVO<>(vos, new PagerInfo(10, 1)));
+        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
+            storeApplyList = storeApplyModel.getStoreApplyList(example, pager);
+        } else {
+            if (pager!= null){
+                storeApplyList = storeApplyModel.getStoreApplyCnList(example, pager);
+            }
+
         }
         if (!CollectionUtils.isEmpty(storeApplyList)) {
-            List<StoreName> finalStoreNameList = storeNameList;
+
             storeApplyList.forEach(storeApply -> {
                 StoreApplyVO vo = new StoreApplyVO(storeApply);
                 //根据等级id获取等级名称
@@ -126,18 +118,6 @@ public class AdminStoreAuditController {
                 if (storeGrade != null) {
                     vo.setStoreGradeName(storeGrade.getGradeName());
                 }
-                if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-                    vo.setStoreName(finalStoreNameList.stream()
-                            .filter(storeNameWebSite -> storeNameWebSite.getStoreId().equals(storeApply.getStoreId()))
-                            .findFirst()
-                            .map(StoreName::getStoreName)
-                            .orElse(""));
-                    StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-                    storeSiteInfoExample.setStoreId(storeApply.getStoreId());
-                    storeSiteInfoExample.setWebSite(webSite);
-                    StoreSiteInfo storeSiteInfo = storeSiteInfoModel.getStoreSiteInfo(storeSiteInfoExample);
-                    vo.setStoreGradeName(storeSiteInfo != null ? storeSiteInfo.getStoreGradeName() : vo.getStoreGradeName());
-                }
 
                 //获取联系人名称和电话
                 StoreCertificateExample storeCertificateExample = new StoreCertificateExample();

+ 28 - 43
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminStoreController.java

@@ -26,6 +26,7 @@ import com.slodon.b2b2c.seller.pojo.*;
 import com.slodon.b2b2c.system.pojo.Admin;
 import com.slodon.b2b2c.system.pojo.Setting;
 import com.slodon.b2b2c.seller.dto.StoreBusinessVO;
+import com.slodon.b2b2c.vo.seller.OwnStoreVO;
 import com.slodon.b2b2c.vo.seller.StoreDetailVO;
 import com.slodon.b2b2c.vo.seller.StoreGoodsCateVO;
 import com.slodon.b2b2c.vo.seller.StoreVO;
@@ -92,54 +93,29 @@ public class AdminStoreController extends BaseController {
                                                @RequestParam(value = "businessState", required = false) Integer businessState) {
 
         PagerInfo pager = WebUtil.handlerPagerInfo(request);
-
+        List<Store> storeList = new ArrayList<>();
+        List<StoreVO> vos = new ArrayList<>();
         StoreExample storeExample = new StoreExample();
-        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            storeExample.setStoreNameLike(storeName);
-            storeExample.setBusinessState(businessState);
-            storeExample.setStoreGradeId(storeGradeId);
-        }
+
+        storeExample.setStoreNameLike(storeName);
+        storeExample.setBusinessState(businessState);
+        storeExample.setStoreGradeId(storeGradeId);
+
         storeExample.setVendorNameLike(vendorName);
         storeExample.setState(state);
         storeExample.setStateNotEquals(StoreConst.STORE_STATE_DELETE);
         storeExample.setIsOwnStore(StoreConst.NO_OWN_STORE);
         storeExample.setPager(pager);
-        List<Store> storeList = storeModel.getStoreList(storeExample, pager);
-        List<StoreName> storeNameList = Collections.emptyList();
-        List<StoreSiteInfo> storeSiteInfoList = Collections.emptyList();
-        if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            StoreNameExample storeNameExample = new StoreNameExample();
-            storeNameExample.setStoreNameLike(storeName);
-            storeNameExample.setWebSite(webSite);
-            storeNameList = storeNameModel.getStoreNameList(new StoreNameExample(), null);
-            StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-            storeSiteInfoExample.setBusinessState(businessState);
-            storeSiteInfoExample.setStoreGradeId(storeGradeId);
-            storeSiteInfoExample.setStoreIdIn(storeNameList.stream().map(StoreName::getStoreId).collect(Collectors.toList()));
-            storeSiteInfoList = storeSiteInfoModel.getStoreSiteInfoList(storeSiteInfoExample, null);
-        }
-        List<StoreVO> vos = new ArrayList<>();
-        if (CollectionUtils.isEmpty(storeNameList) && !WebSiteConstant.MEMBER_OVERSEA.equals(webSite) && CollectionUtils.isEmpty(storeSiteInfoList)) {
-            return SldResponse.success(new PageVO<>(vos, new PagerInfo(10, 1)));
+        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
+            storeList = storeModel.getStoreList(storeExample, pager);
+        } else {
+            if (pager != null) {
+                storeList = storeModel.getStoreCnList(storeExample, pager);
+            }
         }
         if (!CollectionUtils.isEmpty(storeList)) {
-            List<StoreName> finalStoreNameList = storeNameList;
             storeList.forEach(store -> {
                 StoreVO vo = new StoreVO(store);
-                if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-                    vo.setStoreName(finalStoreNameList.stream()
-                            .filter(storeNameWebSite -> storeNameWebSite.getStoreId().equals(store.getStoreId()))
-                            .findFirst()
-                            .map(StoreName::getStoreName)
-                            .orElse(""));
-                    StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-                    storeSiteInfoExample.setStoreId(store.getStoreId());
-                    StoreSiteInfo storeSiteInfo = storeSiteInfoModel.getStoreSiteInfo(storeSiteInfoExample);
-                    vo.setStoreGradeName(storeSiteInfo != null ? storeSiteInfo.getStoreGradeName() : store.getStoreGradeName());
-                    vo.setBusinessState(storeSiteInfo != null ? storeSiteInfo.getBusinessState() : StoreConst.STORE_BUSINESS_STATE_DECORATION);
-                    vo.setCreateTime(storeSiteInfo != null ? storeSiteInfo.getCreateTime() : store.getCreateTime());
-                    vo.setStoreExpireTime(storeSiteInfo != null ? storeSiteInfo.getStoreExpireTime() : store.getStoreExpireTime());
-                }
                 //根据店铺id获取商户账号
                 VendorExample vendorExample = new VendorExample();
                 vendorExample.setStoreId(store.getStoreId());
@@ -432,6 +408,8 @@ public class AdminStoreController extends BaseController {
         return SldResponse.success(Arrays.asList(1, 2, 3));
     }
 
+
+
     /**
      * 获取自营和已入驻的店铺列表 装修使用
      *
@@ -439,15 +417,22 @@ public class AdminStoreController extends BaseController {
      * @return
      */
     @GetMapping("getStoreListByDecorate")
-    public JsonResult<PageVO<StoreVO>> getStoreListByDecorate(HttpServletRequest request,String storeName) {
+    public JsonResult<PageVO<StoreVO>> getStoreListByDecorate(HttpServletRequest request, String storeName, String webSite) {
         PagerInfo pager = WebUtil.handlerPagerInfo(request);
 
+        List<StoreVO> vos = new ArrayList<>();
         StoreExample storeExample = new StoreExample();
-        storeExample.setStoreNameLike(storeName);
         storeExample.setState(StoreConst.STORE_STATE_OPEN);
+        storeExample.setStoreNameLike(storeName);
         storeExample.setPager(pager);
-        List<Store> storeList = storeModel.getStoreList(storeExample, pager);
-        List<StoreVO> vos = new ArrayList<>();
+        List<Store> storeList = new ArrayList<>();
+        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
+            storeList = storeModel.getStoreList(storeExample, pager);
+        } else {
+            if (pager != null) {
+                storeList = storeModel.getStoreCnList(storeExample, pager);
+            }
+        }
         if (!CollectionUtils.isEmpty(storeList)) {
             storeList.forEach(store -> {
                 StoreVO vo = new StoreVO(store);
@@ -455,7 +440,7 @@ public class AdminStoreController extends BaseController {
                 if (StringUtils.isEmpty(store.getStoreLogo())) {
                     vo.setStoreLogo(stringRedisTemplate.opsForValue().get("default_image_store_logo"));
                 }
-                vo.setStoreLogo(DomainUrlUtil.SLD_IMAGE_RESOURCES+vo.getStoreLogo());
+                vo.setStoreLogo(DomainUrlUtil.SLD_IMAGE_RESOURCES + vo.getStoreLogo());
                 vos.add(vo);
             });
         }

+ 56 - 127
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/front/FrontStoreController.java

@@ -113,109 +113,34 @@ public class FrontStoreController {
     public JsonResult<PageVO<FrontStoreListVO>> getList(HttpServletRequest request, Integer categoryId,
                                                         @RequestParam(value = "keyword", required = false) String keyword,
                                                         @RequestParam(value = "sort", required = false, defaultValue = "2") Integer sort) {
-
+        String webSite = WebUtil.getWebSite(request);
         Member member = UserUtil.getUser(request, Member.class);
+        List<Store> storeList = new ArrayList<>();
         PagerInfo pager = WebUtil.handlerPagerInfo(request);
         List<FrontStoreListVO> vos = new ArrayList<>();
-
-        //满足条件的店铺id
-//        Set<Long> storeIdSet = esGoodsModel.searchStoreIdsByEs(categoryId, keyword);
-//        if (CollectionUtils.isEmpty(storeIdSet)) {
-//            return SldResponse.success(new PageVO<>(vos, pager));
-//        }
-
-//        StringBuilder storeIds = new StringBuilder();
-//        storeIdSet.forEach(storeId -> {
-//            storeIds.append(",").append(storeId);
-//        });
         StoreExample storeExample = new StoreExample();
         storeExample.setState(StoreConst.STORE_STATE_OPEN);
-//        storeExample.setStoreIdIn(storeIds.substring(1));
-        String webSite = WebUtil.getWebSite(request);
-        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
-            storeExample.setStoreNameLike(keyword);
-            storeExample.setBusinessState(StoreConst.STORE_BUSINESS_STATE_OPEN);
-        }
+
+        storeExample.setStoreNameLike(keyword);
+        storeExample.setBusinessState(StoreConst.STORE_BUSINESS_STATE_OPEN);
+
         if (sort == 2) {
             storeExample.setOrderBy("store_look_volume DESC");
         } else {
             storeExample.setOrderBy("store_sales_volume DESC");
         }
-
-        List<Store> storeList = storeModel.getStoreList(storeExample, pager);
-        List<StoreName> storeNameList = new ArrayList<>();
-        List<StoreSiteInfo> storeSiteInfoList = new ArrayList<>();
-        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)) {
-            StoreNameExample storeNameExample = new StoreNameExample();
-            storeNameExample.setStoreNameLike(keyword);
-            storeNameExample.setWebSite(webSite);
-            storeNameList = storeNameModel.getStoreNameList(storeNameExample, null);
-            if (CollectionUtils.isEmpty(storeNameList)) {
-                //没有满足条件的店铺
-                return SldResponse.success(new PageVO<>(vos, pager));
-            }
-            StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
-            storeSiteInfoExample.setStoreIdIn(storeNameList.stream().map(StoreName::getStoreId).collect(Collectors.toList()));
-            storeSiteInfoExample.setWebSite(webSite);
-            storeSiteInfoExample.setBusinessState(StoreConst.STORE_BUSINESS_STATE_OPEN);
-            storeSiteInfoList = storeSiteInfoModel.getStoreSiteInfoList(storeSiteInfoExample, null);
-            if (CollectionUtils.isEmpty(storeSiteInfoList)) {
-                //没有满足条件的店铺
-                return SldResponse.success(new PageVO<>(vos, pager));
+        if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
+            storeList = storeModel.getStoreList(storeExample, pager);
+        } else {
+            if (pager != null) {
+                storeList = storeModel.getStoreCnList(storeExample, pager);
             }
         }
-
         if (CollectionUtils.isEmpty(storeList)) {
             //没有满足条件的店铺
             return SldResponse.success(new PageVO<>(vos, pager));
         }
 
-//        StringBuilder storeIdIn = new StringBuilder();
-//        storeList.forEach(store -> {
-//            storeIdIn.append(",").append(store.getStoreId());
-//        });
-//        //一次性查询这些店铺所有上架的商品
-//        List<SearchProductDTO> storeGoodsList = esGoodsModel.getStoreGoodsList(storeIdIn.substring(1), categoryId, keyword);
-//
-//        //基于店铺处理商品
-//        Map<Long/*storeId*/, List<StoreGoodsVO>/*按照销量倒序的商品列表*/> storeGoodsSaleMap = new HashMap<>();
-//        Map<Long/*storeId*/, List<StoreGoodsVO>/*按照上架时间倒序的商品列表*/> storeGoodsOnlineMap = new HashMap<>();
-//        storeGoodsList.forEach(goods -> {
-//            StoreGoodsVO storeGoodsVO = new StoreGoodsVO(goods);
-//            //按销量
-//            if (storeGoodsSaleMap.containsKey(Long.valueOf(goods.getStoreId()))) {
-//                storeGoodsSaleMap.get(Long.valueOf(goods.getStoreId())).add(storeGoodsVO);
-//            } else {
-//                List<StoreGoodsVO> list = new ArrayList<>();
-//                list.add(storeGoodsVO);
-//                storeGoodsSaleMap.put(Long.valueOf(goods.getStoreId()), list);
-//            }
-//
-//            //近30天上新
-//            Date apartDay = TimeUtil.getDateApartDay(-30);
-//            if (apartDay.before(storeGoodsVO.getOnlineTime())) {
-//                if (storeGoodsOnlineMap.containsKey(Long.valueOf(goods.getStoreId()))) {
-//                    storeGoodsOnlineMap.get(Long.valueOf(goods.getStoreId())).add(storeGoodsVO);
-//                } else {
-//                    List<StoreGoodsVO> list = new ArrayList<>();
-//                    list.add(storeGoodsVO);
-//                    storeGoodsOnlineMap.put(Long.valueOf(goods.getStoreId()), list);
-//                }
-//            }
-//        });
-//
-//        //会员是否收藏
-//        Set<Long/*storeId*/> memberFollowStoreSet = new HashSet<>();
-//        if (!StringUtil.isNullOrZero(member.getMemberId())) {
-//            MemberFollowStoreExample example = new MemberFollowStoreExample();
-//            example.setMemberId(member.getMemberId());
-//            example.setStoreIdIn(storeIdIn.substring(1));
-//            List<MemberFollowStore> memberFollowStoreList = memberFollowStoreModel.getMemberFollowStoreList(example, null);
-//            memberFollowStoreList.forEach(memberFollowStore -> {
-//                memberFollowStoreSet.add(memberFollowStore.getStoreId());
-//            });
-//        }
-
         for (Store store : storeList) {
             //默认店铺logo
             if (StringUtils.isEmpty(store.getStoreLogo())) {
@@ -226,49 +151,53 @@ public class FrontStoreController {
                 store.setStoreBannerMobile(stringRedisTemplate.opsForValue().get("default_image_store_backdrop"));
             }
             FrontStoreListVO vo = new FrontStoreListVO(store);
-            //会员是否收藏
-//            vo.setIsFollow(memberFollowStoreSet.contains(store.getStoreId()) ? "true" : "false");
-
-            //查询店铺内的热销商品
-//            List<StoreGoodsVO> storeGoodsSaleList = storeGoodsSaleMap.getOrDefault(store.getStoreId(), new ArrayList<>());
-//            //按销量倒序
-//            storeGoodsSaleList.sort((o1, o2) -> Integer.compare(o2.getActualSales(), o1.getActualSales()));
-//            //店铺热销商品个数
-//            vo.setHotGoodsNumber(storeGoodsSaleList.size());
-//            //店铺热销商品列表
-//            vo.setGoodsListVOList(storeGoodsSaleList);
-
-            //查询店铺内本月上新商品
-//            List<StoreGoodsVO> storeGoodsOnlineList = storeGoodsOnlineMap.getOrDefault(store.getStoreId(), new ArrayList<>());
-            //按创建时间倒序
-//            storeGoodsOnlineList.sort((o1, o2) -> o1.getOnlineTime().equals(o2.getOnlineTime()) ? 0 : (o1.getOnlineTime().before(o2.getOnlineTime()) ? 1 : -1));
-            //本月上新商品个数
-//            vo.setNewGoodsNumber(storeGoodsOnlineList.size());
-            //本月上新商品列表
-//            vo.setNewGoodsListVOS(storeGoodsOnlineList);
             vos.add(vo);
         }
-        for (StoreSiteInfo storeSiteInfo : storeSiteInfoList) {
-            Store store = storeModel.getStoreByStoreId(storeSiteInfo.getStoreId());
-            if (store != null) {
-                store.setStoreName(storeNameList.stream()
-                        .filter(storeNameWebSite -> storeNameWebSite.getStoreId().equals(storeSiteInfo.getStoreId()))
-                        .findFirst()
-                        .map(StoreName::getStoreName)
-                        .orElse(""));
-                store.setStoreLogo(storeSiteInfo.getStoreLogo());
-                //默认店铺logo
-                if (StringUtils.isEmpty(store.getStoreLogo())) {
-                    store.setStoreLogo(stringRedisTemplate.opsForValue().get("default_image_store_logo"));
-                }
-                //默认店铺背景图片(取移动端横幅)
-                if (StringUtils.isEmpty(store.getStoreBannerMobile())) {
-                    store.setStoreBannerMobile(stringRedisTemplate.opsForValue().get("default_image_store_backdrop"));
-                }
-                FrontStoreListVO vo = new FrontStoreListVO(store);
-                vos.add(vo);
-            }
-        }
+
+//        else {
+//            List<StoreName> storeNameList = new ArrayList<>();
+//            List<StoreSiteInfo> storeSiteInfoList = new ArrayList<>();
+//            if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)) {
+//                StoreNameExample storeNameExample = new StoreNameExample();
+//                storeNameExample.setStoreNameLike(keyword);
+//                storeNameExample.setWebSite(webSite);
+//                storeNameList = storeNameModel.getStoreNameList(storeNameExample, pager);
+//                if (CollectionUtils.isEmpty(storeNameList)) {
+//                    //没有满足条件的店铺
+//                    return SldResponse.success(new PageVO<>(vos, pager));
+//                }
+//                StoreSiteInfoExample storeSiteInfoExample = new StoreSiteInfoExample();
+//                storeSiteInfoExample.setStoreIdIn(storeNameList.stream().map(StoreName::getStoreId).collect(Collectors.toList()));
+//                storeSiteInfoExample.setWebSite(webSite);
+//                storeSiteInfoExample.setBusinessState(StoreConst.STORE_BUSINESS_STATE_OPEN);
+//                storeSiteInfoList = storeSiteInfoModel.getStoreSiteInfoList(storeSiteInfoExample, null);
+//                if (CollectionUtils.isEmpty(storeSiteInfoList)) {
+//                    //没有满足条件的店铺
+//                    return SldResponse.success(new PageVO<>(vos, pager));
+//                }
+//            }
+//            for (StoreSiteInfo storeSiteInfo : storeSiteInfoList) {
+//                Store store = storeModel.getStoreByStoreId(storeSiteInfo.getStoreId());
+//                if (store != null) {
+//                    store.setStoreName(storeNameList.stream()
+//                            .filter(storeNameWebSite -> storeNameWebSite.getStoreId().equals(storeSiteInfo.getStoreId()))
+//                            .findFirst()
+//                            .map(StoreName::getStoreName)
+//                            .orElse(""));
+//                    store.setStoreLogo(storeSiteInfo.getStoreLogo());
+//                    //默认店铺logo
+//                    if (StringUtils.isEmpty(store.getStoreLogo())) {
+//                        store.setStoreLogo(stringRedisTemplate.opsForValue().get("default_image_store_logo"));
+//                    }
+//                    //默认店铺背景图片(取移动端横幅)
+//                    if (StringUtils.isEmpty(store.getStoreBannerMobile())) {
+//                        store.setStoreBannerMobile(stringRedisTemplate.opsForValue().get("default_image_store_backdrop"));
+//                    }
+//                    FrontStoreListVO vo = new FrontStoreListVO(store);
+//                    vos.add(vo);
+//                }
+//            }
+//        }
 
         return SldResponse.success(new PageVO<>(vos, pager));
     }

+ 4 - 3
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/seller/SellerStoreController.java

@@ -213,7 +213,7 @@ public class SellerStoreController extends BaseController {
         Store store;
         if (WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
             store = storeModel.getStoreByStoreId(vendor.getStoreId());
-            SysSeo seoInfo = storeModel.getRecordByTargetIdAndType(vendor.getStoreId(), SeoTypeConstant.SEO_TYPE_SHOP);
+            SysSeo seoInfo = storeModel.getRecordByTargetIdAndType(vendor.getStoreId(), SeoTypeConstant.SEO_TYPE_SHOP, webSite);
             if (seoInfo != null) {
                 store.setStoreSeoTitle(seoInfo.getTitle());
                 store.setStoreSeoDesc(seoInfo.getRemark());
@@ -221,7 +221,7 @@ public class SellerStoreController extends BaseController {
             }
         } else {
             store = storeSiteInfoModel.getStoreByStoreIdAndWebSite(vendor.getStoreId(), webSite);
-            SysSeo seoInfo = storeModel.getRecordByTargetIdAndType(vendor.getStoreId(), SeoTypeConstant.SEO_TYPE_SHOP + "_" + webSite);
+            SysSeo seoInfo = storeModel.getRecordByTargetIdAndType(vendor.getStoreId(), SeoTypeConstant.SEO_TYPE_SHOP, webSite);
             if (seoInfo != null) {
                 store.setStoreSeoTitle(seoInfo.getTitle());
                 store.setStoreSeoDesc(seoInfo.getRemark());
@@ -417,7 +417,7 @@ public class SellerStoreController extends BaseController {
         String time = simpleDateFormat.format(date);
 
         //判断此条seoId对应的记录是否为空
-        SysSeo seoInfo = storeModel.getRecordByTargetIdAndType(sysSeo.getTargetId(),sysSeo.getType());
+        SysSeo seoInfo = storeModel.getRecordByTargetIdAndType(sysSeo.getTargetId(), sysSeo.getType(), webSite);
         if(seoInfo !=null){
             sysSeo.setUpdateUid(vendor.getVendorId());
             sysSeo.setUpdateTime(time);
@@ -472,6 +472,7 @@ public class SellerStoreController extends BaseController {
                 store.setStoreGradeName(storeSiteInfo.getStoreGradeName());
                 store.setStoreExpireTime(storeSiteInfo.getStoreExpireTime());
                 store.setStoreLogo(storeSiteInfo.getStoreLogo());
+                store.setStoreBannerPc(storeSiteInfo.getStoreBannerPc());
                 store.setBusinessState(storeSiteInfo.getBusinessState());
             }
         }

+ 4 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/seller/StoreApplyReadMapper.java

@@ -15,4 +15,8 @@ public interface StoreApplyReadMapper extends BaseReadMapper<StoreApply, StoreAp
      * @return
      */
     List<String> getVendorMobileByStoreApply(@Param("ids") List<String> ids);
+
+    int countCnByExample(@Param("example") StoreApplyExample example);
+
+    List<StoreApply> listCnPageByExample(@Param("example") StoreApplyExample example, @Param("startRow") int startRow, @Param("size") int size);
 }

+ 4 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/seller/StoreReadMapper.java

@@ -11,4 +11,8 @@ import java.util.List;
 public interface StoreReadMapper extends BaseReadMapper<Store, StoreExample> {
 
     List<StoreStatisticsDTO> getStoreStatisticList(@Param("example") StoreExample example);
+
+    int countCnByExample(@Param("example") StoreExample example);
+
+    List<Store> listCnPageByExample(@Param("example") StoreExample example, @Param("startRow") int startRow, @Param("size") int size);
 }

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreApplyModel.java

@@ -116,6 +116,7 @@ public class StoreApplyModel {
             String storeName = siteCategoryInfoDTO.getStoreName().trim();
             if (WebSiteConstant.MEMBER_OVERSEA.equals(siteCategoryInfoDTO.getWebSite())) {
                 StoreApplyExample example = new StoreApplyExample();
+                example.setState(StoreConst.STATE_4_STORE_OPEN);
                 example.setStoreName(storeName);
                 int count = storeApplyReadMapper.countByExample(example);
                 AssertUtil.isTrue(count > 0, "店铺名称已存在");
@@ -714,4 +715,8 @@ public class StoreApplyModel {
         return storeApplyReadMapper.getVendorMobileByStoreApply(ids);
     }
 
+    public List<StoreApply> getStoreApplyCnList(StoreApplyExample example, PagerInfo pager) {
+        pager.setRowsCount(storeApplyReadMapper.countCnByExample(example));
+        return storeApplyReadMapper.listCnPageByExample(example, pager.getStart(), pager.getPageSize());
+    }
 }

+ 26 - 22
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreModel.java

@@ -315,29 +315,28 @@ public class StoreModel {
             throw new MallException("添加店铺表失败,请重试");
         }
 
-        //插入storeName表和 StoreSiteInfo表
-        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(ownStoreAddDTO.getWebSite())) {
-            StoreName storeNameInsert = new StoreName();
-            storeNameInsert.setStoreId(storeId);
-            storeNameInsert.setStoreName(ownStoreAddDTO.getStoreName());
-            storeNameInsert.setWebSite(ownStoreAddDTO.getWebSite());
-            storeNameInsert.setCreateId(0L);
-            storeNameInsert.setCreateTime(new Date());
-            count = storeNameWriteMapper.insert(storeNameInsert);
-            if (count == 0) {
-                throw new MallException("添加店铺名称表失败,请重试");
-            }
-            StoreSiteInfo storeSiteInfo = new StoreSiteInfo();
-            storeSiteInfo.setStoreId(storeId);
-            storeSiteInfo.setWebSite(ownStoreAddDTO.getWebSite());
-            storeSiteInfo.setBusinessState(StoreConst.STORE_BUSINESS_STATE_DECORATION);
-            storeSiteInfo.setCreateId(0L);
-            storeSiteInfo.setCreateTime(new Date());
-            count = storeSiteInfoWriteMapper.insert(storeSiteInfo);
-            if (count == 0) {
-                throw new MallException("添加店铺站点信息表失败,请重试");
-            }
+        //插入storeName表和 StoreSiteInfo表(不管新增国内国外站都默认创建两个站点信息)
+        StoreName storeNameInsert = new StoreName();
+        storeNameInsert.setStoreId(storeId);
+        storeNameInsert.setStoreName(ownStoreAddDTO.getStoreName());
+        storeNameInsert.setWebSite(WebSiteConstant.MEMBER_DISTRIBUTOR);
+        storeNameInsert.setCreateId(0L);
+        storeNameInsert.setCreateTime(new Date());
+        count = storeNameWriteMapper.insert(storeNameInsert);
+        if (count == 0) {
+            throw new MallException("添加店铺名称表失败,请重试");
         }
+        StoreSiteInfo storeSiteInfo = new StoreSiteInfo();
+        storeSiteInfo.setStoreId(storeId);
+        storeSiteInfo.setWebSite(WebSiteConstant.MEMBER_DISTRIBUTOR);
+        storeSiteInfo.setBusinessState(StoreConst.STORE_BUSINESS_STATE_DECORATION);
+        storeSiteInfo.setCreateId(0L);
+        storeSiteInfo.setCreateTime(new Date());
+        count = storeSiteInfoWriteMapper.insert(storeSiteInfo);
+        if (count == 0) {
+            throw new MallException("添加店铺站点信息表失败,请重试");
+        }
+
         //插入vendor表,关联storeId
         Vendor vendor = new Vendor();
 
@@ -1191,4 +1190,9 @@ public class StoreModel {
     public Integer getStoreCount(StoreExample example) {
         return storeReadMapper.countByExample(example);
     }
+
+    public List<Store> getStoreCnList(StoreExample example, PagerInfo pager) {
+        pager.setRowsCount(storeReadMapper.countCnByExample(example));
+        return storeReadMapper.listCnPageByExample(example, pager.getStart(), pager.getPageSize());
+    }
 }

+ 64 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreApplyReadMapper.xml

@@ -240,4 +240,68 @@
       </foreach>
     </if>
   </select>
+    <select id="countCnByExample" resultType="java.lang.Integer">
+      select COUNT(store_apply.apply_id)
+      from store_apply
+      left join store_name on store_apply.store_id = store_name.store_id
+      left join store_site_info on store_name.store_id = store_site_info.store_id
+      <where>
+        <if test="example.storeType != null">
+          and store_apply.store_type = #{example.storeType}
+        </if>
+        <if test="example.vendorNameLike != null">
+          and store_apply.vendor_name like concat('%', #{example.vendorNameLike},'%')
+        </if>
+        <if test="example.state != null">
+          AND store_apply.state = #{example.state}
+        </if>
+        <if test="example.stateNotEquals != null">
+          AND store_apply.state != #{example.stateNotEquals}
+        </if>
+        <if test="example.storeNameLike != null">
+          and store_name.store_name like concat('%',#{example.storeNameLike},'%')
+        </if>
+        <if test="example.storeGradeId != null">
+          and store.site_info.store_grade_id = #{example.storeGradeId}
+        </if>
+      </where>
+    </select>
+  <select id="listCnPageByExample" resultType="com.slodon.b2b2c.seller.pojo.StoreApply">
+    select
+    store_apply.apply_id as applyId,
+    store_apply.vendor_name as vendorName,
+    store_apply.state as state,
+    store_apply.refuse_reason as refuseReason,
+    store_apply.audit_info as auditInfo,
+    store_apply.submit_time as submitTime,
+    store_apply.apply_time as applyTime,
+    store_name.store_name as storeName,
+    store_site_info.store_grade_id as storeGradeId,
+    store_apply.vendor_id as vendorId
+    from store_apply
+    left join store_name on store_apply.store_id = store_name.store_id
+    left join store_site_info on store_name.store_id = store_site_info.store_id
+    <where>
+      <if test="example.storeType != null">
+        and store_apply.store_type = #{example.storeType}
+      </if>
+      <if test="example.vendorNameLike != null">
+        and store_apply.vendor_name like concat('%', #{example.vendorNameLike},'%')
+      </if>
+      <if test="example.state != null">
+        AND store_apply.state = #{example.state}
+      </if>
+      <if test="example.stateNotEquals != null">
+        AND store_apply.state != #{example.stateNotEquals}
+      </if>
+      <if test="example.storeNameLike != null">
+        and store_name.store_name like concat('%',#{example.storeNameLike},'%')
+      </if>
+      <if test="example.storeGradeId != null">
+        and store.site_info.store_grade_id = #{example.storeGradeId}
+      </if>
+    </where>
+    order by store_apply.submit_time desc
+    <include refid="limit"></include>
+  </select>
 </mapper>

+ 4 - 1
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreBindCategoryReadMapper.xml

@@ -88,9 +88,12 @@
         <if test="example.goodsCategoryId3 != null">
           AND `goods_category_id3` = #{example.goodsCategoryId3}
         </if>
-        <if test="example.storeNameLike != null">
+        <if test="example.storeNameLike != null and example.webSite==1">
           AND `store_id` in (select `store_id` from `store` where `store_name` like concat('%',#{example.storeNameLike},'%'))
         </if>
+        <if test="example.storeNameLike != null and example.webSite==2">
+          AND `store_id` in (select `store_id` from `store_name` where `store_name` like concat('%',#{example.storeNameLike},'%') and `web_site` = #{example.webSite})
+        </if>
       </trim>
     </if>
   </sql>

+ 75 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreReadMapper.xml

@@ -339,4 +339,79 @@
       </otherwise>
     </choose>
   </select>
+
+  <select id="countCnByExample" resultType="java.lang.Integer">
+    select COUNT(store_name.store_name)
+    from store
+    left join store_name on store.store_id = store_name.store_id
+    left join store_site_info on store_name.store_id = store_site_info.store_id
+    <where>
+      <if test="example.state != null">
+        and store.state = #{example.state}
+      </if>
+      <if test="example.stateNotEquals != null">
+        and store.state != #{example.stateNotEquals}
+      </if>
+      <if test="example.isOwnStore != null">
+        and store.is_own_store = #{example.isOwnStore}
+      </if>
+      <if test="example.storeNameLike != null">
+        and store_name.store_name like concat('%',#{example.storeNameLike},'%')
+      </if>
+      <if test="example.businessState != null">
+        and store_site_info.business_state = #{example.businessState}
+      </if>
+      <if test="example.storeGradeId != null">
+        and store.site_info.store_grade_id = #{example.storeGradeId}
+      </if>
+    </where>
+  </select>
+
+  <select id="listCnPageByExample" resultType="com.slodon.b2b2c.seller.pojo.Store">
+    select store.store_id as storeId,
+    store_name.store_name as storeName,
+    store_site_info.store_logo as storeLogo,
+    store.state as state,
+    case
+    when store_site_info.business_state is null then 2
+    else store_site_info.business_state
+    end as businessState,
+    store_site_info.store_grade_name as storeGradeName,
+    store_site_info.create_time as createTime,
+    store_site_info.store_expire_time as storeExpireTime,
+    store.bill_type as billType,
+    store.bill_day as billDay,
+    store.service_score as serviceScore,
+    store.deliver_score as deliverScore,
+    store.follow_number as followNumber,
+    store.store_sales_volume as storeSalesVolume,
+    store.is_own_store as isOwnStore,
+    store.store_backdrop as storeBackdrop,
+    store.store_banner_mobile as storeBannerMobile
+    from store
+    left join store_name on store.store_id = store_name.store_id
+    left join store_site_info on store_name.store_id = store_site_info.store_id
+    <where>
+      <if test="example.state != null">
+        and store.state = #{example.state}
+      </if>
+      <if test="example.stateNotEquals != null">
+        and store.state != #{example.stateNotEquals}
+      </if>
+      <if test="example.isOwnStore != null">
+        and store.is_own_store = #{example.isOwnStore}
+      </if>
+      <if test="example.storeNameLike != null">
+        and store_name.store_name like concat('%',#{example.storeNameLike},'%')
+      </if>
+      <if test="example.businessState != null">
+        and store_site_info.business_state = #{example.businessState}
+      </if>
+      <if test="example.storeGradeId != null">
+        and store.site_info.store_grade_id = #{example.storeGradeId}
+      </if>
+    </where>
+    order by store_site_info.update_time desc
+    <include refid="limit"/>
+  </select>
 </mapper>

+ 4 - 4
xinkeaboard-web/pages/member/enquiry/list.vue

@@ -26,7 +26,7 @@
           <el-table-column :label="L['序号']" type="index" :index="indexMethod" width="80"/>
           <el-table-column prop="name" :label="L['姓名']"/>
           <el-table-column v-if="contactType === 'email'" prop="email" :label="L['邮箱']"   />
-          <el-table-column v-if="contactType === 'mobile'" prop="mobile" :label="L['手机号']"   />
+          <el-table-column v-if="contactType === 'mobile'" prop="phone" :label="L['手机号']"   />
           <el-table-column prop="itemType" :label="L['类型']"  >
             <template #default="scope">
               <template v-if="scope.row.itemType == 'GOODS'">
@@ -67,7 +67,7 @@
                   <span>{{ scope.row.email}}</span>
                 </el-form-item>
                 <el-form-item v-if="contactType === 'mobile'" :label="L['手机号']+':'">
-                  <span>{{ scope.row.mobile}}</span>
+                  <span>{{ scope.row.phone}}</span>
                 </el-form-item>
                 <el-form-item :label="L['类型']+':'">
                     <template v-if="scope.row.itemType == 'GOODS'">
@@ -91,9 +91,9 @@
                     -
                   </template>
                 </el-form-item>
-                <el-form-item :label="L['电话']+':'">
+                <!-- <el-form-item :label="L['电话']+':'">
                   <span>{{ scope.row.phoneCode}}-{{scope.row.phone}}</span>
-                </el-form-item>
+                </el-form-item> -->
                 <el-form-item :label="L['公司名称']+':'">
                   <span>{{ scope.row.company }}</span>
                 </el-form-item>

Некоторые файлы не были показаны из-за большого количества измененных файлов