Browse Source

feat: NG-22: 新会员注册时增加国家与语言选项

Tyler 1 year ago
parent
commit
25962164fb

+ 14 - 14
.env.staging

@@ -8,21 +8,21 @@ VUE_APP_ACCESS_TOKEN_PREFIX='Bearer '
 
 # mips
 #api请求地址
-VUE_APP_BASE_API=''
-#文件下载地址
-VUE_APP_BASE_DO_API='http://16.163.228.151:8043'
-#CDN文件地址
-VUE_APP_CDN_API='http://16.163.228.151:8016'
-#会员页面地址
-VUE_APP_BASE_WEBSITE='http://16.163.228.151:8045'
+#VUE_APP_BASE_API=''
+##文件下载地址
+#VUE_APP_BASE_DO_API='http://16.163.228.151:8043'
+##CDN文件地址
+#VUE_APP_CDN_API='http://16.163.228.151:8016'
+##会员页面地址
+#VUE_APP_BASE_WEBSITE='http://16.163.228.151:8045'
 
 
 # test
 # # api请求地址
-# VUE_APP_BASE_API='http://16.163.228.151:8018'
-# # 文件下载地址
-# VUE_APP_BASE_DO_API='http://16.163.228.151:8018'
-# # CDN文件地址
-# VUE_APP_CDN_API='http://16.163.228.151:8021'
-# # 会员页面地址
-# VUE_APP_BASE_WEBSITE='http://16.163.228.151:8017'
+ VUE_APP_BASE_API='http://16.163.228.151:8018'
+ # 文件下载地址
+ VUE_APP_BASE_DO_API='http://16.163.228.151:8018'
+ # CDN文件地址
+ VUE_APP_CDN_API='http://16.163.228.151:8021'
+ # 会员页面地址
+ VUE_APP_BASE_WEBSITE='http://16.163.228.151:8017'

+ 9 - 0
src/api/config.js

@@ -35,3 +35,12 @@ export function deleteAddress(data) {
     data
   })
 }
+
+export function getRegionList(data) {
+  return request({
+    url: '/v1/config/region-list',
+    method: 'get',
+    data
+  })
+}
+

+ 15 - 1
src/api/setting.js

@@ -14,4 +14,18 @@ export function getPageId(data) {
     method: 'get',
     data
   })
-}
+}
+
+export function getLanguages() {
+    return request({
+        url: '/v1/site/languages',
+        method: 'get'
+    })
+}
+
+export function getCountries() {
+    return request({
+        url: '/v1/site/countries',
+        method: 'get'
+    })
+}

+ 26 - 12
src/components/LangSelect/index.vue

@@ -4,30 +4,44 @@
       <svg-icon class-name="international-icon" icon-class="language" />
     </div>
     <el-dropdown-menu slot="dropdown">
-      <el-dropdown-item :disabled="language==='zh'" command="zh">
-        中文
+      <el-dropdown-item v-for="(item,index) in languageList" :key="index" :disabled="language===item.KEY" :command="item.KEY">
+          {{ item.NAME }}
       </el-dropdown-item>
-      <el-dropdown-item :disabled="language==='en'" command="en">
-        English
-      </el-dropdown-item>
-      <!--      <el-dropdown-item :disabled="language==='es'" command="es">-->
-      <!--        Español-->
-      <!--      </el-dropdown-item>-->
-      <!--      <el-dropdown-item :disabled="language==='ja'" command="ja">-->
-      <!--        日本語-->
-      <!--      </el-dropdown-item>-->
     </el-dropdown-menu>
   </el-dropdown>
 </template>
 
 <script>
+import { getLanguages } from '@/api/setting'
+
 export default {
+  data(){
+      return {
+      }
+  },
   computed: {
     language() {
       return this.$store.getters.language
-    }
+    },
+    languageList() {
+      return this.$store.getters.languageList
+    },
+  },
+  mounted() {
+      this.getLanguageList()
   },
   methods: {
+    getLanguageList(){
+        getLanguages().then(response => {
+            let obj = response
+            let list = []
+            Object.keys(obj).forEach(function(key) {
+                list.push(obj[key])
+            });
+            // this.languageList = list
+            this.$store.dispatch('app/setLanguageList', list)
+        })
+    },
     handleSetLanguage(lang) {
       this.$i18n.locale = lang
       this.$store.dispatch('app/setLanguage', lang)

+ 3 - 3
src/lang/zh.js

@@ -368,9 +368,9 @@ export default {
     cityName: '城市',
     address: '详细地址',
     memberNotFound: '找不到这个用户',
-    declarationCenterNumber:'报单中心编号'
-
-
+    declarationCenterNumber:'报单中心编号',
+    country: '国家',
+    paymentCurrency: '支付币种'
   },
   user: {
     email: '电子邮箱',

+ 2 - 0
src/store/getters.js

@@ -17,5 +17,7 @@ const getters = {
   decLv: state => state.user.decLv,
   empLv: state => state.user.empLv,
   crownLv: state => state.user.crownLv,
+  languageList: state => state.app.languageList,
+  getCountriesList: state => state.settings.countriesList
 }
 export default getters

+ 10 - 2
src/store/modules/app.js

@@ -8,7 +8,8 @@ const state = {
   },
   device: 'desktop',
   language: getLanguage(),
-  size: Cookies.get('size') || 'medium'
+  size: Cookies.get('size') || 'medium',
+  languageList: []
 }
 
 const mutations = {
@@ -36,6 +37,9 @@ const mutations = {
   SET_SIZE: (state, size) => {
     state.size = size
     Cookies.set('size', size)
+  },
+  SET_LANGUAGE_LIST: (state, languageList) => {
+    state.languageList = languageList
   }
 }
 
@@ -54,7 +58,11 @@ const actions = {
   },
   setSize({ commit }, size) {
     commit('SET_SIZE', size)
-  }
+  },
+  setLanguageList({ commit }, languageList) {
+    commit('SET_LANGUAGE_LIST', languageList)
+  },
+
 }
 
 export default {

+ 21 - 2
src/store/modules/settings.js

@@ -1,6 +1,6 @@
 import variables from '@/styles/element-variables.scss'
 import defaultSettings from '@/settings'
-import { getWebSetting, getPageId } from '@/api/setting'
+import { getWebSetting, getPageId, getCountries } from '@/api/setting'
 
 const { showSettings, tagsView, fixedHeader, sidebarLogo, supportPinyinSearch } = defaultSettings
 
@@ -11,7 +11,8 @@ const state = {
   fixedHeader,
   sidebarLogo,
   supportPinyinSearch,
-  title:'默认网站头'
+  title:'默认网站头',
+  countriesList: []
 }
 
 const mutations = {
@@ -23,6 +24,9 @@ const mutations = {
   },
   SET_WEBTITLE: (state , title) => {
     state.title = title
+  },
+  SET_COUNTRIES_LIST: (state, countriesList) => {
+    state.countriesList = countriesList
   }
 }
 
@@ -47,6 +51,21 @@ const actions = {
       })
     })
   },
+  getCountries({ commit }) {
+    return new Promise((resolve, reject) => {
+      getCountries().then(response => {
+        let obj = response
+        let list = []
+        Object.keys(obj).forEach(function(key) {
+          list.push(obj[key])
+        });
+        commit('SET_COUNTRIES_LIST', list)
+        resolve(list)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
 }
 
 export default {

+ 16 - 3
src/views/config/shipping-address-list.vue

@@ -39,7 +39,7 @@
       <el-table-column align="center" :label="$t('common.action')" min-width="150px">
         <template slot-scope="{row}">
 					<el-button-group>
-						<el-button type="primary" size="mini" @click="handleEdit(row)">{{ $t('common.edit') }}</el-button>
+						<el-button type="primary" size="mini" @click="handleEdit(row), getRegion()">{{ $t('common.edit') }}</el-button>
 						<el-button type="danger" size="mini" @click="handleDelete(row.ID)">{{ $t('common.delete') }}</el-button>
 					</el-button-group>
         </template>
@@ -47,7 +47,7 @@
     </el-table>
 
 		<div class="white-box-footer" style="margin-top: 10px;">
-			<el-button size="small" type="primary" @click="dialog = true">{{ $t('config.createAddress') }}</el-button>
+			<el-button size="small" type="primary" @click="dialog = true, getRegion()">{{ $t('config.createAddress') }}</el-button>
 			<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.pageSize" @pagination="getList" />
 		</div>
 
@@ -127,7 +127,7 @@
 </template>
 
 <script>
-import {createAddress, fetchAddressList, updateAddress, deleteAddress} from '@/api/config'
+import {createAddress, fetchAddressList, updateAddress, deleteAddress, getRegionList} from '@/api/config'
 import waves from '@/directive/waves'
 import Pagination from '@/components/Pagination'
 import {getScreenWidth} from "@/utils"
@@ -180,6 +180,19 @@ export default {
     this.getList()
   },
   methods: {
+    getRegion(){
+      getRegionList().then(response => {
+        let obj = response.data
+        let list = []
+        Object.keys(obj).forEach(function(key) {
+          list.push({
+            label: obj[key],
+            value: key,
+          })
+        });
+        this.regionData = list
+      })
+    },
     getList() {
       this.listLoading = true
 			fetchAddressList(this.listQuery).then(response => {

+ 11 - 1
src/views/shop/order-list.vue

@@ -79,6 +79,16 @@
 					<span>{{ row.FULL_ADDRESS }}</span>
 				</template>
 			</el-table-column>
+      <el-table-column align="center" :label="$t('shop.country')" prop="COUNTRY" min-width="140px">
+        <template slot-scope="{row}">
+          <span>{{ row.COUNTRY }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" :label="$t('shop.paymentCurrency')" prop="COUNTRY" min-width="140px">
+        <template slot-scope="{row}">
+          <span>{{ row.CURRENCY }}</span>
+        </template>
+      </el-table-column>
       <el-table-column align="center" :label="$t('shop.payment')" prop="PAY_TYPE" min-width="100px"></el-table-column>
       <el-table-column align="center" :label="$t('shop.createdTime')" prop="CREATED_AT" min-width="110px">
         <template slot-scope="{row}">
@@ -163,7 +173,7 @@ export default {
       this.listLoading = true
       fetchOrderList(this.listQuery).then(response => {
         this.tableData = response.data.list
-        this.total = +response.data.totalCount 
+        this.total = +response.data.totalCount
         setTimeout(() => {
           this.listLoading = false
         }, 0.5 * 1000)

+ 66 - 8
src/views/shop/reconsume.vue

@@ -1,5 +1,14 @@
 <template>
   <div class="app-container">
+    <div class="noList">
+      <el-input
+          v-model.trim="memberDetails.number"
+          placeholder="请输入内容"
+          clearable
+          @change="memberRemoteMethod"
+          style="max-width: 50%"
+      ></el-input>
+    </div>
     <el-table :key="tableKey" ref="multipleTable" v-loading="listLoading" :data="tableData" :show-header="false" fit @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="30" align="center" />
       <!--		<el-table-column align="center" type="index" width="50"></el-table-column>-->
@@ -113,7 +122,7 @@
                   <el-col :xs="24" :sm="24" :lg="15">
                     <span>{{ $t('shop.reconsumeUserCode') }}</span>
                   </el-col>
-                  <el-input v-model="newOrder.userName" @change="handleChkRecUser" />
+                  <el-input v-model.trim="newOrder.userName" disabled @change="handleChkRecUser" />
                   <span style="margin-left: 10px">【{{ newOrder.recRealName }}】</span>
                 </el-form-item>
                 <el-form-item>
@@ -260,6 +269,8 @@ import {
   fetchReconsumeProductList,
   fetchShoppingCart
 } from '@/api/shop'
+import {getRegionList} from '@/api/config'
+
 import { fetchFullInfo } from '@/api/user'
 import Pagination from '@/components/Pagination'
 import waves from '@/directive/waves'
@@ -294,11 +305,11 @@ export default {
       list: [],
       total: 0,
       tableData: [],
-      listLoading: true,
+      listLoading: false,
       listQuery: {
         categoryType: 1,
         page: 1,
-        limit: 50
+        limit: 50,
       },
       tool: tool,
       multipleSelection: [],
@@ -395,7 +406,13 @@ export default {
         TAX_RATE: 0,
         taxAmount: 0
       },
-      imageStyle: 'margin-top: -50px;'
+      imageStyle: 'margin-top: -50px;',
+      countries: null,
+      memberLoading: false,
+      memberList: [],
+      memberDetails: {
+        number: '',
+      },
     }
   },
   computed: {
@@ -407,16 +424,53 @@ export default {
         text += possible.charAt(Math.floor(Math.random() * possible.length))
       }
       return text
-    }
+    },
   },
   created() {
-    this.getList()
+    // this.getList()
   },
   mounted() {
     // 支付方式、账户信息、余额
-    this.getShoppingCart()
   },
   methods: {
+    getRegion(){
+      getRegionList({countryId: this.memberDetails.countryId}).then(response => {
+        let obj = response.data
+        let list = []
+        Object.keys(obj).forEach(function(key) {
+          list.push({
+            label: obj[key],
+            value: key,
+          })
+        });
+        this.regionData = list
+      })
+    },
+    memberRemoteMethod(e){
+      console.log(e)
+      if (e) {
+        this.memberLoading = true
+        fetchFullInfo({ userName: e }).then(response => {
+          let memberDetails = {...response.data}
+          // countryId
+          this.memberDetails = {...this.memberDetails, ...response.data}
+          this.newOrder.recRealName = response.data.REAL_NAME
+          this.newOrder.userName = this.memberDetails.number
+          this.listQuery.userId = memberDetails.userId
+          this.memberLoading = false
+          this.getList()
+          this.getShoppingCart()
+        }).catch(() => {
+          this.memberLoading = false
+        })
+      } else {
+        this.newOrder.recRealName = null
+        this.newOrder.userName = null
+        this.listQuery.userId = null
+        this.tableData = []
+        this.total = 0
+      }
+    },
     // 商品列表
     getList() {
       this.listLoading = true
@@ -525,6 +579,7 @@ export default {
       this.visibleShoppingCart = true
       // 展示购物车商品数据
       this.getShowCart()
+      this.getRegion()
     },
     // 设置运费
     setFreight() {
@@ -560,7 +615,7 @@ export default {
     },
     // 支付方式、账户信息、余额
     getShoppingCart() {
-      fetchShoppingCart({ categoryType: this.listQuery.categoryType }).then(response => {
+      fetchShoppingCart({ categoryType: this.listQuery.categoryType, userId: this.listQuery.userId }).then(response => {
         // 收货地址
         this.shippingAddressList = response.data.allAddress
         this.shippingAddressList.map(item => {
@@ -854,4 +909,7 @@ export default {
   border: none;
   padding: 0;
 }
+.noList{
+  margin: 10px 0;
+}
 </style>

+ 10 - 0
src/views/user/member-order.vue

@@ -79,6 +79,16 @@
           <span>{{ row.FULL_ADDRESS }}</span>
         </template>
       </el-table-column>
+      <el-table-column align="center" :label="$t('shop.country')" prop="COUNTRY" min-width="140px">
+        <template slot-scope="{row}">
+          <span>{{ row.COUNTRY }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" :label="$t('shop.paymentCurrency')" prop="COUNTRY" min-width="140px">
+        <template slot-scope="{row}">
+          <span>{{ row.CURRENCY }}</span>
+        </template>
+      </el-table-column>
       <el-table-column align="center" :label="$t('shop.payment')" prop="PAY_TYPE" min-width="100px" />
       <el-table-column align="center" :label="$t('shop.createdTime')" prop="CREATED_AT" min-width="110px">
         <template slot-scope="{row}">

+ 40 - 18
src/views/user/welcome-pack.vue

@@ -1,17 +1,21 @@
 <template>
   <div v-loading="loading">
     <div class="white-box" style="padding: 0 25px; margin-top: 25px;">
+      <div class="noList">
+        <el-select ref="select" @change="countriesChange" v-model="countries" filterable placeholder="请选择">
+          <el-option v-for="(item, index) in countriesList" :key="item.ID" :label="item.NAME" :value="item.ID" />
+        </el-select>
+      </div>
       <el-row :gutter="20">
         <el-col :xs="24" :sm="24" :lg="14">
-          <el-form ref="form" label-width="180px" :label-position="labelPosition" class="form-page">
-
-            <el-form-item :label="$t('user.welcomePackWay')">
-              <el-radio-group v-model="form.decType" @change="decTypeChange">
-                <el-radio size="small" label="normal">{{ $t('user.normal') }}</el-radio>
-                <!--								<el-radio size="small" label="ba">{{ $t('user.BAUpgrade') }}</el-radio>-->
-              </el-radio-group>
-            </el-form-item>
 
+          <el-form ref="form" label-width="180px" :label-position="labelPosition" class="form-page">
+<!--            <el-form-item :label="$t('user.welcomePackWay')">-->
+<!--              <el-radio-group v-model="form.decType" @change="decTypeChange">-->
+<!--                <el-radio size="small" label="normal">{{ $t('user.normal') }}</el-radio>-->
+<!--                &lt;!&ndash;								<el-radio size="small" label="ba">{{ $t('user.BAUpgrade') }}</el-radio>&ndash;&gt;-->
+<!--              </el-radio-group>-->
+<!--            </el-form-item>-->
             <el-divider content-position="left">{{ $t('user.accountInformation') }}</el-divider>
             <el-form-item :label="$t('user.newMemberCode')">
               <el-input v-model="form.insertUserName" :readonly="userReadOnly" @blur="checkBaUser" />
@@ -22,7 +26,7 @@
               </el-select>
             </el-form-item>
             <el-form-item :label="$t('user.stockistCode')">
-              <el-input v-model="form.decUserName"  :disabled="isDec == 1"/>
+              <el-input v-model="form.decUserName" :disabled="isDec == 1" />
             </el-form-item>
 
             <el-form-item>
@@ -105,8 +109,6 @@
             <el-form-item :label="$t('shop.memberName')">
               <el-input v-model="form.realName" />
             </el-form-item>
-         
-
             <el-form-item :label="$t('shop.phoneNumber')">
               <el-input v-model="form.mobile" />
             </el-form-item>
@@ -272,6 +274,7 @@ export default {
   },
   data() {
     return {
+      isChooseCountry: false,
       loading: false,
       tool: tool,
 
@@ -409,7 +412,9 @@ export default {
       allOpenBank: [],
 
       activeName: 'product',
-      isDec:null
+      isDec:null,
+
+      countries: null
     }
   },
   computed: {
@@ -421,7 +426,10 @@ export default {
         text += possible.charAt(Math.floor(Math.random() * possible.length))
       }
       return text
-    }
+    },
+    countriesList() {
+      return this.$store.getters.getCountriesList
+    },
   },
      watch: {
      isDec: {
@@ -431,25 +439,33 @@ export default {
          }
        },
      }
-   },
+  },
   created() {
     const regionInfo = this.$store.getters.regionInfo
     // console.log(this.$store.state.region)
-    this.fetchWelcomePack()
+    // this.fetchWelcomePack()
+    this.getCountries()
   },
   methods: {
+    countriesChange(e){
+      this.fetchWelcomePack()
+    },
+    //国家列表
+    getCountries() {
+      this.$store.dispatch('settings/getCountries')
+    },
     // 会员报单/BA升级
     fetchWelcomePack() {
       this.loading = true
-      fetchWelcomePack().then(response => {
+      fetchWelcomePack({countryId: this.countries}).then(response => {
         this.form.insertUserName = response.data.userName
         this.allOpenBank = response.data.allOpenBank
         this.allDecPackage = response.data.allDecPackage
         this.allGoods = response.data.allGoods
         this.userBalance = response.data.userBalance
         this.categoryType = 1
-          //是否是报单中心
-          this.isDec = response.data.isDec
+        //是否是报单中心
+        this.isDec = response.data.isDec
         const settingObj = this.allGoods
         for (const i in this.allGoods) {
           this.storeNums[i] = 1
@@ -478,6 +494,9 @@ export default {
         setTimeout(() => {
           this.loading = false
         }, 0.5 * 1000)
+      }).catch(err => {
+        console.log(err)
+        this.loading = false
       })
     },
     // 商品详情
@@ -807,4 +826,7 @@ export default {
 .el-radio--medium.is-bordered {
 	margin: 5px 0;
 }
+.noList{
+  margin: 10px 0;
+}
 </style>

+ 1 - 1
vue.config.js

@@ -39,7 +39,7 @@ module.exports = {
     },
     proxy: {
       [process.env.VUE_APP_BASE_API]: {
-        target: 'http://16.163.228.151:8043',
+        target: 'http://16.163.228.151:8018',
         changeOrigin: true,
         pathRewrite: {
           [ '^' + process.env.VUE_APP_BASE_API ]: ''