From b07889e22f823fac80a66b503671e170668f4ee6 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期二, 10 十二月 2024 10:10:25 +0800 Subject: [PATCH] 1.供应商子账号 --- sub_pages/supplier/sub-account/sub-account-list.vue | 177 ++++++ sub_pages/supplier/sub-account/sub-account-switch-list.vue | 165 +++++ common/authorize.js | 18 pages/home/supplier-home.vue | 790 +++++++++++++++------------- pages.json | 20 sub_pages/supplier/sub-account/sub-account-reg.vue | 382 +++++++++++++ main.js | 3 pages/user/supplier-user.vue | 41 + store/index.js | 82 ++ 9 files changed, 1,305 insertions(+), 373 deletions(-) diff --git a/common/authorize.js b/common/authorize.js new file mode 100644 index 0000000..9092b51 --- /dev/null +++ b/common/authorize.js @@ -0,0 +1,18 @@ +import storage from '../plugins/storage.js' +function hasPermission(permission) { + // 判断是否是子账号,如果是子账号菜单需要验证权限 + const appMenu=storage.getItem('appMenu'); + // 获取当前登录人信息 + const currentInfo=this.$store.state.currentInfo + const isSubSupplier=currentInfo.isSubSupplier + if(isSubSupplier){ + const menu = appMenu.find(element => element.permissionUq === permission); + return menu?.subaccountAccessFlag===1?true : false; + }else{ + // 主账号用所有权限 + return true; + } + + } + +export default hasPermission \ No newline at end of file diff --git a/main.js b/main.js index 0f77c8f..8133322 100644 --- a/main.js +++ b/main.js @@ -19,6 +19,9 @@ Vue.mixin(mixinsCommon) +import hasPermission from './common/authorize.js' +Vue.prototype.$hasPermission = hasPermission; + // main.js import uView from 'uview-ui' Vue.use(uView) diff --git a/pages.json b/pages.json index df0f057..e7f18b4 100644 --- a/pages.json +++ b/pages.json @@ -223,6 +223,26 @@ "enablePullDownRefresh": true } } + ,{ + "path": "sub-account/sub-account-list", + "style": { + "navigationBarTitleText": "子账号列表", + "enablePullDownRefresh": true + } + } + ,{ + "path": "sub-account/sub-account-reg", + "style": { + "navigationBarTitleText": "子账号注册", + "enablePullDownRefresh": true + } + },{ + "path": "sub-account/sub-account-switch-list", + "style": { + "navigationBarTitleText": "子账号切换", + "enablePullDownRefresh": true + } + } // #ifdef PUB_SUPPLIER , { "path": "supplier-info/supplier-info", diff --git a/pages/home/supplier-home.vue b/pages/home/supplier-home.vue index a0920f1..bb2b34f 100644 --- a/pages/home/supplier-home.vue +++ b/pages/home/supplier-home.vue @@ -7,38 +7,37 @@ 我的 </view> --> <!-- 背景图 --> - - <view class="top-bg" :style="{'padding-top':(StatusBar)+'px','line-height':CustomBar+'rpx' }"> + + <view class="top-bg" :style="{ 'padding-top': (StatusBar) + 'px', 'line-height': CustomBar + 'rpx' }"> <view class="title" style="position: relative;"> 首页 </view> - <view class="flex user-info" v-if="currentInfo&&(currentInfo.id)"> - + <view class="flex user-info" v-if="currentInfo && (currentInfo.id)"> + <image class="user-icon" v-if=" - (currentInfo.customerDTO&¤tInfo.customerDTO.cover) - ||(currentInfo.supplierDTO&¤tInfo.supplierDTO.cover) - ||(currentInfo.partnerDTO&¤tInfo.partnerDTO.cover) + (currentInfo.customerDTO && currentInfo.customerDTO.cover) + || (currentInfo.supplierDTO && currentInfo.supplierDTO.cover) + || (currentInfo.partnerDTO && currentInfo.partnerDTO.cover) || currentInfo.picture - " :src=" - (currentInfo.customerDTO&¤tInfo.customerDTO.cover) - ||(currentInfo.supplierDTO&¤tInfo.supplierDTO.cover) - ||(currentInfo.partnerDTO&¤tInfo.partnerDTO.cover) - || currentInfo.picture - " mode="scaleToFill"></image> - + " :src="(currentInfo.customerDTO && currentInfo.customerDTO.cover) + || (currentInfo.supplierDTO && currentInfo.supplierDTO.cover) + || (currentInfo.partnerDTO && currentInfo.partnerDTO.cover) + || currentInfo.picture + " mode="scaleToFill"></image> + <image class="user-icon" v-else src='https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png' mode="scaleToFill"></image> - + <!-- 头像 --> - <!-- <image class="user-icon" v-if="!currentInfo.picture" + <!-- <image class="user-icon" v-if="!currentInfo.picture" src='https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png' mode="aspectFit"></image> <image class="user-icon" v-if="currentInfo.picture" :src="currentInfo.picture" mode="aspectFit"></image> --> <view class="name"> - <view class="t1"> + <view class="t1 flex" style="align-items: center; justify-content: space-between;"> <!-- {{ (!!currentInfo.supplierDTO?(currentInfo.supplierDTO.name):"") || currentInfo.nickName || currentInfo.loginName || '-'}} --> <span v-if="currentInfo.partnerDTO && currentInfo.partnerDTO.name"> {{ currentInfo.partnerDTO.name }} @@ -57,15 +56,21 @@ </span> <span v-else>-</span> - <span v-if="currentInfo.supplierDTO&¤tInfo.supplierDTO.status!=='P'"> - ({{currentInfo.supplierDTO?currentInfo.supplierDTO.statusStr:''}})</span> - <span v-if="currentInfo.partnerDTO&¤tInfo.partnerDTO.status!=='P'"> - ({{currentInfo.partnerDTO?currentInfo.partnerDTO.statusStr:''}})</span> - <span v-if="!currentInfo.partnerDTO&¤tInfo.type==='partner'">(信息待完善)</span> + <span v-if="currentInfo.supplierDTO && currentInfo.supplierDTO.status !== 'P'"> + ({{ currentInfo.supplierDTO ? currentInfo.supplierDTO.statusStr : '' }})</span> + <span v-if="currentInfo.partnerDTO && currentInfo.partnerDTO.status !== 'P'"> + ({{ currentInfo.partnerDTO ? currentInfo.partnerDTO.statusStr : '' }})</span> + <span v-if="!currentInfo.partnerDTO && currentInfo.type === 'partner'">(信息待完善)</span> + + <u--image v-if="selftype === 'supplier' && currentInfo.switchFlag " + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/fa/fa6585cd52d54156b5d64fa59af58180switch.png" + width="10px" height="10px" style="margin-left: 10px; margin-right: 10px;" + @click="switchSubAccount"></u--image> + <u--text v-if="selftype === 'supplier' && currentInfo.switchFlag " style="color: black;" text="切换账号" @click="switchSubAccount"></u--text> </view> - <view class="t2">{{currentInfo.tel || '暂无电话'}}</view> + <view class="t2">{{ currentInfo.tel || '暂无电话' }}</view> <view class="t2" v-if="currentInfo.partnerDTO && currentInfo.partnerDTO.id"> - ID: {{ currentInfo.partnerDTO.id }} + ID: {{ currentInfo.partnerDTO.id }} </view> </view> @@ -73,12 +78,17 @@ </view> - <view class="item-container" :class="[selftype?selftype:'']"> + <view class="item-container" :class="[selftype ? selftype : '']" + v-if=" + (selftype === 'supplier' && $hasPermission('supplier:workbench:mine:profit')) + || (selftype === 'partner' && $hasPermission('partner:workbench:mine:profit')) + + "> <view class="title">我的收益</view> - <view class="flex tj-container" v-if="selftype==='partner'"> + <view class="flex tj-container" v-if="selftype === 'partner'"> <view class="tj-each"> <view class="num total"> - ¥{{tj.income||'0.00'}} + ¥{{ tj.income || '0.00' }} </view> </view> <view class="tj-each" style="flex: 1;"> @@ -89,26 +99,26 @@ </view> <view class="line"></view> - <view class="flex tj-container" v-if="selftype==='supplier'"> - <view class="tj-each" @click="goto('/sub_pages/supplier/data-statis/data-statis',true)"> + <view class="flex tj-container" v-if="selftype === 'supplier'"> + <view class="tj-each" @click="goto('/sub_pages/supplier/data-statis/data-statis', true)"> <view class="num"> - {{tj.dealCountLastMonth||0}}扎 + {{ tj.dealCountLastMonth || 0 }}扎 </view> <view class="name"> 上月成交 </view> </view> - <view class="tj-each" @click="goto('/sub_pages/supplier/data-statis/data-statis',true)"> + <view class="tj-each" @click="goto('/sub_pages/supplier/data-statis/data-statis', true)"> <view class="num"> - {{tj.dealCountToday||0}}扎 + {{ tj.dealCountToday || 0 }}扎 </view> <view class="name"> 今日成交 </view> </view> - <view class="tj-each" @click="goto('/sub_pages/supplier/data-statis/data-statis',true)"> + <view class="tj-each" @click="goto('/sub_pages/supplier/data-statis/data-statis', true)"> <view class="num"> - {{tj.dealCountDay30||0}}扎 + {{ tj.dealCountDay30 || 0 }}扎 </view> <view class="name"> 近30天成交 @@ -116,25 +126,28 @@ </view> </view> <view class="flex tj-container"> - <view class="tj-each" @click="selftype=='supplier'&&goto('/pages/order/order-delivery?range=today',true)"> + <view class="tj-each" + @click="selftype == 'supplier' && goto('/pages/order/order-delivery?range=today', true)"> <view class="num"> - {{tj.orderCountToday||0}}单 + {{ tj.orderCountToday || 0 }}单 </view> <view class="name"> 今日订单数 </view> </view> - <view class="tj-each" @click="selftype=='supplier'&&goto('/pages/order/order-delivery?range=yesterday',true)"> + <view class="tj-each" + @click="selftype == 'supplier' && goto('/pages/order/order-delivery?range=yesterday', true)"> <view class="num"> - {{tj.orderCountYesterday||0}}单 + {{ tj.orderCountYesterday || 0 }}单 </view> <view class="name"> 昨日订单数 </view> </view> - <view class="tj-each" @click="selftype=='supplier'&&goto('/pages/order/order-delivery?range=month',true)"> + <view class="tj-each" + @click="selftype == 'supplier' && goto('/pages/order/order-delivery?range=month', true)"> <view class="num"> - {{tj.orderCountMonth||0}}单 + {{ tj.orderCountMonth || 0 }}单 </view> <view class="name"> 本月订单数 @@ -142,103 +155,132 @@ </view> </view> </view> - <view class="item-container flex m-t-12" style="padding: 34rpx 44rpx;" v-if="selftype=='supplier'"> + <view class="item-container flex m-t-12" style="padding: 34rpx 44rpx;" + v-if="(selftype == 'supplier' && $hasPermission('supplier:workbench:after:sale'))"> <view class="rate-view flex1" style="max-width: 140rpx;"> <view class="title">售后率</view> - <view class="title" style="color: red;">{{((tj.salesRate||0)*100).toFixed(2)}}%</view> + <view class="title" style="color: red;">{{ ((tj.salesRate || 0) * 100).toFixed(2) }}%</view> </view> <view class="tj-panel pink flex1" - @click="goto('/pages/order/order-delivery?status=PENDING&range=today',true)"> + @click="goto('/pages/order/order-delivery?status=PENDING&range=today', true)"> <view class="name">今日待配送</view> - <view class="title">{{tj.deliverCount||0}}扎</view> + <view class="title">{{ tj.deliverCount || 0 }}扎</view> </view> <view class="tj-panel green flex1" - @click="goto('/pages/order/order-delivery?status=ARRIVED&range=today',true)"> + @click="goto('/pages/order/order-delivery?status=ARRIVED&range=today', true)"> <view class="name green">今日配送汇总</view> - <view class="title">{{tj.deliverTotal||0}}扎</view> + <view class="title">{{ tj.deliverTotal || 0 }}扎</view> </view> </view> - <view class="m-t-12" @click="getNoticeMore"> + <view v-if=" + (selftype === 'supplier' && $hasPermission('supplier:workbench:notice') ) + || (selftype === 'partner' && $hasPermission('partner:workbench:notice')) + " + class="m-t-12" @click="getNoticeMore"> <uni-notice-bar class="notice-bar" color="#333" background-color="#fff" show-get-more show-icon - :scrollable="scrollable" :text="currentNotice.title||'暂无公告'" :key="currentNotice.id" /> - <span v-if="!currentNotice||!currentNotice.id"> </span> + :scrollable="scrollable" :text="currentNotice.title || '暂无公告'" :key="currentNotice.id" /> + <span v-if="!currentNotice || !currentNotice.id"> </span> </view> - <view class="item-container"> + <view class="item-container m-t-12" + v-if=" + (selftype === 'supplier' && $hasPermission('supplier:workbench:common:functions') ) + || (selftype === 'partner' && $hasPermission('partner:workbench:common:functions')) + "> <view class="title">常用功能</view> - <view class="flex order-icons m-t-12"> - <view class="nav row margin-tb" v-if="selftype==='partner'" - @click="goto('/sub_pages/partner/order-manage/order-manage',true)"> + <view class="flex order-icons m-t-12 function-container "> + <view class="nav row margin-tb function-item " + v-if="(selftype === 'partner' && $hasPermission('partner:workbench:common:functions:order:management'))" + @click="goto('/sub_pages/partner/order-manage/order-manage', true)"> <view class="img-c"> <image class="icon margin-bottom order-icon ddgl" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/23/23a7ad86e00c4ba28cd962dc4910433cuser-icon-ddgl.png" mode="scaleToFill" /> + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/23/23a7ad86e00c4ba28cd962dc4910433cuser-icon-ddgl.png" + mode="scaleToFill" /> </view> <view class="order-desc tg">订单管理</view> </view> - <view class="nav row margin-tb" v-if="selftype==='supplier'" - @click="goto('/sub_pages/supplier/order-manage/order-manage',true)"> + <view class="nav row margin-tb function-item " + v-if="(selftype === 'supplier' && $hasPermission('supplier:workbench:common:functions:order:statistics'))" + @click="goto('/sub_pages/supplier/order-manage/order-manage', true)"> <view class="img-c"> <image class="icon margin-bottom order-icon ddgl" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/23/23a7ad86e00c4ba28cd962dc4910433cuser-icon-ddgl.png" mode="scaleToFill" /> + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/23/23a7ad86e00c4ba28cd962dc4910433cuser-icon-ddgl.png" + mode="scaleToFill" /> </view> <view class="order-desc tg">订单统计</view> </view> - <!-- <view class="nav row margin-tb" + <view + v-if="(selftype==='partner' && $hasPermission('partner:workbench:common:functions:bill:settlement'))" + class="nav row margin-tb function-item " @click="goto('/sub_pages/supplier/order-settlement/order-settlement',true)"> <view class="img-c"> <image class="icon margin-bottom order-icon zdjs" src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/7b/7b7ed1488fd64f6fa9bc6b557f141f37user-icon-zdjs.png" mode="scaleToFill" /> </view> <view class="order-desc tg">账单结算</view> - </view> --> - <view class="nav row margin-tb" @click="toFlowManage" v-if="selftype==='supplier'"> + </view> + <view class="nav row margin-tb function-item " @click="toFlowManage" + v-if="selftype === 'supplier' && $hasPermission('supplier:workbench:common:functions:product:management')"> <view class="img-c"> <image class="icon margin-bottom order-icon spgl" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/47/478e007ad07a43ea9f40a962d83cedb4user-icon-spgl.png" mode="scaleToFill" /> + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/47/478e007ad07a43ea9f40a962d83cedb4user-icon-spgl.png" + mode="scaleToFill" /> </view> <view class="order-desc cqw">商品管理</view> </view> - <view class="nav row margin-tb" v-if="selftype==='partner'" - @click="goto('/sub_pages/partner/markup-config/markup-config',true)"> + <view class="nav row margin-tb function-item " + v-if="(selftype === 'partner' && $hasPermission('partner:workbench:common:functions:markup:configuration'))" + @click="goto('/sub_pages/partner/markup-config/markup-config', true)"> <view class="img-c"> <image class="icon margin-bottom order-icon jjpz" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/93/93356ec339074b49b04c1a3a37146f22user-icon-jjpz.png" mode="scaleToFill" /> + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/93/93356ec339074b49b04c1a3a37146f22user-icon-jjpz.png" + mode="scaleToFill" /> </view> <view class="order-desc tg">加价配置</view> </view> - <view class="nav row margin-tb" @click="goto('/pages/order/order-sale/order-sale',true)"> + <view class="nav row margin-tb function-item " + v-if="(selftype === 'supplier' && $hasPermission('supplier:workbench:common:functions:after:sale:claim')) || + (selftype === 'partner' && $hasPermission('partner:workbench:common:functions:after:sale:claim') )" + @click="goto('/pages/order/order-sale/order-sale', true)"> <view class="img-c"> <image class="icon margin-bottom order-icon shlp" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/47/47b54c52e4c2430c8f9e91645fbf9ebduser-icon-shlp.png" mode="scaleToFill" /> + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/47/47b54c52e4c2430c8f9e91645fbf9ebduser-icon-shlp.png" + mode="scaleToFill" /> </view> <view class="order-desc syst">售后理赔</view> </view> - - <!-- <view class="nav row margin-tb" @click="printDeliveryOrder"> + + <!-- <view class="nav row margin-tb function-item " @click="printDeliveryOrder"> <view class="img-c"> <image class="icon margin-bottom order-icon kkjl" src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/22/22db478554ec436a8c7e6e89c346767duser-icon-kkjl.png" mode="scaleToFill" /> </view> <view class="order-desc wbsp">测试蓝牙</view> </view> --> - </view> - <view class="flex order-icons m-t-12"> - <view class="nav row margin-tb" v-if="selftype==='supplier'" @click="goto('/sub_pages/supplier/wallet/my-wallet',true)"> + <!-- </view> + <view class="flex order-icons m-t-12"> --> + <view class="nav row margin-tb function-item " + v-if="(selftype === 'supplier' && $hasPermission('supplier:workbench:common:functions:my:wallet'))" @click="goto('/sub_pages/supplier/wallet/my-wallet', true)"> <view class="img-c"> <image class="icon margin-bottom order-icon shlp" - src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/8d/8d72f2df8a4348ac90bfbfb553a9cc71qianbao.png" mode="scaleToFill" /> + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/8d/8d72f2df8a4348ac90bfbfb553a9cc71qianbao.png" + mode="scaleToFill" /> </view> <view class="order-desc syst">我的钱包</view> </view> - <view class="nav row margin-tb"> - + + + <view class="nav row margin-tb function-item " + v-if="(selftype === 'supplier' && $hasPermission('supplier:workbench:common:functions:sub:account'))" + @click="goto('/sub_pages/supplier/sub-account/sub-account-list', true)"> + <view class="img-c"> + <image class="icon margin-bottom order-icon shlp" + src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/56/56d1a93862a4470e9b4481b970fd6fc9子账号管理.png" + mode="scaleToFill" /> + </view> + <view class="order-desc syst">子账号</view> </view> - <view class="nav row margin-tb"> - - </view> - <view class="nav row margin-tb"> - - </view> + <!-- <view class="nav row margin-tb function-item "></view> --> </view> </view> @@ -251,320 +293,340 @@ </template> <script> - export default { - data() { - return { - CustomBar: uni.getStorageSync('CustomBar'), - StatusBar: uni.getStorageSync('StatusBar'), - tcode: '', - inviterName: '', - // StatusBar:0, +export default { + data() { + return { + CustomBar: uni.getStorageSync('CustomBar'), + StatusBar: uni.getStorageSync('StatusBar'), + tcode: '', + inviterName: '', + // StatusBar:0, - //公告的 - noticeList: [], - currentNoticeIndex: 0, - currentNotice: { + //公告的 + noticeList: [], + currentNoticeIndex: 0, + currentNotice: { - }, - scrollable: false, - cacheUserId: '', - tj: {} + }, + scrollable: false, + cacheUserId: '', + tj: {} - }; - }, - onShareAppMessage() { - let that = this; - var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO && - that.currentInfo.supplierDTO.name || that.currentInfo.partnerDTO && that.currentInfo.partnerDTO.name || '' - var url = - `/pages/login/supplier-login?shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${name||''}`; //你的转发页面路径拼接参数 - return { - title: "花满芫", - path: url, + }; + }, + onShareAppMessage() { + let that = this; + var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO && + that.currentInfo.supplierDTO.name || that.currentInfo.partnerDTO && that.currentInfo.partnerDTO.name || '' + var url = + `/pages/login/supplier-login?shareId=${this.currentInfo && this.currentInfo.id || ''}&shareName=${name || ''}`; //你的转发页面路径拼接参数 + return { + title: "花满芫", + path: url, + } + }, + onShareTimeline() { + let that = this; + var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO && + that.currentInfo.supplierDTO.name || that.currentInfo.partnerDTO && that.currentInfo.partnerDTO.name || '' + var url = + `/pages/login/supplier-login?shareId=${this.currentInfo && this.currentInfo.id || ''}&shareName=${name || ''}`; //你的转发页面路径拼接参数 + return { + title: "花满芫", + path: url, + } + }, + async onPullDownRefresh() { + await this.$store.dispatch('getCurrentInfo') + await this.getTj(true) + uni.stopPullDownRefresh() + }, + onLoad(options) { + const url = options.q ? decodeURIComponent(options.q) : ''; + const urlcode = options.url && decodeURIComponent(options.url) || '' + }, + onShow() { + this.getTj(true) + }, + created() { + //公告 + var type = '' + // #ifdef PUB_CUSTOMER + type = 'customer' + // #endif + // #ifdef PUB_SUPPLIER + type = 'supplier' + // #endif + // #ifdef PUB_PARTNER + type = 'partner' + // #endif + + this.$http.request('get', '/api/pub/announcement/list/' + type, { + params: { + size: 5, + status: 'A' } - }, - onShareTimeline() { - let that = this; - var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO && - that.currentInfo.supplierDTO.name || that.currentInfo.partnerDTO && that.currentInfo.partnerDTO.name || '' - var url = - `/pages/login/supplier-login?shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${name||''}`; //你的转发页面路径拼接参数 - return { - title: "花满芫", - path: url, - } - }, - async onPullDownRefresh() { - await this.$store.dispatch('getCurrentInfo') - await this.getTj(true) - uni.stopPullDownRefresh() - }, - onLoad(options) { - const url = options.q ? decodeURIComponent(options.q) : ''; - const urlcode = options.url && decodeURIComponent(options.url) || '' - }, - onShow() { - this.getTj(true) - }, - created() { - //公告 - var type = '' - // #ifdef PUB_CUSTOMER - type = 'customer' - // #endif - // #ifdef PUB_SUPPLIER - type = 'supplier' - // #endif - // #ifdef PUB_PARTNER - type = 'partner' - // #endif - - this.$http.request('get', '/api/pub/announcement/list/'+type, { - params: { - size: 5, - status: 'A' + }).then(res => { + if (res.code == 0) { + this.noticeList = (res.data && res.data || []) + console.log('this.noticeList', this.noticeList) + if (this.noticeList.length > 0) { + this.currentNotice = this.noticeList[0] + if (this.currentNotice.title && this.currentNotice.title.length >= 30) { + this.scrollable = true + } else { + this.scrollable = false + } + let that = this + // if (this.noticeList.length >= 1) { + // setInterval(() => { + // console.log('interval,1') + // that.currentNoticeIndex += 1 + // that.currentNoticeIndex %= that.noticeList.length + // that.currentNotice = that.noticeList[that.currentNoticeIndex] + // that.scrollable = false + // that.$nextTick(() => { + // if (that.currentNotice.title && that.currentNotice.title + // .length >= 30) { + // that.scrollable = true + // } else { + // that.scrollable = false + // } + // }) + + // }, 8000) + // } + } - }).then(res => { - if (res.code == 0) { - this.noticeList = (res.data && res.data || []) - console.log('this.noticeList', this.noticeList) - if (this.noticeList.length > 0) { - this.currentNotice = this.noticeList[0] - if (this.currentNotice.title && this.currentNotice.title.length >= 30) { - this.scrollable = true - } else { - this.scrollable = false - } - let that = this - // if (this.noticeList.length >= 1) { - // setInterval(() => { - // console.log('interval,1') - // that.currentNoticeIndex += 1 - // that.currentNoticeIndex %= that.noticeList.length - // that.currentNotice = that.noticeList[that.currentNoticeIndex] - // that.scrollable = false - // that.$nextTick(() => { - // if (that.currentNotice.title && that.currentNotice.title - // .length >= 30) { - // that.scrollable = true - // } else { - // that.scrollable = false - // } - // }) + } + }) - // }, 8000) - // } + }, + methods: { + switchSubAccount() { + uni.navigateTo({ + url: '/sub_pages/supplier/sub-account/sub-account-switch-list' + }) + }, + printDeliveryOrder(item) { + //蓝牙打印 + var that = this; + wx.getBluetoothAdapterState({ + success: (result) => { + console.log('b s', result) + console.log("蓝牙状态:\n" + result.errMsg) + if (result.adapterState.available) { + if (result.adapterState.discovering) { + that.blueSearchDeviceCheck() + } else { + that.blueSearchDevice() + } + } else { + //打开蓝牙 + wx.openBluetoothAdapter({ + success: function (res) { + console.log("蓝牙已打开") + that.blueSearchDevice() + + }, + fail: function (res) { + console.log('res', res) + that.$message.showToast('蓝牙未打开') + } + }) } + }, + fail: (res) => { + console.log("蓝牙状态", res) + that.$message.showToast('获取蓝牙状态失败') + + } + }) + }, + blueSearchDevice() { + var that = this; + + wx.startBluetoothDevicesDiscovery({ + success: (res) => { + //打印调试日志 + console.log("搜索设备返回" + JSON.stringify(res)) + that.blueSearchDeviceCheck() + + }, + fail: (res) => { + console.log('error search', res) + that.$message.showToast('打开蓝牙搜索设备失败') + } }) }, - methods: { - printDeliveryOrder(item) { - //蓝牙打印 - var that = this; - wx.getBluetoothAdapterState({ - success: (result) => { - console.log('b s', result) - console.log("蓝牙状态:\n" + result.errMsg) - if (result.adapterState.available) { - if (result.adapterState.discovering) { - that.blueSearchDeviceCheck() - } else { - that.blueSearchDevice() - } + blueSearchDeviceCheck() { + let that = this + wx.getBluetoothDevices({ + success: (res) => { + var printDevice = undefined + for (var device of res.devices) { + if (device.name.indexOf('GP-M') >= 0) { + printDevice = device + // RSSI: -57 + // advertisServiceUUIDs: Array(2) + // 0: "000018f0-0000-1000-8000-00805f9b34fb" + // 1: "e7810a71-73ae-499d-8c15-faa9aef0c3f2" + // length: 2 + // nv_length: (...) + // __proto__: Array(0) + // deviceId: "89:E2:AF:33:46:2B" + // name: "GP-M322-5565_BLE" + break } else { - //打开蓝牙 - wx.openBluetoothAdapter({ - success: function(res) { - console.log("蓝牙已打开") - that.blueSearchDevice() - - }, - fail: function(res) { - console.log('res', res) - that.$message.showToast('蓝牙未打开') - } - }) } - }, - fail: (res) => { - console.log("蓝牙状态", res) - that.$message.showToast('获取蓝牙状态失败') - } - }) - }, - blueSearchDevice() { - var that = this; - - wx.startBluetoothDevicesDiscovery({ - success: (res) => { - //打印调试日志 - console.log("搜索设备返回" + JSON.stringify(res)) - that.blueSearchDeviceCheck() - - }, - fail: (res) => { - console.log('error search', res) - that.$message.showToast('打开蓝牙搜索设备失败') - - } - }) - - }, - blueSearchDeviceCheck() { - let that = this - wx.getBluetoothDevices({ - success: (res) => { - var printDevice = undefined - for (var device of res.devices) { - if (device.name.indexOf('GP-M') >= 0) { - printDevice = device - // RSSI: -57 - // advertisServiceUUIDs: Array(2) - // 0: "000018f0-0000-1000-8000-00805f9b34fb" - // 1: "e7810a71-73ae-499d-8c15-faa9aef0c3f2" - // length: 2 - // nv_length: (...) - // __proto__: Array(0) - // deviceId: "89:E2:AF:33:46:2B" - // name: "GP-M322-5565_BLE" - break - } else { - - } - } - if (!printDevice) { - that.$message.showToast('未找到可用打印机,请联系客服') - that.stopBluetoothDevicesDiscovery() - - } else { - wx.createBLEConnection({ - deviceId: printDevice.deviceId, - success: function(res) { - // https: //blog.csdn.net/weixin_51375107/article/details/116009436 - console.log('连接设备返回:' + res.errMsg); - that.$message.showToast('连接设备返回:' + res.errMsg) - // escpos怎么来 →点击查看智谱清言的回答https://chatglm.cn/share/FEXaC - - }, - fail: function(res) { - console.log('createBLEConnection fail', res) - that.$message.showToast('连接打印机失败') - }, - complete() { - that.stopBluetoothDevicesDiscovery() - - } - }) - } - // res.devices.forEach((device, i) => { - // console.log('device', - // device) - // // if (device.deviceId == that.data - // // .deviceId) { - // // console.log("物联网设备已找到") - // // that.$message.showToast( - // // '打印设备已找到') - // // return; - // // } - // }) - }, - fail: (res) => { - console.log('getBluetoothDevices', - res) - that.$message.showToast('获取蓝牙设备失败') - - } - }) - }, - stopBluetoothDevicesDiscovery() { - var that = this; - wx.stopBluetoothDevicesDiscovery({ - success: (res) => { - console.log("停止扫描设备") - }, - }) - }, - getTj(refresh=false) { - // /api/supplier/delivery - - if (this.currentInfo.id && (this.currentInfo.id !== this.cacheUserId || refresh)) { - this.cacheUserId = this.currentInfo.id - let that = this - setTimeout(() => { - //其他统计 - // #ifdef PUB_SUPPLIER - this.$http.request('get', '/api/supplier/delivery/statistics', {}).then(res => { - if (res.code === 0) { - that.tj = res.data || {} - } - }) - // #endif - // #ifdef PUB_PARTNER - this.$http.request('get', '/api/partner/order/statistics', {}).then(res => { - if (res.code === 0) { - that.tj = res.data || {} - } - }) - // #endif - - }, 200) - } - - }, - async toFlowManage() { - - - if (!this.currentInfo.supplierDTO) { - await this.$message.confirm('尚未入驻店铺信息,是否前往入驻?') - this.goto('/sub_pages/supplier/supplier-info/supplier-info', true) - return - } - if (this.currentInfo.supplierDTO) { - //需要刷新一下当前用户信息 - this.$message.showLoading() - await this.$store.dispatch('getCurrentInfo') - this.$message.hideLoading() - - if (this.currentInfo.supplierDTO.status == 'P') { + if (!printDevice) { + that.$message.showToast('未找到可用打印机,请联系客服') + that.stopBluetoothDevicesDiscovery() } else { - if (this.currentInfo.supplierDTO.status == 'R') { - await this.$message.confirm('店铺信息审核不通过,是否前往修改信息?') - this.goto('/sub_pages/supplier/supplier-info/supplier-info', true) - return - } else { - this.$message.showToast('审核中请耐心等待') - return - } + wx.createBLEConnection({ + deviceId: printDevice.deviceId, + success: function (res) { + // https: //blog.csdn.net/weixin_51375107/article/details/116009436 + console.log('连接设备返回:' + res.errMsg); + that.$message.showToast('连接设备返回:' + res.errMsg) + // escpos怎么来 →点击查看智谱清言的回答https://chatglm.cn/share/FEXaC + }, + fail: function (res) { + console.log('createBLEConnection fail', res) + that.$message.showToast('连接打印机失败') + }, + complete() { + that.stopBluetoothDevicesDiscovery() + + } + }) } + // res.devices.forEach((device, i) => { + // console.log('device', + // device) + // // if (device.deviceId == that.data + // // .deviceId) { + // // console.log("物联网设备已找到") + // // that.$message.showToast( + // // '打印设备已找到') + // // return; + // // } + // }) + }, + fail: (res) => { + console.log('getBluetoothDevices', + res) + that.$message.showToast('获取蓝牙设备失败') + } - console.log('goto') - this.goto('/sub_pages/supplier/flower-manage/flower-manage', true) - }, - getNoticeMore() { - uni.navigateTo({ - url: '/pages/notice/list?id=' + this.currentNotice.id - }) - }, + }) + }, + stopBluetoothDevicesDiscovery() { + var that = this; + wx.stopBluetoothDevicesDiscovery({ + success: (res) => { + console.log("停止扫描设备") + }, + }) + }, + getTj(refresh = false) { + // /api/supplier/delivery + + if (this.currentInfo.id && (this.currentInfo.id !== this.cacheUserId || refresh)) { + this.cacheUserId = this.currentInfo.id + let that = this + setTimeout(() => { + //其他统计 + // #ifdef PUB_SUPPLIER + this.$http.request('get', '/api/supplier/delivery/statistics', {}).then(res => { + if (res.code === 0) { + that.tj = res.data || {} + } + }) + // #endif + // #ifdef PUB_PARTNER + this.$http.request('get', '/api/partner/order/statistics', {}).then(res => { + if (res.code === 0) { + that.tj = res.data || {} + } + }) + // #endif + + }, 200) + } + + }, + async toFlowManage() { + + + if (!this.currentInfo.supplierDTO) { + await this.$message.confirm('尚未入驻店铺信息,是否前往入驻?') + this.goto('/sub_pages/supplier/supplier-info/supplier-info', true) + return + } + if (this.currentInfo.supplierDTO) { + //需要刷新一下当前用户信息 + this.$message.showLoading() + await this.$store.dispatch('getCurrentInfo') + this.$message.hideLoading() + + if (this.currentInfo.supplierDTO.status == 'P') { + + } else { + if (this.currentInfo.supplierDTO.status == 'R') { + await this.$message.confirm('店铺信息审核不通过,是否前往修改信息?') + this.goto('/sub_pages/supplier/supplier-info/supplier-info', true) + return + } else { + this.$message.showToast('审核中请耐心等待') + return + } + + } + } + console.log('goto') + this.goto('/sub_pages/supplier/flower-manage/flower-manage', true) + }, + getNoticeMore() { + uni.navigateTo({ + url: '/pages/notice/list?id=' + this.currentNotice.id + }) + }, - } } +} </script> <style lang="scss" scoped> - @import "../user/user.scss"; +@import "../user/user.scss"; - @import "./home.scss"; +@import "./home.scss"; </style> -<style lang="scss" scoped> +<style lang="css" scoped> + +.function-container { + display: flex; + flex-wrap: wrap; + justify-content: space-start; +} + +.function-item { + min-width: 25%; + max-width: 25%; + text-align: center; + padding: 10px; + box-sizing: border-box; + margin-bottom: 10px; +} </style> \ No newline at end of file diff --git a/pages/user/supplier-user.vue b/pages/user/supplier-user.vue index 3b3f4a5..2b441c1 100644 --- a/pages/user/supplier-user.vue +++ b/pages/user/supplier-user.vue @@ -103,7 +103,13 @@ <!-- getUserProfile --> {{ '点击登陆/注册' }} </view> - <image class="icon-setting" @click="toInfo" src="../../static/common/icon-setting.png" mode="aspectFit"> + <image class="icon-setting" + v-if=" + (selftype==='supplier' && $hasPermission('supplier:mine:setting')) + || (selftype==='partner' && $hasPermission('partner:mine:setting') ) + || (selftype==='customer') + " + @click="toInfo" src="../../static/common/icon-setting.png" mode="aspectFit"> </image> </view> <!-- #ifdef PUB_CUSTOMER --> @@ -323,14 +329,16 @@ <uni-icons type="right"></uni-icons> </view> </view> --> - <view class="user-util m-t-12 flex" v-if="selftype==='partner'||!selftype" + <view class="user-util m-t-12 flex" + v-if="(selftype==='partner' && $hasPermission('partner:mine:personal:info') )||!selftype" @click="goto('/sub_pages/partner/partner-info/partner-info-personal',true)"> <view class="title">个人资料</view> <view class="right-icon"> <uni-icons type="right"></uni-icons> </view> </view> - <view class="user-util m-t-12 flex" v-if="selftype==='partner'" + <view class="user-util m-t-12 flex" + v-if="selftype==='partner' && $hasPermission('partner:mine:partner:info') " @click="goto('/sub_pages/partner/partner-info/partner-info',true)"> <view class="title">合伙人信息</view> <view class="right-icon"> @@ -339,7 +347,9 @@ </view> <!-- #ifdef PUB_PARTNER --> <view class="user-util m-t-12 flex" - v-if="selftype==='partner'&¤tInfo.partnerDTO&¤tInfo.partnerDTO.id&¤tInfo.partnerDTO.status=='P'" + v-if=" + selftype==='partner'&& $hasPermission('partner:mine:reg:qrcode') + &¤tInfo.partnerDTO&¤tInfo.partnerDTO.id&¤tInfo.partnerDTO.status=='P'" @click="goto('/sub_pages/partner/partner-info/partner-code',true)"> <view class="title">推广的注册二维码</view> <view class="right-icon"> @@ -365,14 +375,19 @@ </view> <!-- #endif --> <view class="user-util m-t-12 flex" - v-if="selftype==='supplier'&¤tInfo&¤tInfo.id&¤tInfo.supplierDTO&¤tInfo.supplierDTO.status==='P'" + v-if=" + (selftype==='supplier'&¤tInfo&¤tInfo.id&¤tInfo.supplierDTO&¤tInfo.supplierDTO.status==='P' + && $hasPermission('supplier:mine:edit:info') + ) + " @click="goto('/sub_pages/supplier/supplier-info/supplier-info-update',true)"> <view class="title">信息维护</view> <view class="right-icon"> <uni-icons type="right"></uni-icons> </view> </view> - <view class="user-util m-t-12 flex" v-if="selftype==='supplier'" + <view class="user-util m-t-12 flex" + v-if=" (selftype==='supplier' && $hasPermission('supplier:mine:shop:info') )" @click="goto('/sub_pages/supplier/supplier-info/supplier-info',true)"> <view class="title">店铺信息</view> <view class="right-icon"> @@ -388,7 +403,10 @@ </view> --> <view class="user-util m-t-12 flex" - v-if="selftype==='supplier'||selftype==='partner'" + v-if=" + (selftype==='supplier' && $hasPermission('supplier:mine:edit:password') ) + || (selftype==='partner' && $hasPermission('partner:mine:edit:password')) + " @click="goto('/pages/user/user-pwd/user-pwd',true)"> <view class="title">修改密码</view> <view class="right-icon"> @@ -402,7 +420,10 @@ <uni-icons type="right"></uni-icons> </view> </view> --> - <view class="user-util m-t-12 flex" v-if="currentInfo&¤tInfo.id &&(selftype==='supplier'||selftype==='partner') " + <view class="user-util m-t-12 flex" v-if=" + currentInfo&¤tInfo.id && + ((selftype==='supplier' && $hasPermission('supplier:mine:bind:wechat') ) + ||(selftype==='partner') && $hasPermission('partner:mine:bind:wechat') ) " @click="goto('/pages/user/user-bind-wx/user-bind-wx',true)"> <view class="title">绑定当前微信</view> <view class="right-icon"> @@ -418,7 +439,9 @@ <!-- v-if="selftype==='customer'" --> <view class="user-util m-t-12 flex" - v-if="selftype==='supplier'||selftype==='partner'" + v-if=" + (selftype==='supplier' && $hasPermission('supplier:mine:logout')) || + (selftype==='partner' && $hasPermission('partner:mine:logout')) " @click="clearlogout"> <view class="title">退出登录</view> <view class="right-icon"> diff --git a/store/index.js b/store/index.js index 7ebfdfd..16b907a 100644 --- a/store/index.js +++ b/store/index.js @@ -19,6 +19,7 @@ leftWinActive: '/pages/component/view/view', activeOpen: '', menu: [], + appMenu: [], univerifyErrorMsg: '', currentInfo: {}, //个人用户信息 cache_address: {}, @@ -61,7 +62,9 @@ state.hasLogin = false state.openid = null state.currentInfo = {} + state.appMenu=[] storage.removeItem('token') + storage.removeItem('appMenu'); message.showToast('退出登录成功') }, @@ -196,6 +199,7 @@ }) { //把权限获取到 // console.log('getCurrentInfo,getCurrentInfo') + const currentInfo = await http.request('get', '/api/current/user', {}) if (currentInfo && currentInfo.code == 0) { // state.cMenu = cMenu @@ -212,6 +216,80 @@ //这种情况就是要跳转到登录页面 } }, + + getSwitchSubAccount: async function({commit,state},payload) { + //把权限获取到 + // console.log('getCurrentInfo,getCurrentInfo') + + const currentInfo = await http.request('get', '/api/supplierSub/getSwitchById', { + params: { + id:payload.id + } + }) + if (currentInfo && currentInfo.code == 0) { + + state.currentInfo = currentInfo.data || {} + state.type = currentInfo.data.type || '' + state.spacecode = currentInfo.data.spacecode || '' + + commit("updateLogin", true) + } else { + commit("updateLogin", false) + //这种情况就是要跳转到登录页面 + } + + return currentInfo; + }, + + + getAppMenu: async function({ + commit, + state + }) { + //把权限获取到 + const menu = await http.request('get', '/api/app/menu/permission/menu', {}) + storage.setItem('appMenu', []); + if (menu && menu.code == 0) { + const appMenu = menu.data || [] + storage.setItem('appMenu', appMenu); + + // commit("updateLogin", true) + } else { + // commit("updateLogin", false) + //这种情况就是要跳转到登录页面 + } + }, + + getAppMenuSupplier: async function({ + commit, + state + }) { + //把权限获取到 + const menu = await http.request('get', '/api/app/menu/supplier/permission/menu', {}) + storage.setItem('appMenu', []); + if (menu && menu.code == 0) { + const appMenu = menu.data || [] + storage.setItem('appMenu', appMenu); + } else { + + } + }, + getAppMenuPartner: async function({ + commit, + state + }) { + //把权限获取到 + const menu = await http.request('get', '/api/app/menu/partner/permission/menu', {}) + storage.setItem('appMenu', []); + if (menu && menu.code == 0) { + const appMenu = menu.data || [] + storage.setItem('appMenu', appMenu); + } else { + + } + }, + + loginwx: async function({ dispatch, commit, @@ -302,6 +380,8 @@ storage.setItem('token', resp.data.access_token) commit("updateLogin", true) await dispatch('getCurrentInfo') + // 获取所有权限菜单 + await dispatch('getAppMenuPartner') uni.reLaunch({ url: '/pages/home/supplier-home' }) @@ -367,6 +447,8 @@ storage.setItem('token', resp.data.access_token) commit("updateLogin", true) await dispatch('getCurrentInfo') + // 获取所有供应商权限菜单 + await dispatch('getAppMenuSupplier') console.log('login,reLaunch') // #ifdef APP diff --git a/sub_pages/supplier/sub-account/sub-account-list.vue b/sub_pages/supplier/sub-account/sub-account-list.vue new file mode 100644 index 0000000..0cc5cf2 --- /dev/null +++ b/sub_pages/supplier/sub-account/sub-account-list.vue @@ -0,0 +1,177 @@ +<template> + <view class="u-page"> + <view class="u-demo-block-2"> + <u-cell-group> + <u-cell v-for="(item, index) in list" :key="index" + > + <view slot="icon" class="f10"> + <u-icon name="account"></u-icon> + </view> + <view slot="title" class="cell-title">{{ item.name }}</view> + <view slot="label" class="cell-lable">{{ item.contact }} {{ item.phone }}</view> + <view slot="value" class="cell-value" > + <u-icon name="edit-pen" @click="handleEdit(item)"></u-icon> + <u-icon name="trash" @click="handleDel(item)"></u-icon> + </view> + </u-cell> + </u-cell-group> + + <u-button type="primary" text="新增" customStyle="margin-top: 50px; width:100%;" @click="handleAdd"></u-button> + </view> + + </view> +</template> + + <script> + export default { + data() { + return { + listApi:'/api/supplierSub/sub/all', + }; + }, + onLoad(options) {}, + onShow() { + this.getList(); + }, + async onPullDownRefresh() { + this.getList(); + }, + methods: { + + handleEdit(item) { + uni.navigateTo({ + url: `/sub_pages/supplier/sub-account/sub-account-reg?id=${item.id}` + }) + }, + async handleDel(item) { + await this.$message.confirm('确定要删除吗?') + const { + code + } = await this.$http.request('post', `/api/supplierSub/delete/${item.id}`, { + data: { + + } + }) + if (code == 0) { + uni.$u.toast('删除成功'); + this.getList(); + } else { + + } + + }, + handleAdd() { + uni.navigateTo({ + url: '/sub_pages/supplier/sub-account/sub-account-reg' + }) + }, + // getList(refresh = false) { + // // /api/supplier/delivery + // if (this.currentInfo.id && (this.currentInfo.id !== this.cacheUserId || refresh)) { + // this.cacheUserId = this.currentInfo.id; + // let that = this; + // setTimeout(() => { + // //其他统计 + // // #ifdef PUB_SUPPLIER + // this.$http.request('get', '/v2/wallet/supplier', {}).then(res => { + // if (res.code === 0) { + // that.wallet = res.data || {}; + // } + // }); + // // #endif + // }, 200); + // } + // } + } + }; + </script> + + <style lang="scss"> + .u-page { + font-size: 14px; + .image-icon { + width: 30rpx; + height: 30rpx; + } + + .u-button--plain.data-v-3bf2dba7 { + background-color: #00BCD4 !important; + } + + .u-button--plain.u-button--primary.data-v-3bf2dba7 { + color: #FFFFFF; + } + + .u-button--primary.data-v-3bf2dba7 { + color: #fff; + border-color: #00BCD4 !important; + border-width: 1px; + border-style: solid; + border-radius: 10rpx; + width: 200rpx; + } + + .u-demo-block { + padding: 10rpx; + background-color: #FFFFFF; + border-radius: 50rpx; + background-color: #00AF68; + margin: 20rpx; + + .tixian { + margin-top: 30rpx; + margin-bottom: 30rpx; + } + } + + .u-demo-block-2 { + margin: 30rpx; + padding: 10rpx; + background-color: #FFFFFF; + border-radius: 10rpx; + } + + .title { + text-align: center; + font-size: 30rpx; + color: #909399; + margin: 10rpx; + } + + .grid-text-white { + color: white; + } + + .grid-text { + font-size: 14px; + color: #909399; + padding: 10rpx 0 20rpx 0rpx; + /* #ifndef APP-PLUS */ + box-sizing: border-box; + /* #endif */ + } + + .statis_val { + font-size: 16px; + color: black; + // font-weight: bold; + } + + .margin-10 { + margin: 10rpx; + } + .cell-title{ + font-size: 12px; + } + .cell-lable{ + font-size: 10px; + color: gray; + } + .cell-value{ + display: flex; + justify-content: space-between; + width: 50px; + } + } + </style> + \ No newline at end of file diff --git a/sub_pages/supplier/sub-account/sub-account-reg.vue b/sub_pages/supplier/sub-account/sub-account-reg.vue new file mode 100644 index 0000000..7b4d524 --- /dev/null +++ b/sub_pages/supplier/sub-account/sub-account-reg.vue @@ -0,0 +1,382 @@ +<template> + <view class="u-page"> + + <view class="u-demo-block"> + <view class="u-demo-block__content"> + <!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 --> + <u--form labelPosition="left" :rules="rules" :model="userInfo" ref="subAccountForm" + :labelWidth="labelWidth"> + <u-form-item required label="子账号名称" prop="name" borderBottom> + <u--input v-model="userInfo.name" border="none" placeholder="请输入子账号名称" clearable></u--input> + </u-form-item> + + <u-form-item required label="联系人" prop="contact" borderBottom> + <u--input v-model="userInfo.contact" border="none" placeholder="请输入联系人" clearable></u--input> + </u-form-item> + + <u-form-item required label="手机" prop="phone" borderBottom> + <u--input type="number" v-model="userInfo.phone" border="none" placeholder="请输入手机号码" clearable></u--input> + + </u-form-item> + <u-form-item required label="验证码" prop="smsCode" borderBottom> + <u--input type="number" v-model="userInfo.smsCode" border="none" placeholder="请填写验证码" clearable></u--input> + <u-button slot="right" @tap="getCode" :text="tips" type="success" size="mini" + :disabled="disabled1"></u-button> + </u-form-item> + + <u-form-item required label="密码" prop="password" borderBottom> + <u--input type="password" v-model="userInfo.password" border="none" placeholder="请输入密码" clearable></u--input> + </u-form-item> + <u-form-item required label="账号状态" prop="isEnabled" borderBottom> + <u-switch v-model="userInfo.isEnabled" size="50"></u-switch> + </u-form-item> + </u--form> + <u-button type="primary" text="提交" customStyle="margin-top: 50px" @click="submit"></u-button> + <u-button type="error" text="重置" customStyle="margin-top: 10px" @click="reset"></u-button> + </view> + </view> + </view> +</template> + +<script> +export default { + data() { + return { + labelWidth: '180', + tips: '获取验证码', + disabled1: false,// 校验是否禁用 + timer: null, // 倒计时计时器 + count:60, + // #ifdef PUB_SUPPLIER + apitype: 'supplier', + // #endif + // #ifdef PUB_PARTNER + apitype: 'partner', + // #endif + // #ifdef PUB_CUSTOMER + apitype: 'customer', + // #endif + userInfo: { + id: '', + name: '', + contact: '', + phone: '', + smsCode: '', + password: '', + isEnabled: true, + }, + rules: { + 'name': [{ + type: 'string', + required: true, + message: '请输入子账号名称', + trigger: ['blur', 'change'] + } + // , { + // validator: (rule, value, callback) => { + // return uni.$u.test.chinese(value); + // }, + // message: "姓名必须为中文", + // trigger: ["change", "blur"], + // } + ], + 'contact': { + type: 'string', + required: true, + message: '请输入联系人', + trigger: ['blur', 'change'] + }, + + + 'phone': [{ + type: 'string', + required: true, + message: '请输入电话号码', + trigger: ['blur', 'change'] + }, { + pattern: /^1[3-9]\d{9}$/, + message: '请输入有效的手机号码', + trigger: ['blur', 'change'], + }, + ], + + 'smsCode': { + type: 'string', + required: true, + message: '请输入验证码', + trigger: ['blur', 'change'] + }, + + 'password': [{ + type: 'string', + required: true, + message: '请输入密码', + trigger: ['blur', 'change'] + }, + { + validator: (rule, value, callback) => { + if (!value) { + callback(new Error('请输入密码')); + } else if (value.length < 8 || value.length > 20) { + callback(new Error('密码长度需为 8 到 20 位')); + } else { + callback(); // 校验通过 + } + }, + trigger: ['blur', 'change'] + }, + ] + + }, + + } + }, + onReady() { + // 如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则 + this.$refs.subAccountForm.setRules(this.rules) + }, + onUnload() { + // 组件销毁时清除计时器 + if (this.timer) { + clearInterval(this.timer); + } + }, + onLoad(options) { + this.userInfo.id = options.id || '' + if(this.userInfo.id){ + this.getSubAccount() + // 修改topbar标题 + uni.setNavigationBarTitle({ + title: '子账号修改' + }); + } + }, + onShow() { + this.getList(); + }, + methods: { + + async getSubAccount(){ + const { + code,data + } = await this.$http.request('get', '/api/supplierSub/getById', { + params: { + id:this.userInfo.id + } + }) + if (code == 0) { + this.userInfo = { + ...data + } + this.userInfo.password='' + } else { + + } + }, + validatePhone(phone) { + const phoneRegex = /^[1][3-9]\d{9}$/; // 简单的中国大陆手机号正则 + return phoneRegex.test(phone); + }, + async getCode() { + + // 校验手机号格式 + if (!this.validatePhone(this.userInfo.phone)) { + uni.showToast({ + title: '请输入有效的手机号码', + icon: 'none' + }); + return; + } + if (this.disabled1) return; // 防止重复点击 + + const { + code + } = await this.$http.request('post', '/api/sms/send/code', { + data: { + tel: this.userInfo.phone, + userType: this.apitype.toLowerCase() + } + }) + if (code == 0) { + uni.$u.toast('验证码已发送'); + this.startCountdown(); // 开始倒计时 + } else { + + } + + + }, + startCountdown() { + this.disabled1 = true; // 禁用按钮 + this.tips = `${this.count}秒后重试`; // 设置按钮文本 + + this.timer = setInterval(() => { + if (this.count > 1) { + this.count--; + this.tips = `${this.count}秒后重试`; + } else { + this.resetCountdown(); // 倒计时结束,重置状态 + } + }, 1000); + }, + + + resetCountdown() { + clearInterval(this.timer); // 清除计时器 + this.timer = null; + this.count = 60; // 重置秒数 + this.tips = '获取验证码'; // 重置按钮文本 + this.disabled1 = false; // 启用按钮 + }, + + submit() { + // 如果有错误,会在catch中返回报错信息数组,校验通过则在then中返回true + this.$refs.subAccountForm.validate().then(async res => { + uni.$u.toast('校验通过') + const { + code + } = await this.$http.request('post', '/api/supplierSub/addOrUpdate', { + data: { + ... this.userInfo + } + }) + if (code == 0) { + uni.$u.toast('新增子账号成功'); + uni.navigateTo({ + url: '/sub_pages/supplier/sub-account/sub-account-list' + }) + + + } else { + uni.$u.toast('新增子账号失败') + } + }).catch(errors => { + uni.$u.toast('请填写完整信息') + }) + }, + reset() { + this.$refs.subAccountForm.resetFields() + this.$refs.subAccountForm.clearValidate() + this.userInfo={ + id: '', + name: '', + contact: '', + phone: '', + smsCode: '', + password: '', + isEnabled: true, + } + + }, + + }, +} +</script> + +<style lang="scss"> +.u-page { + background-color: #f7f8fa; + fonst-size: 14px; + padding: 15px 15px 40px 15px; + + .u-demo-block { + flex: 1; + margin-bottom: 23px + } +} + +.u-page2 { + background-color: #f7f8fa; + padding: 15px 15px 40px 15px; + + .u-demo-block { + flex: 1; + margin-bottom: 23px + } + + .u-demo-block__title { + font-size: 14px; + color: #8f9ca2; + margin-bottom: 8px; + display: flex; + flex-direction: row + } + + .u-demo-block__content { + display: flex; + flex-direction: column + } + + .image-icon { + width: 30rpx; + height: 30rpx; + } + + .u-button--plain.data-v-3bf2dba7 { + background-color: #00BCD4 !important; + } + + .u-button--plain.u-button--primary.data-v-3bf2dba7 { + color: #FFFFFF; + } + + .u-button--primary.data-v-3bf2dba7 { + color: #fff; + border-color: #00BCD4 !important; + border-width: 1px; + border-style: solid; + border-radius: 10rpx; + width: 200rpx; + } + + .u-demo-block { + padding: 10rpx; + background-color: #FFFFFF; + border-radius: 50rpx; + background-color: #00AF68; + margin: 20rpx; + + .tixian { + margin-top: 30rpx; + margin-bottom: 30rpx; + } + } + + .u-demo-block-2 { + margin: 30rpx; + padding: 10rpx; + background-color: #FFFFFF; + border-radius: 10rpx; + } + + .title { + text-align: center; + font-size: 30rpx; + color: #909399; + margin: 10rpx; + } + + .grid-text-white { + color: white; + } + + .grid-text { + font-size: 14px; + color: #909399; + padding: 10rpx 0 20rpx 0rpx; + /* #ifndef APP-PLUS */ + box-sizing: border-box; + /* #endif */ + } + + .statis_val { + font-size: 16px; + color: black; + // font-weight: bold; + } + + .margin-10 { + margin: 10rpx; + } +} +</style> diff --git a/sub_pages/supplier/sub-account/sub-account-switch-list.vue b/sub_pages/supplier/sub-account/sub-account-switch-list.vue new file mode 100644 index 0000000..1b7bba3 --- /dev/null +++ b/sub_pages/supplier/sub-account/sub-account-switch-list.vue @@ -0,0 +1,165 @@ +<template> + <view class="u-page"> + <view class="u-demo-block-2"> + <u-radio-group v-model="curSubAccount" placement="column"> + <u-cell-group> + <u-cell v-for="(item, index) in list" :key="index" @click="handleSwitchSubAccount(item)"> + <view slot="icon" class="f10"> + <!-- <image src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/56/56d1a93862a4470e9b4481b970fd6fc9子账号管理.png" class="image-icon"></image> --> + <u-radio :key="index" + :name="item.id" @change="handleSwitchSubAccount(item)" + > + <u-icon name="account"></u-icon> + </u-radio> + + </view> + <view slot="title" class="cell-title">{{ item.name }} {{ item.contact }} {{ item.phone }}</view> + <!-- <view slot="label" class="cell-lable">{{ item.name2 }} {{ item.tel }}</view> --> + <view slot="value" class="cell-value"> + + </view> + </u-cell> + </u-cell-group> + </u-radio-group> + + </view> + + </view> +</template> + +<script> +export default { + data() { + return { + curSubAccount:'', + listApi:'/api/supplierSub/sub/all', + }; + }, + onLoad(options) { + this.getCurrentSubAccount() + }, + onShow() { + this.getList(); + }, + async onPullDownRefresh() { + this.getList(); + }, + methods: { + + getCurrentSubAccount(){ + const currentInfo = this.$store.state.currentInfo + this.curSubAccount=currentInfo?.supplierSub?.id + }, + + async handleSwitchSubAccount(item) { + + let res=await this.$store.dispatch('getSwitchSubAccount',item); + if (res && res.code == 0) { + const data=res.data + if(data&&data.supplierSub&&data.supplierSub.id){ + this.curSubAccount=data?.supplierSub?.id + uni.$u.toast('切换成功!'); + } + uni.navigateBack({ delta: 1 }) + } else { + uni.$u.toast('切换失败!'); + } + + }, + + } +}; +</script> + +<style lang="scss"> +.u-page { + font-size: 14px; + + .image-icon { + width: 30rpx; + height: 30rpx; + } + + .u-button--plain.data-v-3bf2dba7 { + background-color: #00BCD4 !important; + } + + .u-button--plain.u-button--primary.data-v-3bf2dba7 { + color: #FFFFFF; + } + + .u-button--primary.data-v-3bf2dba7 { + color: #fff; + border-color: #00BCD4 !important; + border-width: 1px; + border-style: solid; + border-radius: 10rpx; + width: 200rpx; + } + + .u-demo-block { + padding: 10rpx; + background-color: #FFFFFF; + border-radius: 50rpx; + background-color: #00AF68; + margin: 20rpx; + + .tixian { + margin-top: 30rpx; + margin-bottom: 30rpx; + } + } + + .u-demo-block-2 { + margin: 30rpx; + padding: 10rpx; + background-color: #FFFFFF; + border-radius: 10rpx; + } + + .title { + text-align: center; + font-size: 30rpx; + color: #909399; + margin: 10rpx; + } + + .grid-text-white { + color: white; + } + + .grid-text { + font-size: 14px; + color: #909399; + padding: 10rpx 0 20rpx 0rpx; + /* #ifndef APP-PLUS */ + box-sizing: border-box; + /* #endif */ + } + + .statis_val { + font-size: 16px; + color: black; + // font-weight: bold; + } + + .margin-10 { + margin: 10rpx; + } + + .cell-title { + font-size: 12px; + } + + .cell-lable { + font-size: 10px; + color: gray; + } + + .cell-value { + display: flex; + justify-content: space-between; + width: 50px; + } +} +</style> \ No newline at end of file -- Gitblit v1.9.3