Commit 36614020 authored by 张俊's avatar 张俊

推荐管理页

parent 772afae3
<template> <template>
<div class="box"> <div class="box" @click="change_check" :style="selected_flag?{height:'auto',cursor:'default',}:checked?{border:'solid 2px #b4c0f5'}:{}">
<div class="up_state" v-if="selected_flag" :style="data.state!==1?{backgroundColor:'#e3e5ef'}:{}">
<span>
<img src="../../assets/imgs/ic_failed.png" alt="" v-if="data.state!==1">
<img src="../../assets/imgs/ic_true.png" alt="" v-if="data.state==1">
{{data.state==1?'该服务为正常上架状态':data.state==0?'该服务已下架,建议替换':data.state==2?'该服务还未上架':'该服务正在下架中,建议替换'}}
</span>
<span v-if="flag">
<i class="el-icon-caret-top" @click="rank_data(0,position=='start')" :style="position=='start'?{color:'#a9aec0'}:''"></i>
<i class="el-icon-caret-bottom" @click="rank_data(1,position=='end')" :style="position=='end'?{color:'#a9aec0'}:''"></i>
<i class="el-icon-delete-solid" @click="rank_data(2)"></i>
</span>
</div>
<div :class="{box:true,gray:selected_flag&&data.state!==1}">
<div class="box_header"> <div class="box_header">
<img :src="data.cover" alt=""> <img :src="data.cover" alt="" v-if="data.cover"/>
<div class="box_title"> <div :class="{box_title:true,up_box_title:selected_flag}" :style="data.cover?{}:{width:'calc(100% - 30px)'}">
<p>{{data.name}} <span>共享</span></p> <p>
<p>{{data.department_name}}</p> {{ data.name }} <span v-show="isMap">Map Service</span>
<span v-if="data.openness == 1" style="background-color: #e7fdfc;border: solid 1px #8bd6d0;color: #25bdb1;">共享</span
><span v-if="data.openness == 2" style="background-color: #fffee8;border: solid 1px #e4c884;color: #ef9433;">受限</span
><span v-if="data.openness == 3" style="background-color: #ffefef;border: solid 1px #d7a4a9;color: #e15260;">敏感</span>
</p>
<p>{{ data.department_name }}</p>
</div> </div>
<div class="star"> <div class="star">
<i class="el-icon-star-on" style="color:#fac266;"></i> <i class="el-icon-star-on" style="color:#fac266;"></i>
<span>{{data.score}}</span> <span>{{ data.score }}</span>
</div> </div>
</div> </div>
<div class="box_body"> <div class="box_body">
<p></p> <p>{{ data.descript }}</p>
<p></p> <p>数据领域:{{ data.sectors_name }}</p>
<p></p> <p>
<p></p> 服务类型:{{ data.data_service_type1_name }}
{{ data.data_service_type2_name }} {{ data.data_service_type3_name }}
</p>
<p>更新时间:{{ data.update_date.replace("T", " ").replace("Z", "") }}</p>
<p> <p>
<span> <span>
<img src="" alt=""> <img src="../../assets/imgs/icon_liulan.png" alt="" />
999 {{ data.view_count }}
</span> </span>
<span> <span>
<img src="" alt=""> <img src="../../assets/imgs/icon_huoqu1.png" alt="" />
999 {{ data.apply_count }}
</span> </span>
</p> </p>
</div> </div>
<el-checkbox v-model="checked" @change="change_check()"></el-checkbox> </div>
<el-checkbox
v-if="flag&&!selected_flag"
class="select_box"
v-model="checked"
@change="change_check()"
></el-checkbox>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
props: ['data','flag'], props: ["data", "flag","selected_flag","position","isMap"],//flag是true表示编辑页 selected_flag是true表示已选择列表 position表示位置end或者start来对应上下排序按钮 isMap是true 表示是地图
components: { components: {},
},
data() { data() {
return { return {
checked:false checked: false,
}; };
}, },
watch: { watch: {},
computed: {},
},
computed: {
},
created() { created() {
if(this.data.checked){
}, this.checked=true
mounted() { }
}, },
mounted() {},
methods: { methods: {
change_check(){ change_check() {
this.$emit('change_value',data) if(!this.flag){
return
}
this.checked=!this.checked
var temp ={
check:this.checked,
id:this.data.id,
data:this.data
}
this.$emit("change_value", temp);
},
rank_data(val,flag){
if(flag){
return
}
var temp ={
act:val,
id:this.data.id,
position:this.position
}
if(val == 0){
//向上排序
this.$emit("rank_value", temp);
}else if(val == 1){
//向下排序
this.$emit("rank_value", temp);
}else{
//删除数据
this.$emit("rank_value", temp);
}
} }
}, },
}; };
</script> </script>
<style scoped> <style scoped>
.box{ .box {
width: 100%; width: 100%;
height: 260px; height: 260px;
background-color: #ffffff; background-color: #ffffff;
box-shadow: 0px 3px 10px 0px box-shadow: 0px 3px 10px 0px rgba(3, 10, 37, 0.05);
rgba(3, 10, 37, 0.05);
border-radius: 10px; border-radius: 10px;
border: solid 1px #f4f7fc; border: solid 1px #f4f7fc;
position: relative; position: relative;
cursor: pointer;
overflow: hidden;
} }
.box_header{ .gray{
-webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */
filter: grayscale(100%);
}
.box_header {
width: 100%; width: 100%;
height: 93px; height: 93px;
overflow: hidden; overflow: hidden;
border-radius: 10px 10px 0 0;
background-color: #f9fafc; background-color: #f9fafc;
position: relative; position: relative;
} }
.box_header img{ .box_header img {
width: 63px; width: 63px;
height: 63px; height: 63px;
margin: 19px;
float: left; float: left;
} }
.box_header .box_title{ .box_header .box_title {
float: left; float: left;
width: calc(100% - 100px); width: calc(100% - 132px);
font-size: 16px; font-size: 16px;
color: #0d1847; color: #0d1847;
margin-top: 19px;
}
.box_header .up_box_title{
width: calc(100% - 112px);
}
.box_title p:nth-of-type(1) span {
height: 20px;
line-height: 20px;
text-align: center;
font-size: 12px;
display: inline-block;
padding: 0 9px;
border-radius: 4px;
} }
.box_title p:nth-of-type(2){ .box_title p:nth-of-type(1) span:nth-of-type(1) {
width: 91px;
text-align: center;
background-color: #5362ee;
color: #e6ebfe;
padding: 0;
}
.box_title p:nth-of-type(2) {
color: #58617a; color: #58617a;
font-size: 14px; font-size: 14px;
margin-top: 6px;
} }
.star{ .star {
position: absolute; position: absolute;
right: 18px; right: 18px;
bottom: 18px; bottom: 18px;
...@@ -103,20 +181,63 @@ export default { ...@@ -103,20 +181,63 @@ export default {
color: #ea7d19; color: #ea7d19;
font-weight: 600; font-weight: 600;
} }
.box_body{ .box_body {
padding: 0 20px; padding: 7px 20px;
} }
.box_body p{ .box_body p {
font-size: 14px; font-size: 14px;
line-height: 31px;
color: #8890a7; color: #8890a7;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.box_body p:nth-of-type(5){ .box_body p:nth-of-type(5) {
border-top: 1px solid #e3e5ef; border-top: 1px solid #e3e5ef;
} }
.box_body p:nth-of-type(5) span{ .box_body p:nth-of-type(5) span {
float: left; float: left;
} }
.box_body p:nth-of-type(5) span:nth-of-type(2){ .box_body p:nth-of-type(5) span:nth-of-type(1) img {
width: 12px;
height: 8px;
}
.box_body p:nth-of-type(5) span:nth-of-type(2) img {
width: 10px;
height: 10px;
}
.box_body p:nth-of-type(5) span:nth-of-type(2) {
float: right;
}
.select_box {
position: absolute;
top: 9px;
right: 9px;
}
.up_state{
width: 100%;
height: 34px;
line-height: 34px;
font-size: 12px;
background-color: #e6ebfe;
color: #58617a;
border-radius: 10px 10px 0px 0px;
padding: 0 15px;
}
.up_state img{
width: 12px;
vertical-align: -2px;
}
.up_state span:nth-of-type(2){
float: right; float: right;
} }
.up_state span i{
margin-left: 10px;
font-size: 14px;
color: #626de9;
cursor: pointer;
}
.up_state span i:nth-last-of-type(1){
color: #8890a7;
}
</style> </style>
...@@ -204,10 +204,10 @@ export default { ...@@ -204,10 +204,10 @@ export default {
this.initList(this.tempFilter); this.initList(this.tempFilter);
}, },
detailAction(item) { detailAction(item) {
console.log(`查看${item.ad_name}`); this.$router.push('/message/recommend_selected?ad_type='+item.ad_type+'&id='+item.id+'&look=1')
}, },
editAction(item) { editAction(item) {
console.log(`编辑${item.ad_name}`); this.$router.push('/message/recommend_selected?ad_type='+item.ad_type+'&id='+item.id+'&look=2')
}, },
}, },
}; };
......
<template> <template>
<div class="yygl_container"> <div class="yygl_container recommened">
<p class="now_page_title"> <p class="now_page_title">
我的服务 / 111 / 消息与推送管理 / 推荐位管理 /
<span>服务详情</span> <span>{{ look_flag ? "编辑" : "详情" }}</span>
</p> </p>
<div class="select_box"> <div class="select_box">
<p class="box_title"> <p class="box_title">
...@@ -11,7 +11,15 @@ ...@@ -11,7 +11,15 @@
</p> </p>
<screen-type :data="filtdata" @getselect="getselect"></screen-type> <screen-type :data="filtdata" @getselect="getselect"></screen-type>
<div class="select_box_contain"> <div class="select_box_contain">
<recommen-box :data="item" v-for="(item,index) in select_able_arr" :key="index+50000" class="select_box_in"></recommen-box> <recommen-box
@change_value="change_value"
:data="item"
v-for="(item, index) in select_able_arr"
:key="index + 50000"
class="select_box_in"
:flag="look_flag"
:isMap="$route.query.ad_type=='hgmap'"
></recommen-box>
</div> </div>
</div> </div>
...@@ -20,13 +28,30 @@ ...@@ -20,13 +28,30 @@
<span></span> <span></span>
已选择列表 已选择列表
</p> </p>
<div class="select_box_contain select_box_contain_selected">
<recommen-box
@rank_value="rank_value"
:data="item"
v-for="(item, index) in selected_arr"
:key="index + 50000"
class="select_box_in select_box_in_selected"
:selected_flag="true"
:flag="look_flag"
:isMap="$route.query.ad_type=='hgmap'"
:position="index==0?'start':index==selected_arr.length-1?'end':index"
></recommen-box>
<div class="apass_button btn_recommon" v-if="look_flag">
<el-button>取消</el-button>
<el-button type="primary" @click="onSubmit">确定</el-button>
</div>
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import screenType from '@/components/recommen/screen-type' import screenType from "@/components/recommen/screen-type";
import recommenBox from '@/components/recommen/recommen-box' import recommenBox from "@/components/recommen/recommen-box";
export default { export default {
props: [], props: [],
components: { components: {
...@@ -35,71 +60,167 @@ export default { ...@@ -35,71 +60,167 @@ export default {
}, },
data() { data() {
return { return {
filtdata:[], filtdata: [],
filter_name_arr:{ filter_name_arr: {
organizations:'数据来源机构', organizations: "数据来源机构",
serviceDomain:'数据领域', serviceDomain: "数据领域",
serviceTypeInfo:'数据服务类型' serviceTypeInfo: "数据服务类型",
}, },
select_able_arr:[], select_able_arr: [],
selected_arr: [],
look_flag: false,
}; };
}, },
watch: { watch: {},
computed: {},
created() {
if (this.$route.query.look == 1) {
this.look_flag = false;
} else {
this.look_flag = true;
}
this.get_select_data();
this.get_select_list();
this.get_selected_list();
}, },
computed: { mounted() {},
methods: {
onSubmit(){
var temp_str = ''
this.selected_arr.forEach((e,idx) => {
if(idx==this.selected_arr.length-1){
temp_str = temp_str + e.id
}else{
temp_str = temp_str + e.id+','
}
});
this.$http
.post(`/apaas/service/v3/recommend/manage/featured/update`,{
id:parseInt(this.$route.query.id),
service_ids:temp_str
})
.then((response) => {
if(response.data.success){
this.$message.success('编辑成功')
this.$router.push('/message/recommended')
}else{
this.$message.error(response.data.errMsg)
}
})
}, },
created() { change_value(val) {
this.get_select_data() console.log(val);
this.get_select_list() if(val.check){
this.selected_arr.push(val.data)
}else{
var temp = ''
this.selected_arr.forEach((e,index) => {
if(e.id==val.id){
temp = index
}
});
this.selected_arr.splice(temp,1)
}
}, },
mounted() { rank_value(val) {
console.log(val);
var index = val.position=='start'?0:val.position=='end'?this.selected_arr.length-1:val.position
if(val.act==2){
this.selected_arr.splice(index,1)
}else if(val.act==1){
var temp = this.selected_arr.splice(index,1)
this.selected_arr.splice(index+1, 0, temp[0])
}else if(val.act==0){
var temp = this.selected_arr.splice(index,1)
this.selected_arr.splice(index-1, 0, temp[0])
}
}, },
methods: { get_select_data() {
get_select_data(){
this.$http this.$http
.get(`/apaas/serviceapp/v3/servicemarket/profileInfo?serviceType=5`) .get(`/apaas/serviceapp/v3/servicemarket/profileInfo?serviceType=5`)
.then((response) => { .then((response) => {
this.filtdata = [] this.filtdata = [];
for (const key in response.data.data) { for (const key in response.data.data) {
if(response.data.data[key].childDomains){ if (response.data.data[key].childDomains) {
response.data.data[key].flag = false response.data.data[key].flag = false;
}
this.filtdata.push(
{
name:this.filter_name_arr[key],
arr:response.data.data[key],
key:key
} }
) this.filtdata.push({
name: this.filter_name_arr[key],
arr: response.data.data[key],
key: key,
});
} }
}) });
}, },
getselect(val){ getselect(val) {
console.log(val); console.log(val);
this.get_select_list(val.word,val.serviceTypeInfo.join(),val.serviceDomain.join(),val.organizations.join()) this.get_select_list(
val.word,
val.serviceTypeInfo.join(),
val.serviceDomain.join(),
val.organizations.join()
);
}, },
get_select_list(word='',data_type='',sectors='',org=''){ get_select_list(word = "", data_type = "", sectors = "", org = "") {
this.$http this.$http
.get(`/apaas/service/v3/recommend/manage/featured/service/fliter?ad_type=hotdata&keyword=${word}&data_type=${data_type}&sectors=${sectors}&org=${org}`) .get(
`/apaas/service/v3/recommend/manage/featured/service/fliter?ad_type=hotdata&keyword=${word}&data_type=${data_type}&sectors=${sectors}&org=${org}`
)
.then((response) => { .then((response) => {
if(response.data.success){ if (response.data.success) {
this.select_able_arr = response.data.data this.select_able_arr = response.data.data;
} }
}) });
},
get_selected_list() {
this.$http
.get(`/apaas/service/v3/recommend/manage/featured/services/${this.$route.query.ad_type}`)
.then((response) => {
if (response.data.success) {
this.selected_arr = response.data.data;
}
});
}, },
}, },
}; };
</script> </script>
<style>
.recommened ::-webkit-scrollbar {
width: 0px; /*对垂直流动条有效*/
height: 0px; /*对水平流动条有效*/
}
/*定义滚动条的轨道颜色、内阴影及圆角*/
.recommened ::-webkit-scrollbar-track {
background-color: #fff;
border-radius: 3px;
}
/*定义滑块颜色、内阴影及圆角*/
.recommened ::-webkit-scrollbar-thumb {
border-radius: 7px;
background-color: #e8e8e8;
}
/*定义两端按钮的样式*/
.recommened ::-webkit-scrollbar-button {
background-color: #fff;
}
/*定义右下角汇合处的样式*/
.recommened ::-webkit-scrollbar-corner {
background: #fff;
}
</style>
<style scoped> <style scoped>
.yygl_container { .yygl_container {
height: calc(100vh - 84px);
overflow: hidden; overflow: hidden;
background-color: #f6f7fb; background-color: #f6f7fb;
padding: 20px; padding: 20px;
padding-top: 0px;
height: calc(100vh - 84px);
} }
.now_page_title { .now_page_title {
margin: 15px 0; margin: 15px 0;
...@@ -107,33 +228,36 @@ export default { ...@@ -107,33 +228,36 @@ export default {
} }
.now_page_title span { .now_page_title span {
color: #242c43; color: #242c43;
font-weight: 600;
} }
.select_box{ .select_box {
float: left; float: left;
width: calc(100% - 400px); width: calc((100% - 20px)*0.771);
height: calc(100% - 56px);
overflow: hidden;
margin-right: 20px; margin-right: 20px;
background-color: #ffffff; background-color: #ffffff;
box-shadow: 0px 3px 6px 0px box-shadow: 0px 3px 6px 0px #f4f7fc;
#f4f7fc;
border-radius: 12px; border-radius: 12px;
} }
.selected_box{ .selected_box {
float: left; float: left;
width: 380px; width: calc((100% - 20px)*0.229);
background-color: #ffffff; background-color: #ffffff;
box-shadow: 0px 3px 6px 0px box-shadow: 0px 3px 6px 0px #f4f7fc;
#f4f7fc;
border-radius: 12px; border-radius: 12px;
height: calc(100% - 56px);
overflow: hidden;
} }
.box_title{ .box_title {
height:60px; height: 60px;
line-height: 60px; line-height: 60px;
border-bottom: 1px solid #e3e5ef; border-bottom: 1px solid #e3e5ef;
font-size: 16px; font-size: 16px;
color: #58617a; color: #58617a;
font-weight: 600; font-weight: 600;
} }
.box_title span{ .box_title span {
width: 4px; width: 4px;
height: 16px; height: 16px;
background-color: #515fe7; background-color: #515fe7;
...@@ -143,19 +267,38 @@ export default { ...@@ -143,19 +267,38 @@ export default {
margin-left: 30px; margin-left: 30px;
margin-right: 10px; margin-right: 10px;
} }
.select_box_contain{ .select_box_contain {
padding: 30px; padding: 30px;
width: 100%; width: 100%;
overflow: hidden; height: calc(100% - 120px);
overflow-x: hidden;
overflow-y: scroll;
} }
.select_box_in{ .select_box_contain_selected{
width: calc((100% - 40px)/3); height: calc(100% - 60px);
height: 100px; }
.select_box_in {
width: calc((100% - 40px) / 3);
float: left; float: left;
background-color: #ccc;
margin-right: 20px; margin-right: 20px;
margin-bottom: 30px;
}
.select_box_in_selected{
float: none;
} }
.select_box_contain .select_box_in:nth-of-type(3n){ .select_box_contain .select_box_in:nth-of-type(3n) {
margin-right: 0px; margin-right: 0px;
} }
.selected_box .select_box_in {
width: 100%;
margin-right: 0;
}
.selected_box .select_box_contain {
padding: 15px;
}
.btn_recommon {
display: flex;
justify-content: space-around;
margin-bottom: 22px;
}
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment