parent
e0ceb442db
commit
c7134ac160
@ -0,0 +1,292 @@ |
||||
page { |
||||
height: 100%; |
||||
overflow-y: hidden; |
||||
position: relative; |
||||
} |
||||
|
||||
.search-container { |
||||
width: 100%; |
||||
height: 100%; |
||||
overflow: hidden; |
||||
position: relative; |
||||
background: #fff; |
||||
z-index: 3; |
||||
} |
||||
|
||||
.search-tip-bar { |
||||
display: flex; |
||||
height: 60rpx; |
||||
justify-content: space-between; |
||||
border-bottom: 2rpx solid #e5e5e5; |
||||
} |
||||
|
||||
.search-tip-item { |
||||
width: 33.333333%; |
||||
height: 60rpx; |
||||
line-height: 60rpx; |
||||
text-align: center; |
||||
font-size: 28rpx; |
||||
} |
||||
|
||||
.search-tip-item:after { |
||||
content: ""; |
||||
display: inline-block; |
||||
width: 0; |
||||
height: 0; |
||||
vertical-align: middle; |
||||
margin: -2rpx 0 0 6rpx; |
||||
border-top: 8rpx solid #666; |
||||
border-left: 8rpx solid transparent; |
||||
border-right: 8rpx solid transparent; |
||||
} |
||||
|
||||
.search-tip-item.active:after { |
||||
border-bottom: 8rpx solid #666; |
||||
border-left: 8rpx solid transparent; |
||||
border-right: 8rpx solid transparent; |
||||
border-top: 0; |
||||
} |
||||
|
||||
.scroll-view { |
||||
position: absolute; |
||||
top: 80rpx; |
||||
right: 0; |
||||
left: 0; |
||||
bottom: 0; |
||||
z-index:4; |
||||
} |
||||
|
||||
.list-container { |
||||
width: 100%; |
||||
background: #fff; |
||||
} |
||||
|
||||
.list-wrap { |
||||
width: 100%; |
||||
padding: 0 30rpx; |
||||
box-sizing: border-box; |
||||
|
||||
} |
||||
|
||||
.list-item { |
||||
display: flex; |
||||
padding: 30rpx 0; |
||||
border-bottom: 1px solid #e1e1e1; |
||||
} |
||||
|
||||
.list-item .item-pic { |
||||
width: 280rpx; |
||||
height: 180rpx; |
||||
border-radius: 6rpx; |
||||
} |
||||
|
||||
.list-item .item-info { |
||||
flex: 1; |
||||
margin-left: 20rpx; |
||||
} |
||||
|
||||
.list-item .item-info .title { |
||||
max-height: 76rpx; |
||||
line-height: 38rpx; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
display: -webkit-box; |
||||
-webkit-line-clamp: 2; |
||||
-webkit-box-orient: vertical; |
||||
font-size: 32rpx; |
||||
} |
||||
|
||||
.list-item .item-info .attr .tip { |
||||
display: inline-block; |
||||
height: 32rpx; |
||||
border: 1rpx solid #15D5AE; |
||||
font-size: 20rpx; |
||||
color: #15D5AE; |
||||
line-height: 32rpx; |
||||
margin-right: 12rpx; |
||||
padding: 0 5rpx; |
||||
border-radius: 5rpx; |
||||
} |
||||
|
||||
.list-item .item-info .data { |
||||
display: flex; |
||||
margin-top: 10rpx; |
||||
justify-content: space-between; |
||||
} |
||||
|
||||
.list-item .item-info .data .sell,.list-item .item-info .data .myd { |
||||
|
||||
|
||||
font-size: 28rpx; |
||||
color: #969696; |
||||
height: 120rpx; |
||||
padding: 0 5rpx; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
display: -webkit-box; |
||||
-webkit-line-clamp: 3; |
||||
-webkit-box-orient: vertical; |
||||
margin-top: 5rpx; |
||||
line-height: 40rpx; |
||||
|
||||
} |
||||
|
||||
.list-item .item-info .data .price { |
||||
color: #646464; |
||||
font-size: 24rpx; |
||||
} |
||||
|
||||
.list-item .item-info .data .price .num { |
||||
color: #ff6c00; |
||||
font-size: 32rpx; |
||||
} |
||||
|
||||
.sort-page { |
||||
position: absolute; |
||||
top: 62rpx; |
||||
right: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
z-index: 10; |
||||
background: rgba(0,0,0,.5); |
||||
} |
||||
|
||||
.sort-group { |
||||
background: #fff; |
||||
} |
||||
|
||||
.sort-item { |
||||
color: #666; |
||||
height: 78rpx; |
||||
line-height: 78rpx; |
||||
padding: 0 30rpx; |
||||
position: relative; |
||||
font-size: 28rpx; |
||||
border-bottom: 2rpx solid #e5e5e5; |
||||
} |
||||
|
||||
.sort-item-active { |
||||
color: #eb5e18; |
||||
} |
||||
|
||||
.sort-item-active:after { |
||||
content: ""; |
||||
display: inline-block; |
||||
width: 22rpx; |
||||
height: 18rpx; |
||||
position: absolute; |
||||
top: 50%; |
||||
right: 20rpx; |
||||
margin-top: -14rpx; |
||||
background: url("") center no-repeat; |
||||
background-size: contain; |
||||
} |
||||
|
||||
.filter-page { |
||||
position: absolute; |
||||
top: 62rpx; |
||||
right: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
z-index: 10; |
||||
background: #fff; |
||||
} |
||||
|
||||
.filter-box { |
||||
display: -webkit-box; |
||||
position: absolute; |
||||
top: 0; |
||||
right: 0; |
||||
bottom: 108rpx; |
||||
left: 0; |
||||
} |
||||
|
||||
.filter-hd { |
||||
width: 220rpx; |
||||
height: 100%; |
||||
background: #f2f6f9; |
||||
} |
||||
|
||||
.filter-hd-item { |
||||
height: 80rpx; |
||||
line-height: 80rpx; |
||||
padding: 0 20rpx; |
||||
position: relative; |
||||
font-size: 28rpx; |
||||
} |
||||
|
||||
.filter-hd-item-active,.filter-bd-item-active { |
||||
color: #eb5e18; |
||||
background: #fff; |
||||
} |
||||
|
||||
.filter-bd-item-active:after { |
||||
content: ""; |
||||
display: inline-block; |
||||
width: 22rpx; |
||||
height: 18rpx; |
||||
position: absolute; |
||||
top: 50%; |
||||
right: 20rpx; |
||||
margin-top: -14rpx; |
||||
background: url("") center no-repeat; |
||||
background-size: contain; |
||||
} |
||||
|
||||
.filter-bd { |
||||
height: 100%; |
||||
-webkit-box-flex: 1; |
||||
padding: 0 20rpx; |
||||
} |
||||
|
||||
.filter-bd-item { |
||||
height: 78rpx; |
||||
line-height: 78rpx; |
||||
padding: 0 20rpx; |
||||
position: relative; |
||||
font-size: 28rpx; |
||||
border-bottom: 2rpx solid #e5e5e5; |
||||
} |
||||
|
||||
.control-bar-block { |
||||
display: -webkit-box; |
||||
height: 80rpx; |
||||
padding: 14rpx 20rpx; |
||||
position: absolute; |
||||
right: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
background: #fafafa; |
||||
} |
||||
|
||||
.control-back-btn { |
||||
color: #8a8a8a; |
||||
width: 170rpx; |
||||
height: 76rpx; |
||||
line-height: 76rpx; |
||||
margin-right: 20rpx; |
||||
text-align: center; |
||||
border: 2rpx solid #b8b8b8; |
||||
border-radius: 10rpx; |
||||
font-size: 26rpx; |
||||
} |
||||
|
||||
.control-confirm-btn { |
||||
color: #fff; |
||||
height: 80rpx; |
||||
line-height: 80rpx; |
||||
text-align: center; |
||||
-webkit-box-flex: 1; |
||||
font-size: 30rpx; |
||||
border-radius: 10rpx; |
||||
background: #eb5e18; |
||||
} |
||||
|
||||
.goTop { |
||||
height: 80rpx; |
||||
width: 80rpx; |
||||
position: fixed; |
||||
bottom: 50rpx; |
||||
right: 30rpx; |
||||
border-radius: 50%; |
||||
} |
@ -0,0 +1,446 @@ |
||||
<template> |
||||
<!-- <mescroll-uni :up="upOption" @down="downCallback" @up="upCallback"> --> |
||||
<view class=""> |
||||
<view class="an_box_mes wc_sbox pb_15"> |
||||
<view class="dy_fx an_sch"> |
||||
<view class="fx_1"> |
||||
<input v-model="searchValue" @confirm="search" type="text" class="an_sch_ipt" confirm-type="search" placeholder-style="color:#999" placeholder="输入攻略名称" /> |
||||
</view> |
||||
<view class="an_sch_img" @click="search"><image src="../../../static/animg/icon-search.png" class="ac_size_1"></image></view> |
||||
</view> |
||||
|
||||
|
||||
</view> |
||||
<scroll-view @scroll="onReachScroll" @bindscrolltolower="lower" class="scroll-view" :scroll-top="topNum" scrollY="true"> |
||||
<view class=""> |
||||
<view class="aml_30 amr_30"> |
||||
<navigator |
||||
class="amt_30" |
||||
hover-class="none" |
||||
:url="'/pages/method/methoddetail/methoddetail?guid=' + itemName.guid" |
||||
v-for="(itemName, index) in listDatas" |
||||
:key="index" |
||||
> |
||||
<view class="dy_fx ls_inf_box"> |
||||
<image class="an_ls_img2" :src="itemName.logo" mode="aspectFill"></image> |
||||
<view class="fx_1 ls_txt"> |
||||
<view class="lst_tit word_1">{{ itemName.mtitle }}</view> |
||||
|
||||
<view class="data"> |
||||
<view class="lsinf word_2">{{ itemName.mcontent }}</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</navigator> |
||||
</view> |
||||
</view> |
||||
|
||||
<!-- <view class="data-loading" v-if="param.loading"> |
||||
<image class="icon" src="../../../static/images/loading-icon.png"></image> |
||||
加载中… |
||||
</view> --> |
||||
<view class="data-is-bottom" v-if="param.finished">{{ this.$param.pageMsg }}</view> |
||||
<!-- <view class="no-data-info" v-if="param.noData">{{ this.$param.dataMsg }}</view> --> |
||||
</scroll-view> |
||||
|
||||
<view class="sort-page" :hidden="selectedParam.hiddenSortPanel"> |
||||
<view class="sort-group"> |
||||
<view |
||||
@tap="selected" |
||||
:class="[pageClass.sortItemClass, selectedParam.sortId == item.id ? 'sort-item-active' : '']" |
||||
data-panel="hiddenSortPanel" |
||||
data-type="sortId" |
||||
:data-id="item.id" |
||||
v-for="(item, index) in filter.sort" |
||||
:key="index" |
||||
> |
||||
{{ item.name }} |
||||
</view> |
||||
</view> |
||||
</view> |
||||
|
||||
<view class="sort-page" :hidden="selectedParam.hiddenRegionPanel"> |
||||
<view class="sort-group"> |
||||
<view |
||||
@tap="regionSelected" |
||||
:class="[pageClass.sortItemClass, selectedParam.bm == item.bm ? 'sort-item-active' : '']" |
||||
data-panel="hiddenRegionPanel" |
||||
:data-name="item.title" |
||||
data-type="bm" |
||||
:data-id="item.bm" |
||||
v-for="(item, index) in regionList" |
||||
:key="index" |
||||
> |
||||
{{ item.title }} |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
<!-- </mescroll-uni> --> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
data() { |
||||
return { |
||||
searchItemClass: 'search-tip-item', |
||||
pageClass: { |
||||
sortItemClass: 'sort-item', |
||||
filterHdItemClass: 'filter-hd-item', |
||||
filterBdItem: 'filter-bd-item' |
||||
}, |
||||
priceSymbol: '', |
||||
destinationBak: 'all', |
||||
destination: 'all', |
||||
filter: [], |
||||
regionList: [], |
||||
parentLevelItem: 'attribute_htype', |
||||
defaultFilter: {}, |
||||
latitude: 0, |
||||
longitude: 0, |
||||
selectedFIlterBak: { |
||||
price: 0 |
||||
}, |
||||
selectedFIlter: { |
||||
attribute_htype: 0 |
||||
}, |
||||
selectedParam: { |
||||
sortId: 3, |
||||
bm: '', |
||||
hiddenSortPanel: !0, |
||||
hiddenAttributePanel: !0, |
||||
hiddenRegionPanel: !0 |
||||
}, |
||||
param: { |
||||
page: 1, |
||||
noData: !1, |
||||
loading: !1, |
||||
finished: !1 |
||||
}, |
||||
listDatas: [], |
||||
topNum: 0, |
||||
rootPaht: this.$config.ROOTPATH, |
||||
regions: '', |
||||
regionname: '区域', |
||||
searchValue:"", |
||||
netType:true |
||||
}; |
||||
}, |
||||
onLoad(option) { |
||||
var that = this; |
||||
this.$util.getNetworkType( |
||||
function(res){ |
||||
if(res.networkType === 'none'){ |
||||
uni.showToast({ |
||||
title:that.$param.netMsg, |
||||
icon:"none", |
||||
duration:2000 |
||||
}) |
||||
that.netType = false; |
||||
} |
||||
},function(){ |
||||
uni.showToast({ |
||||
title:that.$param.netMsg, |
||||
icon:"none", |
||||
duration:2000 |
||||
}) |
||||
that.netType = false; |
||||
} |
||||
) |
||||
if(!that.netType){ |
||||
return; |
||||
} |
||||
this.$util.hideLoadingByTime(); |
||||
uni.showLoading({ |
||||
title: '加载中', |
||||
mask: true |
||||
}); |
||||
var region = option.region; |
||||
this.initData(); |
||||
this.getRedisRegion(); |
||||
this.get_attribute(); |
||||
if (region == undefined || region == null || region == '') { |
||||
this.getRedisData(); |
||||
} else { |
||||
this.selectedParam.bm = region; |
||||
this.get_data(region); |
||||
} |
||||
that.$util.saveOperatorLog(that, 'FUN', '攻略'); |
||||
}, |
||||
onShow() { |
||||
this.destinationBak != this.destination && (this.initData(), this.get_data()); |
||||
}, |
||||
methods: { |
||||
initData: function() { |
||||
uni.showLoading({ |
||||
title: '加载中', |
||||
mask: true |
||||
}); |
||||
var param = {}; |
||||
param.page = 1; |
||||
param.noData = false; |
||||
param.finished = false; |
||||
|
||||
this.param = param; |
||||
this.listDatas = []; |
||||
this.destinationBak = this.destination; |
||||
}, |
||||
selected: function(event) { |
||||
this.initData(); |
||||
var dataset = event.currentTarget.dataset; |
||||
var param = this.selectedParam; |
||||
|
||||
param[dataset.type] = dataset.id; |
||||
param.hiddenSortPanel = !0; |
||||
|
||||
//console.log(dataset.id); |
||||
this.selectedParam = param; |
||||
|
||||
this.get_data(); |
||||
}, |
||||
regionSelected: function(event) { |
||||
this.initData(); |
||||
var dataset = event.currentTarget.dataset; |
||||
var param = this.selectedParam; |
||||
|
||||
param[dataset.type] = dataset.id; |
||||
param.hiddenRegionPanel = !0; |
||||
//console.log(dataset.id); |
||||
this.selectedParam = param; |
||||
this.regions = param.bm; |
||||
this.regionname = dataset.name; |
||||
this.get_data(); |
||||
}, |
||||
changePanel: function(event) { |
||||
var dataSet = event.currentTarget.dataset, |
||||
selectedParam = this.selectedParam; |
||||
'hiddenSortPanel' == dataSet.type ? (selectedParam.hiddenAttributePanel = !0,selectedParam.hiddenRegionPanel = !0) : (selectedParam.hiddenSortPanel = !0), |
||||
(selectedParam[dataSet.type] = !selectedParam[dataSet.type]), |
||||
(this.selectedParam = selectedParam); |
||||
}, |
||||
changeRegionPanel: function(event) { |
||||
var dataSet = event.currentTarget.dataset, |
||||
selectedParam = this.selectedParam; |
||||
if ('hiddenRegionPanel' == dataSet.type) { |
||||
selectedParam.hiddenAttributePanel = !0; |
||||
selectedParam.hiddenSortPanel = !0; |
||||
} else { |
||||
selectedParam.hiddenRegionPanel = !0; |
||||
} |
||||
(selectedParam[dataSet.type] = !selectedParam[dataSet.type]), (this.selectedParam = selectedParam); |
||||
}, |
||||
|
||||
resetFilter: function() { |
||||
this.selectedFIlter = this.defaultFilter; |
||||
}, |
||||
confirmClick: function() { |
||||
this.initData(); |
||||
//设置选中的筛选项 |
||||
var selectedParam = this.selectedParam; |
||||
(selectedParam.hiddenAttributePanel = true), (this.selectedFIlterBak = this.selectedFIlter); |
||||
this.parentLevelItem = 'attribute_htype'; |
||||
this.selectedParam = selectedParam; |
||||
|
||||
this.get_data(); |
||||
}, |
||||
parentLevel: function(t) { |
||||
var currentTarget = t.currentTarget.dataset; |
||||
//console.log("aaaaaaaaaaaaaaaaa"+a.parentlevelitem); |
||||
this.parentLevelItem = currentTarget.parentlevelitem; |
||||
}, |
||||
childLevel: function(t) { |
||||
var a = t.currentTarget.dataset, |
||||
e = this.selectedFIlter; |
||||
|
||||
this.selectedFIlterBak = e; |
||||
e[a.type] = a.id; |
||||
this.selectedFIlter = e; |
||||
}, |
||||
getRedisRegion: function() { |
||||
var data = { |
||||
key: this.$param.userkey + '_mdd_list' |
||||
}; |
||||
this.$Request.post(this.$config.getRedisData, data).then(res => { |
||||
if (res.status == 200) { |
||||
this.regionList = res.data.mddList; |
||||
var all = { |
||||
bm: '', |
||||
title: '全部' |
||||
}; |
||||
this.regionList.unshift(all); |
||||
for (var i = 0; i < this.regionList.length; i++) { |
||||
if (this.regionList[i].bm == this.selectedParam.bm) { |
||||
this.regionname = this.regionList[i].title; |
||||
} |
||||
} |
||||
} else { |
||||
this.getRegion(); |
||||
} |
||||
}); |
||||
}, |
||||
getRegion: function() { |
||||
var that = this; |
||||
var url = this.$config.getMessageInfoFormFilter; |
||||
var data = { |
||||
type: this.$param.mddType, |
||||
userkey: this.$param.userkey, |
||||
pageSize: 100, |
||||
sort: '2' |
||||
}; |
||||
this.$Request.post(url, data).then(res => { |
||||
var flag = that.$util.isSuccess(res); |
||||
if (!flag) { |
||||
return; |
||||
} |
||||
that.regionList = res.data; |
||||
var all = { |
||||
bm: '', |
||||
title: '全部' |
||||
}; |
||||
that.regionList.unshift(all); |
||||
for (var i = 0; i < that.regionList.length; i++) { |
||||
if (that.regionList[i].bm == that.selectedParam.bm) { |
||||
that.regionname = that.regionList[i].title; |
||||
} |
||||
} |
||||
}); |
||||
}, |
||||
search: function() { |
||||
this.initData(); |
||||
this.get_data(); |
||||
}, |
||||
get_attribute: function() { |
||||
var that = this; |
||||
var url = this.$config.getCondition; |
||||
var data = { |
||||
type: 'method', |
||||
userkey: this.$param.userkey |
||||
}; |
||||
|
||||
this.$Request.post(url, data).then(res => { |
||||
var flag = that.$util.isSuccess(res); |
||||
if (!flag) { |
||||
return; |
||||
} |
||||
this.filter = res.data; |
||||
}); |
||||
}, |
||||
onReachScroll: function(t) { |
||||
//console.log(t); |
||||
t.detail.scrollTop > 50 ? (this.floorstatus = true) : (this.floorstatus = false); |
||||
var a = this.param; |
||||
|
||||
a.noData || a.finished || a.loading || this.get_data(); |
||||
}, |
||||
getRedisData: function() { |
||||
var that = this; |
||||
var data = { |
||||
key: this.$param.userkey + '_method_list' |
||||
}; |
||||
that.$Request.post(that.$config.getRedisData, data).then(res => { |
||||
if (res.status == 200) { |
||||
var listDatas = that.listDatas, |
||||
dataListLen = res.data.methodList.length, |
||||
data = res.data.methodList; |
||||
if ( |
||||
(dataListLen == 10 ? (this.param.page += 1) : (this.param.page = 1 && 0 == dataListLen ? (this.param.noData = true) : (this.param.finished = true)), |
||||
(this.param.loading = false), |
||||
dataListLen > 0) |
||||
) { |
||||
for (var i = 0; i < dataListLen; i++) { |
||||
var item = { |
||||
guid: data[i].guid, |
||||
logo: this.rootPaht + data[i].logo, |
||||
mtitle: data[i].title, |
||||
muser: data[i].subtitle, |
||||
sendtime: data[i].sendtime, |
||||
browsenum: data[i].browsenum, |
||||
mcontent: data[i].content |
||||
}; |
||||
this.listDatas.push(item); |
||||
} |
||||
uni.hideLoading(); |
||||
} |
||||
} else { |
||||
that.get_data(); |
||||
} |
||||
}); |
||||
}, |
||||
get_data: function() { |
||||
this.param.loading = true; |
||||
var region = this.selectedParam.bm; |
||||
var that = this; |
||||
var url = this.$config.getMessageInfoFormFilter; |
||||
var data = { |
||||
type: this.$param.methodType, |
||||
userkey: this.$param.userkey, |
||||
pageno: this.param.page, |
||||
pageSize: 10, |
||||
region: region, |
||||
sort: this.selectedParam.sortId, |
||||
lng: this.$param.clng, |
||||
lat: this.$param.clat, |
||||
title:this.searchValue |
||||
}; |
||||
this.$Request.post(url, data).then(res => { |
||||
var flag = that.$util.isSuccess(res); |
||||
if (!flag) { |
||||
uni.hideLoading(); |
||||
return; |
||||
} |
||||
var listDatas = this.listDatas, |
||||
dataListLen = res.data.length; |
||||
|
||||
if ( |
||||
(dataListLen == data.pageSize ? (this.param.page += 1) : (this.param.page = 1 && 0 == dataListLen ? (this.param.noData = true) : (this.param.finished = true)), |
||||
(this.param.loading = false), |
||||
dataListLen > 0) |
||||
) { |
||||
for (var i = 0; i < dataListLen; i++) { |
||||
var item = { |
||||
guid: res.data[i].guid, |
||||
logo: this.rootPaht + res.data[i].logo, |
||||
mtitle: res.data[i].title, |
||||
muser: res.data[i].subtitle, |
||||
sendtime: res.data[i].sendtime, |
||||
browsenum: res.data[i].browsenum, |
||||
mcontent: res.data[i].content |
||||
}; |
||||
this.listDatas.push(item); |
||||
} |
||||
//console.log(this.param.finished); |
||||
} |
||||
uni.hideLoading(); |
||||
}); |
||||
}, |
||||
delHtmlTag: function(str) { |
||||
var temp = str.replace(/<\/?.+?>/g, ''); |
||||
var result = temp.replace(/ /g, ''); |
||||
return result.replace(/ /gi, ''); |
||||
} |
||||
/* requestLocation:function(){ |
||||
this.longitude = 31.22; |
||||
uni.getLocation({ |
||||
type: 'wgs84', |
||||
success: function (res) { |
||||
this.longitude = res.longitude; |
||||
this.latitude = res.latitude; |
||||
|
||||
console.log('当前位置的经度:' + res.longitude); |
||||
console.log('当前位置的纬度:' + res.latitude); |
||||
} |
||||
}); |
||||
} */ |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
/* @import url('../../../static/css/common.css'); */ |
||||
/* @import url('methodlist.css'); */ |
||||
.scroll-view { |
||||
top: 100rpx; |
||||
} |
||||
.sort-page{ top:295rpx} |
||||
|
||||
</style> |
After Width: | Height: | Size: 1.0 KiB |
Loading…
Reference in new issue