Merge branch 'v5.0.0dev' of https://gitee.com/ZhongBangKeJi/CRMEB into v5.0.0dev

This commit is contained in:
liaofei 2023-04-20 10:48:15 +08:00
commit 2ab3472aab
21 changed files with 105 additions and 56 deletions

View File

@ -681,7 +681,7 @@ class PublicController
$data['member_card_status'] = sys_config('member_card_status');//是否开启付费会员
$data['member_price_status'] = sys_config('member_price_status');//商品会员折扣价展示启用
$data['ali_pay_status'] = sys_config('ali_pay_status') != '0';//支付宝是否启用
$data['wechat_pay_status'] = sys_config('pay_weixin_open') != '0';//微信是否启用
$data['pay_weixin_open'] = sys_config('pay_weixin_open') != '0';//微信是否启用
$data['yue_pay_status'] = sys_config('yue_pay_status') == 1 && sys_config('balance_func_status') != 0;//余额是否启用
$data['offline_pay_status'] = sys_config('offline_pay_status') == 1;//线下是否启用
$data['friend_pay_status'] = sys_config('friend_pay_status') == 1;//好友是否启用

View File

@ -124,7 +124,8 @@ class StoreCartController
['id', 0],//购物车编号
['number', 0],//购物车编号
]);
if (!$where['id'] || !$where['number'] || !is_numeric($where['id']) || !is_numeric($where['number'])) return app('json')->fail(100100);
if (!$where['id'] || !is_numeric($where['id'])) return app('json')->fail(100100);
if (!$where['number'] || !is_numeric($where['number'])) return app('json')->fail(100007);
$res = $this->services->changeUserCartNum($where['id'], $where['number'], $request->uid());
if ($res) return app('json')->success(100001);
else return app('json')->fail(100007);

View File

@ -59,6 +59,8 @@ class StoreCombinationDao extends BaseDao
$query->name('store_category')->where('pid', $where['cid'])->field('id')->select();
})->field('product_id')->select();
});
})->when(isset($where['id']) && $where['id'], function ($query) use ($where) {
$query->where('id', $where['id']);
});
}

View File

@ -53,7 +53,7 @@ class StoreOrderInvoiceDao extends BaseDao
return parent::search($where, $search)->when($type, function ($query) use ($type) {
switch ($type) {
case 1://待开
$query->where('is_invoice', 0)->where('invoice_time', 0)->where('is_refund', 0);
$query->where('is_invoice', 0)->where('is_refund', 0);
break;
case 2://已开
$query->where('is_invoice', 1);

View File

@ -220,7 +220,7 @@ class StoreBargainUserServices extends BaseServices
public function userBargainStatusFail($bargain_id, $is_true)
{
if ($is_true) {
$this->dao->delete(['bargain_id' => $bargain_id, 'status' => 1]);
$this->dao->delete(['bargain_id' => $bargain_id]);
/** @var StoreBargainUserHelpServices $service */
$service = app()->make(StoreBargainUserHelpServices::class);
$service->delete(['bargain_id' => $bargain_id]);

View File

@ -226,8 +226,8 @@ class StoreOrderComputedServices extends BaseServices
// 可用积分
$usable = bcsub((string)$userInfo['integral'], (string)$userBillServices->getBillSum(['uid' => $userInfo['uid'], 'is_frozen' => 1]), 0);
$SurplusIntegral = 0;
if ($useIntegral && $userInfo['integral'] > 0) {
$SurplusIntegral = $usable;
if ($useIntegral && $userInfo['integral'] > 0 && $other['integralRatio'] > 0) {
//积分抵扣上限
$integralMaxNum = sys_config('integral_max_num', 200);
if ($integralMaxNum > 0 && $usable > $integralMaxNum) {

View File

@ -31,6 +31,9 @@ export default {
getThemeConfig() {
return this.$store.state.themeConfig.themeConfig;
},
tagNavList() {
return this.$store.state.app.tagNavList;
},
},
watch: {
$route(newRoute) {

View File

@ -40,6 +40,8 @@
import Contextmenu from '@/layout/navBars/tagsView/contextmenu';
import { Session } from '@/utils/storage.js';
import { mapMutations } from 'vuex';
import setting from '@/setting';
export default {
name: 'tagsView',
components: { Contextmenu },
@ -77,7 +79,9 @@ export default {
this.tagsViewRoutesList = this.$store.state.app.tagNavList;
},
mounted() {
// this.getTagsViewRoutes();
if (!this.$store.state.app.tagNavList.length) {
this.getTagsViewRoutes();
}
},
methods: {
...mapMutations(['setBreadCrumb', 'setTagNavList', 'addTag', 'setLocal', 'setHomeRoute', 'closeTag']),
@ -90,7 +94,15 @@ export default {
onTagsClick(v, k) {
this.tagsRoutePath = v.path;
this.tagsRefsIndex = k;
this.$router.push(v);
try {
if (v.name == 'home_index') {
this.$router.replace(`${setting.routePre}/home/`);
} else {
this.$router.push(v);
}
} catch (error) {
console.log(error);
}
},
// 获取 tagsView 的下标:用于处理 tagsView 点击时的横向滚动
getTagsRefsIndex(path) {
@ -184,9 +196,8 @@ export default {
// 获取 vuex 中的 tagsViewRoutes 列表
getTagsViewRoutes() {
this.tagsRoutePath = this.$route.path;
this.tagsViewList = [];
if (!this.$store.state.themeConfig.themeConfig.isCacheTagsView) Session.remove('tagsViewList');
this.tagsViewRoutesList = this.$store.state.tagsViewRoutes.tagsViewRoutes;
// if (!this.$store.state.themeConfig.themeConfig.isCacheTagsView) Session.remove('tagsViewList');
this.tagsViewRoutesList = this.$store.state.menus.oneLvMenus;
this.initTagsViewList();
},
// 存储 tagsViewList 到浏览器临时缓存中,页面刷新时,保留记录
@ -195,14 +206,17 @@ export default {
},
// 初始化设置了 tagsView 数据
initTagsViewList() {
if (Session.get('tagsViewList') && this.$store.state.themeConfig.themeConfig.isCacheTagsView) {
this.tagsViewList = Session.get('tagsViewList');
} else {
this.tagsViewRoutesList.map((v) => {
if (v.isAffix && !v.isHide) this.tagsViewList.push({ ...v });
});
this.addTagsView(this.$route.path);
}
// if (Session.get('tagsViewList') && this.$store.state.themeConfig.themeConfig.isCacheTagsView) {
// this.tagsViewList = Session.get('tagsViewList');
// } else {
let arr = [];
console.log(this.tagsViewRoutesList);
this.tagsViewRoutesList.map((v) => {
if (v.meta && v.meta.isAffix) arr.push({ ...v });
});
// }
console.log(arr);
this.setTagNavList(arr);
// 初始化当前元素(li)的下标
this.getTagsRefsIndex(this.$route.path);
// 添加初始化横向滚动条移动到对应位置
@ -224,8 +238,7 @@ export default {
this.tagsDropdown.y = clientY;
this.$refs.tagsContextmenu.openContextmenu(v);
},
onContextmenuIcon(e) {
},
onContextmenuIcon(e) {},
// 当前项右键菜单点击
onCurrentContextmenuClick(data) {
let { id, path } = data;
@ -417,6 +430,13 @@ export default {
// .tags-style-three {
// }
// // 风格4
// 风格1
.tags-style-one {
.is-active {
background: none !important;
color: #fff !important;
}
}
// 风格4
.tags-style-four {
.layout-navbars-tagsview-ul-li {
@ -436,7 +456,7 @@ export default {
}
.is-active {
background: none !important;
color: var(--prev-bg-menu-hover-ba-color) !important;
color: #fff !important;
}
}
// 风格5

View File

@ -163,7 +163,7 @@ export const getHomeRoute = (routers, homeName = 'home') => {
export const getNewTagList = (list, newRoute) => {
const { name, path, meta } = newRoute;
let newList = [...list];
if (newList.findIndex((item) => item.name === name) >= 0) return newList;
if (newList.findIndex((item) => item.path === path) >= 0) return newList;
else newList.push({ name, path, meta });
return newList;
};

View File

@ -213,6 +213,8 @@ export default {
this.$store.dispatch('routesList/setRoutesList', data.menus);
let arr = formatFlatteningRoutes(this.$router.options.routes);
this.formatTwoStageRoutes(arr);
this.$store.commit('menus/setOneLvMenus', arr);
// 记录用户信息
this.$store.commit('userInfo/name', data.user_info.account);
this.$store.commit('userInfo/avatar', data.user_info.head_pic);
@ -241,8 +243,7 @@ export default {
this.checkSocket();
} catch (e) {}
PrevLoading.start();
return this.$router.replace({
return this.$router.push({
path: findFirstNonNullChildren(res.data.menus).path || this.$routeProStr + '/',
});
})

View File

@ -21,7 +21,7 @@
@click="selectUser(item)"
>
<div class="avatar">
<img v-lazy="item.avatar" alt="" />
<img v-lazy="item.wx_avatar" alt="" />
<div class="status" :class="{ off: item.online == 0 }"></div>
</div>
<div class="user-info">

View File

@ -133,10 +133,10 @@
v-paste="handleParse"
v-model="chatCon"
type="textarea"
:rows="4"
:rows="8"
@on-keydown="listen($event)"
placeholder="请输入文字内容"
style="font-size: 14px"
style="font-size: 14px; height: 150px"
/>
<div class="send-btn">
<Button class="btns" type="primary" :disabled="disabled" @click.stop="sendText">发送</Button>
@ -628,9 +628,10 @@ export default {
<style lang="stylus" scoped>
@import '../../../styles/emoji-awesome/css/google.min.css';
textarea.ivu-input {
/deep/ textarea.ivu-input {
border: none;
resize: none;
}
.kefu-layouts {

View File

@ -235,7 +235,7 @@ export default {
{
col: 8,
count: 0,
name: '推广人数(人)',
name: '砍价人数(人)',
className: 'ios-speedometer-outline',
},
{

View File

@ -23,6 +23,9 @@
<span class="nickname">{{ row.nickname }}</span> |
<span class="uid">{{ row.uid }}</span>
</template>
<template slot-scope="{ row, index }" slot="pay_price">
<span>{{ row.paid ? row.pay_price : '未支付' }}</span>
</template>
<template slot-scope="{ row, index }" slot="info">
<div class="tabBox" v-for="(val, i) in row._info" :key="i">
<div class="tabBox_img" v-viewer>
@ -63,13 +66,14 @@
</div>
</template>
<template slot-scope="{ row, index }" slot="action">
<a @click="edit(row)" v-if="row._status === 1">编辑</a>
<a @click="edit(row)" v-if="row._status === 1 && row.is_del !== 1">编辑</a>
<a
@click="sendOrder(row)"
v-if="
(row.status === 4 || row._status === 2 || row._status === 8) &&
row.shipping_type === 1 &&
(row.pinkStatus === null || row.pinkStatus === 2)
(row.pinkStatus === null || row.pinkStatus === 2) &&
row.is_del !== 1
"
>发送货</a
>
@ -81,12 +85,15 @@
>
<Divider
type="vertical"
v-if="(row._status === 8 || row.status === 0 || row.status === 4) && row.split.length"
v-if="(row._status === 8 || row.status === 0 || row.status === 4) && row.split.length && row.is_del !== 1"
/>
<a @click="splitOrderDetail(row)" v-if="row.split.length">查看子订单</a>
<a @click="splitOrderDetail(row)" v-if="row.split.length && row.is_del !== 1">查看子订单</a>
<Divider
type="vertical"
v-if="(row._status === 2 && row.shipping_type === 1 && row.pinkStatus === 2) || row.split.length"
v-if="
(row._status === 2 && row.shipping_type === 1 && row.pinkStatus === 2) ||
(row.split.length && row.is_del !== 1)
"
/>
<Divider
type="vertical"
@ -97,7 +104,8 @@
row._status === 3 ||
(row._status === 2 && !row.pinkStatus) ||
row._status === 4 ||
(row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0))
(row.shipping_type == 2 && row.status == 0 && row.paid == 1 && row.refund_status === 0)) &&
row.is_del !== 1
"
/>
<template>
@ -110,7 +118,7 @@
<DropdownItem
name="1"
ref="ones"
v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline'"
v-show="row._status === 1 && row.paid === 0 && row.pay_type === 'offline' && row.is_del !== 1"
>确认付款</DropdownItem
>
<DropdownItem name="2">订单详情</DropdownItem>
@ -257,7 +265,7 @@ export default {
},
{
title: '实际支付',
key: 'pay_price',
slot: 'pay_price',
align: 'center',
width: 100,
},

View File

@ -541,6 +541,6 @@ export default {
// 选项卡头部
>>> .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-nav-container {
background-color: #333;
background-color: #fff;
}
</style>

View File

@ -919,7 +919,7 @@ export default {
this.giveLevelTime(row.uid);
break;
case '4':
this.del(row, '清除 【 ' + row.nickname + ' 】的会员等级', index, 'user');
this.del(row, '清除 【 ' + this.tenText(row.nickname) + ' 】的会员等级', index, 'user');
break;
case '5':
this.$modalForm(userSetGroup(uids)).then(() => this.getList());
@ -931,9 +931,17 @@ export default {
this.editS(row);
break;
default:
this.del(row, '解除【 ' + row.nickname + ' 】的上级推广人', index, 'tuiguang');
this.del(row, '解除【 ' + this.tenText(row.nickname) + ' 】的上级推广人', index, 'tuiguang');
}
},
tenText(str) {
if (str.length > 10) {
//如果字符长度超过10,后面的字符就变成...可自行调整长度和代替字符
str = str.substr(0, 10) + '...'; //截取从第一个字符开始,往后取10个字符,剩余的用...代替
//console.log(str); // 'js字符超出指定个数...'
}
return str;
},
openLabel(row) {
this.labelShow = true;
this.labelActive.uid = row.uid;
@ -998,6 +1006,7 @@ export default {
url: name === 'user' ? `user/del_level/${row.uid}` : `agent/stair/delete_spread/${row.uid}`,
method: name === 'user' ? 'DELETE' : 'PUT',
ids: '',
width: 600,
};
this.$modalSure(delfromData)
.then((res) => {

View File

@ -9,7 +9,7 @@
// +---------------------------------------------------------------------
import LayoutMain from '@/layout';
import setting from '@/setting'
import setting from '@/setting';
let routePre = setting.routePre;
// export default {
@ -52,7 +52,7 @@ export default {
component: LayoutMain,
children: [
{
path: routePre+'/home',
path: routePre + '/home/',
name: `${pre}index`,
header: 'home',
meta: {

View File

@ -26,6 +26,7 @@ export default {
menusName: getMenusName(),
openMenus: [],
childMenuList: [],
oneLvMenus: [],
},
mutations: {
getmenusNav(state, menuList) {
@ -37,8 +38,10 @@ export default {
setopenMenus(state, openList) {
state.openMenus = openList;
},
setOneLvMenus(state, oneLvMenus) {
state.oneLvMenus = oneLvMenus;
},
childMenuList(state, list) {
console.log('bbbbb')
state.childMenuList = list;
},
},

View File

@ -123,6 +123,13 @@
async onLaunch(option) {
uni.hideTabBar()
let that = this;
// #ifdef H5
if (option.query.hasOwnProperty('type') && option.query.type == "iframeWindow") {
this.globalData.isIframe = true;
} else {
this.globalData.isIframe = false;
}
// #endif
colorChange('color_change').then(res => {
uni.setStorageSync('is_diy', res.data.is_diy)
uni.$emit('is_diy', res.data.is_diy)
@ -245,13 +252,7 @@
}
// #endif
// #ifdef H5
if (option.query.hasOwnProperty('type') && option.query.type == "iframeWindow") {
this.globalData.isIframe = true;
} else {
this.globalData.isIframe = false;
}
// #endif
// #ifdef MP
// 小程序静默授权
// if (!this.$store.getters.isLogin) {

View File

@ -178,7 +178,7 @@
getBasicConfig() {
basicConfig().then(res => {
//微信支付是否开启
this.cartArr[0].payStatus = res.data.wechat_pay_status || 0
this.cartArr[0].payStatus = res.data.pay_weixin_open || 0
//支付宝是否开启
this.cartArr[1].payStatus = res.data.ali_pay_status || 0;
//#ifdef MP

View File

@ -5,18 +5,18 @@
<view>{{$t(`当前共`)}} <text class="text"> {{count}} </text> {{$t(`件商品`)}}</view>
<view class="admin" @click="showRadio">{{checkbox_show?$t(`取消`):$t(`管理`)}}</view>
</view>
<checkbox-group @change="checkboxChange">
<view class='item acea-row' v-for="(item,index) in collectProductList" :key="index" @click="jump(item)">
<checkbox-group @change.stop="checkboxChange">
<view class='item acea-row' v-for="(item,index) in collectProductList" :key="index">
<view class="left">
<checkbox v-show="checkbox_show" :value="item.pid.toString()" :checked="item.checked" />
<view class='pictrue'>
<view class='pictrue' @click="jump(item)">
<image :src="item.image"></image>
<view class="invalid acea-row row-center-wrapper" v-if="!item.is_show">
已下架
</view>
</view>
</view>
<view class='text acea-row row-column-between'>
<view class='text acea-row row-column-between' @click="jump(item)">
<view class='name line2'>{{item.store_name}}</view>
<view class='acea-row row-between-wrapper'>
<view class='money font-color'>{{$t(`¥`)}}{{item.price}}</view>