Browse Source

Merge remote-tracking branch 'origin/master'

sunshihao 2 days ago
parent
commit
4eacfe7ceb
100 changed files with 1536 additions and 582 deletions
  1. 2 1
      xinkeaboard-admin/public/UEditor/ueditor.all.js
  2. BIN
      xinkeaboard-admin/src/assets/login/sld_login_bg.png
  3. 2 2
      xinkeaboard-admin/src/components/SldHomeSetting/SldHomeSetting.js
  4. 3 2
      xinkeaboard-admin/src/pages/decorate/pc/diy_page.less
  5. 7 1
      xinkeaboard-admin/src/pages/decorate/pc/home/add_template.js
  6. 4 9
      xinkeaboard-admin/src/pages/decorate/pc/home/adv_04.js
  7. 2 4
      xinkeaboard-admin/src/pages/decorate/pc/home/adv_27.js
  8. 3 3
      xinkeaboard-admin/src/pages/decorate/pc/home/adv_28.js
  9. 11 11
      xinkeaboard-admin/src/pages/decorate/pc/home/adv_29.js
  10. 3 3
      xinkeaboard-admin/src/pages/decorate/pc/home/diy_page_lists.js
  11. 12 5
      xinkeaboard-admin/src/pages/decorate/pc/home/edit_diy_page.js
  12. 37 6
      xinkeaboard-admin/src/pages/decorate/pc/home/edit_diy_page_head.js
  13. 68 17
      xinkeaboard-admin/src/pages/decorate/pc/home/edit_diy_page_head.less
  14. 7 7
      xinkeaboard-admin/src/pages/decorate/pc/home/main_banner_pc.js
  15. 13 3
      xinkeaboard-admin/src/pages/decorate/pc/home/nav.js
  16. 174 98
      xinkeaboard-admin/src/pages/decorate/pc/pcdecorate.less
  17. 12 5
      xinkeaboard-admin/src/pages/manage/article/add_article.js
  18. 2 1
      xinkeaboard-admin/src/utils/utils.js
  19. 2 0
      xinkeaboard-promotion-portal/components.d.ts
  20. 1 0
      xinkeaboard-promotion-portal/package.json
  21. 16 0
      xinkeaboard-promotion-portal/pnpm-lock.yaml
  22. 16 0
      xinkeaboard-promotion-portal/postcss.config.cjs
  23. BIN
      xinkeaboard-promotion-portal/src/assets/images/Search.png
  24. 3 0
      xinkeaboard-promotion-portal/src/assets/styles/theme.scss
  25. 21 0
      xinkeaboard-promotion-portal/src/components/CompetitorWebsite.vue
  26. 60 29
      xinkeaboard-promotion-portal/src/components/CountrySelct.vue
  27. 21 0
      xinkeaboard-promotion-portal/src/components/ProductDescription.vue
  28. 112 17
      xinkeaboard-promotion-portal/src/components/TopContent.vue
  29. 1 0
      xinkeaboard-promotion-portal/src/main.ts
  30. 12 0
      xinkeaboard-promotion-portal/src/types/index.ts
  31. 10 0
      xinkeaboard-promotion-portal/src/utils/api.ts
  32. 1 1
      xinkeaboard-promotion-portal/src/utils/http.ts
  33. 40 43
      xinkeaboard-promotion-portal/src/views/Home.vue
  34. 12 4
      xinkeaboard-promotion-portal/vite.config.ts
  35. BIN
      xinkeaboard-seller/src/assets/login/sld_login_bg.png
  36. 1 1
      xinkeaboard-seller/src/components/SldTableRowThree/index.js
  37. 3 3
      xinkeaboard-seller/src/pages/User/Login.js
  38. 2 1
      xinkeaboard-seller/src/pages/settledManage/businessInfo/index.js
  39. 1 1
      xinkeaboard-seller/src/pages/settledManage/businessInfo/index.less
  40. 1 0
      xinkeaboard-seller/src/pages/store/category.js
  41. 14 6
      xinkeaboard-seller/src/pages/store/pc_diy/adv_02.js
  42. 1 5
      xinkeaboard-seller/src/pages/store/pc_diy/adv_04.js
  43. 27 14
      xinkeaboard-seller/src/pages/store/pc_diy/adv_12.js
  44. 33 18
      xinkeaboard-seller/src/pages/store/pc_diy/adv_13.js
  45. 3 3
      xinkeaboard-seller/src/pages/store/pc_diy/diy_lists.js
  46. 3 2
      xinkeaboard-seller/src/pages/store/pc_diy/diy_page.less
  47. 2 2
      xinkeaboard-seller/src/pages/store/pc_diy/edit_diy_page.js
  48. 3 3
      xinkeaboard-seller/src/pages/store/pc_diy/edit_diy_page_head.js
  49. 58 48
      xinkeaboard-seller/src/pages/store/pc_diy/edit_diy_page_head.less
  50. 135 96
      xinkeaboard-seller/src/pages/store/pc_diy/pcdecorate.less
  51. 2 1
      xinkeaboard-seller/src/utils/utils.js
  52. 53 0
      xinkeaboard-server/b2b2c-core/src/main/java/com/slodon/b2b2c/core/util/HttpClientUtil.java
  53. 1 0
      xinkeaboard-server/b2b2c-core/src/main/resources/i18n_en.properties
  54. 4 0
      xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/seller/example/VendorExample.java
  55. 3 0
      xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/statistics/pojo/base/StoreBase.java
  56. 4 0
      xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/system/pojo/Navigation.java
  57. 4 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/bo/StoreStatsBO.java
  58. 12 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/config/ProductConfig.java
  59. 19 4
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/admin/GoodsController.java
  60. 1 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/front/FrontGoodsCategoryController.java
  61. 40 22
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/front/GoodsDetailsController.java
  62. 5 3
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/seller/GoodsSellerController.java
  63. 12 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/MemberFollowStoreController.java
  64. 4 3
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/advich/MemberEmailActiveController.java
  65. 13 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/advich/MemberEnquiryController.java
  66. 9 11
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminStoreAuditController.java
  67. 10 8
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/admin/AdminStoreController.java
  68. 4 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/front/FrontStoreController.java
  69. 1 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/seller/SellerApplyController.java
  70. 4 4
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/seller/SellerStoreProfileController.java
  71. 2 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/statistics/seller/SellerEnquiryAnalysisController.java
  72. 19 14
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/statistics/seller/SellerOverviewController.java
  73. 6 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/AdminNavigationController.java
  74. 1 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/AdminPcDecoController.java
  75. 1 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/AdminSettingController.java
  76. 6 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/front/FrontPcDecoController.java
  77. 23 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsModel.java
  78. 67 5
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsSellerModel.java
  79. 82 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/ProductModel.java
  80. 23 3
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreModel.java
  81. 2 4
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreProfileTextListModel.java
  82. 16 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/util/SellerPresentDataUtil.java
  83. 5 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/member/CountryPhoneCodeVO.java
  84. 6 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/member/MemberEnquiryVO.java
  85. 1 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/seller/StoreApplyVO.java
  86. 1 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/GoodsOverviewVO.java
  87. 3 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/MovableGoodsVO.java
  88. 4 4
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/SellerPresentIndexVO.java
  89. 5 0
      xinkeaboard-server/b2b2c-web/src/main/resources/application-dev.yml
  90. 25 0
      xinkeaboard-server/b2b2c-web/src/main/resources/application-prod.yml
  91. 25 0
      xinkeaboard-server/b2b2c-web/src/main/resources/application-test.yml
  92. 2 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/member/MemberEnquiryReadMapper.xml
  93. 10 4
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/seller/StoreReadMapper.xml
  94. 4 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreDayReadMapper.xml
  95. 2 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreHourReadMapper.xml
  96. 2 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreMonthReadMapper.xml
  97. 1 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreWeekReadMapper.xml
  98. 1 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreYearReadMapper.xml
  99. 2 1
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/system/NavigationReadMapper.xml
  100. 7 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/write/statistics/StoreDayWriteMapper.xml

+ 2 - 1
xinkeaboard-admin/public/UEditor/ueditor.all.js

@@ -29826,7 +29826,7 @@
                 function setCount(editor, ui) {
                     editor.setOpt({
                         wordCount: true,
-                        maximumWords: 10000,
+                        maximumWords: 1000000,
                         wordCountMsg: editor.options.wordCountMsg || editor.getLang("wordCountMsg"),
                         wordOverFlowMsg: editor.options.wordOverFlowMsg || editor.getLang("wordOverFlowMsg")
                     });
@@ -29839,6 +29839,7 @@
                         return;
                     }
                     var count = editor.getContentLength(true);
+                    console.log(count, 'count')
                     if (count > max) {
                         countDom.innerHTML = errMsg;
                         editor.fireEvent("wordcountoverflow");

BIN
xinkeaboard-admin/src/assets/login/sld_login_bg.png


+ 2 - 2
xinkeaboard-admin/src/components/SldHomeSetting/SldHomeSetting.js

@@ -49,8 +49,8 @@ export default class SldHomeSetting extends Component {
       data: [{
         key: 'img',
         name: '',
-        value: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
-        imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
+        value: '',
+        imgPath: '',
         type: 'img',
         required: true,
       }, {

+ 3 - 2
xinkeaboard-admin/src/pages/decorate/pc/diy_page.less

@@ -13,7 +13,8 @@
 .allow_show_sld_mask {
   div[class=ant-carousel]{
     div[class=slick-list]{
-      max-height: 457px;
+      // max-height: 457px;
+      height: 100%;
     }
   }
   .sld_web_item_hover {
@@ -445,7 +446,7 @@
   z-index: 12;
   width: 100vw;
   height: 48px;
-  background: linear-gradient(90deg, #FF5216 0%, #FF8A39 100%);
+  background: @theme-linear;
   padding-left: calc(50vw - 605px);
   padding-right: calc(50vw - 605px);
   .left{

+ 7 - 1
xinkeaboard-admin/src/pages/decorate/pc/home/add_template.js

@@ -57,7 +57,12 @@ export default class Add_template extends Component {
 
 
 	componentDidMount() {
-
+		const pc_diy_tpl_data = sldEmptyHandle2(localStorage.getItem('pc_diy_tpl')) != '' ? JSON.parse(localStorage.getItem('pc_diy_tpl')) : '';
+		if (pc_diy_tpl_data.json.type === 'adv_28') {
+			pc_diy_tpl_data.json.left.width = 348;
+		    pc_diy_tpl_data.json.left.height = 654;
+		}
+		this.setState({data: pc_diy_tpl_data})
 	}
 
 	componentWillUnmount() {
@@ -94,6 +99,7 @@ export default class Add_template extends Component {
 
 	render() {
 		const { data } = this.state;
+		console.log(data, '=-=-=')
 		let data_json = data.json;
 		return (
 			<div className={`${global.common_page} ${styles.allow_show_edit}`}>

+ 4 - 9
xinkeaboard-admin/src/pages/decorate/pc/home/adv_04.js

@@ -210,12 +210,9 @@ export default class Adv_04 extends Component {
                 <span>{sldComLanguage('编辑')}</span>
               </div>
               <h2>
-                <font
-                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
+               
                 <span
                   style={data.title_info.title_color != '' ? { color: data.title_info.title_color } : null}>{data.title_info.title_name != '' ? data.title_info.title_name : `${sldComLanguage('请填写标题')}`}</span>
-                <font
-                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
               </h2>
             </div>
             <div className={styles.floor_goods}>
@@ -246,18 +243,16 @@ export default class Adv_04 extends Component {
               data.data.goods_data.map((item) => {
                 return <div key={item.id} className={styles.item}>
                   <div className={styles.wrap}>
-                    <a href="javascript:;" className={styles.example_text}>
-                      <img src={item.mainImage}/>
-                    </a>
+                    <img src={item.mainImage}/>
                     <p className={styles.title}>
                       <a href="javascript:;" title={item.goodsName}>{item.goodsName}</a>
                     </p>
-                    <p className={styles.price}>
+                    {/* <p className={styles.price}> */}
                       {/*<span className={styles.second_color}>{sldComLanguage('¥')}<span*/}
                       {/*  className={styles.money_number}>{item.goodsPrice}</span>*/}
                       {/*</span>*/}
                       {/*<span className={styles.second_color}><span className={styles.money_number}>{item.goodsMoney}</span></span>*/}
-                    </p>
+                    {/* </p> */}
                   </div>
                 </div>;
               })

+ 2 - 4
xinkeaboard-admin/src/pages/decorate/pc/home/adv_27.js

@@ -210,12 +210,10 @@ export default class Adv_27 extends Component {
                 <span>{sldComLanguage('编辑')}</span>
               </div>
               <h2>
-                <font
-                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
+               
                 <span
                   style={data.title_info.title_color != '' ? { color: data.title_info.title_color } : null}>{data.title_info.title_name != '' ? data.title_info.title_name : `${sldComLanguage('请填写标题')}`}</span>
-                <font
-                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
+               
               </h2>
             </div>
             <div className={styles.floor_goods}>

+ 3 - 3
xinkeaboard-admin/src/pages/decorate/pc/home/adv_28.js

@@ -85,8 +85,8 @@ export default class Adv_28 extends Component {
         },
         left: {
           type: 'img_cat',
-          width: 300,
-          height: 386,
+          width: 348,
+          height: 654,
           data: {
             imgUrl: '',
             imgPath: '',
@@ -314,7 +314,7 @@ export default class Adv_28 extends Component {
                       :
                       <Fragment>
                         <div className={`${styles.industry_theme_image_example_text}`}>
-                          <span>{sldComLanguage('此处添加【300*386】图片')}</span>
+                          <span>{sldComLanguage('此处添加【348*654】图片')}</span>
                         </div>
                       </Fragment>}
 

+ 11 - 11
xinkeaboard-admin/src/pages/decorate/pc/home/adv_29.js

@@ -60,8 +60,8 @@ export default class Adv_29 extends Component {
         },//上方两个标题
         left: {
           type: 'img_cat',
-          width: '1210',
-          height: '330',
+          width: '1440',
+          height: '654',
           data: {
             imgUrl: '',
             imgPath: '',
@@ -272,13 +272,13 @@ export default class Adv_29 extends Component {
                 </Fragment>
                 :
                 <Fragment>
-                  <span>{sldComLanguage('此处添加【1210*330】图片')}</span>
+                  <span>{sldComLanguage('此处添加【1440*654】图片')}</span>
                 </Fragment>}
             </div>
             <div className={`${styles.sourcing_centent}`}>
               <div className={`${styles.sourcing_form}`}>
                 <div className={`${styles.form_title}`}>Want to get quotations?</div>
-                <div class="form" style={{width:'100%'}}>
+                <div class="form" style={{width:'531px'}}>
                   <Form
                     name="basic"
                   >
@@ -287,7 +287,7 @@ export default class Adv_29 extends Component {
                       name=""
                       rules={[{ required: true, message: 'Please enter your username!' }]}
                     >
-                      <Input placeholder="Please enter name" style={{width:'100%'}}/>
+                      <Input placeholder="Please enter name" style={{width:'100%', height: '48px'}}/>
                     </Form.Item>
 
                     <Form.Item
@@ -295,7 +295,7 @@ export default class Adv_29 extends Component {
                       name=""
                       rules={[{ required: true, message: 'Please enter your email!' }]}
                     >
-                      <Input placeholder="Please enter email" style={{width:'100%'}}/>
+                      <Input placeholder="Please enter email" style={{width:'100%', height: '48px'}}/>
                     </Form.Item>
 
                     <Form.Item
@@ -303,15 +303,15 @@ export default class Adv_29 extends Component {
                       name=""
                       rules={[{ required: true, message: 'Please enter quantity!' }]}
                     >
-                      <Input placeholder="Please enter quantity" style={{width:'100%'}}/>
+                      <Input placeholder="Please enter quantity" style={{width:'100%', height: '48px'}}/>
                     </Form.Item>
 
                     <Form.Item label="" style={{margin_bottom:'8px'}}>
-                      <TextArea rows={6} placeholder="Please enter Message" style={{width:'100%'}}/>
+                      <TextArea rows={6} placeholder="Please enter Message" style={{width:'100%', height: '148px'}}/>
                     </Form.Item>
 
                       <Form.Item >
-                      <Button type="primary" htmlType="submit" style={{ width: '200px' }}>
+                      <Button type="primary" htmlType="submit" style={{ width: '200px', height: '42px', fontWeight: 'bold', fontSize: '14px',color: '#FFFFFF', marginTop: '20px' }}>
                         Post Your Request Now
                       </Button>
                     </Form.Item>
@@ -333,7 +333,7 @@ export default class Adv_29 extends Component {
                 </div>
               </div>
 
-              <div className={`${styles.sourcing_desc}`}>
+              <div className={`${styles.sourcing_desc}`} style={{ position: 'absolute', bottom: '80px' }}>
                 <div className={`${styles.pr}`}>
                   <div className={styles.sld_mask}
                        onClick={() => this.editTpl('center', `左侧子标题设置`, [`${sldComLanguage('子标题不能为空,最多输入40个字')}`])}>
@@ -353,7 +353,7 @@ export default class Adv_29 extends Component {
               {/*    Learn More <i class="ob-icon icon-right">></i>*/}
               {/*  </a>*/}
               {/*</div>*/}
-              <div className={`${styles.pr}`}>
+              <div className={`${styles.pr}`} style={{ position: 'absolute', bottom: '30px' }}>
                 <div className={styles.sld_mask}
                      onClick={() => this.editTpl('btn', `${sldComLanguage('左侧按钮设置')}`)}>
                   <span>{sldComLanguage('编辑')}</span>

+ 3 - 3
xinkeaboard-admin/src/pages/decorate/pc/home/diy_page_lists.js

@@ -25,8 +25,8 @@ import Search from '@/components/Search/Search';
 import defaultSettings from '@/defaultSettings';
 
 let pageSize = list_com_page_size_10;
-@connect(({ product }) => ({
-  product,
+@connect(({ product, global }) => ({
+  product,global
 }))
 @Form.create()
 export default class Diy_page_lists extends Component {
@@ -138,7 +138,7 @@ export default class Diy_page_lists extends Component {
           width: 100,
           render: (text, record) => (
             <Fragment>
-              <Link to={{ pathname: `/decorate_pc/diy_page_lists_to_edit`, search: `?id=${record.decoId}&type=index` }}
+              <Link to={{ pathname: `/decorate_pc/diy_page_lists_to_edit`, search: `?id=${record.decoId}&type=index&webSite=${props.global.currentSite}` }}
                     target="_blank">
                 {
                   sldtbaleOpeBtnText(`${sldComLanguage('装修')}`, null)

+ 12 - 5
xinkeaboard-admin/src/pages/decorate/pc/home/edit_diy_page.js

@@ -287,9 +287,13 @@ export default class Edit_diy_page extends Component {
         if (res.state == 200) {
           let tmp = res.data.data ? JSON.parse(res.data.data.replace(/&quot;/g,"\"")) : [];
           if (tmp.length > 0) {
-            tmp.map((val, key) => {
+            tmp.forEach((val, key) => {
               val.id = key + 1;
               val.data = val.json;
+              if (val.json.type === 'adv_28') {
+                val.data.left.width = 348;
+                val.data.left.height = 654;
+              }
             });
           }
           data = [];
@@ -298,7 +302,7 @@ export default class Edit_diy_page extends Component {
               data: [],
               type: 'main_banner',
               width: 1920,
-              height: 457,//高度为0的话表示不限制
+              height: 520,//高度为0的话表示不限制
               admin_show_width: 320,
               admin_show_height: 76,
             },
@@ -306,7 +310,10 @@ export default class Edit_diy_page extends Component {
           if(tmp.length > 0){
             data = tmp.filter((item, index) => index > 0);
             main_swiper_data = tmp[0];//主轮播数据
+            main_swiper_data.data.info.carousel_info.width = 1920;
+            main_swiper_data.data.info.carousel_info.height = 520;
           }
+          // debugger;
           this.setState({
             data, //楼层数据
             curData: res.data,
@@ -680,7 +687,7 @@ export default class Edit_diy_page extends Component {
         {/*  </div>*/}
         {/*</div>*/}
 
-        <div style={{ position: 'relative', width: '100%', height: 306, background: '#fff' }}
+        <div style={{ position: 'relative', width: '100%', height: 520, background: '#fff' }}
              className={`${styles.allow_show_edit}`}>
           <div style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, zIndex: 4 }}>
             <MainBannerPC tpl_info={main_swiper_data.data} save_tpl_data={this.save_main_banner_data}/>
@@ -770,9 +777,9 @@ export default class Edit_diy_page extends Component {
                               <div className={`${global.flex_row_between_start}`}>
                                 <div className={diy.instance_tpl_name}>{item.data.insTplName!=undefined&&item.data.insTplName?item.data.insTplName:''}</div>
                                 <a className={diy.top_add}
-                                   onClick={() => this.addTplData('top', item.id)}>{sldSvgIcon('#ff7e28', 19, 19, 'jia')}</a>
+                                   onClick={() => this.addTplData('top', item.id)}>{sldSvgIcon('#036EB8', 19, 19, 'jia')}</a>
                                 <a className={diy.bottom_add}
-                                   onClick={() => this.addTplData('bottom', item.id)}>{sldSvgIcon('#ff7e28', 19, 19, 'jia')}</a>
+                                   onClick={() => this.addTplData('bottom', item.id)}>{sldSvgIcon('#036EB8', 19, 19, 'jia')}</a>
                                 <div className={global.flex_row_end_start} style={{position:'absolute',right:0,top:-30, borderRadius: '3px 3px 0 0',overflow:'hidden',zIndex:4}}>
                                   <div className={`${global.flex_row_center_center} ${diy.opt} ${diy.up}`}
                                        onClick={() => this.handleFloorStyle(item)}>

+ 37 - 6
xinkeaboard-admin/src/pages/decorate/pc/home/edit_diy_page_head.js

@@ -25,6 +25,7 @@ export default class EditDdiyPageHead extends Component {
       hot_search_words: [],//热搜词
       mall_logo: '',//商城logo
       nav_list: [],//导航列表
+      cat_nav: [],
     };
   }
 
@@ -32,6 +33,7 @@ export default class EditDdiyPageHead extends Component {
   componentDidMount() {
     this.get_base_setting();//获取基本配置信息
     this.get_nav_list();//获取导航列表
+    this.get_cat();
   }
 
   //获取基本配置信息
@@ -65,7 +67,7 @@ export default class EditDdiyPageHead extends Component {
     const { dispatch } = this.props;
     dispatch({
       type: 'pc_home/get_home_nav_list',
-      payload: { pageSize: 30 },
+      payload: { pageSize: 30, isShow: 1 },
       callback: (res) => {
         if (res.state == 200) {
           this.setState({ nav_list: res.data.list });
@@ -74,9 +76,25 @@ export default class EditDdiyPageHead extends Component {
     });
   };
 
+  //获取一级分类,用于左侧分类导航展示数据
+  get_cat = () => {
+    const { dispatch } = this.props;
+    let { cat_nav } = this.state;
+    dispatch({
+      type: 'project/get_cate_2_tree_list',
+      payload: { pId: 0, grade: 1 },
+      callback: (res) => {
+        if (res.state == 200) {
+          cat_nav = res.data;
+          this.setState({ cat_nav });
+        }
+      },
+    });
+  };
+
 
   render() {
-    const { hot_search_words, mall_logo, nav_list } = this.state;
+    const { hot_search_words, mall_logo, nav_list, cat_nav } = this.state;
     return (
       <Fragment>
         {/* 最顶部 start */}
@@ -147,21 +165,21 @@ export default class EditDdiyPageHead extends Component {
                        placeholder={sldComLanguage('请输入关键词')}/>
                 <input type="submit" value={sldComLanguage('搜索')} className={styles.button}/>
               </div>
-              <div className={styles.hot_search_wrap}>
+              {/* <div className={styles.hot_search_wrap}>
                 <div>
                   {hot_search_words.length && hot_search_words.map((item, index) => {
                     return <a key={index} onClick={(e) => e.preventDefault()}>{item}</a>;
                   })
                   }
                 </div>
-              </div>
+              </div> */}
             </div>
           </div>
           <div className={styles.sld_cart_wrap}>
             <dl class>
               <dt className={`${styles.ld} ${styles.cart_icon_text_wrap}`}
                   style={{ borderBottom: '1px solid rgb(239, 239, 239)' }}>
-                <span className={styles.iconfont}>{sldSvgIcon('#e2231a',16,16,'youxiang')}</span>
+                <span className={styles.iconfont}>{sldSvgIcon('#036EB8',16,16,'youxiang')}</span>
                 <a onClick={(e) => e.preventDefault()}>{sldComLanguage('发布需求')}</a>
                 {/*<div className={styles.cart_goods_num}>0</div>*/}
               </dt>
@@ -176,9 +194,22 @@ export default class EditDdiyPageHead extends Component {
             <div className={styles.product_sort}>
               <img src={require('@/assets/pc_diy_top_all_cat_icon.png')}/>
               <span className={styles.sort}>{sldComLanguage('产品分类')}</span>
+              <div className={`${styles.s1}`}>
+                <div className={`${styles.category_sort}`}>
+                    <ul className={`${styles.menu_wrap}`}>
+                      {cat_nav.map((item, index) => (
+                        <li className={`${styles.menu_item}`}>
+                          <a key={index} className={`${styles.first_cat}`} onClick={(e) => e.preventDefault()}>
+                            {item.categoryName}
+                          </a>
+                        </li>
+                      ))}
+                    </ul>
+                </div>
+              </div>
             </div>
             <nav>
-              <li><a onClick={(e) => e.preventDefault()}>{sldComLanguage('首页')}</a></li>
+              {/* <li><a onClick={(e) => e.preventDefault()}>{sldComLanguage('首页')}</a></li> */}
               {nav_list.length && nav_list.map((item, index) => {
                 return <li key={index}><a onClick={(e) => e.preventDefault()}>{item.navName}</a></li>;
               })}

+ 68 - 17
xinkeaboard-admin/src/pages/decorate/pc/home/edit_diy_page_head.less

@@ -1,4 +1,5 @@
 @import '~antd/lib/style/themes/default.less';
+@import "../../../../themeColor.less";
 
 .header_wrap {
   width: 100%;
@@ -9,7 +10,7 @@
   justify-content: center;
 
   .header {
-    width: 1210px;
+    width: 1440px;
     height: 33px;
     display: flex;
     justify-content: space-between;
@@ -169,7 +170,7 @@
   height: 99px;
   position: relative;
   z-index: 12;
-  width: 1210px;
+  width: 1440px;
   margin: 0 auto 15px;
   padding-left: 0px;
   padding-right: 0px;
@@ -208,10 +209,10 @@
       z-index: 11;
       height: 38px;
       margin-bottom: 3px;
-      border: 2px solid #e2231a;
+      border: 2px solid @theme-color;
 
       .form {
-        background-color: #e2231a;
+        background-color: @theme-color;
         height: 34px;
         overflow: hidden;
 
@@ -239,7 +240,7 @@
 
         .button {
           width: 103px;
-          background: #e2231a;
+          background: @theme-color;
           font-size: 16px;
           font-weight: 600;
           color: #fff;
@@ -270,7 +271,7 @@
           }
 
           &:hover {
-            color: #e2231a;
+            color: @theme-color;
           }
         }
       }
@@ -292,7 +293,7 @@
       .cart_goods_num {
         font: 11px/16px Verdana;
         color: #fff;
-        background: #e2231a;
+        background: @theme-color;
         text-align: center;
         display: inline-block;
         height: 16px;
@@ -315,7 +316,7 @@
         .iconfont {
           display: inline-block;
           margin: 0 13px 0 12px;
-          color: #e2231a;
+          color: @theme-color;
           font-weight: 600;
           vertical-align: bottom;
           font-size: 17px;
@@ -478,7 +479,7 @@
             margin-top: 10px;
 
             &:hover {
-              color: #e2231a;
+              color: @theme-color;
             }
           }
         }
@@ -508,7 +509,7 @@
         height: 44px;
         text-align: center;
         color: #fff;
-        background-color: #f30213;
+        background-color: @theme-color;
         line-height: 44px;
         cursor: pointer;
       }
@@ -516,7 +517,7 @@
   }
 }
 .header {
-  width: 1210px;
+  width: 1440px;
   height: 37px;
   margin: 0 auto;
   display: flex;
@@ -527,7 +528,7 @@
     overflow: visible;
     width: 187px;
     height: 100%;
-    background: #e2231a;
+    background: @theme-color;
     color: #fff;
     font-size: 15px;
     letter-spacing: 3px;
@@ -541,7 +542,7 @@
     padding: 0 50px 0 26px;
 
     &:hover {
-      #category_sort {
+      .s1 {
         display: block;
       }
     }
@@ -550,11 +551,61 @@
       width: 12px;
       height: 12px;
     }
+
+    .s1 {
+      display: none;
+      width: 187px;
+      z-index: 999;
+      position: absolute;
+      top: 38px;
+      left: 0;
+
+      .category_sort {
+        box-sizing: border-box;
+        height: 306px;
+        width: max-content;
+        //z-index: 9;
+        box-shadow: -1px 5px 10px 0px #ddd;
+      }
+
+      .menu_wrap {
+        background-color: #fff;
+
+      }
+
+      .menu_item {
+        border-left: 3px solid transparent;
+        //height: 38px;
+        line-height: 38px;
+
+        &:hover {
+          border-left-color: @theme-color;
+        }
+      }
+
+      .first_cat {
+        display: block;
+        font-size: 14px;
+        letter-spacing: normal;
+        overflow: hidden;
+        padding: 0 10px 0 15px;
+        position: relative;
+        text-overflow: ellipsis;
+        width: 100%;
+
+        &:hover {
+          background-color: @theme-color;
+          color: #fff;
+        }
+      }
+    }
+
+    
   }
 
   nav {
-    width: 1013px;
-    height: 30px;
+    width: 100%;
+    height: 100%;
     margin-left: 8px;
     display: flex;
     align-items: center;
@@ -575,8 +626,8 @@
     }
 
     a:hover {
-      color: #e2231a;
-      border-bottom: 3px solid #e2231a;
+      color: @theme-color;
+      border-bottom: 3px solid @theme-color;
     }
   }
 }

+ 7 - 7
xinkeaboard-admin/src/pages/decorate/pc/home/main_banner_pc.js

@@ -47,8 +47,8 @@ export default class MainBannerPc extends Component {
         type: 'main_banner_pc',
         info: {
           carousel_info: {
-            width: 780,
-            height: 306,//高度为0的话表示不限制
+            width: 1920,
+            height: 520,//高度为0的话表示不限制
             admin_show_width: 320,
             admin_show_height: 76,
             data: [{
@@ -311,7 +311,7 @@ export default class MainBannerPc extends Component {
           <div className={`${styles.w_sld_react_1210} ${styles.adv_30}`}>
             <div className={`${styles.adv_30_wrap}`}>
               <div className={`${styles.home_slider}`}>
-                <div className={`${styles.s1}`}>
+                {/* <div className={`${styles.s1}`}>
                   <div className={`${styles.category_sort}`}>
                     <ul className={`${styles.menu_wrap}`}>
                       {cat_nav.map((item, index) => (
@@ -323,12 +323,12 @@ export default class MainBannerPc extends Component {
                       ))}
                     </ul>
                   </div>
-                </div>
+                </div> */}
 
                 <div className={`${styles.s2}`}>
                   <div className={`${styles.scroller}`}>
                     {banner_data.info.carousel_info.data.length > 0 &&
-                    <Carousel autoplay>
+                    <Carousel>
                       {banner_data.info.carousel_info.data.map((item, index) => (
                         <div key={index} className={`${styles.adv_01_wrap} ${styles.main_banner_item_wrap}`}
                              style={{ width: 1210 }}>
@@ -358,7 +358,7 @@ export default class MainBannerPc extends Component {
                   </div>
                 </div>
 
-                <div className={`${styles.s3}`}>
+                {/* <div className={`${styles.s3}`}>
                   <div className={`${styles.cr_user_card}`} style={{ marginTop: '0' }}>
                     <div className={styles.sld_mask}
                          onClick={() => this.editTpl2('left', `右侧标题设置`, [`${sldComLanguage('标题不能为空,最多输入20个字')}`])}>
@@ -390,7 +390,7 @@ export default class MainBannerPc extends Component {
                     })
                     }
                   </div>
-                </div>
+                </div> */}
 
 
               </div>

+ 13 - 3
xinkeaboard-admin/src/pages/decorate/pc/home/nav.js

@@ -141,7 +141,14 @@ export default class Nav extends Component {
             return <Switch checked={text == 1 ? true : false}
                            onChange={(val) => this.handleSetEnable(val, record.navId)}/>;
           },
-        }, {
+        }, 
+        {
+          title: `${sldComLanguage('创建时间')}`,
+          dataIndex: 'createTime',
+          align: 'center',
+          width: 160,
+        },
+        {
           title: `${sldComLanguage('操作')}`,
           align: 'center',
           width: 100,
@@ -383,7 +390,10 @@ export default class Nav extends Component {
     const { dispatch } = this.props;
     dispatch({
       type: 'pc_home/get_home_nav_list',
-      payload: params,
+      payload:  {
+        ...params,
+        isShow: 1
+      },
       callback: (res) => {
         this.setState({ initLoading: false });
         if (res.state == 200) {
@@ -537,7 +547,7 @@ export default class Nav extends Component {
           type={2}
           title={sldComLanguage('首页导航设置')}//首页导航设置
           tip_title={sldComLanguage('操作提示')}
-          tip_data={[`${sldComLanguage('序越小,显示越靠前')}`, `${sldComLanguage('PC商城首页展示一行,超出部分不展示,需要根据页面效果调整展示的数据')}`]}
+          tip_data={[`${sldComLanguage('序越小,显示越靠前;排序相同,最新创建的在前。')}`, `${sldComLanguage('PC商城首页展示一行,超出部分不展示,需要根据页面效果调整展示的数据')}`]}
         />
         <div className={global.operate_bg}>
           {sldIconBtn(() => this.addNav(), `${sldComLanguage('添加导航')}`, 7, 7)}{/*添加导航*/}

+ 174 - 98
xinkeaboard-admin/src/pages/decorate/pc/pcdecorate.less

@@ -40,7 +40,7 @@ a {
 }
 
 .adv_01_wrap {
-  width: 1210px;
+  width: 1440px;
   background: #EFEFEF;
   display: flex;
   flex-direction: row;
@@ -50,7 +50,7 @@ a {
 }
 
 .main_banner_item_wrap{
-  height: 306px;
+  height: 520px;
 }
 
 .flash_wrap {
@@ -132,9 +132,10 @@ a {
 }
 
 .adv_01_img {
-  max-width: 100%;
-  max-height: 100%;
-  height: 306px;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  // height: 306px;
 }
 
 .modal_tip_color {
@@ -154,7 +155,7 @@ a {
 }
 
 .adv_02_part {
-  width: 1210px;
+  width: 1440px;
   height: 344px;
   background: #fff;
   display: flex;
@@ -423,12 +424,13 @@ a {
 
 /* adv_04-start */
 .w_sld_react_1210 {
-  width: 1210px;
+  width: 1440px;
   margin: 0 auto;
 }
 
 .adv_04_wrap {
   height: auto;
+  width: 1430px;
   min-height: 374px;
 }
 
@@ -443,7 +445,7 @@ a {
 .adv_04_wrap .floor_title h2 {
   width: 100%;
   line-height: 35px;
-  text-align: center;
+  // text-align: center;
   margin: 0 auto;
   font-size: 28px;
   color: #333;
@@ -482,34 +484,47 @@ a {
 
 .adv_04_wrap .floor_goods .item {
   float: left;
-  width: 234px;
-  height: 310px;
-  margin: 0 10px 10px 0;
-  padding: 24px 31px 26px 31px;
+  width: 286px;
+  height: 326px;
+  // margin: 0 10px 10px 0;
+  // padding: 24px 31px 26px 31px;
   background-color: #FFF;
 }
 
-.adv_04_wrap .floor_goods .item:nth-child(5n+5) {
-  margin-right: 0 !important;
+.adv_04_wrap .floor_goods .item:nth-child(n + 6) {
+  border-bottom: 1px solid #f2f2f2;
+}
+.adv_04_wrap .floor_goods .item:nth-child(-n + 6) {
+  border-top: 1px solid #f2f2f2;
+  border-bottom: 1px solid #f2f2f2;
+}
+
+.adv_04_wrap .floor_goods .item {
+  border-right: 1px solid #f2f2f2;
 }
 
 .adv_04_wrap .floor_goods .item .wrap {
-  width: 172px;
-  text-align: center;
-  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
+  // text-align: center;
+  // margin: 0 auto;
   font-size: 14px;
   position: relative;
 }
 
 .adv_04_wrap .floor_goods .item .wrap img {
-  width: 170px;
-  height: 170px;
+  width: 232px;
+  height: 232px;
   display: block;
 }
 
 .adv_04_wrap .floor_goods .item .wrap .example_text {
-  width: 170px;
-  height: 170px;
+  width: 232px;
+  height: 232px;
   display: block;
   color: #777;
   text-align: center;
@@ -529,10 +544,13 @@ a {
 }
 
 .adv_04_wrap .floor_goods .item .wrap .title {
-  margin: 26px 0 18px 0;
-  max-height: 38px;
-  height: 38px;
+  margin-top: 10px;
+  font-weight: bold;
+  font-size: 16px;
+  color: #282E30;
+  line-height: 22px;
   overflow: hidden;
+  text-align: center;
   text-overflow: ellipsis;
   display: -webkit-box;
   -webkit-line-clamp: 2;
@@ -540,7 +558,6 @@ a {
   -webkit-box-orient: vertical;
   word-wrap: break-word;
   word-break: normal;
-  display: inline-block;
 }
 
 .adv_04_wrap .floor_goods .item .wrap .title a {
@@ -1810,7 +1827,7 @@ a {
   overflow: hidden;
 }
 .adv_15 .adv_15_wrap .top_title {
-  width: 1210px;
+  width: 1440px;
   height: 40px;
   line-height: 40px;
   border-style: solid;
@@ -2276,7 +2293,7 @@ a {
 }
 
 .com_1210_center{
-  width: 1210px;
+  width: 1440px;
   margin: 0 auto;
 }
 
@@ -2315,7 +2332,7 @@ a {
 .adv_27_wrap .floor_title h2 {
   width: 100%;
   line-height: 35px;
-  text-align: center;
+  // text-align: center;
   margin: 0 auto;
   font-size: 28px;
   color: #333;
@@ -2354,34 +2371,53 @@ a {
 
 .adv_27_wrap .floor_goods .item {
   float: left;
-  width: 234px;
-  height: 310px;
-  margin: 0 10px 10px 0;
+  width: 286px;
+  height: 326px;
+  // height: 310px;
+  // margin: 0 10px 10px 0;
   padding: 24px 31px 26px 31px;
   background-color: #FFF;
 }
 
-.adv_27_wrap .floor_goods .item:nth-child(5n+5) {
-  margin-right: 0 !important;
+.adv_27_wrap .floor_goods .item:nth-child(n + 6) {
+  border-bottom: 1px solid #f2f2f2;
+}
+
+.adv_27_wrap .floor_goods .item:nth-child(-n + 6) {
+  border-top: 1px solid #f2f2f2;
+  border-bottom: 1px solid #f2f2f2;
+}
+
+.adv_27_wrap .floor_goods .item:nth-child(5n + 1) {
+  // border-left: 1px solid #f2f2f2;
+}
+
+
+
+.adv_27_wrap .floor_goods .item {
+  border-right: 1px solid #f2f2f2;
 }
 
 .adv_27_wrap .floor_goods .item .wrap {
-  width: 172px;
-  text-align: center;
-  margin: 0 auto;
+  display: flex;
+  flex-direction:column;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
   font-size: 14px;
   position: relative;
 }
 
 .adv_27_wrap .floor_goods .item .wrap img {
-  width: 170px;
-  height: 170px;
+  width: 100%;
+  height: 100%;
   display: block;
 }
 
 .adv_27_wrap .floor_goods .item .wrap .example_text {
-  width: 170px;
-  height: 170px;
+  width: 232px;
+  height: 232px;
   display: block;
   color: #777;
   text-align: center;
@@ -2401,9 +2437,10 @@ a {
 }
 
 .adv_27_wrap .floor_goods .item .wrap .title {
-  margin: 26px 0 18px 0;
-  max-height: 38px;
-  height: 38px;
+  font-weight: bold;
+  font-size: 14px;
+  color: #282E30;
+  height: 44px;
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
@@ -2413,6 +2450,8 @@ a {
   word-wrap: break-word;
   word-break: normal;
   display: inline-block;
+  text-align: center;
+  margin-top: 20px;
 }
 
 .adv_27_wrap .floor_goods .item .wrap .title a {
@@ -2459,7 +2498,8 @@ a {
 .adv_28 .adv_28_wrap .industry_banner {
   position: relative;
   box-sizing: border-box;
-  width: 300px;
+  width: 348px;
+  height: 654px;
   overflow: hidden;
 }
 
@@ -2478,32 +2518,41 @@ a {
 }
 
 .adv_28 .adv_28_wrap .industry_products .prod_item {
+  width: 272px;
+  height: 326px;
   position: relative;
   box-sizing: border-box;
   border: 1px solid #e6ecf2;
   border-left: 0;
   border-top: 0;
-  width: 25%;
+  // width: 25%;
 }
 
 .adv_28 .adv_28_wrap .industry_products .prod_item:hover .pic-inr{
+  
   opacity: .5;
   color: #00985e;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .prod_inr {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
   position: relative;
   display: block;
   padding: 15px;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .prod_txt {
-  font-size: 13px;
-  line-height: 24px;
-  height: 48px;
-  color: #555;
+  font-weight: bold;
+  font-size: 14px;
+  color: #282E30;
   display: -webkit-box;
   overflow: hidden;
+  margin-top: 20px;
   -webkit-line-clamp: 2;
   -webkit-box-orient: vertical;
   word-wrap: break-word;
@@ -2514,14 +2563,15 @@ a {
 }
 
 .adv_28 .adv_28_wrap .industry_booth .prod_pic {
+  width: 232px;
+  height: 232px;
   text-align: center;
   margin-bottom: 10px;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .prod_pic .pic_inr {
-  width: 100px;
-  height: 100px;
-  display: inline-block;
+  width: 100%;
+  height: 100%;
   font-size: 0;
   overflow: hidden;
   opacity: 1;
@@ -2530,6 +2580,7 @@ a {
 
 .adv_28 .adv_28_wrap .industry_booth .img_wp {
   width: 100%;
+  height: 100%;
   //padding-top: 100%;
   position: relative;
   font-size: 0;
@@ -2554,14 +2605,14 @@ a {
 }
 
 .adv_28 .adv_28_wrap .industry_booth .img_wp img {
-  max-width: 100%;
-  max-height: 100%;
-  vertical-align: middle;
-  top: 0;
-  left: 0;
-  margin: auto;
-  bottom: 0;
-  right: 0;
+  width: 100%;
+  height: 100%;
+  // vertical-align: middle;
+  // top: 0;
+  // left: 0;
+  // margin: auto;
+  // bottom: 0;
+  // right: 0;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .industry_link {
@@ -2613,21 +2664,28 @@ a {
 }
 
 .adv_28 .adv_28_wrap .industry_booth .industry_theme_info {
-  position: relative;
+  position: absolute;
+  bottom: 30px;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .industry_title {
-  font-weight: 500;
+  width: 270px;
+  height: 88px;
+  font-weight: bold;
+  font-size: 38px;
+  color: #FFFFFF;
+  line-height: 44px;
   margin-bottom: 20px;
-  font-size: 22px;
-  line-height: 30px;
-  color: #222;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .soure_now .btn {
-  height: 30px;
-  line-height: 28px;
+  line-height: 42px;
   padding: 0 10px;
+  width: 157px;
+  height: 42px;
+  font-weight: bold;
+  font-size: 16px;
+  color: #FFFFFF;
 }
 
 .adv_28 .adv_28_wrap .industry_booth .btn {
@@ -2650,13 +2708,14 @@ a {
 
 .adv_28 .adv_28_wrap .industry_booth .btn_main {
   color: #fff;
-  border: solid 1px #00985e;
-  background-color: #00985e;
+  border: solid 1px @theme-color;
+  background: @theme-color;
 }
 /* adv_28-end */
 
 /* adv_29-start */
 .adv_29 {
+  height: 654px;
   margin-top: 20px;
   margin-bottom: 20px;
   padding: 30px;
@@ -2703,51 +2762,59 @@ a {
 //}
 
 .adv_29 .sourcing_centent {
-  padding-top:8px;
-  padding-bottom: 8px;
-  position: relative;
+  // padding-top:8px;
+  // padding-bottom: 8px;
+  // position: relative;
 }
 
 .adv_29 .sourcing_form {
-  float: right;
-  padding: 20px 25px;
+  padding-top: 40px;
+  padding-left: 28px;
+  position: absolute;
+  right: 80px;
+  top: 53px;
   background: #fff;
-  margin-left: 225px;
-  width: 530px;
+  width: 587px;
+  height: 548px;
 }
 
 .adv_29 .sourcing_form .form_title {
-  font-size: 24px;
-  line-height: 30px;
+  font-weight: 400;
+  font-size: 32px;
+  color: #282E30;
   margin-bottom: 10px;
-  font-weight: normal;
 }
 
 .adv_29 .sourcing_form .form {
-  background-color: #e2231a;
-  height: 34px;
+  // background-color: #e2231a;
+  // height: 34px;
   overflow: hidden;
 }
 
 
 .adv_29 .sourcing_text {
-  padding-top: 20px;
-  padding-left: 30px;
+  width: 400px;
+  height: 100%;
+  // padding-top: 20px;
+  padding-left: 80px;
+  padding-top: 53px;
   overflow: hidden;
-  //position: relative;
+  position: relative;
 }
 
 .adv_29 .sourcing_title {
-  font-size: 32px;
   font-weight: bold;
-  margin-bottom: 20px;
-  transform: scaleX(1.2);
-  transform-origin: left;
+  font-size: 40px;
+  color: #FFFFFF;
+  margin-bottom: 80px;
+  // transform: scaleX(1.2);
+  // transform-origin: left;
 }
 
 .adv_29 .sourcing_desc {
-  font-size: 16px;
-  color: #555;
+  font-weight: 400;
+  color: #FFFFFF;
+  font-size: 14px;
   position: relative;
 }
 
@@ -2757,22 +2824,28 @@ a {
 
 .adv_29 .sourcing_more {
   margin-top: 45px;
-  font-weight: 500;
-  font-size: 14px;
+  font-weight: bold;
+  font-size: 16px;
+  color: #FFFFFF;
   position: relative;
 }
 
 .adv_29 .sourcing_more a {
-  color: #222;
-  font-weight: 500;
+  font-weight: bold;
+  font-size: 16px;
+  color: #FFFFFF;
 }
 
 /* adv_29-end */
 
 /* adv_30-start */
+.adv_30 {
+  width: 100% !important;
+}
 .adv_30 .adv_30_wrap {
   height: auto;
   min-height: 306px;
+  position: relative;
 }
 
 .adv_30 .adv_30_wrap .category_sort {
@@ -2818,7 +2891,7 @@ a {
 }
 
 .adv_30 .adv_30_wrap .home-slider {
-  width: 1210px;
+  width: 100% !important;
   margin: 0 auto;
   position: relative;
   height: 306px;
@@ -2828,13 +2901,16 @@ a {
 }
 
 .adv_30 .adv_30_wrap .s1 {
+  // display: none;
   width: 187px;
-  float: left;
+  // position: absolute;
+  // z-index: 999;
+  // float: left;
 }
 
 .adv_30 .adv_30_wrap .s2 {
-  width: calc(100% - 437px);
-  float: left;
+  width: 100%;
+  // float: left;
 }
 
 .adv_30 .adv_30_wrap .s3 {

+ 12 - 5
xinkeaboard-admin/src/pages/manage/article/add_article.js

@@ -1,6 +1,6 @@
 import { connect } from 'dva/index';
 import React, { Component } from 'react';
-import { Form, Select, Input, Radio, Spin, InputNumber } from 'antd';
+import { Form, Select, Input, Radio, Spin, InputNumber, Button } from 'antd';
 import {
   sldLlineRtextAddGoods,
   failTip,
@@ -36,6 +36,7 @@ export default class Add_article extends Component {
       query: props.location.query,
       articleCat: [],//文章分类
       showLoading: true,
+      submitLoading: false,
     };
   }
 
@@ -112,6 +113,7 @@ export default class Add_article extends Component {
           values.articleId = query.id;
           dis_type = 'article/edit_article';
         }
+        this.setState({submitLoading: true})
         dispatch({
           type: dis_type,
           payload: values,
@@ -128,6 +130,7 @@ export default class Add_article extends Component {
             } else {
               failTip(res.msg);
             }
+            this.setState({submitLoading: false})
           },
         });
       }
@@ -135,7 +138,7 @@ export default class Add_article extends Component {
   };
 
   render() {
-    const { articleCat, detail, showLoading, query, initEditorFlag, getEditorContentFlag, initEditorContent } = this.state;
+    const { submitLoading, articleCat, detail, showLoading, query, initEditorFlag, getEditorContentFlag, initEditorContent } = this.state;
     let { form: { getFieldDecorator } } = this.props;
     return (
       <Scrollbars
@@ -277,10 +280,14 @@ export default class Add_article extends Component {
                         {sldComLanguage('返回')}{/*返回*/}
                       </div>
 
-                      <div onClick={() => this.props.form.submit(this.handleSaveAllData)}
-                           className={`${global.add_goods_bottom_btn} ${global.add_goods_bottom_btn_sel}`}>
+                      <Button 
+                         loading={ submitLoading }
+                         type='primary'
+                         style={{borderRadius: 0 }}
+                         onClick={() => this.props.form.submit(this.handleSaveAllData)}
+                      >
                         保存并返回
-                      </div>
+                      </Button>
                     </div>
                   </Form>
                 </div>

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

@@ -1329,7 +1329,8 @@ export function getSldStatYTitle() {
  * */
 export function sldComRequest(method, url, params, data_type = '') {
   const state = window.g_app._store.getState();
-  const currentSite = state.global.currentSite || localStorage.getItem('currentSite');
+  const { webSite = '' } = state.routing.location.query;
+  const currentSite = webSite || state.global.currentSite || localStorage.getItem('currentSite');
   const currentPath = state.routing.location.pathname;
   if (!currentPath.includes('/user/login')) {
     params = Object.assign({}, { webSite: currentSite }, params ?? {})

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

@@ -8,6 +8,7 @@ export {}
 /* prettier-ignore */
 declare module 'vue' {
   export interface GlobalComponents {
+    CompetitorWebsite: typeof import('./src/components/CompetitorWebsite.vue')['default']
     ConfirmInfoDialog: typeof import('./src/components/ConfirmInfoDialog.vue')['default']
     CountrySelct: typeof import('./src/components/CountrySelct.vue')['default']
     ElButton: typeof import('element-plus/es')['ElButton']
@@ -17,6 +18,7 @@ declare module 'vue' {
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElInput: typeof import('element-plus/es')['ElInput']
     Home: typeof import('./src/components/Home.vue')['default']
+    ProductDescription: typeof import('./src/components/ProductDescription.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
     TopContent: typeof import('./src/components/TopContent.vue')['default']

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

@@ -23,6 +23,7 @@
     "eslint-config-prettier": "^8.0.0",
     "eslint-plugin-prettier": "^4.0.0",
     "eslint-plugin-vue": "^9.0.0",
+    "postcss-px-to-viewport-8-plugin": "^1.2.5",
     "prettier": "^2.8.0",
     "sass": "^1.90.0",
     "typescript": "^5.0.0",

+ 16 - 0
xinkeaboard-promotion-portal/pnpm-lock.yaml

@@ -48,6 +48,9 @@ importers:
       eslint-plugin-vue:
         specifier: ^9.0.0
         version: 9.33.0(eslint@8.57.1)
+      postcss-px-to-viewport-8-plugin:
+        specifier: ^1.2.5
+        version: 1.2.5
       prettier:
         specifier: ^2.8.0
         version: 2.8.8
@@ -1036,6 +1039,10 @@ packages:
   nth-check@2.1.1:
     resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
 
+  object-assign@4.1.1:
+    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+    engines: {node: '>=0.10.0'}
+
   once@1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
 
@@ -1100,6 +1107,9 @@ packages:
   pkg-types@2.2.0:
     resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
 
+  postcss-px-to-viewport-8-plugin@1.2.5:
+    resolution: {integrity: sha512-+yc69+q/euV7iKh5fGXY6C/lpepmVx2DGFHeYj5BpzIFyBBpdACDjZyrZ8AV0kCg+J0bplBv4ZA1QTzgaK0rGg==}
+
   postcss-selector-parser@6.1.2:
     resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
     engines: {node: '>=4'}
@@ -2332,6 +2342,8 @@ snapshots:
     dependencies:
       boolbase: 1.0.0
 
+  object-assign@4.1.1: {}
+
   once@1.4.0:
     dependencies:
       wrappy: 1.0.2
@@ -2395,6 +2407,10 @@ snapshots:
       exsolve: 1.0.7
       pathe: 2.0.3
 
+  postcss-px-to-viewport-8-plugin@1.2.5:
+    dependencies:
+      object-assign: 4.1.1
+
   postcss-selector-parser@6.1.2:
     dependencies:
       cssesc: 3.0.0

+ 16 - 0
xinkeaboard-promotion-portal/postcss.config.cjs

@@ -0,0 +1,16 @@
+module.exports = {
+  plugins: [
+    require('postcss-px-to-viewport-8-plugin')({
+      unitToConvert: 'px',
+      viewportWidth: 1920,    // 你的设计稿宽度
+      unitPrecision: 6,
+      propList: ['*'],
+      viewportUnit: 'vw',
+      fontViewportUnit: 'vw',
+      selectorBlackList: [], 
+      minPixelValue: 1,
+      mediaQuery: true,
+      exclude: [/node_modules/],
+    })
+  ]
+}

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


+ 3 - 0
xinkeaboard-promotion-portal/src/assets/styles/theme.scss

@@ -0,0 +1,3 @@
+:root {
+    --promotion--color-primary: #036eb8;
+}

+ 21 - 0
xinkeaboard-promotion-portal/src/components/CompetitorWebsite.vue

@@ -0,0 +1,21 @@
+<template>
+  <div class="product-des">
+    <el-input
+      v-model="website"
+      clearable
+      placeholder="第三步:竞品的网站,如果有多个用逗号隔开"
+    />
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue';
+
+const website = ref<string>('');
+
+defineExpose({
+  getWebsite: () => website.value
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 60 - 29
xinkeaboard-promotion-portal/src/components/CountrySelct.vue

@@ -2,7 +2,7 @@
   <div class="country-select">
     <el-input
       v-model="productName"
-      style="width: 240px"
+      clearable
       placeholder="第一步:输入你的产品名称,选择目标区域市场"
     />
     <span class="country-wrap">
@@ -13,16 +13,16 @@
         <template #dropdown>
           <div class="custom-dropdown">
             <div class="custom-dropdown-filter">
-              <el-input v-model="search" placeholder="Select Country">
+              <el-input v-model="search" clearable placeholder="Select Country">
                 <template #prefix>
-                  <el-icon class="el-input__icon"><search /></el-icon>
+                  <img :src="SearchIcon" />
                 </template>
               </el-input>
             </div>
             <div class="custom-dropdown-list">
               <el-dropdown-menu>
                 <el-dropdown-item
-                  v-for="item in countryList"
+                  v-for="item in renderContryList"
                   :key="item.code"
                   @click="() => selectCountry(item)"
                 >
@@ -43,8 +43,9 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive, ref } from 'vue';
+import { ComputedRef, ref, computed, onMounted } from 'vue';
 import countryData from '../assets/country.json';
+import SearchIcon from '../assets/images/Search.png';
 
 import type { DropdownInstance } from 'element-plus';
 
@@ -55,7 +56,6 @@ interface countryItem {
 }
 
 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) => ({
@@ -63,17 +63,25 @@ const countryList: countryItem[] = countryData.map((item) => ({
   name: item.name,
   flag: images[`/src/assets/flags/4x3/${item.code}.svg`]
 }));
-const countryInfo = ref<countryItem>(countryList[0]);
+const renderContryList: ComputedRef<countryItem[]> = computed(() => {
+  return countryList.filter((item) => item.name.includes(search.value));
+});
+const countryInfo = ref<countryItem>(JSON.parse(JSON.stringify(countryList[0])));
 const dropdown = ref<DropdownInstance>();
 
 const selectCountry = (item: countryItem) => {
   countryInfo.value = item;
 };
 
-function showCountryList() {
+const showCountryList = () => {
   if (!dropdown.value) return;
   dropdown.value.handleOpen();
-}
+};
+
+defineExpose({
+  getLocationName: () => countryInfo.value.name,
+  getProductName: () => productName.value
+});
 </script>
 
 <style lang="scss">
@@ -81,17 +89,36 @@ function showCountryList() {
   .custom-dropdown {
     display: flex;
     flex-direction: column;
-    width: 240px;
-    height: 400px;
-    padding: 5px;
+    width: 280px;
+    height: 398px;
+    padding-left: 21px;
     box-sizing: border-box;
     overflow: hidden;
 
     &-filter {
       height: 48px;
 
+      .el-input__prefix {
+        img {
+          width: 16px;
+          height: 16px;
+        }
+      }
+
+      .el-input__inner {
+        font-size: 16px;
+        color: #282e30;
+        &::placeholder {
+          font-weight: 400;
+          font-size: 16px;
+          color: rgba(40, 46, 48, 0.6);
+        }
+      }
+
       .el-input__wrapper {
-        height: 45px;
+        width: 100%;
+        height: 100%;
+        box-shadow: none;
       }
     }
 
@@ -100,23 +127,30 @@ function showCountryList() {
       overflow: auto;
       height: 100%;
 
+      .el-dropdown-menu {
+        padding-top: 0 !important;
+      }
+
       .el-dropdown-menu__item {
         padding: 10px;
         font-weight: 400;
 
         .country-name {
+          font-size: 16px;
           color: #282e30;
           text-overflow: ellipsis;
           overflow: hidden;
           white-space: nowrap;
 
           &.active {
-            color: #036eb8;
+            color: var(--promotion--color-primary);
           }
         }
         img {
           width: 30px;
-          margin: 0 6px;
+          height: 24px;
+          margin-right: 7px;
+          // margin: 0 6px;
         }
       }
     }
@@ -127,31 +161,28 @@ function showCountryList() {
 .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 {
+  width: 92px;
+  height: 68px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background-color: #fff;
+  margin-left: 10px;
+
   &-item {
     display: inline-flex;
     justify-content: center;
     align-items: center;
-    width: 5.75rem;
-    height: 4.25rem;
+    width: 72px;
+    height: 48px;
     background-color: #ffffff;
-    margin-left: 0.625rem;
     cursor: pointer;
 
     img {
-      width: 4.5rem;
+      // width: 4.5rem;
     }
   }
 }

+ 21 - 0
xinkeaboard-promotion-portal/src/components/ProductDescription.vue

@@ -0,0 +1,21 @@
+<template>
+  <div class="product-des">
+    <el-input
+      v-model="description"
+      clearable
+      placeholder="第二步:输入产品的描述,例如功能和使用场景"
+    />
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue';
+
+const description = ref<string>('');
+
+defineExpose({
+  getDescription: () => description.value
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 112 - 17
xinkeaboard-promotion-portal/src/components/TopContent.vue

@@ -1,8 +1,10 @@
 <template>
   <div class="head-content">
-    <img :src="Logo" />
+    <div class="head-content-logo">
+      <img :src="Logo" />
+    </div>
     <div class="head-content-wrap">
-      <h2>市场迷雾?罗经开路!</h2>
+      <span class="head-content-wrap__label">市场迷雾?罗经开路!</span>
       <span class="head-content-wrap__title">
         Lookeen 是一个服务于首次出海客户的 AI 商情系统(GTM Analytics
         Tools 市场进入分析工具)。目的是提供客户自己的产品品类在目标市场的商业情报,降低用户对产品在目标市场的不确定性。
@@ -11,57 +13,150 @@
         <span class="label">只需三步</span>
         <span class="tip">(每月可免费获取3次商品分析)</span>
       </div>
-      <div class="head-content-wrap__select">
-        <CountrySelct></CountrySelct>
+      <div class="head-content-wrap__info">
+        <CountrySelct ref="CountrySelctRef" v-show="currentStep === 1"></CountrySelct>
+        <ProductDescription
+          ref="ProductDescriptionRef"
+          v-show="currentStep === 2"
+        ></ProductDescription>
+        <CompetitorWebsite ref="CompetitorWebsiteRef" v-show="currentStep === 3"></CompetitorWebsite>
+        <el-button v-if="currentStep !== 1" @click="prevStep">上一步</el-button>
+        <el-button v-if="currentStep !== 3" @click="nextStep">下一步</el-button>
+        <el-button v-if="currentStep === 3" @click="acceptRecod">获取报告</el-button>
       </div>
+      <!-- <div class="head-content-wrap"></div> -->
     </div>
   </div>
 </template>
 
 <script lang="ts" setup>
+import { ref } from 'vue';
 import CountrySelct from '@/components/CountrySelct.vue';
+import ProductDescription from '@/components/ProductDescription.vue';
+import CompetitorWebsite from '@/components/CompetitorWebsite.vue';
 import Logo from '@/assets/images/logo.svg';
+
+const currentStep = ref<number>(1);
+const CountrySelctRef = ref();
+const ProductDescriptionRef = ref();
+const CompetitorWebsiteRef = ref();
+
+const nextStep = () => {
+  currentStep.value++;
+};
+
+const prevStep = () => {
+  currentStep.value--;
+};
+
+const acceptRecod = () => {
+  const locationName = CountrySelctRef.value.getLocationName();
+  const productName = CountrySelctRef.value.getProductName();
+  const description = ProductDescriptionRef.value.getDescription();
+  const competitorWebsite = CompetitorWebsiteRef.value.getWebsite();
+  console.log(locationName, productName, description, competitorWebsite, '-=-=-=-=')
+};
+
+
 </script>
 
 <style lang="scss" scoped>
 .head-content {
+  width: 100%;
+  height: 100%;
+  position: relative;
+
+  &-logo {
+    position: absolute;
+    width: 194px;
+    height: 88px;
+    left: 260px;
+    top: 32px;
+
+    img {
+      width: 100%;
+      height: 100%;
+      object-fit: cover;
+    }
+  }
+
   &-wrap {
-    margin-top: 1rem;
-    h2 {
-      margin: 0;
+    position: absolute;
+    display: flex;
+    flex-direction: column;
+    width: 663px;
+    height: 548px;
+    left: 280px;
+    top: 125px;
+
+    &__label {
       font-weight: bold;
-      font-size: 2.5rem;
+      font-size: 40px;
       color: #282e30;
+      margin-top: 60px;
     }
-    padding-left: 1.25rem;
 
     &__title {
       display: inline-block;
+      width: 100%;
+      height: 66px;
       font-weight: 400;
-      font-size: 1rem;
+      font-size: 16px;
       color: #282e30;
-      margin-top: 1.25rem;
+      line-height: 22px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      margin-top: 20px;
     }
 
     &__step {
-      margin-top: 3.75rem;
+      margin-top: 60px;
 
       .label {
         font-weight: bold;
-        font-size: 1.5rem;
-        color: #036eb8;
+        font-size: 24px;
+        color: var(--promotion--color-primary);
       }
 
       .tip {
         font-weight: 400;
-        font-size: 0.75rem;
+        font-size: 12px;
         color: #282e30;
-        margin-left: 0.625rem;
+        margin-left: 10px;
       }
     }
 
-    &__select {
+    &__info {
+      display: flex;
+      align-items: center;
+      height: 68px;
       margin-top: 10px;
+
+      :deep(.el-button) {
+        width: 110px;
+        height: 48px;
+        background-color: var(--promotion--color-primary);
+        font-weight: 400;
+        font-size: 16px;
+        color: #ffffff;
+        border-radius: 0;
+        margin-left: 10px;
+      }
+
+      :deep(.el-input) {
+        width: 412px !important;
+        height: 48px !important;
+      }
+
+      :deep(.el-input__inner) {
+        line-height: 48px;
+        font-size: 16px;
+        &::placeholder {
+          font-weight: 400;
+          font-size: 16px;
+          color: rgba(40, 46, 48, 0.6);
+        }
+      }
     }
   }
 }

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

@@ -1,6 +1,7 @@
 import { createApp } from 'vue'
 import ElementPlus from 'element-plus'
 import 'element-plus/dist/index.css'
+import './assets/styles/theme.scss'
 import App from './App.vue'
 import router from './router'
 import { createPinia } from 'pinia'

+ 12 - 0
xinkeaboard-promotion-portal/src/types/index.ts

@@ -0,0 +1,12 @@
+export interface CommonReqResponseData<T> {
+  data: T;
+  logMsg: any;
+  msg: 'string';
+  state: number;
+  timestamp: number;
+}
+
+export interface AnalysisKeywordReq {
+  productName: string;
+  locationName: string;
+}

+ 10 - 0
xinkeaboard-promotion-portal/src/utils/api.ts

@@ -0,0 +1,10 @@
+import { request } from "@/utils/http";
+
+interface AnalysisKeyword {
+    productName: string;
+    locationName: string;
+}
+
+
+// 关键词
+export const analysisKeyword = (payload: AnalysisKeyword) => request.post('/analysis/keyword', payload)

+ 1 - 1
xinkeaboard-promotion-portal/src/utils/http.ts

@@ -102,7 +102,7 @@ class AxiosHttp {
 }
 
 export const request = new AxiosHttp(
-  { baseURL: '/', timeout: 5000 },
+  { baseURL: '/api', timeout: 5000 },
   {
     requestInterceptors: [
       (config) => {

+ 40 - 43
xinkeaboard-promotion-portal/src/views/Home.vue

@@ -3,7 +3,7 @@
     <div
       class="promotion-portal-top"
       ref="topRef"
-      :style="{ height: topHeight + 'px', backgroundImage: `url(${AiBgImage})` }"
+      :style="{ backgroundImage: `url(${AiBgImage})` }"
     >
       <div class="promotion-portal-top__wrapper">
         <TopContent></TopContent>
@@ -12,12 +12,12 @@
     <div
       class="promotion-portal-tab record"
       ref="tab1Ref"
-      :style="{ height: tab1Height + 'px', backgroundImage: `url(${Tab1Image})` }"
+      :style="{ backgroundImage: `url(${Tab1Image})` }"
     ></div>
     <div
       class="promotion-portal-tab cando"
       ref="tab2Ref"
-      :style="{ height: tab2Height + 'px', backgroundImage: `url(${Tab2Image})` }"
+      :style="{ backgroundImage: `url(${Tab2Image})` }"
     ></div>
   </div>
 </template>
@@ -29,54 +29,55 @@ 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 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);
+// 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 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';
-}
+// function setRem() {
+//   const baseSize = 16; // 基准字体大小
+//   const designWidth = 1920; // 设计稿宽度
+//   const scale = window.innerWidth / designWidth;
+//   document.documentElement.style.fontSize = baseSize * scale + 'px';
+// }
 
-setRem();
+// setRem();
 
-function updateAllHeights() {
-  setHeight(topRef.value, AiBgImage, topHeight);
-  setHeight(tab1Ref.value, Tab1Image, tab1Height);
-  setHeight(tab2Ref.value, Tab2Image, tab2Height);
-}
+// 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);
+  // updateAllHeights();
+  // window.addEventListener('resize', updateAllHeights);
+  // window.addEventListener('resize', setRem);
 });
 
 onUnmounted(() => {
-  window.removeEventListener('resize', updateAllHeights);
-  window.addEventListener('resize', setRem);
+  // window.removeEventListener('resize', updateAllHeights);
+  // window.addEventListener('resize', setRem);
 });
 </script>
 
 <style lang="scss" scoped>
 .promotion-portal {
-  width: 100%;
+  width: 1920px;
+  height: 2250px;
   overflow: auto;
 
   &-top,
@@ -89,14 +90,10 @@ onUnmounted(() => {
   }
 
   &-top {
-    position: relative;
+    height: 750px;
     &__wrapper {
-      position: absolute;
-      top: 2rem;
-      left: 16.25rem;
-      width: 41rem;
-      height: 34rem;
-      overflow: auto;
+      width: 100%;
+      height: 100%;
     }
   }
 

+ 12 - 4
xinkeaboard-promotion-portal/vite.config.ts

@@ -20,12 +20,20 @@ export default defineConfig({
       '@': path.resolve(__dirname, 'src')
     }
   },
+  css: {
+    preprocessorOptions: {
+      scss: {
+        // Resolve the legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 warning
+        silenceDeprecations: ['legacy-js-api']
+      }
+    }
+  },
   server: {
     proxy: {
-      '/api': {
-        target: '',
-        changeOrigin: true
-        // rewrite: () =>
+      '/api/': {
+        target: 'http://54.46.9.88:8001/',
+        changeOrigin: true,
+        rewrite: (path) => path.replace(/^\/api"/, '')
       }
     }
   }

BIN
xinkeaboard-seller/src/assets/login/sld_login_bg.png


+ 1 - 1
xinkeaboard-seller/src/components/SldTableRowThree/index.js

@@ -612,7 +612,7 @@ export default class SldTableRowTwo extends PureComponent {
               <span className={styles.sld_det_r_item} style={{
                 width: `${val.rwidth != undefined ? val.rwidth : 80}%`,
                 alignItems: 'flex-start',
-                paddingLeft: 20,
+                paddingLeft: val.paddingLeft ?? 20,
                 height: val.item_height!=undefined?val.item_height+2:cur_height + 2,
                 borderRightWidth: 1,
               }}>

+ 3 - 3
xinkeaboard-seller/src/pages/User/Login.js

@@ -16,15 +16,15 @@ import {
 import router from 'umi/router';
 
 const FormItem = Form.Item;
-let admin_login_logo = require('../../assets/login/logo.png');
+let admin_login_logo = require('../../assets/login/logo1.png');
 let main_seller_center_logo_local = admin_login_logo;
 let com_img_login_info = getSldImgSet('com_img_login_info');
 if (com_img_login_info != '') {
-   admin_login_logo = com_img_login_info.filter(item => item.name == 'main_seller_center_logo')[0].imageUrl || main_seller_center_logo_local;
+  //  admin_login_logo = com_img_login_info.filter(item => item.name == 'main_seller_center_logo')[0].imageUrl || main_seller_center_logo_local;
   //admin_login_logo = com_img_info
 }
 const default_login_img = {
-  admin_login_bg: require('../../assets/supplier_login_bg.jpg'),//登录背景
+  admin_login_bg: require('../../assets/login/sld_login_bg.png'),//登录背景
   admin_login_left_bg: require('../../assets/sld_login_left.png'),//登录左侧图片
   main_seller_center_logo: admin_login_logo,//登录页logo
   vendor_login_head_portrait: require('../../assets/touxiang@2x.png'),//操作成功头像

+ 2 - 1
xinkeaboard-seller/src/pages/settledManage/businessInfo/index.js

@@ -79,6 +79,7 @@ export default class BusinessInfo extends Component {
         item_height: 300,
         disabled: getSettleData('state') === 1,
         placeholder: ``,
+        paddingLeft: 0,
         tree_data: [],
         selected_keys:[],//选择的key数组
         select_cat_id: [],
@@ -474,7 +475,7 @@ export default class BusinessInfo extends Component {
                 <Scrollbars
                   autoHeight
                   autoHeightMin={100}
-                  autoHeightMax={document.body.clientHeight - 130}
+                  autoHeightMax={600}
                 >
                   <div className={styles.commen_wrap}>
                     <SldTableRowThree form={this.props.form} data={site.site_base_info} />

+ 1 - 1
xinkeaboard-seller/src/pages/settledManage/businessInfo/index.less

@@ -45,7 +45,7 @@
   .site_item {
     display: flex;
     flex-direction: column;
-    justify-content: center;
+    // justify-content: center;
     align-items: center;
 
     .site_item_title {

+ 1 - 0
xinkeaboard-seller/src/pages/store/category.js

@@ -176,6 +176,7 @@ export default class Category extends Component {
     sele_key: 'innerLabelId',
     sele_name: 'innerLabelName',
     diy: true,
+    allowClear: true
   };
 
   componentDidMount() {

+ 14 - 6
xinkeaboard-seller/src/pages/store/pc_diy/adv_02.js

@@ -45,8 +45,8 @@ export default class Adv_02 extends Component {
         type: 'adv_02',
         left: {
           type: 'single_img',
-          width: 210,
-          height: 344,//高度为0的话表示不限制
+          width: 250,
+          height: 540,//高度为0的话表示不限制
           data: {
             imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
             imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
@@ -65,8 +65,8 @@ export default class Adv_02 extends Component {
         },//中间商品信息
         right: {
           type: 'more_img',
-          width: 242,
-          height: 108,
+          width: 150,
+          height: 150,
           data: [{
             imgUrl: 'https://img.alicdn.com/simba/img/TB1jsBeKYPpK1RjSZFFSuu5PpXa.jpg',
             imgPath: '/images/brand/3e56e20d-453d-4cf8-906f-a928de37ce6a.png',
@@ -98,18 +98,26 @@ export default class Adv_02 extends Component {
     total_num: 0,
   };//商品选择器参数
 
+  parseData = (tpl) => {
+		tpl.right.width = 250;
+		tpl.right.height = 150;
+		tpl.left.width = 250;
+		tpl.left.height = 540;
+
+		return tpl;
+	}
 
   componentDidMount() {
     let { tpl_info } = this.state;
     this.setState({
-      data: tpl_info,
+      data: this.parseData(tpl_info),
     });
   }
 
   componentWillReceiveProps(nextProps, nextContext) {
     let { data } = this.state;
     if (JSON.stringify(nextProps.tpl_info) != JSON.stringify(data)) {
-      data = nextProps.tpl_info;
+      data = this.parseData(nextProps.tpl_info);
       this.setState({ data });
     }
   }

+ 1 - 5
xinkeaboard-seller/src/pages/store/pc_diy/adv_04.js

@@ -210,12 +210,8 @@ export default class Adv_04 extends Component {
                 <span>{sldComLanguage('编辑')}</span>
               </div>
               <h2>
-                <font
-                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
                 <span
                   style={data.title_info.title_color != '' ? { color: data.title_info.title_color } : null}>{data.title_info.title_name != '' ? data.title_info.title_name : `${sldComLanguage('请填写标题')}`}</span>
-                <font
-                  style={data.title_info.title_color != '' ? { background: data.title_info.title_color } : null}>&nbsp;</font>
               </h2>
             </div>
             <div className={styles.floor_goods}>
@@ -228,7 +224,7 @@ export default class Adv_04 extends Component {
                 return <div key={item} className={styles.item}>
                   <div className={styles.wrap}>
                     <a className={styles.example_text}>
-                      <span>{sldComLanguage('示例产品')}<br/>【172*170】</span>
+                      <span>{sldComLanguage('示例产品')}<br/>【232*232】</span>
                     </a>
                     <p className={styles.title}>
                       <a href="javascript:;" title={`${sldComLanguage('商品名称')}`}>{sldComLanguage('商品名称')}</a>

+ 27 - 14
xinkeaboard-seller/src/pages/store/pc_diy/adv_12.js

@@ -38,8 +38,8 @@ export default class Adv_12 extends Component {
 			data: {
 				type: 'adv_12',
 				left: {
-					width: 396,
-					height: 450,//高度为0的话表示不限制
+					width: 480,
+					height: 535,//高度为0的话表示不限制
 					data: [{
 						imgUrl: '',
 						imgPath: '',
@@ -50,8 +50,8 @@ export default class Adv_12 extends Component {
 					}],
 				},
 				center: {
-					width: 183,
-					height: 210,//高度为0的话表示不限制
+					width: 220,
+					height: 250,//高度为0的话表示不限制
 					data: [{
 						imgUrl: '',
 						imgPath: '',
@@ -101,8 +101,8 @@ export default class Adv_12 extends Component {
 						info: {},
 					},
 					top: {
-						width: 376,
-						height: 180,//高度为0的话表示不限制
+						width: 450,
+						height: 215,//高度为0的话表示不限制
 						data: [{
 							imgUrl: '',
 							imgPath: '',
@@ -113,8 +113,8 @@ export default class Adv_12 extends Component {
 						}],
 					},
 					bottom: {
-						width: 183,
-						height: 180,//高度为0的话表示不限制
+						width: 220,
+						height: 215,//高度为0的话表示不限制
 						data: [{
 							imgUrl: '',
 							imgPath: '',
@@ -137,18 +137,31 @@ export default class Adv_12 extends Component {
 		};
 	}
 
+	parseData = (tpl) => {
+		tpl.right.top.width = 450;
+	    tpl.right.top.height = 215;
+		tpl.right.bottom.width = 220;
+		tpl.right.bottom.height = 215;
+		tpl.center.width = 220;
+		tpl.center.height = 250;
+		tpl.left.width = 480;
+		tpl.left.height = 535;
+
+		return tpl;
+	}
+
 
 	componentDidMount() {
 		let { tpl_info } = this.state;
 		this.setState({
-			data: tpl_info,
+			data: this.parseData(tpl_info),
 		});
 	}
 
   componentWillReceiveProps(nextProps, nextContext) {
     let { data } = this.state;
     if (JSON.stringify(nextProps.tpl_info) != JSON.stringify(data)) {
-      data = nextProps.tpl_info;
+      data = this.parseData(nextProps.tpl_info);
       this.setState({ data });
     }
   }
@@ -235,7 +248,7 @@ export default class Adv_12 extends Component {
 										   href="javascript:void(0);">
 											{item.imgUrl
 												? <img src={item.imgUrl}/>
-												: <span>{sldComLanguage('此处添加【396*450】图片')}</span>
+												: <span>{sldComLanguage('480*450】图片')}</span>
 											}
 										</a>
 									))}
@@ -251,7 +264,7 @@ export default class Adv_12 extends Component {
 										   href="javascript:void(0);">
 											{item.imgUrl
 												? <img src={item.imgUrl}/>
-												: <span>{sldComLanguage('此处添加【183*210】图片')}</span>
+												: <span>{sldComLanguage('此处添加【220*250】图片')}</span>
 											}
 										</a>
 									))}
@@ -278,7 +291,7 @@ export default class Adv_12 extends Component {
 											<a key={index} href="javascript:void(0);">
 												{item.imgUrl
 													? <img src={item.imgUrl}/>
-													: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
+													: <span>{sldComLanguage('此处添加【450*215】图片')}</span>
 												}
 											</a>
 										))}
@@ -292,7 +305,7 @@ export default class Adv_12 extends Component {
 											<a key={index} href="javascript:void(0);">
 												{item.imgUrl
 													? <img src={item.imgUrl}/>
-													: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
+													: <span>{sldComLanguage('此处添加【220*215】图片')}</span>
 												}
 											</a>
 										))}

+ 33 - 18
xinkeaboard-seller/src/pages/store/pc_diy/adv_13.js

@@ -57,8 +57,8 @@ export default class Adv_13 extends Component {
 						info: {},
 					},
 					top: {
-						width: 376,
-						height: 180,//高度为0的话表示不限制
+						width: 450,
+						height: 215,//高度为0的话表示不限制
 						data: [{
 							imgUrl: '',
 							imgPath: '',
@@ -69,8 +69,8 @@ export default class Adv_13 extends Component {
 						}],
 					},
 					bottom: {
-						width: 183,
-						height: 180,//高度为0的话表示不限制
+						width: 220,
+						height: 215,//高度为0的话表示不限制
 						data: [{
 							imgUrl: '',
 							imgPath: '',
@@ -108,8 +108,8 @@ export default class Adv_13 extends Component {
 						info: {},
 					},
 					top: {
-						width: 376,
-						height: 180,//高度为0的话表示不限制
+						width: 450,
+						height: 215,//高度为0的话表示不限制
 						data: [{
 							imgUrl: '',
 							imgPath: '',
@@ -120,8 +120,8 @@ export default class Adv_13 extends Component {
 						}],
 					},
 					bottom: {
-						width: 183,
-						height: 180,//高度为0的话表示不限制
+						width: 220,
+						height: 215,//高度为0的话表示不限制
 						data: [{
 							imgUrl: '',
 							imgPath: '',
@@ -141,8 +141,8 @@ export default class Adv_13 extends Component {
 
 				},
 				right: {
-					width: 396,
-					height: 450,//高度为0的话表示不限制
+					width: 480,
+					height: 535,//高度为0的话表示不限制
 					data: [{
 						imgUrl: '',
 						imgPath: '',
@@ -156,18 +156,33 @@ export default class Adv_13 extends Component {
 		};
 	}
 
+	parseData = (tpl) => {
+		tpl.left.top.width = 450;
+	    tpl.left.top.height = 215;
+		tpl.left.bottom.width = 220;
+		tpl.left.bottom.height = 215;
+		tpl.center.top.width = 450;
+		tpl.center.top.height = 215;
+		tpl.center.bottom.width = 220;
+		tpl.center.bottom.height = 215;
+		tpl.right.width = 480;
+		tpl.right.height = 535;
+
+		return tpl;
+	}
+
 
 	componentDidMount() {
 		let { tpl_info } = this.state;
 		this.setState({
-			data: tpl_info,
+			data: this.parseData(tpl_info),
 		});
 	}
 
   componentWillReceiveProps(nextProps, nextContext) {
     let { data } = this.state;
     if (JSON.stringify(nextProps.tpl_info) != JSON.stringify(data)) {
-      data = nextProps.tpl_info;
+      data = this.parseData(nextProps.tpl_info);
       this.setState({ data });
     }
   }
@@ -264,7 +279,7 @@ export default class Adv_13 extends Component {
 											<a key={index} href="javascript:void(0);">
 												{item.imgUrl
 													? <img src={item.imgUrl}/>
-													: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
+													: <span>{sldComLanguage('此处添加【450*215】图片')}</span>
 												}
 											</a>
 										))}
@@ -278,7 +293,7 @@ export default class Adv_13 extends Component {
 											<a key={index} href="javascript:void(0);">
 												{item.imgUrl
 													? <img src={item.imgUrl}/>
-													: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
+													: <span>{sldComLanguage('此处添加【220*215】图片')}</span>
 												}
 											</a>
 										))}
@@ -304,7 +319,7 @@ export default class Adv_13 extends Component {
 											<a key={index} href="javascript:void(0);">
 												{item.imgUrl
 													? <img src={item.imgUrl}/>
-													: <span>{sldComLanguage('此处添加【376*180】图片')}</span>
+													: <span>{sldComLanguage('此处添加【450*215】图片')}</span>
 												}
 											</a>
 										))}
@@ -318,14 +333,14 @@ export default class Adv_13 extends Component {
 											<a key={index} href="javascript:void(0);">
 												{item.imgUrl
 													? <img src={item.imgUrl}/>
-													: <span>{sldComLanguage('此处添加【183*180】图片')}</span>
+													: <span>{sldComLanguage('此处添加【220*215】图片')}</span>
 												}
 											</a>
 										))}
 									</div>
 								</div>
 								<div className={`${styles.item} ${styles.left} ${styles.clear_padding}`}>
-									<div className={styles.sld_mask}
+									<div className={styles.sld_mask} style={{ width: '480px' }}
 										 onClick={() => this.editTpl('right','', `${sldComLanguage('右侧图片设置')}`)}>
 										<span>{sldComLanguage('编辑')}</span>
 									</div>
@@ -334,7 +349,7 @@ export default class Adv_13 extends Component {
 										   href="javascript:void(0);">
 											{item.imgUrl
 												? <img src={item.imgUrl}/>
-												: <span>{sldComLanguage('此处添加【396*450】图片')}</span>
+												: <span>{sldComLanguage('此处添加【480*535】图片')}</span>
 											}
 										</a>
 									))}

+ 3 - 3
xinkeaboard-seller/src/pages/store/pc_diy/diy_lists.js

@@ -25,8 +25,8 @@ import SldModal from '@/components/SldModal/SldModal';
 import Search from '@/components/Search/Search';
 
 let pageSize = list_com_page_size_10;
-@connect(({ product }) => ({
-  product,
+@connect(({ product, global }) => ({
+  product, global
 }))
 @Form.create()
 export default class DiyLists extends Component {
@@ -138,7 +138,7 @@ export default class DiyLists extends Component {
           width: 100,
           render: (text, record) => (
             <Fragment>
-              <Link to={{ pathname: `/store/decorate_pc_home_to_edit`, search: `?id=${record.decoId}` }}
+              <Link to={{ pathname: `/store/decorate_pc_home_to_edit`, search: `?id=${record.decoId}&webSite=${props.global.currentSite}` }}
                     target="_blank">
                 {
                   sldtbaleOpeBtnText(`${sldComLanguage('装修')}`, null)

+ 3 - 2
xinkeaboard-seller/src/pages/store/pc_diy/diy_page.less

@@ -1,4 +1,5 @@
 @import '~antd/lib/style/themes/default.less';
+@import '../../../themeColor.less';
 
 /* 装修页面样式-start */
 .diy_page_wrap {
@@ -12,7 +13,7 @@
 .allow_show_sld_mask {
   div[class=ant-carousel]{
     div[class=slick-list]{
-      max-height: 457px;
+      height: 520px;
     }
   }
   .sld_web_item_hover {
@@ -443,7 +444,7 @@
   z-index: 12;
   width: 100vw;
   height: 48px;
-  background: linear-gradient(90deg, #FF5216 0%, #FF8A39 100%);
+  background: @theme-linear;
   padding-left: calc(50vw - 605px);
   padding-right: calc(50vw - 605px);
   .left{

+ 2 - 2
xinkeaboard-seller/src/pages/store/pc_diy/edit_diy_page.js

@@ -653,7 +653,7 @@ export default class Edit_diy_page extends Component {
         <div ref={'wrap_top'} className={global.flex_com_column}>
           <EditDdiyPageHead/>
         </div>
-        <div style={{ position: 'relative', width: '100%', height: 457, background: '#fff' }}
+        <div style={{ position: 'relative', width: '100%', height: 520, background: '#fff' }}
              className={`${styles.allow_show_edit}`}>
           <div style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, zIndex: 4 }}>
             <MainBanner tpl_info={main_swiper_data.data} save_tpl_data={this.save_main_banner_data}/>
@@ -774,7 +774,7 @@ export default class Edit_diy_page extends Component {
                                 </div>
                               </div>
                               <Fragment>
-                                <div className={`${styles.diy_part_wrap} ${styles.allow_show_edit}`} style={{backgroundColor:item.data.bg_color!=undefined&&item.data.bg_color?item.data.bg_color:'#fff',paddingTop:item.data.padding_top!=undefined&&item.data.padding_top?item.data.padding_top:0,paddingBottom:item.data.padding_bottom!=undefined&&item.data.padding_bottom?item.data.padding_bottom:0}}>
+                                <div className={`${styles.diy_part_wrap} ${styles.allow_show_edit}`} style={{backgroundColor:item.data.bg_color!=undefined&&item.data.bg_color?item.data.bg_color:'#fff',marginTop:item.data.padding_top!=undefined&&item.data.padding_top?item.data.padding_top:0,marginBottom:item.data.padding_bottom!=undefined&&item.data.padding_bottom?item.data.padding_bottom:0}}>
                                   {data_json.type == 'adv_01' &&
                                   <Adv_01 tpl_info={data_json} full_screen={item.data.full_screen!=undefined?item.data.full_screen:0}
                                           save_tpl_data={(val, html) => this.save_tpl_data(val, html, index)}/>

+ 3 - 3
xinkeaboard-seller/src/pages/store/pc_diy/edit_diy_page_head.js

@@ -173,15 +173,15 @@ export default class EditDdiyPageHead extends Component {
                        style={{ color: 'rgb(153,153,153)' }}/>
                 <input type="submit" value={sldComLanguage('搜索')} className={styles.button}/>
               </form>
-              <input type="submit" value={sldComLanguage('搜本店')} className={`${styles.button} ${styles.fl}`}
-                     style={{ background: '#333' }}/>
+              {/* <input type="submit" value={sldComLanguage('搜本店')} className={`${styles.button} ${styles.fl}`}
+                     style={{ background: '#333' }}/> */}
             </div>
 
             <div className={styles.sld_cart_wrap}>
               <dl>
                 <dt className={`${styles.ld} ${styles.cart_icon_text_wrap}`}
                     style={{ borderBottom: '1px solid rgb(239, 239, 239)' }}>
-                  <span className={styles.iconfont}>{sldSvgIcon('#e2231a',16,16,'youxiang')}</span>
+                  <span className={styles.iconfont}>{sldSvgIcon('#036EB8',16,16,'youxiang')}</span>
                   <a href="javascript:void(0)">{sldComLanguage('我的询盘')}</a>
                   {/*<div className={styles.cart_goods_num}>0</div>*/}
                 </dt>

+ 58 - 48
xinkeaboard-seller/src/pages/store/pc_diy/edit_diy_page_head.less

@@ -3,15 +3,15 @@
 
 .header_wrap {
   width: 100%;
-  height: 33px;
+  height: 45px;
   background: #f7f7f7;
   display: flex;
   align-items: center;
   justify-content: center;
 
   .header {
-    width: 1210px;
-    height: 33px;
+    width: 1440px;
+    height: 45px;
     display: flex;
     justify-content: space-between;
     align-items: center;
@@ -168,12 +168,15 @@
 }
 .sld_store_header {
   width: 100%;
+  background: #F6F8FA;
   .container {
-    width: 1210px;
+    display: flex;
+    align-items: center;
+    width: 1440px;
     margin: 0 auto;
     padding-left: 0;
     padding-right: 0;
-    height: 99px;
+    height: 80px;
     position: relative;
     z-index: 12;
 
@@ -183,14 +186,16 @@
     }
 
     .left {
+      height: 100%;
+      display: flex;
+      align-items: center;
       position: relative;
-      float: left;
       width: 440px;
 
       .sld_img_center {
         display: block;
         width: 135px;
-        height: 98px;
+        height: 100%;
         position: relative;
 
         img {
@@ -212,14 +217,17 @@
         width: 1px;
         height: 44px;
         background-color: #EBEBEB;
-        margin: 32px 18px 0 18px;
+        margin: 0 18px;
       }
 
       .sld_store_rate {
+        // height: 100%;
+        // display: flex;
+        // justify-content: center;
+        // align-items: center;
         position: relative;
-        margin-top: 38px;
+        // margin-top: 38px;
         cursor: pointer;
-        padding-bottom: 23px;
 
         &:hover {
           .sld_store_info_more {
@@ -370,17 +378,19 @@
     }
 
     .search_wrap {
-      width: 550px;
-      float: left;
-      padding-top: 4px;
-      margin-top: 30px;
+      flex: 1;
+      width: 100%;
 
       form {
-        width: 443px;
-        border: 2px solid #e2231a;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        width: 536px;
+        border: 2px solid @theme-color;
 
         .text {
-          width: 334px;
+          flex: 1;
+          width: 100%;
           -webkit-appearance: none;
           -webkit-border-radius: 0;
           height: 34px;
@@ -405,7 +415,7 @@
 
       .button {
         width: 103px;
-        background: #e2231a;
+        background: @theme-color;
         font-size: 16px;
         font-weight: 600;
         color: #fff;
@@ -443,11 +453,15 @@
 
     .sld_store_nav {
       width: 100%;
-      height: 38px;
-      line-height: 38px;
-      background-color: #080808;
+      height: 48px;
+      line-height: 48px;
+      background: @theme-linear;
 
       .sld_all_store_cat {
+        height: 100%;
+        font-weight: 400;
+        font-size: 12px;
+        color: #FFFFFF;
         &:hover {
           .sld_store_first_cat {
             display: block !important;
@@ -457,9 +471,9 @@
 
       .sld_store_first_cat {
         position: absolute;
-        top: 38px;
+        top: 48px;
         left: 0;
-        width: 171px;
+        width: 200px;
         font-size: 15px;
         background-color: #ffffff;
         z-index: 119;
@@ -471,7 +485,7 @@
           height: 40px;
           line-height: 40px;
           box-sizing: border-box;
-          border-bottom: 1px solid rgba(0, 0, 0, .2);
+          border-bottom: 1px solid rgba(0, 0, 0, 0.2);
 
           a {
             display: block;
@@ -526,7 +540,7 @@
           width: 171px;
           background-color: #ffffff;
           color: #333333;
-          font-size: 17px;
+          font-size: 12px;
           padding: 0;
           cursor: pointer;
 
@@ -544,7 +558,7 @@
       }
 
       ul {
-        width: 1210px;
+        width: 1440px;
         margin: 0 auto;
         position: relative;
       }
@@ -553,20 +567,16 @@
         position: absolute;
         left: 171px;
         width: 810px;
-        height: 38px;
+        height: 100%;
         overflow: hidden;
       }
     }
   }
 
   .sld_cart_wrap {
-    float: right;
-    position: relative;
-    z-index: 99;
     width: 165px;
     height: 40px;
-    margin-top: 34px;
-    margin-right: 13px;
+    text-align: center;
 
     dl {
       margin-bottom: 0px;
@@ -574,7 +584,7 @@
       .cart_goods_num {
         font: 11px/16px Verdana;
         color: #FFF;
-        background: #e2231a;
+        background: @theme-color;
         text-align: center;
         display: inline-block;
         height: 16px;
@@ -596,8 +606,8 @@
 
         .iconfont {
           display: inline-block;
-          margin: 0 13px 0 12px;
-          color: #e2231a;
+          margin: 0 13px 0 0px;
+          color: @theme-color;
           font-weight: 600;
           vertical-align: bottom;
           font-size: 17px;
@@ -609,7 +619,7 @@
 
         &.cart_icon_text_wrap {
           a {
-            color: #666666;
+            color: @theme-color;
             font-size: 14px;
             line-height: 36px;
           }
@@ -722,20 +732,20 @@
   .search_line{
     width: 1px;
     height: 20px;
-    border: 1px solid #FFFFFF;
+    border: 1px solid #ffffff;
     opacity: 0.5;
     position: absolute;
-    right: 210px;
-    top: 8px;
+    right: 300px;
+    top: 14px;
   }
   .search_modle{
-    width: 192px;
+    width: 282px;
     position: absolute;
     right: 0;
-    height: 38px;
+    height: 100%;
     .search_input{
-      width: 160px;
-      height: 20px;
+      width: 100%;
+      height: 32px;
       background: #FFFFFF;
       border-radius: 2px 0 0 2px;
       display: block;
@@ -745,15 +755,15 @@
     }
     .search_input_button{
       display: block;
-      width: 50px;
-      height: 20px;
-      background: #e2231a;
+      width: 72px;
+      height: 32px;
+      background: @theme-color;
       border-radius: 0 2px 2px 0;
       font-size: 12px;
       //font-family: Microsoft YaHei;
       font-weight: 400;
-      color: #FFFFFF;
-      line-height: 20px;
+      color: #ffffff;
+      line-height: 32px;
       text-align: center;
       cursor: pointer;
     }

+ 135 - 96
xinkeaboard-seller/src/pages/store/pc_diy/pcdecorate.less

@@ -1,4 +1,5 @@
 @import '~antd/lib/style/themes/default.less';
+@import '../../../themeColor.less';
 
 /* 装修页面样式-start */
 div, p, ul {
@@ -50,7 +51,7 @@ a {
 }
 
 .main_banner_item_wrap{
-  height: 457px;
+  height: 520px;
 }
 
 .flash_wrap {
@@ -132,8 +133,8 @@ a {
 }
 
 .adv_01_img {
-  max-width: 100%;
-  max-height: 100%;
+  width: 100%;
+  height: 100%;
 }
 
 .modal_tip_color {
@@ -153,8 +154,8 @@ a {
 }
 
 .adv_02_part {
-  width: 1210px;
-  height: 344px;
+  width: 1440px;
+  height: 540px;
   background: #fff;
   display: flex;
   flex-direction: row;
@@ -163,9 +164,10 @@ a {
 }
 
 .adv_02_part .adv_02_left {
-  width: 210px;
-  height: 344px;
-  background-image: url('@/assets/pc_diy_img/adv_floor_02_left.png');
+  width: 250px;
+  height: 100%;
+  // background-image: url('@/assets/pc_diy_img/adv_floor_02_left.png');
+  background-repeat: no-repeat;
   position: relative;
   cursor: pointer;
   display: flex;
@@ -175,14 +177,16 @@ a {
 }
 
 .adv_02_part .adv_02_left img {
-  max-width: 100%;
-  max-height: 100%;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
 }
 
 .adv_02_part .adv_02_center {
-  width: 736px;
-  height: 344px;
-  background-image: url('@/assets/pc_diy_img/adv_floor_02_goods.png');
+  width: 890px;
+  height: 100%;
+  // background-image: url('@/assets/pc_diy_img/adv_floor_02_goods.png');
+  background-repeat: no-repeat;
   position: relative;
   word-break: break-all;
   overflow: hidden;
@@ -191,10 +195,10 @@ a {
 
 .adv_02_part .adv_02_center .split_h {
   position: absolute;
-  width: 736px;
+  width: 100%;
   height: 1px;
   background-color: #F0F2F3;
-  top: 172px;
+  top: 270px;
   left: 0;
   z-index: 2;
 }
@@ -202,23 +206,23 @@ a {
 .adv_02_part .adv_02_center .split_v {
   position: absolute;
   width: 1px;
-  height: 344px;
+  height: 100%;
   background-color: #F0F2F3;
-  left: 368px;
+  left: 445px;
   top: 0;
   z-index: 2;
 }
 
 .adv_02_part .adv_02_right {
-  width: 253px;
-  height: 344px;
+  width: 300px;
+  height: 100%;
   display: flex;
   flex-direction: column;
-  justify-content: center;
-  align-items: flex-start;
+  justify-content: space-around;
+  align-items: center;
   position: relative;
-  background-image: url('@/assets/pc_diy_img/adv_floor_02_right.png');
-
+  // background-image: url('@/assets/pc_diy_img/adv_floor_02_right.png');
+  background-repeat: no-repeat;
 }
 
 .imgs_wrap {
@@ -267,18 +271,19 @@ a {
 }
 
 .adv_02_right .right_img_item {
-  width: 242px;
-  height: 108px;
+  width: 250px;
+  height: 150px;
   display: flex;
   flex-direction: row;
-  justify-content: center;
+  justify-content: space-around;
   align-items: center;
   margin-top: 6px;
 }
 
 .adv_02_right .right_img_item img {
-  max-width: 100%;
-  max-height: 100%;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
 }
 
 .modal_goods_wrap {
@@ -329,12 +334,14 @@ a {
 }
 
 .adv_02_center .goods_item {
-  width: 363px;
-  height: 171px;
-  padding: 6px;
+  // display: flex;
+  display: inline-flex;
+  justify-content: center;
+  align-items: center;
+  width: 445px;
+  height: 270px;
   background: #fff;
   cursor: pointer;
-  display: inline-block;
 }
 
 .clearfix {
@@ -344,17 +351,18 @@ a {
 
 .adv_02_center .goods_item .left {
   float: left;
-  width: 160px;
-  height: 160px;
+  width: 192px;
+  height: 192px;
   display: table-cell;
   vertical-align: middle;
   text-align: center;
+  margin-right: 10px;
 }
 
 .adv_02_center .goods_item .left img {
-  max-width: 140px;
-  max-height: 140px;
-  margin-top: 10px;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
 }
 
 .adv_02_center .goods_item .right {
@@ -365,13 +373,17 @@ a {
 .adv_02_center .goods_item .right .goods_name {
   color: #333;
   font-size: 1rem;
-  height: 2.6rem;
+  height: 80px;
   line-height: 1.3rem;
   overflow: hidden;
   text-overflow: ellipsis;
   margin-bottom: 0;
   margin-top: 13px;
   word-break: break-all;
+  display: -webkit-box;
+  -webkit-line-clamp: 4;
+  /*! autoprefixer: off */
+  -webkit-box-orient: vertical;
 }
 
 .adv_02_center .goods_item .right .buy_num {
@@ -428,6 +440,7 @@ a {
 
 .adv_04_wrap {
   height: auto;
+  width: 1440px;
   min-height: 374px;
 }
 
@@ -442,19 +455,19 @@ a {
 .adv_04_wrap .floor_title h2 {
   width: 100%;
   line-height: 35px;
-  text-align: center;
   margin: 0 auto;
   font-size: 28px;
   color: #333;
   height: 35px;
   padding-left: 10px;
+  text-align: left;
 }
 
 .adv_04_wrap .floor_title h2 font {
   display: inline-block;
   width: 80px;
   height: 1px;
-  background: red;
+  background: @theme-color;
   position: relative;
   top: 20px;
 }
@@ -462,7 +475,7 @@ a {
 .adv_04_wrap .floor_title h2 span {
   font-size: 24px;
   margin: 0 20px;
-  color: red;
+  color: @theme-color;
   width: auto;
   min-width: 30px;
   height: 35px;
@@ -481,34 +494,42 @@ a {
 
 .adv_04_wrap .floor_goods .item {
   float: left;
-  width: 234px;
-  height: 310px;
-  margin: 0 10px 10px 0;
-  padding: 24px 31px 26px 31px;
+  width: 288px;
+  height: 326px;
   background-color: #FFF;
 }
 
-.adv_04_wrap .floor_goods .item:nth-child(5n+5) {
-  margin-right: 0 !important;
+.adv_04_wrap .floor_goods .item:nth-child(n + 6) {
+  border-bottom: 1px solid #f2f2f2;
+}
+.adv_04_wrap .floor_goods .item:nth-child(-n + 6) {
+  border-top: 1px solid #f2f2f2;
+  border-bottom: 1px solid #f2f2f2;
+}
+
+.adv_04_wrap .floor_goods .item {
+  border-right: 1px solid #f2f2f2;
 }
 
 .adv_04_wrap .floor_goods .item .wrap {
-  width: 172px;
-  text-align: center;
-  margin: 0 auto;
-  font-size: 14px;
-  position: relative;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
 }
 
 .adv_04_wrap .floor_goods .item .wrap img {
-  width: 170px;
-  height: 170px;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
   display: block;
 }
 
 .adv_04_wrap .floor_goods .item .wrap .example_text {
-  width: 170px;
-  height: 170px;
+  width: 232px;
+  height: 232px;
   display: block;
   color: #777;
   text-align: center;
@@ -528,10 +549,13 @@ a {
 }
 
 .adv_04_wrap .floor_goods .item .wrap .title {
-  margin: 26px 0 18px 0;
-  max-height: 38px;
+  margin: 20px 0 5px 0;
   height: 38px;
+  font-weight: bold;
+  font-size: 16px;
+  color: #282E30;
   overflow: hidden;
+  text-align: center;
   text-overflow: ellipsis;
   display: -webkit-box;
   -webkit-line-clamp: 2;
@@ -539,7 +563,8 @@ a {
   -webkit-box-orient: vertical;
   word-wrap: break-word;
   word-break: normal;
-  display: inline-block;
+  width: 100%;
+  padding: 0 20px;
 }
 
 .adv_04_wrap .floor_goods .item .wrap .title a {
@@ -1476,6 +1501,10 @@ a {
 /* adv_11-end */
 
 /* adv_12-start */
+.adv_12 {
+  width: 1440px;
+  margin: 0 auto;
+}
 .adv_12 .adv_12_wrap {
   width: 100%;
   position: relative;
@@ -1485,19 +1514,20 @@ a {
 
 .adv_12 .adv_12_wrap .item {
   float: left;
-  width: 396px;
+  width: 470px;
   background-color: #FFFFFF;
-  height: 450px;
+  height: 535px;
   padding: 10px;
   position: relative;
 }
 
 .adv_12 .adv_12_wrap .item:first-child {
   margin-right: 10px;
+  width: 480px;
 }
 
 .adv_12 .adv_12_wrap .item:last-child {
-  margin-left: 10px;
+  // margin-left: 5px;
 }
 
 .adv_12 .adv_12_wrap .item.clear_padding {
@@ -1505,8 +1535,8 @@ a {
 }
 
 .adv_12 .adv_12_wrap .item .l_img {
-  width: 396px;
-  height: 450px;
+  width: 480px;
+  height: 535px;
   display: block;
   overflow: hidden;
   position: relative;
@@ -1546,8 +1576,9 @@ a {
 }
 
 .adv_12 .adv_12_wrap .item a img {
-  max-width: 100%;
-  max-height: 100%;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
 }
 
 .adv_12 .adv_12_wrap .item a span {
@@ -1563,8 +1594,8 @@ a {
 
 .adv_12 .adv_12_wrap .item.center a {
   float: left;
-  width: 183px;
-  height: 210px;
+  width: 220px;
+  height: 250px;
   margin-bottom: 10px;
   display: block;
 }
@@ -1591,8 +1622,8 @@ a {
 }
 
 .adv_12 .adv_12_wrap .item.right .title_wrap{
-  height: 50px;
-  line-height: 50px;
+  height: 60px;
+  line-height: 60px;
   position: relative;
 }
 .adv_12 .adv_12_wrap .item.right .title_wrap .title{
@@ -1611,30 +1642,36 @@ a {
 }
 
 .adv_12 .adv_12_wrap .item.right .img_top{
-  width: 376px;
-  height: 180px;
+  width: 470px;
+  height: 215px;
   margin: 10px 0px;
   position: relative;
 }
 .adv_12 .adv_12_wrap .item.right .img_bottom{
   position: relative;
-  width: 376px;
-  height: 180px;
+  width: 470px;
+  height: 220px;
 }
 .adv_12 .adv_12_wrap .item.right .img_bottom a {
   float: left;
-  width: 183px;
-  height: 180px;
+  width: 220px;
+  height: 215px;
   position: relative;
   text-align: center;
 }
 .adv_12 .adv_12_wrap .item.right .img_bottom a:last-child{
-  margin-left: 10px;
+  margin-left: 30px;
 }
 /* adv_12-end */
 
 /* adv_13-start */
+.adv_13 {
+  width: 1440px;
+  height: 535px;
+  margin: 0 auto;
+}
 .adv_13 .adv_13_wrap {
+  height: 100%;
   width: 100%;
   position: relative;
   clear: both;
@@ -1643,19 +1680,20 @@ a {
 
 .adv_13 .adv_13_wrap .item {
   float: left;
-  width: 396px;
+  width: 470px;
   background-color: #FFFFFF;
-  height: 450px;
+  height: 100%;
   padding: 10px;
   position: relative;
 }
 
-.adv_13 .adv_13_wrap .item:first-child {
+.adv_13 .adv_13_wrap .item {
   margin-right: 10px;
 }
 
 .adv_13 .adv_13_wrap .item:last-child {
-  margin-left: 10px;
+  margin-right: 0;
+  width: 480px;
 }
 
 .adv_13 .adv_13_wrap .item.clear_padding {
@@ -1663,8 +1701,8 @@ a {
 }
 
 .adv_13 .adv_13_wrap .item .l_img {
-  width: 396px;
-  height: 450px;
+  width: 480px;
+  height: 535px;
   display: block;
   overflow: hidden;
   position: relative;
@@ -1704,8 +1742,9 @@ a {
 }
 
 .adv_13 .adv_13_wrap .item a img {
-  max-width: 100%;
-  max-height: 100%;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
 }
 
 .adv_13 .adv_13_wrap .item a span {
@@ -1721,8 +1760,8 @@ a {
 
 .adv_13 .adv_13_wrap .item.center a {
   float: left;
-  width: 183px;
-  height: 210px;
+  width: 220px;
+  height: 215px;
   margin-bottom: 10px;
   display: block;
 }
@@ -1749,8 +1788,8 @@ a {
 }
 
 .adv_13 .adv_13_wrap .item.right .title_wrap{
-  height: 50px;
-  line-height: 50px;
+  height: 60px;
+  line-height: 60px;
   position: relative;
 }
 .adv_13 .adv_13_wrap .item.right .title_wrap .title{
@@ -1769,20 +1808,20 @@ a {
 }
 
 .adv_13 .adv_13_wrap .item.right .img_top{
-  width: 376px;
-  height: 180px;
-  margin: 10px 0px;
+  width: 450px;
+  height: 215px;
+  margin: 20px 0px;
   position: relative;
 }
 .adv_13 .adv_13_wrap .item.right .img_bottom{
   position: relative;
-  width: 376px;
-  height: 180px;
+  width: 460px;
+  height: 215px;
 }
 .adv_13 .adv_13_wrap .item.right .img_bottom a {
   float: left;
-  width: 183px;
-  height: 180px;
+  width: 220px;
+  height: 215px;
   position: relative;
   text-align: center;
 }

+ 2 - 1
xinkeaboard-seller/src/utils/utils.js

@@ -1382,7 +1382,8 @@ export function getSldStatYTitle() {
  * */
 export function sldComRequest(method, url, params, data_type = '') {
   const state = window.g_app._store.getState();
-  const currentSite = state.global.currentSite || localStorage.getItem('currentSite');
+  const { webSite = '' } = state.routing.location.query;
+  const currentSite = webSite || state.global.currentSite || localStorage.getItem('currentSite');
   const currentPath = state.routing.location.pathname;
   if (!currentPath.includes('/apply') && !currentPath.includes('/user/login')) {
     params = Object.assign({}, { webSite: currentSite }, params ?? {})

+ 53 - 0
xinkeaboard-server/b2b2c-core/src/main/java/com/slodon/b2b2c/core/util/HttpClientUtil.java

@@ -156,6 +156,59 @@ public class HttpClientUtil {
 
 
     /**
+     * 发送HTTP POST请求,使用String类型作为请求体参数
+     * @param url 请求URL
+     * @param params 请求体参数(通常为JSON字符串)
+     * @param headers 请求头信息
+     * @return 响应结果字符串
+     * @throws Exception 可能抛出的异常
+     */
+    public static String httpPost201(String url, String params, HashMap<String, String> headers) throws Exception {
+        String result = "";
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+
+        // 设置最大请求和传输超时时间
+        RequestConfig requestConfig = RequestConfig.custom()
+                .setSocketTimeout(50000)
+                .setConnectTimeout(50000)
+                .build();
+        httpPost.setConfig(requestConfig);
+
+        // 设置请求头
+        if (headers != null && !headers.isEmpty()) {
+            for (String key : headers.keySet()) {
+                httpPost.addHeader(key, headers.get(key));
+            }
+        }
+
+        // 设置请求体参数
+        if (params != null && !params.isEmpty()) {
+            // 使用StringEntity直接设置字符串作为请求体
+            StringEntity stringEntity = new StringEntity(params, StandardCharsets.UTF_8);
+            httpPost.setEntity(stringEntity);
+        }
+
+        CloseableHttpResponse response = httpClient.execute(httpPost);
+
+        try {
+            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED || response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity entity = response.getEntity();
+                result = EntityUtils.toString(entity, StandardCharsets.UTF_8);
+                EntityUtils.consume(entity);
+            } else {
+                throw new Exception(response.getStatusLine().toString());
+            }
+        } finally {
+            response.close();
+            httpClient.close();
+        }
+        return result;
+    }
+
+
+
+    /**
      * http POST 请求,支持自定义请求头
      *
      * @param url     请求URL

+ 1 - 0
xinkeaboard-server/b2b2c-core/src/main/resources/i18n_en.properties

@@ -379,6 +379,7 @@ labelIds格式错误,请重试=labelIds format error, please try again
 属性值不存在=Property value does not exist
 货品不存在,请重试!=Goods do not exist, please try again!
 商品不存在,请重试!=Commodity does not exist, please try again!
+商品已下架,请重试!=Goods are out of stock, please try again!
 未查询到货品,请重试!=No inquiry into the goods, please try again!
 货品id不能为空=Goods id can not be empty
 城市编码不能为空=City Codes can not be empty

+ 4 - 0
xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/seller/example/VendorExample.java

@@ -139,4 +139,8 @@ public class VendorExample implements Serializable {
      * gp系统用户token
      */
     private String gpToken;
+
+    private String storeUrlBy9710;
+
+    private String storeUrlBy9810;
 }

+ 3 - 0
xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/statistics/pojo/base/StoreBase.java

@@ -81,6 +81,9 @@ public class StoreBase implements Serializable {
     @ApiModelProperty("新增商品数")
     private Integer newGoodsNum;
 
+    @ApiModelProperty("新增品牌数")
+    private Integer newBrandNum;
+
     @ApiModelProperty("被收藏商品数")
     private Integer collectionGoodsNum;
 

+ 4 - 0
xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/system/pojo/Navigation.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * PC导航栏
@@ -28,4 +29,7 @@ public class Navigation implements Serializable {
 
     @ApiModelProperty("链接数据,json类型,包含链接类型、链接地址等")
     private String data;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
 }

+ 4 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/bo/StoreStatsBO.java

@@ -5,6 +5,7 @@ import com.slodon.b2b2c.business.pojo.OrderProduct;
 import com.slodon.b2b2c.business.pojo.OrderReturn;
 import com.slodon.b2b2c.core.util.StringUtil;
 import com.slodon.b2b2c.goods.pojo.Goods;
+import com.slodon.b2b2c.goods.pojo.GoodsBrand;
 import com.slodon.b2b2c.member.pojo.Member;
 import com.slodon.b2b2c.statistics.pojo.MemberBehavior;
 import com.slodon.b2b2c.statistics.pojo.base.StoreBase;
@@ -37,6 +38,8 @@ public class StoreStatsBO {
     private List<MemberBehavior> memberBehaviorList = new ArrayList<>();
     @ApiModelProperty("店铺新增商品列表")
     private List<Goods> storeNewGoodsList = new ArrayList<>();
+    @ApiModelProperty("店铺新增品牌列表")
+    private List<GoodsBrand> storeNewBrandList = new ArrayList<>();
     @ApiModelProperty("统计阶段内的新会员列表,用于统计店铺新增用户数,规则为:统计阶段内的新会员,访问了店铺,即定义为店铺的新增用户")
     private List<Member> newMemberList = new ArrayList<>();
 
@@ -68,6 +71,7 @@ public class StoreStatsBO {
         storeBase.setGoodsViewNum(0);
         storeBase.setViewGoodsNum(0);
         storeBase.setNewGoodsNum(storeNewGoodsList.size());
+        storeBase.setNewBrandNum(storeNewBrandList.size());
         storeBase.setCollectionGoodsNum(0);
         storeBase.setCollectionStoreNum(0);
         storeBase.setSalingGoodsNum(0);

+ 12 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/config/ProductConfig.java

@@ -0,0 +1,12 @@
+package com.slodon.b2b2c.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "product")
+@Data
+public class ProductConfig {
+    private String url;
+}

+ 19 - 4
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/admin/GoodsController.java

@@ -1,10 +1,7 @@
 package com.slodon.b2b2c.controller.goods.admin;
 
 import com.slodon.b2b2c.aop.OperationLogger;
-import com.slodon.b2b2c.core.constant.GoodsAnnexStatusConst;
-import com.slodon.b2b2c.core.constant.GoodsCategoryConst;
-import com.slodon.b2b2c.core.constant.GoodsConst;
-import com.slodon.b2b2c.core.constant.RedisConst;
+import com.slodon.b2b2c.core.constant.*;
 import com.slodon.b2b2c.core.controller.BaseController;
 import com.slodon.b2b2c.core.response.JsonResult;
 import com.slodon.b2b2c.core.response.PageVO;
@@ -20,8 +17,11 @@ import com.slodon.b2b2c.goods.pojo.*;
 import com.slodon.b2b2c.member.example.GoodsAnnexExample;
 import com.slodon.b2b2c.model.goods.*;
 import com.slodon.b2b2c.model.seller.StoreLabelBindGoodsModel;
+import com.slodon.b2b2c.model.seller.VendorModel;
 import com.slodon.b2b2c.seller.example.StoreLabelBindGoodsExample;
+import com.slodon.b2b2c.seller.example.VendorExample;
 import com.slodon.b2b2c.seller.pojo.StoreLabelBindGoods;
+import com.slodon.b2b2c.seller.pojo.Vendor;
 import com.slodon.b2b2c.vo.goods.GoodsVO;
 import com.slodon.b2b2c.vo.goods.ProductVO;
 import com.slodon.b2b2c.vo.goods.SellerGoodsDetailVO;
@@ -66,6 +66,9 @@ public class GoodsController extends BaseController {
     @Resource
     private GoodsAnnexModel goodsAnnexModel;
 
+    @Resource
+    private VendorModel vendorModel;
+
 
 
     @ApiOperation("获取商品列表")
@@ -129,6 +132,7 @@ public class GoodsController extends BaseController {
                 example.setCategoryId3(goodsCategoryId);
             }
         }
+        example.setOrderBy("update_time desc");
         List<Goods> goodsList = goodsModel.getGoodsList(example, pager);
         List<GoodsVO> vos = new ArrayList<>();
         if (!CollectionUtils.isEmpty(goodsList)) {
@@ -252,6 +256,17 @@ public class GoodsController extends BaseController {
         String logMsg = "下架商品ID" + goodsIds;
         int number = goodsModel.goodsLockup(goodsLookUpDTO);
 
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(goods.getStoreId());
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            //设置状态为下架
+            goods.setState(GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
+
         //删除商品缓存信息
         for (String goodsId : goodsIds.split(",")) {
             objectRedisTemplate.opsForHash().delete(RedisConst.GOODS_DETAIL, String.valueOf(goodsId));

+ 1 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/front/FrontGoodsCategoryController.java

@@ -78,6 +78,7 @@ public class FrontGoodsCategoryController extends BaseController {
             for (int i = 0; i < jsonArray.size(); i++) {
                 JSONObject jsonObject = jsonArray.getJSONObject(i);
                 FrontGoodsCategoryVO vo = new FrontGoodsCategoryVO();
+                vo.setWebSite(jsonObject.getString("webSite"));
                 vo.setCategoryId(jsonObject.getInteger("categoryId"));
                 vo.setCategoryName(jsonObject.getString("categoryName"));
                 vo.setPid(jsonObject.getInteger("pid"));

+ 40 - 22
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/front/GoodsDetailsController.java

@@ -136,9 +136,12 @@ public class GoodsDetailsController extends BaseController {
 
         //缓存不存在,查库并缓存
         Goods goods = goodsModel.getGoodsByGoodsId(goodsId);
-        AssertUtil.notNull(goods, "商品不存在,请重试!");
+//        AssertUtil.notNull(goods, "商品不存在,请重试!");
+//        if (!goods.getState().equals(GoodsConst.GOODS_STATE_UPPER)) {
+//            return SldResponse.fail("商品已下架,请重试!");
+//        }
         GoodsExtend goodsExtend = goodsExtendModel.getGoodsExtendByGoodsId(goodsId);
-        AssertUtil.notNull(goodsExtend, "商品不存在,请重试!");
+//        AssertUtil.notNull(goodsExtend, "商品不存在,请重试!");
 
         SysSeoVO sysSeoVO = storeModel.getRecordByTargetIdAndTypeForGoodsDetail(goodsId, SeoTypeConstant.SEO_TYPE_GOODS);
 
@@ -161,15 +164,19 @@ public class GoodsDetailsController extends BaseController {
         //是否关注店铺
         Boolean isFollowStore = checkIsFollowStore(member.getMemberId(), product.getStoreId());
 
-        //查询规格图片
-        GoodsPictureExample goodsPictureExample = new GoodsPictureExample();
-        goodsPictureExample.setOrderBy("is_main asc,picture_id asc");
-        goodsPictureExample.setGoodsId(goodsId);
-        //有主规格
-        if (goodsExtend.getMainSpecId() != 0) {
-            goodsPictureExample.setSpecValueIdIn(product.getSpecValueIds());
+        List<GoodsPicture> goodsPictureList = new ArrayList<>();
+        if (goodsExtend != null) {
+            //查询规格图片
+            GoodsPictureExample goodsPictureExample = new GoodsPictureExample();
+            goodsPictureExample.setOrderBy("is_main asc,picture_id asc");
+            goodsPictureExample.setGoodsId(goodsId);
+            //有主规格
+            if (goodsExtend.getMainSpecId() != 0) {
+                goodsPictureExample.setSpecValueIdIn(product.getSpecValueIds());
+            }
+            goodsPictureList = goodsPictureModel.getGoodsPictureList(goodsPictureExample, null);
         }
-        List<GoodsPicture> goodsPictureList = goodsPictureModel.getGoodsPictureList(goodsPictureExample, null);
+
         String webSite = WebUtil.getWebSite(request);
         Store store = storeModel.getStoreByStoreId(goods.getStoreId());
         Integer isOwnStore = store.getIsOwnStore();
@@ -213,7 +220,9 @@ public class GoodsDetailsController extends BaseController {
         //物流发货信息
         GoodsFrontDetailVO.DeliverInfo deliverInfo = null;
         if (goods.getIsVirtualGoods() == GoodsConst.IS_VIRTUAL_GOODS_1) {
-            deliverInfo = getDeliverInfo(goodsExtend, product, member);
+            if (goodsExtend != null) {
+                deliverInfo = getDeliverInfo(goodsExtend, product, member);
+            }
         }
         //商品说明书
         GoodsAnnexExample goodsAnnexExample = new GoodsAnnexExample();
@@ -265,9 +274,12 @@ public class GoodsDetailsController extends BaseController {
         Long goodsId = product.getGoodsId();
 
         Goods goods = goodsModel.getGoodsByGoodsId(goodsId);
-        AssertUtil.notNull(goods, "商品不存在,请重试!");
+//        AssertUtil.notNull(goods, "商品不存在,请重试!");
+//        if (!goods.getState().equals(GoodsConst.GOODS_STATE_UPPER)) {
+//            return SldResponse.fail("商品已下架,请重试!");
+//        }
         GoodsExtend goodsExtend = goodsExtendModel.getGoodsExtendByGoodsId(goodsId);
-        AssertUtil.notNull(goodsExtend,  "商品不存在,请重试!");
+//        AssertUtil.notNull(goodsExtend,  "商品不存在,请重试!");
 
         //seo
         SysSeoVO sysSeoVO = storeModel.getRecordByTargetIdAndTypeForGoodsDetail(goodsId, SeoTypeConstant.SEO_TYPE_GOODS);
@@ -302,15 +314,19 @@ public class GoodsDetailsController extends BaseController {
         //是否关注店铺
         Boolean isFollowStore = checkIsFollowStore(member.getMemberId(), product.getStoreId());
 
-        //查询规格图片
-        GoodsPictureExample goodsPictureExample = new GoodsPictureExample();
-        goodsPictureExample.setOrderBy("is_main asc,picture_id asc");
-        goodsPictureExample.setGoodsId(goodsId);
-        //有主规格
-        if (goodsExtend.getMainSpecId() != 0) {
-            goodsPictureExample.setSpecValueIdIn(product.getSpecValueIds());
+        List<GoodsPicture> goodsPictureList = new ArrayList<>();
+        if (goodsExtend != null) {
+            //查询规格图片
+            GoodsPictureExample goodsPictureExample = new GoodsPictureExample();
+            goodsPictureExample.setOrderBy("is_main asc,picture_id asc");
+            goodsPictureExample.setGoodsId(goodsId);
+            //有主规格
+            if (goodsExtend.getMainSpecId() != 0) {
+                goodsPictureExample.setSpecValueIdIn(product.getSpecValueIds());
+            }
+            goodsPictureList = goodsPictureModel.getGoodsPictureList(goodsPictureExample, null);
         }
-        List<GoodsPicture> goodsPictureList = goodsPictureModel.getGoodsPictureList(goodsPictureExample, null);
+
 
         Store store = storeModel.getStoreByStoreId(goods.getStoreId());
         String webSite = WebUtil.getWebSite(request);
@@ -355,7 +371,9 @@ public class GoodsDetailsController extends BaseController {
         //物流发货信息
         GoodsFrontDetailVO.DeliverInfo deliverInfo = null;
         if (goods.getIsVirtualGoods() == GoodsConst.IS_VIRTUAL_GOODS_1) {
-            deliverInfo = getDeliverInfo(goodsExtend, product, member);
+            if (goodsExtend != null) {
+                deliverInfo = getDeliverInfo(goodsExtend, product, member);
+            }
         }
 
         GoodsFrontDetailVO goodsFrontDetailVO = new GoodsFrontDetailVO(goods, isFavorite, null, goodsExtend,

+ 5 - 3
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/goods/seller/GoodsSellerController.java

@@ -35,6 +35,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.lucene.spatial3d.Geo3DDocValuesField;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.util.CollectionUtils;
@@ -441,8 +442,8 @@ public class GoodsSellerController extends BaseController {
         if(insertDTO.getGoodsName().contains("&amp;")){
             insertDTO.setGoodsName(insertDTO.getGoodsName().replace("&amp;","&"));
         }
-        goodsSellerModel.saveGoods(vendor, insertDTO);
-
+        Goods goods = goodsSellerModel.saveGoods(vendor, insertDTO);
+        productModel.upsertProduct(goods, vendor);
         return SldResponse.success("发布商品成功", logMsg);
     }
 
@@ -469,7 +470,8 @@ public class GoodsSellerController extends BaseController {
         if(insertDTO.getGoodsName().contains("&amp;")){
             insertDTO.setGoodsName(insertDTO.getGoodsName().replace("&amp;","&"));
         }
-        goodsSellerModel.editGoods(vendor, insertDTO, goodsDb);
+        Goods goods = goodsSellerModel.editGoods(vendor, insertDTO, goodsDb);
+        productModel.upsertProduct(goods, vendor);
         return SldResponse.success("编辑商品成功", "商品名称" + paramDTO.getGoodsName());
     }
 

+ 12 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/MemberFollowStoreController.java

@@ -20,8 +20,11 @@ import com.slodon.b2b2c.member.pojo.MemberFollowStore;
 import com.slodon.b2b2c.model.goods.GoodsModel;
 import com.slodon.b2b2c.model.member.MemberFollowStoreModel;
 import com.slodon.b2b2c.model.seller.StoreModel;
+import com.slodon.b2b2c.model.seller.StoreNameModel;
 import com.slodon.b2b2c.model.seller.StoreSiteInfoModel;
+import com.slodon.b2b2c.seller.example.StoreNameExample;
 import com.slodon.b2b2c.seller.pojo.Store;
+import com.slodon.b2b2c.seller.pojo.StoreName;
 import com.slodon.b2b2c.vo.member.FollowStoreVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -60,7 +63,9 @@ public class MemberFollowStoreController extends BaseController {
     private StoreModel storeModel;
     @Resource
     private StringRedisTemplate stringRedisTemplate;
-    @Autowired
+    @Resource
+    private StoreNameModel storeNameModel;
+    @Resource
     private StoreSiteInfoModel storeSiteInfoModel;
 
     @ApiOperation("关注/取消关注商铺")
@@ -97,7 +102,7 @@ public class MemberFollowStoreController extends BaseController {
     @GetMapping("list")
     public JsonResult<FollowStoreVO> getList(HttpServletRequest request) {
         Member member = UserUtil.getUser(request, Member.class);
-        String webSite = WebUtil.getWebSite( request);
+        String webSite = WebUtil.getWebSite(request);
         //根据条件查询集合
         MemberFollowStoreExample example = new MemberFollowStoreExample();
         example.setMemberId(member.getMemberId());
@@ -118,10 +123,15 @@ public class MemberFollowStoreController extends BaseController {
                 String serviceScore = store.getServiceScore();
                 Integer followNumber = store.getFollowNumber();
                 if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)){
+                    StoreNameExample storeNameExample =new StoreNameExample();
+                    storeNameExample.setStoreId(store.getStoreId());
+                    storeNameExample.setWebSite(webSite);
+                    StoreName storeName=storeNameModel.getStoreNameByExample(storeNameExample);
                     store = storeSiteInfoModel.getStoreByStoreIdAndWebSite(store.getStoreId(), WebSiteConstant.MEMBER_DISTRIBUTOR);
                     if (StringUtils.isEmpty(store.getStoreId())){
                         throw new MallException("店铺不存在");
                     }
+                    store.setStoreName(storeName != null ? storeName.getStoreName() : "");
                     store.setState(state);
                     store.setIsOwnStore(isOwnStore);
                     store.setServiceScore(serviceScore);

+ 4 - 3
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/advich/MemberEmailActiveController.java

@@ -313,14 +313,15 @@ public class MemberEmailActiveController extends BaseController {
      */
     private JsonResult<Object> verifyCodeFromRedis(String redisKey, String verificationCode) {
         if (!stringRedisTemplate.hasKey(redisKey)) {
-            return SldResponse.fail("验证码已过期,请重新获取");
+            return SldResponse.fail("验证码校验失败");
         }
 
         String storedCode = stringRedisTemplate.opsForValue().get(redisKey);
         if (!verificationCode.equals(storedCode)) {
             return SldResponse.fail(ResponseConst.STATE_FAIL, "验证码校验失败");
         }
-
+        // 删除Redis中的验证码
+        stringRedisTemplate.delete(redisKey);
         return SldResponse.success("验证码校验成功");
     }
 
@@ -625,7 +626,7 @@ public class MemberEmailActiveController extends BaseController {
 
             return SldResponse.success("重置登录密码成功");
         }
-        return SldResponse.fail(ResponseConst.STATE_FAIL,"验证码已过期,请重新获取");
+        return SldResponse.fail(ResponseConst.STATE_FAIL,"验证码校验失败");
     }
 
 

+ 13 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/advich/MemberEnquiryController.java

@@ -162,7 +162,7 @@ public class MemberEnquiryController extends BaseController {
 
                 }
                 memberEnquiry.setItemName(itemName);
-                vos.add(new MemberEnquiryVO(memberEnquiry));
+                vos.add(new MemberEnquiryVO(memberEnquiry, webSite));
             });
         }
         return SldResponse.success(new PageVO<>(vos, example.getPager()));
@@ -176,6 +176,7 @@ public class MemberEnquiryController extends BaseController {
      */
     @GetMapping("phoneCode")
     public JsonResult<List<CountryPhoneCodeVO>> getPhoneCode(HttpServletRequest request) {
+        String  webSite = WebUtil.getWebSite(request);
         CountryExample example = new CountryExample();
         example.setOrderBy("id asc");
         ArrayList<CountryPhoneCodeVO> vos = new ArrayList<>();
@@ -188,9 +189,19 @@ public class MemberEnquiryController extends BaseController {
                 return Collator.getInstance(Locale.UK).compare(s1, s2);
             }
         });
+        if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)){
+            Collections.sort(list,new Comparator<Country>(){
+                @Override
+                public int compare(Country o1, Country o2) {
+                    String s1=o1.getZhName();
+                    String s2=o2.getZhName();
+                    return Collator.getInstance(Locale.SIMPLIFIED_CHINESE).compare(s1, s2);
+                }
+            });
+        }
         if (!CollectionUtils.isEmpty(list)) {
             list.forEach(country -> {
-                vos.add(new CountryPhoneCodeVO(country));
+                vos.add(new CountryPhoneCodeVO(country, webSite));
             });
         }
         return SldResponse.success(vos);

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

@@ -154,14 +154,12 @@ public class AdminStoreAuditController {
 
         //根据等级id获取等级名称
         StoreGrade storeGrade = storeGradeModel.getStoreGradeByGradeId(storeApply.getStoreGradeId());
-        if (storeGrade != null) {
-            vo.setStoreGradeName(storeGrade.getGradeName());
-        }
+        vo.setStoreGradeName(storeGrade != null ? storeGrade.getGradeName() : null);
 
         Store store = storeModel.getStoreByStoreId(storeApply.getStoreId());
-        if (store != null) {
-            vo.setOpenTime(store.getOpenTime());
-        }
+
+        vo.setOpenTime(store != null ? store.getOpenTime() : null);
+
 
         List<StoreBusinessVO> storeBusinessVOList = new ArrayList<>();
         StoreBusinessVO storeBusinessVO = new StoreBusinessVO();
@@ -249,12 +247,11 @@ public class AdminStoreAuditController {
 
             //根据等级id获取等级名称
             StoreGrade storeGrade = storeGradeModel.getStoreGradeByGradeId(storeApply.getStoreGradeId());
-            if (storeGrade != null) {
-                vo.setStoreGradeName(storeGrade.getGradeName());
-            }
+            vo.setStoreGradeName(storeGrade != null ? storeGrade.getGradeName() : null);
+
 
             Store store = storeModel.getStoreByStoreId(storeApply.getStoreId());
-            vo.setOpenTime(store.getOpenTime());
+            vo.setOpenTime(store != null ? store.getOpenTime() : null);
 
             List<StoreBusinessVO> storeBusinessVOList = new ArrayList<>();
             StoreBusinessVO storeBusinessVO = new StoreBusinessVO();
@@ -404,7 +401,7 @@ public class AdminStoreAuditController {
             @ApiImplicitParam(name = "openTime", value = "开店时长"),
     })
     @PostMapping("batchAudit")
-    public JsonResult<Object> batchAudit(HttpServletRequest request,@RequestBody StoreApplyAuditDTO storeApplyAuditDTO) {
+    public JsonResult<Object> batchAudit(HttpServletRequest request,StoreApplyAuditDTO storeApplyAuditDTO) {
         //参数校验
         String applyIds = storeApplyAuditDTO.getApplyIds();
         AssertUtil.notEmpty(applyIds, "绑定id不能为空");
@@ -469,6 +466,7 @@ public class AdminStoreAuditController {
                 }else{
                     throw new MallException("请选择开店时长");
                 }
+                storeApply.setStoreGradeIdCn(storeApply.getStoreGradeId());
                 int count = storeModel.openStore(storeApply);
                 total += count;
             } else {

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

@@ -121,14 +121,16 @@ public class AdminStoreController extends BaseController {
                 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);
             });

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

@@ -182,9 +182,12 @@ public class FrontStoreController {
                 store.setDescriptionScore(descriptionScore);
             }
         }
-        if (store.getState() != StoreConst.STORE_STATE_OPEN && store.getBusinessState() != StoreConst.STORE_BUSINESS_STATE_OPEN) {
+        if (store.getState() != StoreConst.STORE_STATE_OPEN) {
             throw new MallException("店铺已关闭", ResponseConst.STATE_STORE_CLOSE);
         }
+        if (store.getBusinessState() != StoreConst.STORE_BUSINESS_STATE_OPEN) {
+            throw new MallException("店铺暂停营业", ResponseConst.STATE_FAIL);
+        }
         //默认店铺logo
         if (StringUtil.isEmpty(store.getStoreLogo())) {
             store.setStoreLogo(stringRedisTemplate.opsForValue().get("default_image_store_logo"));

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/seller/seller/SellerApplyController.java

@@ -171,7 +171,7 @@ public class SellerApplyController extends BaseController {
         } else if (storeApplyList.get(0).getState() == StoreConst.STATE_3_FAIL_APPLY) {
             vo.setStateValue("您的店铺入驻审核未通过");
         } else {
-            vo.setStateValue("恭喜您成功入驻绿道云GPC2M出海营销平台");
+            vo.setStateValue("恭喜您成功入驻南京江北新区跨境出海服务营销平台");
         }
         return SldResponse.success(vo);
     }

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

@@ -139,11 +139,11 @@ public class SellerStoreProfileController {
         storeProfileTextList.setWebSite(webSite);
         //查询店铺简介内容表里是否存在这笔数据
         StoreProfileTextList storeProfileTextInfo = storeProfileTextListModel.getList(vendor.getStoreId(),webSite);
-        if(storeProfileTextInfo!=null){//更新
+        if (storeProfileTextInfo != null) {//更新
             storeProfileTextList.setUpdateId(vendor.getVendorId());
             storeProfileTextList.setUpdateTime(new Date());
-            storeProfileTextListModel.updateProfileText(storeProfileTextList,vendor.getStoreId());
-        }else{
+            storeProfileTextListModel.updateProfileText(storeProfileTextList, vendor.getStoreId());
+        } else {
             storeProfileTextList.setStoreId(vendor.getStoreId());
             storeProfileTextList.setCreateId(vendor.getVendorId());
             storeProfileTextList.setCreateTime(new Date());
@@ -163,7 +163,7 @@ public class SellerStoreProfileController {
 //        Store store = storeModel.getStoreByStoreId(vendor.getStoreId());
         StoreProfileTextVo storeProfileTextVo = new StoreProfileTextVo();
         //查询店铺简介内容表里是否存在这笔数据
-        StoreProfileTextList storeProfileTextInfo = storeProfileTextListModel.getList(vendor.getStoreId(),webSite);
+        StoreProfileTextList storeProfileTextInfo = storeProfileTextListModel.getList(vendor.getStoreId(), webSite);
         if(storeProfileTextInfo!=null){
             storeProfileTextVo.setContent(storeProfileTextInfo.getContent());
             storeProfileTextVo.setWebSite(storeProfileTextInfo.getWebSite());

+ 2 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/statistics/seller/SellerEnquiryAnalysisController.java

@@ -83,7 +83,7 @@ public class SellerEnquiryAnalysisController extends BaseController {
         memberEnquiryValidExample.setValidStatus(EnquiryConst.ENQUIRY_VALID);
         memberEnquiryValidExample.setStatusNotEqual(EnquiryConst.ENQUIRY_DELETE);
         memberEnquiryValidExample.setItemTypeIn(itemTypeStr);
-        memberEnquiryNewExample.setWebSite(webSite);
+        memberEnquiryValidExample.setWebSite(webSite);
         enquiryOverviewVO.setValidInquiryNum(memberEnquiryModel.getMemberEnquiryCount(memberEnquiryValidExample));
 
         //待分配询盘数
@@ -91,7 +91,7 @@ public class SellerEnquiryAnalysisController extends BaseController {
         memberEnquiryToAssignExample.setStoreId(vendor.getStoreId());
         memberEnquiryToAssignExample.setStatusEqual(EnquiryConst.ENQUIRY_NEW);
         memberEnquiryToAssignExample.setItemTypeIn(itemTypeStr);
-        memberEnquiryNewExample.setWebSite(webSite);
+        memberEnquiryToAssignExample.setWebSite(webSite);
         enquiryOverviewVO.setEnquiryToBeAssignNum(memberEnquiryModel.getMemberEnquiryCount(memberEnquiryToAssignExample));
 
         return SldResponse.success(enquiryOverviewVO);

+ 19 - 14
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/statistics/seller/SellerOverviewController.java

@@ -113,17 +113,18 @@ public class SellerOverviewController extends BaseController {
         //违规商品数
         GoodsExample goodsExample = new GoodsExample();
         goodsExample.setStoreId(vendor.getStoreId());
+        goodsExample.setWebSite(webSite);
         goodsExample.setState(GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
         goodsExample.setIsDelete(GoodsConst.GOODS_IS_DELETE_NO);
         sellerWaitDeal.setSysLowerGoodsNum(goodsModel.getGoodsCount(goodsExample));
 
-        //站点违规商品数
-        goodsExample = new GoodsExample();
-        goodsExample.setWebSite(webSite);
-        goodsExample.setStoreId(vendor.getStoreId());
-        goodsExample.setState(GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
-        goodsExample.setIsDelete(GoodsConst.GOODS_IS_DELETE_NO);
-        sellerWaitDeal.setSysWebSiteLowerGoodsNum(goodsModel.getGoodsCount(goodsExample));
+//        //站点违规商品数
+//        goodsExample = new GoodsExample();
+//        goodsExample.setWebSite(webSite);
+//        goodsExample.setStoreId(vendor.getStoreId());
+//        goodsExample.setState(GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
+//        goodsExample.setIsDelete(GoodsConst.GOODS_IS_DELETE_NO);
+//        sellerWaitDeal.setSysWebSiteLowerGoodsNum(goodsModel.getGoodsCount(goodsExample));
 
         //待确认结算单数
         BillExample billExample = new BillExample();
@@ -139,6 +140,7 @@ public class SellerOverviewController extends BaseController {
 
         //询盘总数
         MemberEnquiryExample memberEnquiryTotalExample = new MemberEnquiryExample();
+        memberEnquiryTotalExample.setWebSite(webSite);
         memberEnquiryTotalExample.setStoreId(vendor.getStoreId());
         memberEnquiryTotalExample.setStatusNotEqual(EnquiryConst.ENQUIRY_DELETE);
         memberEnquiryTotalExample.setItemTypeIn(itemTypeStr);
@@ -148,6 +150,7 @@ public class SellerOverviewController extends BaseController {
         Date enquiryEndTime = new Date();
         DateTime enquiryStartTime = DateUtil.beginOfDay(enquiryEndTime);
         MemberEnquiryExample memberEnquiryNewExample = new MemberEnquiryExample();
+        memberEnquiryNewExample.setWebSite(webSite);
         memberEnquiryNewExample.setStoreId(vendor.getStoreId());
         memberEnquiryNewExample.setCreateTimeGte(com.slodon.b2b2c.core.util.DateUtil.dateToString(enquiryStartTime, com.slodon.b2b2c.core.util.DateUtil.DATE_FORMAT_FIVE));
         memberEnquiryNewExample.setCreateTimeLte(com.slodon.b2b2c.core.util.DateUtil.dateToString(enquiryEndTime, com.slodon.b2b2c.core.util.DateUtil.DATE_FORMAT_FIVE));
@@ -157,6 +160,7 @@ public class SellerOverviewController extends BaseController {
 
         //有效询盘数
         MemberEnquiryExample memberEnquiryValidExample = new MemberEnquiryExample();
+        memberEnquiryValidExample.setWebSite(webSite);
         memberEnquiryValidExample.setStoreId(vendor.getStoreId());
         memberEnquiryValidExample.setValidStatus(EnquiryConst.ENQUIRY_VALID);
         memberEnquiryValidExample.setStatusNotEqual(EnquiryConst.ENQUIRY_DELETE);
@@ -165,18 +169,19 @@ public class SellerOverviewController extends BaseController {
 
         //待分配询盘数
         MemberEnquiryExample memberEnquiryToAssignExample = new MemberEnquiryExample();
+        memberEnquiryToAssignExample.setWebSite(webSite);
         memberEnquiryToAssignExample.setStoreId(vendor.getStoreId());
         memberEnquiryToAssignExample.setStatusEqual(EnquiryConst.ENQUIRY_NEW);
         memberEnquiryToAssignExample.setItemTypeIn(itemTypeStr);
         sellerWaitDeal.setEnquiryToBeAssignNum(memberEnquiryModel.getMemberEnquiryCount(memberEnquiryToAssignExample));
 
-        //站点待分配询盘数
-        memberEnquiryToAssignExample = new MemberEnquiryExample();
-        memberEnquiryToAssignExample.setWebSite(webSite);
-        memberEnquiryToAssignExample.setStoreId(vendor.getStoreId());
-        memberEnquiryToAssignExample.setStatusEqual(EnquiryConst.ENQUIRY_NEW);
-        memberEnquiryToAssignExample.setItemTypeIn(itemTypeStr);
-        sellerWaitDeal.setWebSiteEnquiryToBeAssignNum(memberEnquiryModel.getMemberEnquiryCount(memberEnquiryToAssignExample));
+//        //站点待分配询盘数
+//        memberEnquiryToAssignExample = new MemberEnquiryExample();
+//        memberEnquiryToAssignExample.setWebSite(webSite);
+//        memberEnquiryToAssignExample.setStoreId(vendor.getStoreId());
+//        memberEnquiryToAssignExample.setStatusEqual(EnquiryConst.ENQUIRY_NEW);
+//        memberEnquiryToAssignExample.setItemTypeIn(itemTypeStr);
+//        sellerWaitDeal.setWebSiteEnquiryToBeAssignNum(memberEnquiryModel.getMemberEnquiryCount(memberEnquiryToAssignExample));
 
         result.setSellerWaitDeal(sellerWaitDeal);
 

+ 6 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/AdminNavigationController.java

@@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
 import java.util.List;
 
 @Api(tags = "admin-导航设置")
@@ -37,12 +38,14 @@ public class AdminNavigationController extends BaseController {
             @ApiImplicitParam(name = "webSite", value = "站点", paramType = "query"),
             @ApiImplicitParam(name = "navName", value = "导航名称", paramType = "query"),
             @ApiImplicitParam(name = "pageSize", value = "分页大小", defaultValue = "20", paramType = "query"),
-            @ApiImplicitParam(name = "current", value = "当前页面位置", defaultValue = "1", paramType = "query")
+            @ApiImplicitParam(name = "current", value = "当前页面位置", defaultValue = "1", paramType = "query"),
+            @ApiImplicitParam(name = "isShow", value = "是否展示", paramType = "query")
     })
     @GetMapping("list")
-    public JsonResult<PageVO<Navigation>> list(HttpServletRequest request, String webSite, String navName) {
+    public JsonResult<PageVO<Navigation>> list(HttpServletRequest request, String webSite, String navName, Integer isShow) {
         PagerInfo pager = WebUtil.handlerPagerInfo(request);
         NavigationExample example = new NavigationExample();
+        example.setIsShow(isShow);
         example.setWebSite(webSite);
         if (!StringUtil.isEmpty(navName)) {
             if (navName.contains("&amp;")) {
@@ -74,6 +77,7 @@ public class AdminNavigationController extends BaseController {
         navigation.setSort(sort);
         navigation.setIsShow(isShow);
         navigation.setData(data);
+        navigation.setCreateTime(new Date());
         navigationModel.saveNavigation(navigation);
         return SldResponse.success("添加成功", "导航名称:" + navigation.getNavName());
     }

+ 1 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/AdminPcDecoController.java

@@ -245,6 +245,7 @@ public class AdminPcDecoController extends BaseController {
         AssertUtil.notNull(tplPcMallDecoDb, "该装修页不存在,请新选择");
 
         TplPcMallDeco deco = new TplPcMallDeco();
+        deco.setWebSite(tplPcMallDecoDb.getWebSite());
         deco.setDecoType(tplPcMallDecoDb.getDecoType());
         deco.setDecoName("copy-" + tplPcMallDecoDb.getDecoName());
         deco.setData(tplPcMallDecoDb.getData());

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/AdminSettingController.java

@@ -600,7 +600,7 @@ public class AdminSettingController extends BaseController {
         //从请求头中获取语言类型
         String languageType = request.getHeader("Language");
 
-        String str = "main_site_logo,main_user_center_logo,main_user_logon_bg,main_user_register_bg,pc_home_bottom_adv,main_user_forget_password_bg," +
+        String str = "main_site_logo,main_user_center_logo,main_user_logon_bg,main_user_register_bg,main_user_forget_password_bg," +
                 "main_user_register_logo,main_seller_center_logo,vendor_login_left_bg,vendor_login_bg," +
                 "main_admin_top_logo,admin_login_left_bg,admin_login_bg";
 

+ 6 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/front/FrontPcDecoController.java

@@ -134,11 +134,16 @@ public class FrontPcDecoController {
                 storeDb.setState(state);
             }
         }
-        if (storeDb.getState().equals(StoreConst.STORE_STATE_CLOSE) && !storeDb.getBusinessState().equals(StoreConst.STORE_BUSINESS_STATE_OPEN)) {
+        if (storeDb.getState().equals(StoreConst.STORE_STATE_CLOSE) ) {
             JsonResult jsonResult = SldResponse.fail("店铺已关闭");
             jsonResult.setState(ResponseConst.STATE_STORE_CLOSE);
             return jsonResult;
         }
+        if (!storeDb.getBusinessState().equals(StoreConst.STORE_BUSINESS_STATE_OPEN)){
+            JsonResult jsonResult = SldResponse.fail("店铺暂停经营");
+            jsonResult.setState(ResponseConst.STATE_FAIL);
+            return jsonResult;
+        }
         Map<String, Object> modelMap = new HashMap();
         String data = null;
         //decoId不为空说明是预览

+ 23 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsModel.java

@@ -3,6 +3,7 @@ package com.slodon.b2b2c.model.goods;
 import com.slodon.b2b2c.core.constant.GoodsCategoryConst;
 import com.slodon.b2b2c.core.constant.GoodsConst;
 import com.slodon.b2b2c.core.constant.StoreTplConst;
+import com.slodon.b2b2c.core.constant.VendorConst;
 import com.slodon.b2b2c.core.exception.MallException;
 import com.slodon.b2b2c.core.response.PagerInfo;
 import com.slodon.b2b2c.core.util.AssertUtil;
@@ -17,6 +18,9 @@ import com.slodon.b2b2c.goods.example.GoodsExtendExample;
 import com.slodon.b2b2c.goods.pojo.Goods;
 import com.slodon.b2b2c.goods.pojo.GoodsCategory;
 import com.slodon.b2b2c.goods.pojo.GoodsExtend;
+import com.slodon.b2b2c.model.seller.VendorModel;
+import com.slodon.b2b2c.seller.example.VendorExample;
+import com.slodon.b2b2c.seller.pojo.Vendor;
 import com.slodon.b2b2c.starter.mq.entity.MessageSendVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
@@ -53,6 +57,10 @@ public class GoodsModel {
     private StringRedisTemplate stringRedisTemplate;
     @Resource
     private GoodsCategoryReadMapper goodsCategoryReadMapper;
+    @Resource
+    private ProductModel productModel;
+    @Resource
+    private VendorModel vendorModel;
 
     /**
      * 新增商品公共信息表(SPU)
@@ -243,9 +251,24 @@ public class GoodsModel {
             // 立即上架待审核的商品 状态 改为GOODS_STATE_UPPER
             goodsUpdate.setState(GoodsConst.GOODS_STATE_UPPER);
             example.setState(GoodsConst.GOODS_STATE_SELL_NOW_TO_AUDIT);
+
+            //查出立即上架待审核的商品列表
+            List<Goods> goodsList =goodsReadMapper.listByExample(example);
+
             goodsUpdate.setOnlineTime(new Date());
             goodsUpdate.setUpdateTime(new Date());
             number += goodsWriteMapper.updateByExampleSelective(goodsUpdate, example);
+
+            goodsList.forEach(goods -> {
+                VendorExample vendorExample = new VendorExample();
+                vendorExample.setStoreId(goods.getStoreId());
+                vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+                List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+                AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+                //设置状态为上架
+                goods.setState(GoodsConst.GOODS_STATE_UPPER);
+                productModel.upsertProduct(goods, vendorList.get(0));
+            });
         }
         return number;
     }

+ 67 - 5
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsSellerModel.java

@@ -1,5 +1,7 @@
 package com.slodon.b2b2c.model.goods;
 
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.slodon.b2b2c.core.constant.*;
 import com.slodon.b2b2c.core.uid.GoodsIdGenerator;
@@ -18,6 +20,7 @@ import com.slodon.b2b2c.dao.write.goods.GoodsSpecWriteMapper;
 import com.slodon.b2b2c.dao.write.seller.StoreLabelBindGoodsWriteMapper;
 import com.slodon.b2b2c.dao.write.seller.StoreWriteMapper;
 import com.slodon.b2b2c.enums.SeoTypeConstant;
+import com.slodon.b2b2c.enums.WebSiteConstant;
 import com.slodon.b2b2c.goods.dto.GoodsPlatformImportDTO;
 import com.slodon.b2b2c.goods.dto.GoodsPublishFrontParamDTO;
 import com.slodon.b2b2c.goods.dto.GoodsPublishInsertDTO;
@@ -25,7 +28,11 @@ import com.slodon.b2b2c.goods.example.*;
 import com.slodon.b2b2c.goods.pojo.*;
 import com.slodon.b2b2c.member.example.GoodsAnnexExample;
 import com.slodon.b2b2c.model.seller.StoreModel;
+import com.slodon.b2b2c.model.seller.StoreNameModel;
+import com.slodon.b2b2c.model.seller.VendorModel;
 import com.slodon.b2b2c.seller.example.StoreLabelBindGoodsExample;
+import com.slodon.b2b2c.seller.example.StoreNameExample;
+import com.slodon.b2b2c.seller.example.VendorExample;
 import com.slodon.b2b2c.seller.pojo.*;
 import com.slodon.b2b2c.system.pojo.SysSeo;
 import io.swagger.annotations.ApiModelProperty;
@@ -105,6 +112,12 @@ public class GoodsSellerModel {
     @Resource
     private GoodsAnnexModel goodsAnnexModel;
 
+    @Resource
+    private StoreNameModel storeNameModel;
+
+    @Resource
+    private VendorModel vendorModel;
+
     //region 发布商品
 
     /**
@@ -123,7 +136,7 @@ public class GoodsSellerModel {
      * @param insertDTO 商品信息
      */
     @Transactional(rollbackFor = Exception.class)
-    public void saveGoods(Vendor vendor, GoodsPublishInsertDTO insertDTO) {
+    public Goods saveGoods(Vendor vendor, GoodsPublishInsertDTO insertDTO) {
         List<GoodsPublishFrontParamDTO.ProductInfo> productList = insertDTO.getProductList();//货品列表
         //-校验sku是否重复
         this.checkSku(productList,insertDTO.getWebSite());
@@ -157,6 +170,8 @@ public class GoodsSellerModel {
 
         //-增加店铺商品数量(商品状态为上架时操作)
         this.addStoreGoodsNum(vendor.getStoreId(), goods.getState());
+
+        return goods;
     }
 
     /**
@@ -241,6 +256,13 @@ public class GoodsSellerModel {
         goods.setOnlineTime(goods.getState().equals(GoodsConst.GOODS_STATE_UPPER) ? new Date() : null);
         goods.setStoreId(vendor.getStoreId());
         goods.setStoreName(vendor.getStore().getStoreName());
+        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(insertDTO.getWebSite())) {
+            StoreNameExample storeNameExample = new StoreNameExample();
+            storeNameExample.setStoreId(vendor.getStoreId());
+            storeNameExample.setWebSite(insertDTO.getWebSite());
+            StoreName storeName = storeNameModel.getStoreNameByExample(storeNameExample);
+            goods.setStoreName(storeName != null ? storeName.getStoreName() : "");
+        }
         goods.setStoreIsRecommend(insertDTO.getStoreIsRecommend());
         goods.setMainImage(defaultProduct.getMainImage());
         goods.setGoodsVideo(insertDTO.getGoodsVideo());
@@ -584,7 +606,7 @@ public class GoodsSellerModel {
      * @param goodsDb
      */
     @Transactional(rollbackFor = Exception.class)
-    public void editGoods(Vendor vendor, GoodsPublishInsertDTO insertDTO, Goods goodsDb) {
+    public Goods editGoods(Vendor vendor, GoodsPublishInsertDTO insertDTO, Goods goodsDb) {
         List<GoodsPublishFrontParamDTO.ProductInfo> productList = insertDTO.getProductList();//前端传来的货品列表
         List<GoodsPublishInsertDTO.ProductInsertInfo> addProductList = new ArrayList<>();//要新增的货品
         List<GoodsPublishInsertDTO.ProductInsertInfo> updateProductList = new ArrayList<>();//要删除的货品
@@ -619,7 +641,6 @@ public class GoodsSellerModel {
             this.updateGoodsAnnex(insertDTO.getGoodsAnnexList(),updateGoods,vendor);
 //        }
 
-
         //-保存商品绑定店铺内部分类表
         this.updateGoodsBindStoreInnerLabels(insertDTO.getStoreInnerLabelList(), updateGoods.getGoodsId(), vendor);
 
@@ -633,6 +654,7 @@ public class GoodsSellerModel {
             //原商品的状态为上架,删除商品缓存数据
             objectRedisTemplate.opsForHash().delete(RedisConst.GOODS_DETAIL, String.valueOf(goodsDb.getGoodsId()));
         }
+        return updateGoods;
     }
 
     /**
@@ -777,6 +799,13 @@ public class GoodsSellerModel {
         goods.setOnlineTime(goods.getState().equals(GoodsConst.GOODS_STATE_UPPER) ? new Date() : null);
         goods.setStoreId(vendor.getStoreId());
         goods.setStoreName(vendor.getStore().getStoreName());
+        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(insertDTO.getWebSite())) {
+            StoreNameExample storeNameExample = new StoreNameExample();
+            storeNameExample.setStoreId(vendor.getStoreId());
+            storeNameExample.setWebSite(insertDTO.getWebSite());
+            StoreName storeName = storeNameModel.getStoreNameByExample(storeNameExample);
+            goods.setStoreName(storeName != null ? storeName.getStoreName() : "");
+        }
         goods.setStoreIsRecommend(insertDTO.getStoreIsRecommend());
         goods.setMainImage(defaultProduct.getMainImage());
         goods.setGoodsVideo(StringUtils.isEmpty(insertDTO.getGoodsVideo()) ? "" : insertDTO.getGoodsVideo());
@@ -1107,7 +1136,18 @@ public class GoodsSellerModel {
         example.setGoodsIdIn(goodsIds);
         example.setStateIn(GoodsConst.GOODS_STATE_WAREHOUSE_NO_AUDIT + "," + GoodsConst.GOODS_STATE_WAREHOUSE_AUDIT_PASS + "," + GoodsConst.GOODS_STATE_LOWER_BY_STORE);
         example.setStoreId(storeId);
-        return goodsModel.updateGoodsByExample(goodsUpdate, example);
+        List<Goods> goodsList = goodsModel.getGoodsList(example, null);
+        int num = goodsModel.updateGoodsByExample(goodsUpdate, example);
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(goods.getStoreId());
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList  =vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            goods.setState(GoodsConst.GOODS_STATE_UPPER);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
+        return num;
     }
 
     /**
@@ -1125,8 +1165,17 @@ public class GoodsSellerModel {
         example.setGoodsIdIn(goodsIds);
         example.setState(GoodsConst.GOODS_STATE_UPPER);
         example.setStoreId(storeId);
+        List<Goods> goodsList = goodsModel.getGoodsList(example, null);
         int number = goodsModel.updateGoodsByExample(goodsUpdate, example);
-
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(goods.getStoreId());
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            goods.setState(GoodsConst.GOODS_STATE_LOWER_BY_STORE);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
         return number;
     }
 
@@ -1149,7 +1198,20 @@ public class GoodsSellerModel {
         example.setGoodsIdIn(goodsIds);
 //        example.setStateIn(GoodsConst.GOODS_STATE_WAREHOUSE_NO_AUDIT + "," + GoodsConst.GOODS_STATE_LOWER_BY_STORE + "," + GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
         example.setStoreId(storeId);
+        //先查询出待删除的商品列表
+        List<Goods> goodsList = goodsModel.getGoodsList(example, null);
+
         number = goodsModel.updateGoodsByExample(goodsUpdate, example);
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(storeId);
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            //设置状态为删除
+            goods.setState(GoodsConst.GOODS_STATE_DELETE);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
         return number;
     }
 

+ 82 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/ProductModel.java

@@ -1,14 +1,26 @@
 package com.slodon.b2b2c.model.goods;
 
+import cn.hutool.json.JSONObject;
+import com.slodon.b2b2c.config.ProductConfig;
 import com.slodon.b2b2c.core.constant.GoodsConst;
 import com.slodon.b2b2c.core.exception.MallException;
 import com.slodon.b2b2c.core.response.PagerInfo;
 import com.slodon.b2b2c.core.util.AssertUtil;
+import com.slodon.b2b2c.core.util.FileUrlUtil;
+import com.slodon.b2b2c.core.util.HttpClientUtil;
 import com.slodon.b2b2c.core.util.StringUtil;
 import com.slodon.b2b2c.dao.read.goods.ProductReadMapper;
 import com.slodon.b2b2c.dao.write.goods.ProductWriteMapper;
+import com.slodon.b2b2c.enums.WebSiteConstant;
+import com.slodon.b2b2c.goods.example.GoodsPictureExample;
 import com.slodon.b2b2c.goods.example.ProductExample;
+import com.slodon.b2b2c.goods.pojo.Goods;
+import com.slodon.b2b2c.goods.pojo.GoodsPicture;
 import com.slodon.b2b2c.goods.pojo.Product;
+import com.slodon.b2b2c.investment.constant.InvestmentConst;
+import com.slodon.b2b2c.model.seller.StoreModel;
+import com.slodon.b2b2c.model.seller.VendorModel;
+import com.slodon.b2b2c.seller.pojo.Vendor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -17,6 +29,7 @@ import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 @Component
@@ -28,6 +41,19 @@ public class ProductModel {
     @Resource
     private ProductWriteMapper productWriteMapper;
 
+    @Resource
+    private VendorModel vendorModel;
+
+    @Resource
+    private StoreModel storeModel;
+
+    @Resource
+    private GoodsPictureModel goodsPictureModel;
+
+    @Resource
+    private ProductConfig productConfig;
+
+
     /**
      * 新增商品表(SKU),指定特定规格
      *
@@ -166,4 +192,60 @@ public class ProductModel {
         }
         return productList;
     }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public void upsertProduct(Goods goods, Vendor vendor) {
+        if (!WebSiteConstant.MEMBER_OVERSEA.equals(goods.getWebSite())) {
+            return;
+        }
+        //查询商户获取token
+        vendor = vendorModel.getVendorByVendorId(vendor.getVendorId());
+
+        //查询货品
+        ProductExample productExample = new ProductExample();
+        productExample.setGoodsId(goods.getGoodsId());
+        List<Product> products = productReadMapper.listByExample(productExample);
+        AssertUtil.isTrue(CollectionUtils.isEmpty(products), "商品不存在");
+
+        //查询货品图片
+        GoodsPictureExample goodsPictureExample = new GoodsPictureExample();
+        goodsPictureExample.setGoodsId(goods.getGoodsId());
+        goodsPictureExample.setOrderBy("picture_id asc");
+        List<GoodsPicture> goodsPictureList = goodsPictureModel.getGoodsPictureList(goodsPictureExample, null);
+
+        String regex = ".*token=([^&]*).*";
+        HashMap<String, String> headers = new HashMap<>();
+        headers.put(InvestmentConst.CONTENT_TYPE, InvestmentConst.APPLICATION_JSON);
+        if (!StringUtil.isBlank(vendor.getStoreUrlBy9710())) {
+            headers.put(InvestmentConst.AUTHORIZATION, "Token " + vendor.getStoreUrlBy9710().replaceFirst(regex, "$1"));
+        } else {
+            JSONObject jsonObject = storeModel.getStoreUrlsObject(vendor.getStoreId(), vendor.getVendorName());
+            headers.put(InvestmentConst.AUTHORIZATION, "Token " + jsonObject.getStr("9710").replaceFirst(regex, "$1"));
+        }
+
+        JSONObject param = new JSONObject();
+
+        //目前只有单规格
+        param.set("productId", products.get(0).getProductId().toString());
+        param.set("authName", vendor.getVendorName());
+        param.set("name", goods.getGoodsName());
+        param.set("cn_name", goods.getGoodsNameCn());
+        param.set("sku", goods.getGoodsId().toString());
+        param.set("active", GoodsConst.GOODS_STATE_UPPER == goods.getState());
+        List<String> image_urls = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(goodsPictureList)) {
+            goodsPictureList.forEach(goodsPicture -> {
+                image_urls.add(FileUrlUtil.getFileUrl(goodsPicture.getImagePath(), null));
+            });
+        }
+        param.set("image_urls", image_urls);
+        try {
+            log.error("调用第三方接口创建/更新商品 -请求接口: {}, 请求参数: {},请求头: {}", productConfig.getUrl(), param.toString(), com.alibaba.fastjson.JSONObject.toJSONString(headers));
+            HttpClientUtil.httpPost201(productConfig.getUrl(), param.toString(), headers);
+        } catch (Exception e) {
+            log.error("调用第三方接口创建/更新商品失败 -请求接口: {}, 请求参数: {},请求头: {}, 错误信息: {}", productConfig.getUrl(), param.toString(), com.alibaba.fastjson.JSONObject.toJSONString(headers), e.getMessage(), e);
+            throw new MallException("创建/更新商品失败,请重试");
+        }
+    }
 }

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

@@ -23,9 +23,11 @@ import com.slodon.b2b2c.goods.example.GoodsExample;
 import com.slodon.b2b2c.goods.example.GoodsExtendExample;
 import com.slodon.b2b2c.goods.pojo.Goods;
 import com.slodon.b2b2c.goods.pojo.GoodsExtend;
+import com.slodon.b2b2c.investment.constant.InvestmentConst;
 import com.slodon.b2b2c.member.example.MemberFollowStoreExample;
 import com.slodon.b2b2c.member.pojo.MemberFollowStore;
 import com.slodon.b2b2c.model.goods.GoodsModel;
+import com.slodon.b2b2c.model.goods.ProductModel;
 import com.slodon.b2b2c.model.system.TplPcMallDecoModel;
 import com.slodon.b2b2c.seller.dto.*;
 import com.slodon.b2b2c.seller.example.*;
@@ -121,6 +123,12 @@ public class StoreModel {
     @Resource
     private StoreConfig storeConfig;
 
+    @Resource
+    private VendorModel vendorModel;
+
+    @Resource
+    private ProductModel productModel;
+
     /**
      * 新增店铺表
      *
@@ -188,7 +196,7 @@ public class StoreModel {
         storeSiteInfo.setWebSite(WebSiteConstant.MEMBER_DISTRIBUTOR);
         storeSiteInfo.setStoreGradeId(storeApply.getStoreGradeIdCn());
         storeGrade = storeGradeReadMapper.getByPrimaryKey(storeSiteInfo.getStoreGradeId());
-        storeSiteInfo.setStoreGradeName(storeGrade.getGradeName());
+        storeSiteInfo.setStoreGradeName(storeGrade != null ? storeGrade.getGradeName() : null);
 
         if (!StringUtil.isNullOrZero(storeApply.getApplyYearCn())) {
             //开店时长
@@ -434,14 +442,16 @@ public class StoreModel {
      */
     public JSONObject getStoreUrlsObject(Long storeId, String authorName) {
         HashMap<String, String> headers = new HashMap<>();
-        headers.put("Authorization", storeConfig.getToken());
+        headers.put(InvestmentConst.CONTENT_TYPE, InvestmentConst.APPLICATION_JSON);
+        headers.put(InvestmentConst.AUTHORIZATION, storeConfig.getToken());
         JSONObject param = new JSONObject();
         param.set("storeId", storeId.toString());
         param.set("authorName", authorName);
         String result;
         try {
-            result = HttpClientUtil.httpPost(storeConfig.getUrl(), param.toString(), headers);
+            result = HttpClientUtil.httpPost201(storeConfig.getUrl(), param.toString(), headers);
         } catch (Exception e) {
+            log.error("调用第三方接口获取店铺URL失败 -请求接口: {}, 请求参数: {},请求头: {}, 错误信息: {}", storeConfig.getUrl(), param.toString(), com.alibaba.fastjson.JSONObject.toJSONString(headers), e.getMessage(), e);
             throw new MallException("获取店铺url信息表失败,请重试");
         }
         JSONObject jsonObject = JSONUtil.parseObj(result);
@@ -960,6 +970,16 @@ public class StoreModel {
             goodsExtend.setOfflineComment("平台后台操作");
             goodsExtendWriteMapper.updateByExampleSelective(goodsExtend, extendExample);
 
+            list.forEach(goods1 -> {
+                VendorExample vendorExample = new VendorExample();
+                vendorExample.setStoreId(storeId);
+                vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+                List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+                AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+                goods1.setState(GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
+                productModel.upsertProduct(goods1, vendorList.get(0));
+            });
+
             //直播模块开启,解除视频带货绑定会员
             if ("1".equals(stringRedisTemplate.opsForValue().get("live_switch"))) {
                 rabbitTemplate.convertAndSend(MQ_EXCHANGE_NAME, MQ_QUEUE_NAME_UNBIND_VIDEO_MEMBER, storeId);

+ 2 - 4
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreProfileTextListModel.java

@@ -36,8 +36,7 @@ public class StoreProfileTextListModel {
     public StoreProfileTextList getList(Long storeId,String webSite){
         StoreProfileTextList storeProfileTextList = null;
         StoreProfileTextListExample storeProfileTextListExample = new StoreProfileTextListExample();
-        storeProfileTextListExample.createCriteria().andStoreIdEqualTo(storeId);
-        storeProfileTextListExample.createCriteria().andWebSiteEqualTo(webSite);
+        storeProfileTextListExample.createCriteria().andStoreIdEqualTo(storeId).andWebSiteEqualTo(webSite);
         List<StoreProfileTextList> storeProfileTextInfoList = storeProfileTextListReadMapper.selectByExample(storeProfileTextListExample);
         if(!CollectionUtils.isEmpty(storeProfileTextInfoList)){
             storeProfileTextList = storeProfileTextInfoList.get(NumConstant.ZERO);
@@ -52,8 +51,7 @@ public class StoreProfileTextListModel {
      */
     public Integer updateProfileText(StoreProfileTextList storeProfileTextList,Long storeId){
         StoreProfileTextListExample storeProfileTextListExample = new StoreProfileTextListExample();
-        storeProfileTextListExample.createCriteria().andStoreIdEqualTo(storeId);
-        storeProfileTextListExample.createCriteria().andWebSiteEqualTo(storeProfileTextList.getWebSite());
+        storeProfileTextListExample.createCriteria().andStoreIdEqualTo(storeId).andWebSiteEqualTo(storeProfileTextList.getWebSite());
         int count = storeProfileTextListWriteMapper.updateByExampleSelective(storeProfileTextList,storeProfileTextListExample);
         if(count==0){
             throw new MallException("更新店铺简介内容表失败,请重试");

+ 16 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/util/SellerPresentDataUtil.java

@@ -10,13 +10,16 @@ import com.slodon.b2b2c.core.constant.GoodsConst;
 import com.slodon.b2b2c.core.constant.OrderConst;
 import com.slodon.b2b2c.core.util.FileUrlUtil;
 import com.slodon.b2b2c.enums.StatsConstant;
+import com.slodon.b2b2c.goods.example.GoodsBrandExample;
 import com.slodon.b2b2c.goods.example.GoodsExample;
 import com.slodon.b2b2c.goods.pojo.Goods;
+import com.slodon.b2b2c.goods.pojo.GoodsBrand;
 import com.slodon.b2b2c.member.example.MemberExample;
 import com.slodon.b2b2c.member.example.MemberFollowStoreExample;
 import com.slodon.b2b2c.member.pojo.Member;
 import com.slodon.b2b2c.model.business.OrderModel;
 import com.slodon.b2b2c.model.business.OrderProductModel;
+import com.slodon.b2b2c.model.goods.GoodsBrandModel;
 import com.slodon.b2b2c.model.goods.GoodsModel;
 import com.slodon.b2b2c.model.member.MemberFollowStoreModel;
 import com.slodon.b2b2c.model.member.MemberModel;
@@ -54,6 +57,8 @@ public class SellerPresentDataUtil {
     @Resource
     private GoodsModel goodsModel;
     @Resource
+    private GoodsBrandModel goodsBrandModel;
+    @Resource
     private MemberFollowStoreModel memberFollowStoreModel;
     @Resource
     private MongoTemplate mongoTemplate;
@@ -106,6 +111,16 @@ public class SellerPresentDataUtil {
         goodsExample.setCreateTimeBefore(endTime);
         goodsExample.setCreateTimeAfter(startTime);
         List<Goods> newGoodsList = goodsModel.getGoodsList(goodsExample, null);
+
+        //新增品牌数
+        GoodsBrandExample goodsBrandExample = new GoodsBrandExample();
+        goodsBrandExample.setApplyStoreId(storeId);
+        goodsBrandExample.setWebSite(webSite);
+        goodsBrandExample.setState(GoodsConst.BRAND_STATE_1);
+        goodsBrandExample.setCreateTimeBefore(endTime);
+        goodsBrandExample.setCreateTimeAfter(startTime);
+        List<GoodsBrand> newGoodsBrandList = goodsBrandModel.getGoodsBrandList(goodsBrandExample, null);
+
         //新增会员列表
         MemberExample memberExample = new MemberExample();
         memberExample.setRegisterTimeBefore(endTime);
@@ -118,6 +133,7 @@ public class SellerPresentDataUtil {
         storeStatsBO.setOrderProductList(orderProductList);
         storeStatsBO.setMemberBehaviorList(memberBehaviorList);
         storeStatsBO.setStoreNewGoodsList(newGoodsList);
+        storeStatsBO.setStoreNewBrandList(newGoodsBrandList);
         storeStatsBO.setNewMemberList(newMemberList);
 
         //今日实时

+ 5 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/member/CountryPhoneCodeVO.java

@@ -1,5 +1,6 @@
 package com.slodon.b2b2c.vo.member;
 
+import com.slodon.b2b2c.enums.WebSiteConstant;
 import com.slodon.b2b2c.system.pojo.Country;
 import lombok.Data;
 
@@ -17,8 +18,11 @@ public class CountryPhoneCodeVO implements Serializable {
 
     private String value;
 
-    public CountryPhoneCodeVO(Country country) {
+    public CountryPhoneCodeVO(Country country, String webSite) {
         label = country.getName();
+        if (!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)) {
+            label = country.getZhName();
+        }
         value = country.getPhoneCode();
     }
 }

+ 6 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/member/MemberEnquiryVO.java

@@ -1,6 +1,7 @@
 package com.slodon.b2b2c.vo.member;
 
 import com.slodon.b2b2c.core.i18n.Language;
+import com.slodon.b2b2c.enums.WebSiteConstant;
 import com.slodon.b2b2c.member.pojo.MemberEnquiry;
 import lombok.Data;
 import org.springframework.util.StringUtils;
@@ -47,7 +48,7 @@ public class MemberEnquiryVO implements Serializable {
 
     private Long storeId;
 
-    public MemberEnquiryVO(MemberEnquiry memberEnquiry) {
+    public MemberEnquiryVO(MemberEnquiry memberEnquiry,String webSite) {
         id = memberEnquiry.getId();
         name = memberEnquiry.getName();
         email = memberEnquiry.getEmail();
@@ -60,7 +61,10 @@ public class MemberEnquiryVO implements Serializable {
         createTime = memberEnquiry.getCreateTime();
         pageUrl = memberEnquiry.getPageUrl();
         itemType = memberEnquiry.getItemType();
-        itemTypeStr = getEnquiryTypeText(memberEnquiry.getItemType());
+        itemTypeStr = memberEnquiry.getItemType();
+        if(!WebSiteConstant.MEMBER_OVERSEA.equals(webSite)){
+            itemTypeStr = getEnquiryTypeText(memberEnquiry.getItemType());
+        }
         itemId = memberEnquiry.getItemId();
         itemName = memberEnquiry.getItemName();
         storeId = memberEnquiry.getStoreId();

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/seller/StoreApplyVO.java

@@ -79,7 +79,7 @@ public class StoreApplyVO {
                 value = "待审核";
                 break;
             case StoreConst.STATE_2_DONE_APPLY:
-                value = "待付款";
+                value = "待审核";
                 break;
             case StoreConst.STATE_3_FAIL_APPLY:
                 value = "已拒绝";

+ 1 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/GoodsOverviewVO.java

@@ -79,6 +79,7 @@ public class GoodsOverviewVO {
     public GoodsOverviewVO(StoreBase storeBase, StoreBase previousData) {
         this.movableGoodsNum = storeBase.getSalingGoodsNum();
         this.newGoodsNum = storeBase.getNewGoodsNum();
+        this.newBrandNum = storeBase.getNewBrandNum();
         this.orderPayAmount = storeBase.getOrderPayAmount();
         this.orderSubmitNum = storeBase.getOrderSubmitNum();
         if (previousData != null) {

+ 3 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/MovableGoodsVO.java

@@ -21,6 +21,9 @@ public class MovableGoodsVO {
     @ApiModelProperty("新增商品数")
     private Integer newGoodsNum;
 
+    @ApiModelProperty("新增品牌数")
+    private Integer newBrandNum;
+
     @ApiModelProperty("动销商品数")
     private Integer movableGoodsNum;
 

+ 4 - 4
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/vo/statistics/SellerPresentIndexVO.java

@@ -37,8 +37,8 @@ public class SellerPresentIndexVO {
         @ApiModelProperty("违规商品数")
         private Integer sysLowerGoodsNum;
 
-        @ApiModelProperty("站点违规商品数")
-        private Integer sysWebSiteLowerGoodsNum;
+//        @ApiModelProperty("站点违规商品数")
+//        private Integer sysWebSiteLowerGoodsNum;
 
         @ApiModelProperty("待确认结算单数")
         private Integer confirmBillNum;
@@ -55,8 +55,8 @@ public class SellerPresentIndexVO {
         @ApiModelProperty("待分配询盘数")
         private Integer enquiryToBeAssignNum;
 
-        @ApiModelProperty("站点待分配询盘数")
-        private Integer webSiteEnquiryToBeAssignNum;
+//        @ApiModelProperty("站点待分配询盘数")
+//        private Integer webSiteEnquiryToBeAssignNum;
     }
 
 }

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/application-dev.yml

@@ -71,6 +71,11 @@ dify:
   apiKey: dataset-t2bq146uJwJj00kxVyfOOWua
   difyRoute: http://52.42.176.27/v1/datasets/
 
+#创建/获取商户订单URL
 store:
   url: https://xinke.sutextech.com/api/get_store_urls/
   token: Token 7858e42dcc68d1bb090438a0baab69b085f4b57e
+
+#产品创建/更新
+product:
+  url: https://xinke.sutextech.com/api/products/upsert/

+ 25 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/application-prod.yml

@@ -53,3 +53,28 @@ geoip:
   static:
     city:
       mmdb: /data/GeoLite2/GeoLite2-City.mmdb
+
+#dataforseo外部接口
+analysis:
+  translateAddress: http://54.46.9.88:8007
+  loginUser: metaljacket@meshinfo.cn
+  password: d088821c1d6863ec
+  searchVolume: https://api.dataforseo.com/v3/keywords_data/google/search_volume/live
+  keywordsForSite: https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_site/live
+  KeywordForSuggestions: https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_suggestions/live
+  rankedKeywords: https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live
+  historicalTraffic: https://api.dataforseo.com/v3/dataforseo_labs/google/historical_bulk_traffic_estimation/live
+  modelName: gemini-2.5-flash
+#dify
+dify:
+  apiKey: dataset-t2bq146uJwJj00kxVyfOOWua
+  difyRoute: http://52.42.176.27/v1/datasets/
+
+#创建/获取商户订单URL
+store:
+  url: https://xinke.sutextech.com/api/get_store_urls/
+  token: Token 7858e42dcc68d1bb090438a0baab69b085f4b57e
+
+#产品创建/更新
+product:
+  url: https://xinke.sutextech.com/api/products/upsert/

+ 25 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/application-test.yml

@@ -53,3 +53,28 @@ geoip:
   static:
     city:
       mmdb: /data/GeoLite2/GeoLite2-City.mmdb
+
+#dataforseo外部接口
+analysis:
+  translateAddress: http://54.46.9.88:8007
+  loginUser: metaljacket@meshinfo.cn
+  password: d088821c1d6863ec
+  searchVolume: https://api.dataforseo.com/v3/keywords_data/google/search_volume/live
+  keywordsForSite: https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_site/live
+  KeywordForSuggestions: https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_suggestions/live
+  rankedKeywords: https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live
+  historicalTraffic: https://api.dataforseo.com/v3/dataforseo_labs/google/historical_bulk_traffic_estimation/live
+  modelName: gemini-2.5-flash
+#dify
+dify:
+  apiKey: dataset-t2bq146uJwJj00kxVyfOOWua
+  difyRoute: http://52.42.176.27/v1/datasets/
+
+#创建/获取商户订单URL
+store:
+  url: https://xinke.sutextech.com/api/get_store_urls/
+  token: Token 7858e42dcc68d1bb090438a0baab69b085f4b57e
+
+#产品创建/更新
+product:
+  url: https://xinke.sutextech.com/api/products/upsert/

+ 2 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/member/MemberEnquiryReadMapper.xml

@@ -67,6 +67,8 @@
                     AND (
                     `name` like concat('%',#{example.keyword},'%')
                     or `email` like concat('%',#{example.keyword},'%')
+                    or `phone` like concat('%',#{example.keyword},'%')
+                    or `phone_code` like concat('%',#{example.keyword},'%')
                     or `company` like concat('%',#{example.keyword},'%')
                     or `message` like concat('%',#{example.keyword},'%')
                     )

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

@@ -358,11 +358,14 @@
       <if test="example.storeNameLike != null">
         and store_name.store_name like concat('%',#{example.storeNameLike},'%')
       </if>
-      <if test="example.businessState != null">
+      <if test="example.businessState != null and example.businessState==2">
+        and (store_site_info.business_state = #{example.businessState} or store_site_info.business_state is null)
+      </if>
+      <if test="example.businessState != null and example.businessState!=2">
         and store_site_info.business_state = #{example.businessState}
       </if>
       <if test="example.storeGradeId != null">
-        and store.site_info.store_grade_id = #{example.storeGradeId}
+        and store_site_info.store_grade_id = #{example.storeGradeId}
       </if>
     </where>
   </select>
@@ -404,11 +407,14 @@
       <if test="example.storeNameLike != null">
         and store_name.store_name like concat('%',#{example.storeNameLike},'%')
       </if>
-      <if test="example.businessState != null">
+      <if test="example.businessState != null and example.businessState==2">
+        and (store_site_info.business_state = #{example.businessState} or store_site_info.business_state is null)
+      </if>
+      <if test="example.businessState != null and example.businessState!=2">
         and store_site_info.business_state = #{example.businessState}
       </if>
       <if test="example.storeGradeId != null">
-        and store.site_info.store_grade_id = #{example.storeGradeId}
+        and store_site_info.store_grade_id = #{example.storeGradeId}
       </if>
     </where>
     order by store_site_info.update_time desc

+ 4 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreDayReadMapper.xml

@@ -24,6 +24,7 @@
     <result column="goods_view_num" property="goodsViewNum" />
     <result column="view_goods_num" property="viewGoodsNum" />
     <result column="new_goods_num" property="newGoodsNum" />
+    <result column="new_brand_num" property="newBrandNum" />
     <result column="collection_goods_num" property="collectionGoodsNum" />
     <result column="collection_store_num" property="collectionStoreNum" />
     <result column="saling_goods_num" property="salingGoodsNum" />
@@ -281,6 +282,7 @@
     sum( order_pay_member_num ) AS orderPayMemberNum,
     sum( saling_goods_num ) AS salingGoodsNum,
     sum( new_goods_num ) AS newGoodsNum,
+    sum( new_brand_num ) AS newBrandNum,
     sum( new_member_num ) AS newMemberNum,
     sum( return_num ) AS returnNum,
     sum( return_amount ) AS returnAmount
@@ -313,6 +315,7 @@
     sum( order_pay_member_num ) AS orderPayMemberNum,
     sum( saling_goods_num ) AS salingGoodsNum,
     sum( new_goods_num ) AS newGoodsNum,
+    sum( new_brand_num ) AS newBrandNum,
     sum( new_member_num ) AS newMemberNum
     FROM `stats_store_day`
     <include refid="whereCondition"/>
@@ -333,6 +336,7 @@
     SELECT
     date( stats_time ) AS statsTime,
     new_goods_num AS newGoodsNum,
+    new_brand_num AS newBrandNum,
     saling_goods_num AS movableGoodsNum,
     order_submit_num AS orderSubmitNum,
     order_submit_amount AS orderSubmitAmount,

+ 2 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreHourReadMapper.xml

@@ -24,6 +24,7 @@
     <result column="goods_view_num" property="goodsViewNum" />
     <result column="view_goods_num" property="viewGoodsNum" />
     <result column="new_goods_num" property="newGoodsNum" />
+    <result column="new_brand_num" property="newBrandNum" />
     <result column="collection_goods_num" property="collectionGoodsNum" />
     <result column="collection_store_num" property="collectionStoreNum" />
     <result column="saling_goods_num" property="salingGoodsNum" />
@@ -261,6 +262,7 @@
     SELECT
     DATE_FORMAT( stats_time, '%H:%i' ) AS statsTime,
     new_goods_num AS newGoodsNum,
+    new_brand_num AS newBrandNum,
     saling_goods_num AS movableGoodsNum,
     order_submit_num AS orderSubmitNum,
     order_submit_amount AS orderSubmitAmount,

+ 2 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreMonthReadMapper.xml

@@ -24,6 +24,7 @@
     <result column="goods_view_num" property="goodsViewNum" />
     <result column="view_goods_num" property="viewGoodsNum" />
     <result column="new_goods_num" property="newGoodsNum" />
+    <result column="new_brand_num" property="newBrandNum" />
     <result column="collection_goods_num" property="collectionGoodsNum" />
     <result column="collection_store_num" property="collectionStoreNum" />
     <result column="saling_goods_num" property="salingGoodsNum" />
@@ -261,6 +262,7 @@
     SELECT
     LEFT( stats_time, 7 ) AS statsTime,
     new_goods_num AS newGoodsNum,
+    new_brand_num AS newBrandNum,
     saling_goods_num AS movableGoodsNum,
     order_submit_num AS orderSubmitNum,
     order_submit_amount AS orderSubmitAmount,

+ 1 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreWeekReadMapper.xml

@@ -24,6 +24,7 @@
     <result column="goods_view_num" property="goodsViewNum" />
     <result column="view_goods_num" property="viewGoodsNum" />
     <result column="new_goods_num" property="newGoodsNum" />
+    <result column="new_brand_num" property="newBrandNum" />
     <result column="collection_goods_num" property="collectionGoodsNum" />
     <result column="collection_store_num" property="collectionStoreNum" />
     <result column="saling_goods_num" property="salingGoodsNum" />

+ 1 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/statistics/StoreYearReadMapper.xml

@@ -24,6 +24,7 @@
     <result column="goods_view_num" property="goodsViewNum" />
     <result column="view_goods_num" property="viewGoodsNum" />
     <result column="new_goods_num" property="newGoodsNum" />
+    <result column="new_brand_num" property="newBrandNum" />
     <result column="collection_goods_num" property="collectionGoodsNum" />
     <result column="collection_store_num" property="collectionStoreNum" />
     <result column="saling_goods_num" property="salingGoodsNum" />

+ 2 - 1
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/system/NavigationReadMapper.xml

@@ -8,6 +8,7 @@
     <result column="sort" property="sort" />
     <result column="is_show" property="isShow" />
     <result column="data" property="data" />
+    <result column="create_time" property="createTime" />
   </resultMap>
   <!--按照主键值进行操作-->
   <sql id="pkWhere">
@@ -46,7 +47,7 @@
   </sql>
   <!--排序条件-->
   <sql id="orderBy">
-    ORDER BY `nav_id` DESC
+    ORDER BY `sort`,`create_time` DESC
   </sql>
   <sql id="orderByOther">
     order by ${example.orderBy}

+ 7 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/write/statistics/StoreDayWriteMapper.xml

@@ -24,6 +24,7 @@
     <result column="goods_view_num" property="goodsViewNum" />
     <result column="view_goods_num" property="viewGoodsNum" />
     <result column="new_goods_num" property="newGoodsNum" />
+    <result column="new_brand_num" property="newBrandNum" />
     <result column="collection_goods_num" property="collectionGoodsNum" />
     <result column="collection_store_num" property="collectionStoreNum" />
     <result column="saling_goods_num" property="salingGoodsNum" />
@@ -98,6 +99,9 @@
       <if test="newGoodsNum != null">
         `new_goods_num`,
       </if>
+      <if test="newBrandNum != null">
+        `new_brand_num`,
+      </if>
       <if test="collectionGoodsNum != null">
         `collection_goods_num`,
       </if>
@@ -425,6 +429,9 @@
       <if test="newGoodsNum != null">
         #{newGoodsNum},
       </if>
+      <if test="newBrandNum != null">
+        #{newBrandNum},
+      </if>
       <if test="collectionGoodsNum != null">
         #{collectionGoodsNum},
       </if>

Some files were not shown because too many files changed in this diff