This commit is contained in:
mactj 2021-01-21 16:14:44 +08:00
parent db6d973592
commit 805dcebb81
17 changed files with 2234 additions and 67 deletions

View File

@ -35,7 +35,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController @RestController
@RequestMapping("/winery/activity" ) @RequestMapping("/winery/activity")
public class AppActivityController extends BaseController { public class AppActivityController extends BaseController {
private final IAppActivityService iAppActivityService; private final IAppActivityService iAppActivityService;
@ -45,21 +45,20 @@ public class AppActivityController extends BaseController {
*/ */
@PreAuthorize("@ss.hasPermi('winery:activity:list')") @PreAuthorize("@ss.hasPermi('winery:activity:list')")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(AppActivity appActivity) public TableDataInfo list(AppActivity appActivity) {
{
startPage(); startPage();
LambdaQueryWrapper<AppActivity> lqw = Wrappers.lambdaQuery(appActivity); LambdaQueryWrapper<AppActivity> lqw = Wrappers.lambdaQuery(appActivity);
if (StringUtils.isNotBlank(appActivity.getUrl())){ if (StringUtils.isNotBlank(appActivity.getUrl())) {
lqw.eq(AppActivity::getUrl ,appActivity.getUrl()); lqw.eq(AppActivity::getUrl, appActivity.getUrl());
} }
if (appActivity.getType() != null){ if (appActivity.getType() != null) {
lqw.eq(AppActivity::getType ,appActivity.getType()); lqw.eq(AppActivity::getType, appActivity.getType());
} }
if (StringUtils.isNotBlank(appActivity.getImage())){ if (StringUtils.isNotBlank(appActivity.getImage())) {
lqw.eq(AppActivity::getImage ,appActivity.getImage()); lqw.eq(AppActivity::getImage, appActivity.getImage());
} }
if (appActivity.getImageHeight() != null){ if (appActivity.getImageHeight() != null) {
lqw.eq(AppActivity::getImageHeight ,appActivity.getImageHeight()); lqw.eq(AppActivity::getImageHeight, appActivity.getImageHeight());
} }
lqw.orderByAsc(AppActivity::getSort); lqw.orderByAsc(AppActivity::getSort);
List<AppActivity> list = iAppActivityService.list(lqw); List<AppActivity> list = iAppActivityService.list(lqw);
@ -69,30 +68,30 @@ public class AppActivityController extends BaseController {
/** /**
* 导出活动列表 * 导出活动列表
*/ */
@PreAuthorize("@ss.hasPermi('winery:activity:export')" ) @PreAuthorize("@ss.hasPermi('winery:activity:export')")
@Log(title = "活动" , businessType = BusinessType.EXPORT) @Log(title = "活动", businessType = BusinessType.EXPORT)
@GetMapping("/export" ) @GetMapping("/export")
public AjaxResult export(AppActivity appActivity) { public AjaxResult export(AppActivity appActivity) {
LambdaQueryWrapper<AppActivity> lqw = new LambdaQueryWrapper<AppActivity>(appActivity); LambdaQueryWrapper<AppActivity> lqw = new LambdaQueryWrapper<AppActivity>(appActivity);
List<AppActivity> list = iAppActivityService.list(lqw); List<AppActivity> list = iAppActivityService.list(lqw);
ExcelUtil<AppActivity> util = new ExcelUtil<AppActivity>(AppActivity. class); ExcelUtil<AppActivity> util = new ExcelUtil<AppActivity>(AppActivity.class);
return util.exportExcel(list, "activity" ); return util.exportExcel(list, "activity");
} }
/** /**
* 获取活动详细信息 * 获取活动详细信息
*/ */
@PreAuthorize("@ss.hasPermi('winery:activity:query')" ) @PreAuthorize("@ss.hasPermi('winery:activity:query')")
@GetMapping(value = "/{id}" ) @GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id" ) String id) { public AjaxResult getInfo(@PathVariable("id") String id) {
return AjaxResult.success(iAppActivityService.getById(id)); return AjaxResult.success(iAppActivityService.getById(id));
} }
/** /**
* 新增活动 * 新增活动
*/ */
@PreAuthorize("@ss.hasPermi('winery:activity:add')" ) @PreAuthorize("@ss.hasPermi('winery:activity:add')")
@Log(title = "活动" , businessType = BusinessType.INSERT) @Log(title = "活动", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@RequestBody AppActivity appActivity) { public AjaxResult add(@RequestBody AppActivity appActivity) {
return toAjax(iAppActivityService.save(appActivity) ? 1 : 0); return toAjax(iAppActivityService.save(appActivity) ? 1 : 0);
@ -101,8 +100,8 @@ public class AppActivityController extends BaseController {
/** /**
* 修改活动 * 修改活动
*/ */
@PreAuthorize("@ss.hasPermi('winery:activity:edit')" ) @PreAuthorize("@ss.hasPermi('winery:activity:edit')")
@Log(title = "活动" , businessType = BusinessType.UPDATE) @Log(title = "活动", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@RequestBody AppActivity appActivity) { public AjaxResult edit(@RequestBody AppActivity appActivity) {
return toAjax(iAppActivityService.updateById(appActivity) ? 1 : 0); return toAjax(iAppActivityService.updateById(appActivity) ? 1 : 0);
@ -111,33 +110,46 @@ public class AppActivityController extends BaseController {
/** /**
* 删除活动 * 删除活动
*/ */
@PreAuthorize("@ss.hasPermi('winery:activity:remove')" ) @PreAuthorize("@ss.hasPermi('winery:activity:remove')")
@Log(title = "活动" , businessType = BusinessType.DELETE) @Log(title = "活动", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}" ) @DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids) { public AjaxResult remove(@PathVariable String[] ids) {
return toAjax(iAppActivityService.removeByIds(Arrays.asList(ids)) ? 1 : 0); return toAjax(iAppActivityService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
} }
/**
* 查询活动列表(开放)
*/
@GetMapping("/open/notice")
public AjaxResult openNotice() {
String notice =
"手机尾号4707的用户购买了「山之语·赤霞珠干红葡萄酒」, " +
"手机尾号5266的用户购买了「2021辛丑牛年纪念酒」" +
"手机尾号3062的用户购买了「留世传奇红葡萄酒」";
return AjaxResult.success(notice);
}
/** /**
* 查询活动列表(开放) * 查询活动列表(开放)
*/ */
@GetMapping("/open/list") @GetMapping("/open/list")
public TableDataInfo openList(AppActivity appActivity) public TableDataInfo openList(AppActivity appActivity) {
{
startPage(); startPage();
LambdaQueryWrapper<AppActivity> lqw = Wrappers.lambdaQuery(appActivity); LambdaQueryWrapper<AppActivity> lqw = Wrappers.lambdaQuery(appActivity);
if (StringUtils.isNotBlank(appActivity.getUrl())){ if (StringUtils.isNotBlank(appActivity.getUrl())) {
lqw.eq(AppActivity::getUrl ,appActivity.getUrl()); lqw.eq(AppActivity::getUrl, appActivity.getUrl());
} }
if (appActivity.getType() != null){ if (appActivity.getType() != null) {
lqw.eq(AppActivity::getType ,appActivity.getType()); lqw.eq(AppActivity::getType, appActivity.getType());
} }
if (StringUtils.isNotBlank(appActivity.getImage())){ if (StringUtils.isNotBlank(appActivity.getImage())) {
lqw.eq(AppActivity::getImage ,appActivity.getImage()); lqw.eq(AppActivity::getImage, appActivity.getImage());
} }
if (appActivity.getImageHeight() != null){ if (appActivity.getImageHeight() != null) {
lqw.eq(AppActivity::getImageHeight ,appActivity.getImageHeight()); lqw.eq(AppActivity::getImageHeight, appActivity.getImageHeight());
} }
lqw.orderByAsc(AppActivity::getSort); lqw.orderByAsc(AppActivity::getSort);
List<AppActivity> list = iAppActivityService.list(lqw); List<AppActivity> list = iAppActivityService.list(lqw);

View File

@ -128,4 +128,12 @@ public class NewsContentController extends BaseController {
public AjaxResult remove(@PathVariable String[] ids) { public AjaxResult remove(@PathVariable String[] ids) {
return toAjax(iNewsContentService.removeByIds(Arrays.asList(ids)) ? 1 : 0); return toAjax(iNewsContentService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
} }
/**
* 获取新闻资讯详细信息
*/
@GetMapping(value = "/open/{id}")
public AjaxResult getOpenInfo(@PathVariable("id") String id) {
return AjaxResult.success(iNewsContentService.getById(id));
}
} }

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -29,6 +29,18 @@ class MallApis {
url: baseUrl + 'winery/activity/open/list' url: baseUrl + 'winery/activity/open/list'
}) })
} }
getNotice() {
return request.get({
url: baseUrl + 'winery/activity/open/notice'
})
}
getNewsContent(id) {
return request.get({
url: baseUrl + 'news/news_content/open/' + id
})
}
} }
export default new MallApis() export default new MallApis()

View File

@ -109,6 +109,7 @@ pages: [
'pages/mall/order/order-detail-list', 'pages/mall/order/order-detail-list',
'pages/mall/order/order-check', 'pages/mall/order/order-check',
'pages/mall/shopping-car/shopping-car-list', 'pages/mall/shopping-car/shopping-car-list',
'pages/news/news-detail',
'pages/winery/winery-detail', 'pages/winery/winery-detail',
'pages/winery/winery-list', 'pages/winery/winery-list',
'pages/webView/web' 'pages/webView/web'

View File

@ -88,6 +88,8 @@ class AppManager {
navigateTo(path) { navigateTo(path) {
console.log('path:', path) console.log('path:', path)
if (!store.state.user.token) { if (!store.state.user.token) {
eventHub.$emit('onShowDialogUserInfo') eventHub.$emit('onShowDialogUserInfo')
return return

View File

@ -5,9 +5,8 @@
*/ */
// export const baseUrl = 'http://36.1.50.18:18989/' // export const baseUrl = 'http://36.1.50.18:18989/'
// export const baseUrl = 'http://127.0.0.1:18989/' export const baseUrl = 'http://127.0.0.1:18989/'
export const baseUrl = 'https://mall.xiao4r.com/api/' // export const baseUrl = 'https://mall.xiao4r.com/api/'
export const imgbaseUrl = 'https://www.xiao4r.com/xiao4rstatic/img/winery/' export const imgbaseUrl = 'https://www.xiao4r.com/xiao4rstatic/img/winery/'
export const sysImgBaseUrl = 'https://winery-1257413599.cos.ap-beijing.myqcloud.com/' export const sysImgBaseUrl = 'https://winery-1257413599.cos.ap-beijing.myqcloud.com/'

View File

@ -109,7 +109,7 @@ module.exports.parseImage = parseImage;
</van-row> </van-row>
<van-notice-bar <van-notice-bar
text="在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。" :text="notice"
mode="link" mode="link"
background="#ddd" background="#ddd"
color="#333" color="#333"
@ -230,7 +230,8 @@ wepy.component({
image: 'https://www.xiao4r.com/xiao4rstatic/img/doctor.png' image: 'https://www.xiao4r.com/xiao4rstatic/img/doctor.png'
} }
], ],
records: [] records: [],
notice: ''
}, },
@ -253,7 +254,6 @@ wepy.component({
appManager.navigateTo(navDefine.SHOPPING_CAR_LIST) appManager.navigateTo(navDefine.SHOPPING_CAR_LIST)
}, },
onWebItem(item) { onWebItem(item) {
appManager.navWeb(item.url) appManager.navWeb(item.url)
} }
@ -263,6 +263,10 @@ wepy.component({
mallApis.getActivityList().then(r => { mallApis.getActivityList().then(r => {
this.records = r.rows this.records = r.rows
}) })
mallApis.getNotice().then(r => {
this.notice = r.msg
})
} }
}) })
</script> </script>

View File

@ -35,7 +35,7 @@
border="{{ false }}" border="{{ false }}"
use-button-slot use-button-slot
> >
<van-button slot="button" size="small" plain type="info" open-type="getPhoneNumber" <van-button slot="button" size="small" plain type="info" color="#AC1630" open-type="getPhoneNumber"
bind:getphonenumber="onGetMobile">授权 bind:getphonenumber="onGetMobile">授权
</van-button> </van-button>
</van-field> </van-field>
@ -58,11 +58,14 @@
<!-- </van-button>--> <!-- </van-button>-->
<!-- </van-field>--> <!-- </van-field>-->
<view style="margin:10px;"> <view style="margin:10px;display: flex;">
<van-checkbox :value="isChecked" shape="square" bind:change="onChangeCheak" checked-color="#AC1630" <van-checkbox :value="isChecked" shape="square" bind:change="onChangeCheak" checked-color="#AC1630"
style="font-size: 14px;color: #AC1630;"> />
我同意<span style="color: cornflowerblue;">xxxxx </span>用户协议
</van-checkbox> <span style="font-size: 13px;color: #AC1630;margin-left: 5px;">我同意并遵守紫色名片
<span style="color: cornflowerblue;" @tap="onTapPrivacy">《隐私政策》 </span>及
<span style="color: cornflowerblue;" @tap="onTapAgreement">《用户条款》 </span>
的全部内容</span>
</view> </view>
</van-dialog> </van-dialog>
@ -77,18 +80,18 @@ import { mapActions, mapState } from '@wepy/x'
import eventHub from '../../common/eventHub' import eventHub from '../../common/eventHub'
import appManager from '../../appManager' import appManager from '../../appManager'
import userApis from '../../apis/userApis' import userApis from '../../apis/userApis'
import { newsDetailPage } from '../../store/constant/nav/pages'
wepy.component({ wepy.component({
store, store,
props: {}, props: {},
hooks: {}, hooks: {},
data: { data: {
that: this, that: this,
isShow: false, isShow: false,
model: {}, model: {},
isChecked: false, isChecked: false
}, },
computed: mapState(['user']), computed: mapState(['user']),
@ -107,7 +110,6 @@ wepy.component({
this.setUserInfoAction(event.$wx.detail.userInfo) this.setUserInfoAction(event.$wx.detail.userInfo)
console.log('userInfo:', store.state.user.userInfo) console.log('userInfo:', store.state.user.userInfo)
if (!this.isChecked) { if (!this.isChecked) {
appManager.showToast('请确认xxxx协议.') appManager.showToast('请确认xxxx协议.')
return false return false
@ -160,6 +162,16 @@ wepy.component({
}, },
onClose() { onClose() {
this.isShow = false this.isShow = false
},
onTapAgreement() {
wx.navigateTo({
url: newsDetailPage + '?id=' + 'fb4109a4020b2a2a9d1172f66d043897'
})
},
onTapPrivacy() {
wx.navigateTo({
url: newsDetailPage + '?id=' + 'a1e5ec18ae13036d14c94bf0e5d11756'
})
} }
}, },

View File

@ -21,7 +21,7 @@ module.exports.parseImage = parseImage;
<van-loading v-if="!goodsItem" style="margin-top: 20px;" /> <van-loading v-if="!goodsItem" style="margin-top: 20px;" />
<div v-else style="margin-bottom: 80px;"> <div v-else style="margin-bottom: 80px; width: 100%;">
<swiper indicator-dots="true" autoplay="true" interval="3000" style="height: 750rpx;"> <swiper indicator-dots="true" autoplay="true" interval="3000" style="height: 750rpx;">
<block v-for="(item,index) in goodsImages" wx:key="index"> <block v-for="(item,index) in goodsImages" wx:key="index">
@ -33,7 +33,7 @@ module.exports.parseImage = parseImage;
</block> </block>
</swiper> </swiper>
<div style="padding: 10px;display:flex;flex-direction: column;"> <div style="padding: 10px;display:flex;flex-direction: column;width: 100%;">
<span style="color: #333; font-size: 16px;font-weight: bold;">{{goodsItem.goodsName}}</span> <span style="color: #333; font-size: 16px;font-weight: bold;">{{goodsItem.goodsName}}</span>
<span style="color: #999; font-size: 14px;margin-top: 3px;">{{goodsItem.goodsAlias}}</span> <span style="color: #999; font-size: 14px;margin-top: 3px;">{{goodsItem.goodsAlias}}</span>
</div> </div>

View File

@ -0,0 +1,137 @@
<style lang="less">
.bg {
z-index: -1;
height: 100%;
position: fixed;
width: 200rpx;
background-color: #AC1630;
}
.winery-item {
width: 400rpx;
height: 60px;
margin-bottom: 20px;
box-shadow: 4px 4px 10px #cccccc;
border: #ffffff 1px solid;
border-radius: 20px;
background-color: white;
padding: 15px 70rpx;
}
.winery-item-icon {
position: absolute;
width: 60px;
height: 60px;
display: flex;
align-items: center;
justify-items: center;
justify-content: center;
text-align: center;
background-color: white;
box-shadow: 4px 4px 10px #cccccc;
margin-top: 10px;
margin-left: -40rpx;
border: #ffffff 1px solid;
border-radius: 50%;
}
.winery-item-arrow {
position: absolute;
width: 45px;
height: 45px;
display: flex;
align-items: center;
justify-items: center;
justify-content: center;
background-color: white;
box-shadow: 4px 4px 10px #cccccc;
margin-top: 18.5px;
margin-left: 500rpx;
border: #ffffff 1px solid;
border-radius: 50%;
}
</style>
<wxs module="filters" lang="babel">
const parseImage = (imageKey) => {
return 'https://winery-1257413599.cos.ap-beijing.myqcloud.com/' + imageKey
}
module.exports.parseImage = parseImage;
</wxs>
<template>
<nav-bar :title="newItem.newsTitle" />
<div class="container">
<van-loading v-if="!newItem" style="margin-top: 20px;" />
<div v-else style="margin-bottom: 80px;">
<div style="margin: 10px 15px;display: flex;flex-direction: column;">
<div style="margin-top: 10px;width:100%;">
<rich-text :nodes="newItem.newsBody" />
</div>
</div>
</div>
</div>
</template>
<script>
import wepy from '@wepy/core'
import store from '@/store'
import { mapActions, mapState } from '@wepy/x'
import defaultMix from '../../mixins/defaultMix'
import merchanApis from '../../apis/merchanApis'
import mallApis from '../../apis/mallApis'
wepy.page({
store,
hooks: {},
mixins: [defaultMix],
data: {
newItem: null,
title: ''
},
computed: {
...mapState({
'imageDefine': state => state.imageDefine
})
},
methods: {
...mapActions([]),
async init(id) {
mallApis.getNewsContent(id).then(r => {
this.newItem = r.data
})
}
},
onLoad(options) {
console.log(options)
if (options.id) {
this.init(options.id)
}
}
})
</script>
<config>
{
navigationBarTitleText: '',
usingComponents: {
}
}
</config>

View File

@ -69,9 +69,10 @@ module.exports.parseImage = parseImage;
<nav-bar title="酒庄信息" /> <nav-bar title="酒庄信息" />
<div class="container">
<van-loading v-if="!wineryItem" style="margin-top: 20px;" /> <van-loading v-if="!wineryItem" style="margin-top: 20px;" />
<div v-else style="margin-bottom: 80px;"> <div v-else style="margin-bottom: 80px;">
<image :src="filters.parseImage(wineryItem.avatar)" style="width: 100%;height: 750rpx;" mode="aspectFit" /> <image :src="filters.parseImage(wineryItem.topImage)" style="width: 100%;height: 750rpx;" mode="aspectFit" />
<div style="margin: 10px 15px;display: flex;flex-direction: column;"> <div style="margin: 10px 15px;display: flex;flex-direction: column;">
<div style="font-size: 20px;font-weight: bold;">{{wineryItem.mchName}}</div> <div style="font-size: 20px;font-weight: bold;">{{wineryItem.mchName}}</div>
<div style="font-size: 14px;color: #999999;">{{wineryItem.subtitle}}</div> <div style="font-size: 14px;color: #999999;">{{wineryItem.subtitle}}</div>
@ -83,6 +84,7 @@ module.exports.parseImage = parseImage;
</div> </div>
</div> </div>
</div>
</template> </template>

View File

@ -130,7 +130,7 @@ module.exports.parseAwards = parseAwards;
</div> </div>
<div class="winery-item"> <div class="winery-item">
<van-image :src="filters.parseImage(item.avatar)" width="100%" height="128px" /> <van-image :src="filters.parseImage(item.faceImage)" width="100%" height="128px" />
<div style="margin-left: 20px;margin-top:35px;display: flex;align-items: center;"> <div style="margin-left: 20px;margin-top:35px;display: flex;align-items: center;">
<span style="font-size: 20px;font-weight: bold;width: 120px;">{{item.mchName}}</span> <span style="font-size: 20px;font-weight: bold;width: 120px;">{{item.mchName}}</span>
<span style="color: #999;font-size: 12px;width: 200px;margin-left: 8px;">{{item.subtitle}}</span> <span style="color: #999;font-size: 12px;width: 200px;margin-left: 8px;">{{item.subtitle}}</span>

View File

@ -1,5 +1,5 @@
import { imgbaseUrl } from '../../../baseDefine' import { imgbaseUrl } from '../../../baseDefine'
import { orderDetailListPage, orderListPage, userAddressListPage } from './pages' import { newsDetailPage, orderDetailListPage, orderListPage, userAddressListPage } from './pages'
export const myMenuList1 = [ export const myMenuList1 = [
@ -29,9 +29,9 @@ export const myMenuList2 = [
icon: imgbaseUrl + '/my/tool_2.png', icon: imgbaseUrl + '/my/tool_2.png',
path: orderDetailListPage path: orderDetailListPage
}, { }, {
name: '条款政策', name: '隐私政策',
icon: imgbaseUrl + '/my/tool_3.png', icon: imgbaseUrl + '/my/tool_3.png',
path: '' path: newsDetailPage + '?id=' + 'a1e5ec18ae13036d14c94bf0e5d11756'
} }
] ]

View File

@ -4,6 +4,7 @@ export const orderDetailListPage = '/pages/mall/order/order-detail-list'
export const orderCheck = '/pages/mall/order/order-check' export const orderCheck = '/pages/mall/order/order-check'
export const userAddressListPage = '/pages/mall/user/user-address-list' export const userAddressListPage = '/pages/mall/user/user-address-list'
export const goodsDetailPage = '/pages/mall/goods/goods-detail' export const goodsDetailPage = '/pages/mall/goods/goods-detail'
export const newsDetailPage = '/pages/news/news-detail'
export const wineryListPage = '/pages/winery/winery-list' export const wineryListPage = '/pages/winery/winery-list'
export const wineryDetailPage = '/pages/winery/winery-detail' export const wineryDetailPage = '/pages/winery/winery-detail'
export const webViewPage = '/pages/webView/web' export const webViewPage = '/pages/webView/web'

View File

@ -117,6 +117,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/winery/mini/user/**").permitAll() .antMatchers("/winery/mini/user/**").permitAll()
.antMatchers("/winery/order/pay/**").permitAll() .antMatchers("/winery/order/pay/**").permitAll()
.antMatchers("/winery/activity/open/**").permitAll() .antMatchers("/winery/activity/open/**").permitAll()
.antMatchers("/news/news_content/open/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证 // 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated() .anyRequest().authenticated()
.and() .and()