Commit 47983054 authored by 张宇迪's avatar 张宇迪

Merge branch 'dev'

parents 630e24b8 958d802a
......@@ -8,7 +8,7 @@ module.exports = {
dev: {
// Paths
assetsSubDirectory: "static",
assetsPublicPath: "/",
assetsPublicPath: "/apaas/ui/",
proxyTable: {
"/apaas": {
target: "https://apaas3.wodcloud.com/apaas/",
......
......@@ -11,6 +11,7 @@
}
</style>
</head>
<script src="/apaas/ui/static/config/configmap.js"></script>
<body>
<div id="app"></div>
</body>
......
......@@ -10,25 +10,37 @@ import bdMenu from "./components/menu";
export default {
data: () => ({}),
components: {
bdMenu
bdMenu,
},
methods: {
getCurrentUser() {
this.$api.user.getNowUser().then(({ data }) => {
if (data.success == 1) {
console.log("--- --- ---");
console.log(data.data);
console.log("--- --- ---");
this.$store.commit("userInfofun", data.data);
} else {
console.log(data.errMsg);
}
});
}
},
getMessage() {
this.$http
.get("/apaas/service/v3/mymsg/unread", {
params: {
size: 10,
page: 1,
},
})
.then(({ data }) => {
if (data.success === 1) {
this.$store.commit("setUnreadMessageCount", data.data.total || 0);
}
});
},
},
created() {
this.getCurrentUser();
}
this.getMessage();
},
};
</script>
......
......@@ -609,10 +609,14 @@ width: 620px!important;
color: #999;
cursor: not-allowed;
}
.apass_table .row_action .disabled.hide {
opacity: 0;
cursor: auto;
}
.apass_table .row_action .interval_line {
font-size: 14px;
color: #dde4ff;
margin: 0 20px;
font-size: 14px;
color: #dde4ff;
margin: 0 20px;
}
.apass_table .border-active td {
padding: 10px 0;
......
src/assets/imgs/shop_ic_huoqu.png

1.03 KB | W: | H:

src/assets/imgs/shop_ic_huoqu.png

14.7 KB | W: | H:

src/assets/imgs/shop_ic_huoqu.png
src/assets/imgs/shop_ic_huoqu.png
src/assets/imgs/shop_ic_huoqu.png
src/assets/imgs/shop_ic_huoqu.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/imgs/shop_icon_liulan.png

1.07 KB | W: | H:

src/assets/imgs/shop_icon_liulan.png

14.7 KB | W: | H:

src/assets/imgs/shop_icon_liulan.png
src/assets/imgs/shop_icon_liulan.png
src/assets/imgs/shop_icon_liulan.png
src/assets/imgs/shop_icon_liulan.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -4,7 +4,6 @@
class="apass_dialog"
:visible.sync="showDialog"
:width="width"
top="25vh"
>
<h3 class="dialog_title" slot="title">
<span v-text="title || '提示'"></span>
......
......@@ -181,9 +181,11 @@ export default {
}
},
searchAction(value) {
this.currentPage = 1;
this.listAction();
},
filterChange(filter) {
this.currentPage = 1;
this.filter = filter;
this.listAction();
},
......@@ -196,6 +198,10 @@ export default {
this.currentPage = value;
this.listAction();
},
resetCurrentPage(value = 1) {
this.currentPage = value;
this.listAction();
},
listAction() {
if (this.timer) {
clearTimeout(this.timer);
......
......@@ -25,6 +25,7 @@
<span
v-if="v.disabledRule && v.disabledRule(scope.row)"
class="btn disabled"
:class="{ hide: v.disableHide }"
:key="'btn_' + index + '_' + i"
v-text="v.getLabel ? v.getLabel(scope.row) : v.label"
>
......@@ -42,8 +43,24 @@
v-if="i < item.actionList.length - 1"
class="interval_line"
:key="'line_' + index + '_' + i"
>|</span
>
|
</span>
</template>
<template v-if="item.moreActionList">
<span
class="interval_line"
v-if="item.actionList && item.actionList.length > 0"
>
|
</span>
<a
class="btn"
@mouseenter="mouseenter($event, item.moreActionList, scope.row)"
@mouseleave="mouseleave"
>
更多
</a>
</template>
</div>
<div v-else-if="item.type === 'button'" class="row_action">
......@@ -94,7 +111,7 @@
tag_flag_arr[scope.$index] == 0 &&
scope.row[item.prop].length > 2
"
@click.stop="change_tag(scope.$index, 1)"
@click.stop="changeTag(scope.$index, 1)"
></div>
<div
class="tagclo btn_up"
......@@ -102,7 +119,7 @@
tag_flag_arr[scope.$index] == 1 &&
scope.row[item.prop].length > 2
"
@click.stop="change_tag(scope.$index, 0)"
@click.stop="changeTag(scope.$index, 0)"
></div>
</div>
<div v-else-if="item.type === 'chart'" class="charts">
......@@ -115,16 +132,32 @@
:styles="item.prop == 'cpu' ? spCurveStyles2 : spCurveStyles3"
/>
</sparkline>
<span class="use" v-if="item.prop == 'cpu'&&scope.row.cpu_use"
<span class="use" v-if="item.prop == 'cpu' && scope.row.cpu_use"
>{{ scope.row["cpu_use"] }}.00mm</span
>
<span class="use" :style="scope.row[item.prop].length?{}:{right:'25px',bottom:'8px'}" v-if="item.prop == 'cpu'&&!scope.row.cpu_use"
<span
class="use"
:style="
scope.row[item.prop].length
? {}
: { right: '25px', bottom: '8px' }
"
v-if="item.prop == 'cpu' && !scope.row.cpu_use"
>0mm</span
>
<span class="use" v-if="item.prop == 'mermoy'&&scope.row.memory_use"
<span
class="use"
v-if="item.prop == 'mermoy' && scope.row.memory_use"
>{{ scope.row["memory_use"] }}Mi</span
>
<span class="use" :style="scope.row[item.prop].length?{}:{right:'25px',bottom:'8px'}" v-if="item.prop == 'mermoy'&&!scope.row.memory_use"
<span
class="use"
:style="
scope.row[item.prop].length
? {}
: { right: '25px', bottom: '8px' }
"
v-if="item.prop == 'mermoy' && !scope.row.memory_use"
>0Mi</span
>
</div>
......@@ -210,6 +243,22 @@
</template>
</el-table-column>
</el-table>
<ul
ref="moreActionList"
class="more_action_list"
:style="moreActionStyle"
@mouseenter="enterMoreActionList"
@mouseleave="leaveMoreActionList"
v-show="showMoreActionList"
>
<li
v-for="(item, index) in moreActionList"
:key="'more_' + index"
@click="item.callback"
v-text="item.label"
></li>
</ul>
</div>
</template>
......@@ -257,6 +306,12 @@ export default {
strokeOpacity: 0,
strokeDasharray: "2, 2",
},
moreActionList: [],
showMoreActionList: false,
moreActionStyle: {
top: 0,
left: 0,
},
};
},
mounted() {
......@@ -266,7 +321,7 @@ export default {
);
},
methods: {
change_tag(index, val) {
changeTag(index, val) {
this.$set(this.tag_flag_arr, index, val);
},
sortChange(value) {
......@@ -278,6 +333,42 @@ export default {
getPercent(num) {
return Math.round(num * 100) + "%";
},
mouseenter($event, moreActionList, row) {
let _self = this;
_self.moreActionList = [];
_self.showMoreActionList = true;
_self.moreActionList = moreActionList.map((item) => ({
id: row.id,
label: item.label,
callback() {
_self.showMoreActionList = false;
_self.moreActionList = [];
item.callback && item.callback(row);
},
}));
_self.$nextTick(() => {
let targetInfo = $event.target.getBoundingClientRect();
let containerInfo = _self.$refs.moreActionList.getBoundingClientRect();
_self.moreActionStyle = {
top: targetInfo.y + targetInfo.height + 15 + "px",
left:
targetInfo.x - (containerInfo.width - targetInfo.width) / 2 + "px",
};
});
},
mouseleave() {
this.showMoreActionList = false;
},
enterMoreActionList() {
this.showMoreActionList = true;
},
leaveMoreActionList() {
this.showMoreActionList = false;
},
},
};
</script>
......@@ -389,4 +480,48 @@ export default {
.selected_icon.selected > span {
display: block;
}
.more_action_list {
position: fixed;
}
.more_action_list > li {
padding: 5px 20px;
background-color: #0f2683;
font-size: 12px;
line-height: 20px;
color: #fff;
cursor: pointer;
position: relative;
}
.more_action_list > li:first-child {
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
.more_action_list > li:first-child::before {
content: "";
position: absolute;
top: -14px;
right: calc(50% - 14px);
width: 28px;
height: 14px;
}
.more_action_list > li:first-child::after {
content: "";
position: absolute;
top: -14px;
right: calc(50% - 7px);
border-top: 0 solid transparent;
border-right: 7px solid transparent;
border-bottom: 14px solid #0f2683;
border-left: 7px solid transparent;
}
.more_action_list > li:last-child {
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
.more_action_list > li:hover {
background-color: #3f4f9c;
}
.more_action_list > li:first-child:hover::after {
border-bottom: 14px solid #3f4f9c;
}
</style>
......@@ -28,7 +28,11 @@ export default {
targetValue: {
type: Number,
default: () => 0
}
},
area_flag:{
type: Boolean,
default: true
},
},
components: {},
data() {
......@@ -87,7 +91,7 @@ export default {
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(
color:this.area_flag? new echarts.graphic.LinearGradient(
0,
0,
0,
......@@ -103,7 +107,7 @@ export default {
}
],
false
),
):'rgba(0,0,0,0)',
shadowColor: hexToRgba(color[idx], 0.1),
shadowBlur: 10
}
......@@ -118,10 +122,10 @@ export default {
});
var option = {
backgroundColor: bgColor,
// backgroundColor: bgColor,
color: color,
legend: {
// show:false,//是否显示图例
show:yarr.length>=2,//是否显示图例
right: "center",
bottom: 0,
itemWidth: 10,
......@@ -144,7 +148,7 @@ export default {
left: 15,
right: 30,
bottom: 30,
containLabel: true
containLabel: true,
},
xAxis: [
{
......@@ -161,7 +165,7 @@ export default {
}
},
splitArea: {
show: true,
show: this.area_flag,
areaStyle: {
color: ["#fff", "#f8f9fd"],
opacity: 0.5
......
......@@ -54,6 +54,7 @@ a {
.list p {
line-height: 32px;
color: #8890a7;
word-wrap:break-word;
}
.list {
margin-bottom: 20px;
......
......@@ -13,11 +13,11 @@
>{{ userInfo.user_name }}</span>
<span v-else @click="gotopage('login')" class="user">请登录</span>
<img
:class="userInfo.picture_path ? 'user_pic' : 'user_default'"
:src="
userInfo.picture_path || require('../assets/imgs/home_ic_user.png')
"
:class="userInfo.picture_path && false ? 'user_pic' : 'user_default'"
src="../assets/imgs/home_ic_user.png"
/>
<span class="has_msg" v-if="unreadMessageCount > 0"></span>
<!-- 菜单图片不需要动态渲染,只用ui给的图标 -->
<div v-if="userInfo.user_name && userInfo.user_name != ''" class="user_menu">
<div
v-for="(item, index) in user_arr"
......@@ -25,10 +25,21 @@
@mouseleave.stop="change_now_hover(-1)"
@mouseenter.stop="change_now_hover(index)"
@click="gotopage(item.visit_url)"
>{{ item.menu_name }}</div>
>
{{ item.menu_name }}
<span
v-if="unreadMessageCount > 0 && item.visit_url === '/user/notice'"
class="width_num"
v-text="unreadMessageCount"
></span>
</div>
<div @click="gotopage('logout')">退出登录</div>
</div>
<div v-if="userInfo.user_name && userInfo.user_name != ''" class="sj" :style="now_hover==0?{backgroundColor:'#e56600'}:{}"></div>
<div
v-if="userInfo.user_name && userInfo.user_name != ''"
class="sj"
:style="now_hover==0?{backgroundColor:'#e56600'}:{}"
></div>
</div>
<div
v-if="show_shop_menu"
......@@ -92,7 +103,11 @@
@click.stop="gotoChildPage(v, item.visit_url)"
>{{ v.menu_name }}</div>
</div>
<div class="sj" v-if="item.Child && item.Child.length" :style="now_hover==0?{backgroundColor:'#e56600',left: '60px'}:{left: '60px'}"></div>
<div
class="sj"
v-if="item.Child && item.Child.length"
:style="now_hover==0?{backgroundColor:'#e56600',left: '60px'}:{left: '60px'}"
></div>
<div class="bottom_show" v-if="now_menu == item.visit_url"></div>
</div>
</div>
......@@ -100,6 +115,7 @@
</template>
<script>
const gisServiceUrl = window.serviceConfig.gisServiceRoot;
export default {
data() {
return {
......@@ -114,8 +130,8 @@ export default {
],
shopping_list: [],
menuCartNum: 0,
now_hover:-1,
show_shop_menu: false
now_hover: -1,
show_shop_menu: false,
};
},
mounted() {
......@@ -128,20 +144,25 @@ export default {
},
userInfo() {
return this.$store.state.userInfo || {};
}
},
unreadMessageCount() {
return this.$store.state.unreadMessageCount;
},
},
watch: {
getMenuCartState(newVal) {
this.getList();
}
},
},
methods: {
change_now_hover(n){
this.now_hover = n
change_now_hover(n) {
this.now_hover = n;
},
gotopage(n) {
if (n == "logout") {
window.location.href = "/iam/api/logout";
window.location.href =
gisServiceUrl +
`/portal/sharing/rest/oauth2/signout?client_id=arcgisonline&redirect_uri=${window.location.protocol}//${window.location.host}/iam/api/logout`;
} else if (n == "login") {
let path = this.$route.path;
window.location.href = "/iam/login/#/login?ReturnUrl=" + path;
......@@ -154,7 +175,7 @@ export default {
},
deleteItem(id) {
let query = [id];
this.$api.serviceShop.delShoppingCart(query).then(response => {
this.$api.serviceShop.delShoppingCart(query).then((response) => {
this.getList();
});
},
......@@ -183,7 +204,7 @@ export default {
}
},
getList() {
this.$api.serviceShop.getShoppingCart().then(response => {
this.$api.serviceShop.getShoppingCart().then((response) => {
if (response.data.success == "1") {
this.menuCartNum = response.data.data.valid
? response.data.data.valid.length
......@@ -201,12 +222,12 @@ export default {
this.now_menu = visit_url ? visit_url : "";
},
getNowMenu() {
this.$api.general.getNowMenu({ teamName: "APAAS3" }).then(response => {
this.$api.general.getNowMenu({ teamName: "APAAS3" }).then((response) => {
if (response.data.success == 1) {
let arr =
(response.data.data[0] && response.data.data[0].Child) || [];
let shop_index = arr.findIndex(
item => item.visit_url == "/shop/shopping_cart"
(item) => item.visit_url == "/shop/shopping_cart"
);
if (shop_index != -1) {
arr.splice(shop_index, 1);
......@@ -214,7 +235,7 @@ export default {
} else {
this.show_shop_menu = false;
}
let user_index = arr.findIndex(item => item.visit_url == "/user");
let user_index = arr.findIndex((item) => item.visit_url == "/user");
if (user_index != -1) {
this.user_arr = arr[user_index].Child;
arr.splice(user_index, 1);
......@@ -225,8 +246,8 @@ export default {
this.getMenuIndex();
}
});
}
}
},
},
};
</script>
......@@ -291,7 +312,7 @@ export default {
float: right;
width: 185px;
font-size: 16px;
height:84px;
height: 84px;
text-align: center;
cursor: pointer;
position: relative;
......@@ -309,7 +330,7 @@ export default {
left: calc(50% - 12px);
}
.user_menu {
width: 135px;
/* width: 135px; */
background-color: #ffffff;
box-shadow: 0px 3px 6px 0px rgba(15, 19, 65, 0.05);
border-radius: 8px;
......@@ -351,10 +372,11 @@ export default {
display: block;
}
.user_menu div {
width: 135px;
/* width: 135px; */
height: 44px;
line-height: 44px;
text-align: center;
padding: 0 30px;
text-align: left;
color: #0d1847;
}
.user_menu div:hover {
......@@ -436,6 +458,34 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
}
.width_num {
display: inline-block;
vertical-align: middle;
min-width: 30px;
background-color: #e56600;
font-size: 10px;
line-height: 16px;
color: #fff;
padding: 0 8px;
margin-left: 5px;
box-sizing: border-box;
border-radius: 8px;
text-align: center;
overflow: hidden;
}
.user_menu div:hover .width_num {
background-color: #fcefd6;
color: #e56600;
}
.has_msg {
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #e56600;
position: absolute;
top: 23px;
left: 15px;
}
</style>
<style>
.number .el-badge__content {
......
......@@ -9,6 +9,18 @@
placeholder="请输入消息模板名称/id"
></el-input>
</div>
<div class="filter_item" v-if="tpl_types.length > 1">
<span class="filter_title">模板类型:</span>
<el-select v-model="type" placeholder="请选择">
<el-option
v-for="item in tpl_types"
:label="item.name"
:value="item.value"
:key="item.value"
>
</el-option>
</el-select>
</div>
<div class="filter_item">
<span class="filter_title">最后更新时间:</span>
<el-date-picker
......@@ -127,6 +139,10 @@ export default {
type: Boolean,
defailt: false,
},
tmpTypes: {
type: Array,
defailt: [],
},
},
data() {
return {
......@@ -138,6 +154,7 @@ export default {
pageSize: 10,
currentPage: 1,
keyword: "",
type: "",
updateTime: "",
types: [
{
......@@ -161,6 +178,7 @@ export default {
value: 4,
},
],
tpl_types: [],
detail: {
name: "",
tpl_type: "",
......@@ -234,12 +252,36 @@ export default {
},
];
if (this.tmpTypes.length > 0) {
let tpl_types = [];
this.types.forEach((item) => {
if (this.tmpTypes.indexOf(item.value) > -1) {
tpl_types.push(item);
}
});
if (this.tmpTypes.length > 1) {
tpl_types = [
{
name: "全部",
value: this.tmpTypes.join(","),
},
...tpl_types,
];
}
this.tpl_types = tpl_types;
this.type = tpl_types[0].value;
}
this.getTemplateList();
},
methods: {
getTemplateList() {
let params = {
page: this.currentPage,
tpl_type: this.type,
size: this.pageSize,
keyword: this.keyword,
update_time_s: (this.updateTime && this.updateTime[0]) || "",
......@@ -287,6 +329,7 @@ export default {
this.getTemplateList();
},
topFilterAction() {
this.currentPage = 1;
this.getTemplateList();
},
topFilterClear() {
......@@ -358,7 +401,7 @@ export default {
...this.selected,
content: this.detail.content,
});
this.$refs.dialog.hide();
},
},
......
......@@ -3,7 +3,11 @@
<div class="order_cell_head">
<div class="application_time">申请时间:{{ helper.dateStringTransform(cellItem.add_time) }}</div>
<div class="order_number">订单编号:{{ cellItem.order_id }}</div>
<div class="cell_del_btn" @click="delOrder(cellItem.order_id)">删除</div>
<div
v-if="cellItem.approval_first_level == -1 || cellItem.approval_second_level != 0 || cellItem.pay_status == -1"
class="cell_del_btn"
@click="delOrder(cellItem.order_id)"
>删除</div>
</div>
<el-row class="cell_row">
<el-col :span="10" class="cell_msg">
......@@ -23,7 +27,7 @@
<div class="cell_msg_other">
<div
class="cell_type"
>{{ cellItem.order_type != 3 ? cellItem.sector : cellItem.namespace }}</div>
>{{ cellItem.order_type == 1 ? cellItem.sector : cellItem.order_type == 2 ? cellItem.app_type : cellItem.namespace }}</div>
<div
v-if="cellItem.order_type != 3"
class="cell_creator"
......@@ -122,6 +126,11 @@
class="cell_option_spec"
@click="nextApply"
>再次申请</div>
<div
v-if="(cellItem.approval_first_level == 0 && cellItem.pay_status != -1) || (cellItem.approval_first_level == 1 && cellItem.approval_second_level == 0 && cellItem.pay_status != -1)"
class="cell_option_spec"
@click="cancelDetail"
>取消申请</div>
</div>
</el-col>
<el-collapse-transition>
......@@ -153,8 +162,8 @@ export default {
default: () => {
{
}
}
}
},
},
},
data: () => ({
visible: false,
......@@ -163,14 +172,14 @@ export default {
textarea: "",
showMsgBox: false,
helper: helper,
message: {}
message: {},
}),
methods: {
addEvaluation() {
if (this.textarea == "" && this.serviceRate == null) {
this.$message({
message: "请先完善评价内容",
type: "error"
type: "error",
});
} else {
if (this.cellItem.order_type == 1) {
......@@ -178,20 +187,20 @@ export default {
service_id: this.cellItem.service_id,
content: this.textarea,
score: this.serviceRate,
apply_id: this.cellItem.apply_id
apply_id: this.cellItem.apply_id,
};
this.$api.user.addServiceEvaluation(query).then(response => {
this.$api.user.addServiceEvaluation(query).then((response) => {
if (response.data.success == 1) {
this.$message({
message: "评价订单成功",
type: "success"
type: "success",
});
this.visible = false;
this.$emit("updateList");
} else {
this.$message({
message: "评价订单失败",
type: "error"
type: "error",
});
}
});
......@@ -200,20 +209,20 @@ export default {
app: this.cellItem.app_id,
content: this.textarea,
score: this.serviceRate,
apply_id: this.cellItem.apply_id
apply_id: this.cellItem.apply_id,
};
this.$api.user.addServiceEvaluation(query).then(response => {
this.$api.user.addServiceEvaluation(query).then((response) => {
if (response.data.success == 1) {
this.$message({
message: "评价订单成功",
type: "success"
type: "success",
});
this.visible = false;
this.$emit("updateList");
} else {
this.$message({
message: "评价订单失败",
type: "error"
type: "error",
});
}
});
......@@ -224,20 +233,22 @@ export default {
this.$router.push("/user/order_detail/" + val);
},
delOrder() {
this.$api.user.delOrder({ id: this.cellItem.order_id }).then(response => {
if (response.data.success == 1) {
this.$message({
message: "删除订单成功",
type: "success"
});
this.$emit("updateList");
} else {
this.$message({
message: "删除订单失败",
type: "error"
});
}
});
this.$api.user
.delOrder({ id: this.cellItem.order_id })
.then((response) => {
if (response.data.success == 1) {
this.$message({
message: "删除订单成功",
type: "success",
});
this.$emit("updateList");
} else {
this.$message({
message: "删除订单失败",
type: "error",
});
}
});
},
nextApply() {
let query = {};
......@@ -246,26 +257,26 @@ export default {
service_id: parseFloat(this.cellItem.service_id),
spec_id: this.cellItem.svc_spec_id,
duration: this.cellItem.duration,
duration_unit: this.cellItem.duration_unit
duration_unit: this.cellItem.duration_unit,
};
this.$router.push({
path: "/shop/shop_car_apply",
query: query
query: query,
});
} else if (this.cellItem.order_type == 2) {
query = {
app_id: parseFloat(this.cellItem.app_id),
spec_id: this.cellItem.spec_app,
duration: this.cellItem.duration,
duration_unit: this.cellItem.duration_unit
duration_unit: this.cellItem.duration_unit,
};
this.$router.push({
path: "/shop/shop_car_apply",
query: query
query: query,
});
} else if (this.cellItem.order_type == 2) {
this.$router.push({
path: "/shop/shop_cloud"
path: "/shop/shop_cloud",
});
}
},
......@@ -273,34 +284,52 @@ export default {
if (this.cellItem.order_type == 1) {
this.$api.user
.getServiceEvaluation({ apply_id: this.cellItem.apply_id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.message = response.data.data;
this.showMsgBox = true;
} else {
this.$message({
message: "获取评价失败",
type: "error"
type: "error",
});
}
});
} else if (this.cellItem.order_type == 2) {
this.$api.user
.getAppEvaluation({ apply_id: this.cellItem.apply_id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.message = response.data.data;
this.showMsgBox = true;
} else {
this.$message({
message: "获取评价失败",
type: "error"
type: "error",
});
}
});
}
}
}
},
cancelDetail() {
this.$api.user
.cancelOrder({ order_id: this.cellItem.order_id })
.then((response) => {
if (response.data.success == 1) {
this.$message({
message: "取消订单成功",
type: "success",
});
this.$emit("updateList");
} else {
this.$message({
message: "取消订单失败",
type: "error",
});
}
});
},
},
};
</script>
......
......@@ -2,77 +2,117 @@
<div class="info_logo">
<div class="logo">
<img :src="data.url" alt="" />
<map-view v-if="data.isMap" :id="data.portal_id"></map-view>
</div>
<div class="info">
<p class="info_title">
<span>{{ data.name }}</span>
<span class="bs" v-if="data.aqdetail" @click="subevent(0)"
>一键部署</span
>
<span class="info_fix" v-if="data.fxdetail" @click="subevent(1)"
>我要编辑</span
>
<span class="info_fix" v-if="data.yydebugger" @click="subevent(5)"
>应用调试</span
<span
class="info_fix"
v-if="data.fixed_process"
@click="goto_page(data.fixedurl)"
>
我要编辑
</span>
<span class="bs" v-if="data.aqdetail" @click="subevent(0)">
一键部署
</span>
<span class="info_fix" v-if="data.fxdetail" @click="subevent(1)">
我要编辑
</span>
<span class="info_fix" v-if="data.yydebugger" @click="subevent(5)">
应用调试
</span>
<span
class="right gap"
v-if="data.yydetail || data.xxdetail || data.yydev"
>|</span
v-if="data.yydetail || data.xxdetail || data.yydev||data.public||data.unpublic||data.undeploy||data.deploy"
>
|
</span>
<span
class="right underline"
v-if="data.xxdetail"
@click="subevent(2,get_strd(data.xxdetail)[0])"
:style="get_strd(data.xxdetail)[0]?{backgroundColor:'#ccc',color:'#e6ebfe'}:''"
:title="get_strd(data.xxdetail)[1]=='申请下线'?'申请下线至开发者应用':'申请上线至平台应用'"
>{{ get_strd(data.xxdetail)[1] }}</span
@click="subevent(2, get_strd(data.xxdetail)[0])"
:style="
get_strd(data.xxdetail)[0]
? { backgroundColor: '#ccc', color: '#e6ebfe' }
: ''
"
:title="
get_strd(data.xxdetail)[1] == '申请下线'
? '申请下线至开发者应用'
: '申请上线至平台应用'
"
>
{{ get_strd(data.xxdetail)[1] }}
</span>
<span
class="right undersell"
v-if="data.yydetail"
:style="get_strd(data.yydetail)[0]?{backgroundColor:'#ccc',color:'#e6ebfe'}:''"
@click="subevent(3,get_strd(data.yydetail)[0])"
>{{ get_strd(data.yydetail)[1] }}</span
:style="
get_strd(data.yydetail)[0]
? { backgroundColor: '#ccc', color: '#e6ebfe' }
: ''
"
@click="subevent(3, get_strd(data.yydetail)[0])"
>
{{ get_strd(data.yydetail)[1] }}
</span>
<span
class="right undersell undermy"
v-if="data.bsdetail"
@click="subevent(4)"
>申请密钥</span
>
申请密钥
</span>
<span
class="info_fix"
v-if="data.fixed"
@click="goto_page(data.fixedurl)"
>我要修改</span
>
<span class="info_fix" v-if="data.yydev" @click="subevent(6)"
>应用开发</span
>
我要修改
</span>
<span class="right undersell" v-if="data.deploy" @click="subevent(10)">
部署
</span>
<span class="right undersell1" v-if="data.undeploy" @click="subevent(9)">
取消部署
</span>
<span class="right undersell" v-if="data.public" @click="subevent(8)">
发布
</span>
<span class="right undersell1" v-if="data.unpublic" @click="subevent(7)">
取消发布
</span>
<span class="info_fix" v-if="data.yydev" @click="subevent(6)">
应用开发
</span>
</p>
<div class="info_detail">
<p>
<label v-for="(item, index) in data.first" :key="index + 2000"
>{{ item.name }}:
<span :style="item.color ? { color: item.color } : {}">{{
item.text
}}</span>
<label v-for="(item, index) in data.first" :key="index + 2000">
{{ item.name }}:
<span :style="item.color ? { color: item.color } : {}">
{{ item.text }}
</span>
</label>
</p>
<p>
<label v-for="(item, index) in data.second" :key="index + 2500"
>{{ item.name }}:
<label v-for="(item, index) in data.second" :key="index + 2500">
{{ item.name }}:
<a
v-if="item.name.indexOf('地址') !== -1"
style="color:#515fe7;text-decoration: none;"
target="_blank"
:href="item.text"
>{{ item.text }}</a
>
<span v-else :style="item.color ? { color: item.color } : {}">{{
item.text
}}</span>
{{ item.text }}
</a>
<span v-else :style="item.color ? { color: item.color } : {}">
{{ item.text }}
</span>
</label>
</p>
</div>
......@@ -81,54 +121,58 @@
</template>
<script>
import MapView from "./service-info/map-view";
export default {
props: ["data"],
components: {},
components: { MapView },
data() {
return {};
},
watch: {},
computed: {},
created() {
console.log(this.data.url);
console.log(this.data);
},
mounted() {},
methods: {
get_strd(str){
if(str){
if(str.indexOf('d')!==-1){
return [true,str.substr(0,str.length-1)]
}else {
return [false,str]
get_strd(str) {
if (str) {
if (str.indexOf("d") !== -1) {
return [true, str.substr(0, str.length - 1)];
} else {
return [false, str];
}
}
},
subevent(val,flag=false){
if(flag){
return
}
if(val == 0){
// this.$emit('deploy',this.data)
this.$router.push(`/yygl/${this.$route.params.level}/${this.$route.params.type}/deployment/${this.$route.params.id}?source=${this.$route.query.source}`)
console.log(this.$route);
}else if(val == 1){
this.$emit('editapp')
}else if(val == 2){
this.$emit('unline',this.data)
}else if(val == 3){
this.$emit('unsell',this.data)
}else if(val == 4){
this.$emit('applymy')
}else if(val == 5){
// /yygl/:level/:type/appdebugger/:deploy_id
this.$emit('debuggerfunc')
}else if(val == 6){
this.$emit('applymy')
}
},
goto_page(url){
this.$router.push(url)
subevent(val, flag = false) {
if (flag) {
return;
}
if (val == 0) {
// this.$emit('deploy',this.data)
this.$router.push(
`/yygl/${this.$route.params.level}/${this.$route.params.type}/deployment/${this.$route.params.id}?source=${this.$route.query.source}`
);
console.log(this.$route);
} else if (val == 1) {
this.$emit("editapp");
} else if (val == 2) {
this.$emit("unline", this.data);
} else if (val == 3) {
this.$emit("unsell", this.data);
} else if (val == 4) {
this.$emit("applymy");
} else if (val == 5) {
// /yygl/:level/:type/appdebugger/:deploy_id
this.$emit("debuggerfunc");
} else if (val == 6) {
this.$emit("applymy");
}
},
goto_page(url) {
this.$router.push(url);
},
},
};
</script>
......@@ -147,10 +191,16 @@ export default {
margin-right: 13px;
background-size: cover;
text-align: center;
position: relative;
}
.logo img {
width: 100%;
}
.logo > .map_view {
position: absolute;
right: 0;
bottom: 0;
}
.info {
float: left;
width: calc(100% - 157px);
......@@ -209,7 +259,7 @@ export default {
text-align: center;
margin-left: 10px;
}
.undersell {
.undersell,.undersell1 {
width: 76px;
height: 32px;
background-color: #0f2683;
......@@ -221,6 +271,11 @@ export default {
cursor: pointer;
text-align: center;
}
.undersell1{
color: #0f2683;
background-color: #e6ebfe;
margin-left: 10px;
}
.undermy {
background-color: #515fe7;
color: #e6ebfe;
......
<template>
<div class="map_view">
<a class="map_view_action" href="#" @click.prevent.stop="viewAction">
<img :src="require('../../assets/imgs/ic_yulan.png')" />
</a>
<transition name="mask-bg-fade">
<el-dialog
class="map_view_dialog"
title="预览"
width="1200px"
:visible.sync="showDialog"
:before-close="beforeClose"
>
<div class="map_view_container">
<iframe v-if="src" :src="src" frameborder="0"></iframe>
</div>
</el-dialog>
</transition>
</div>
</template>
<script>
const gisServiceUrl = window.serviceConfig.gisServiceRoot;
export default {
name: "map-view",
data: () => ({
showDialog: false,
src: "",
}),
props: {
id: {
type: [String, Number],
required: true,
},
},
methods: {
viewAction() {
this.src = gisServiceUrl + `/portal/apaasplat/viewer/previewMap.html?id=${this.id}`;
this.showDialog = true;
},
beforeClose(done) {
this.src = "";
done();
},
},
};
</script>
<style scoped>
.map_view_action {
display: flex;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
padding: 10px 0 0 10px;
box-sizing: border-box;
border-top-left-radius: 40px;
background-color: #8f93a1;
}
.map_view_container {
height: 666px;
}
.map_view_container > iframe {
display: block;
width: 100%;
height: 100%;
}
</style>
<style>
.map_view_dialog .el-dialog {
overflow: hidden;
}
.map_view_dialog .el-dialog__header {
padding: 18px 20px 17px;
border-bottom: 1px solid #edf0ff;
text-align: left;
}
.map_view_dialog .el-dialog__body {
padding: 0;
}
</style>
......@@ -19,6 +19,10 @@
<div class="main_container">
<div class="main_container-left" v-if="data.cover">
<img :src="data.cover" width="100%" />
<map-view
v-if="data.type === 'Map Service'"
:id="data.portal_id"
></map-view>
</div>
<div class="main_container-right">
<ul class="service_base_info">
......@@ -118,8 +122,12 @@
<script>
import helper from "@/services/helper.js";
import MapView from "./map-view";
export default {
components: {
MapView,
},
props: {
data: {
type: Object,
......@@ -272,10 +280,16 @@ export default {
background-color: #f9fafc;
margin-right: 30px;
font-size: 0;
position: relative;
}
.main_container-left img {
width: 100%;
}
.main_container-left > .map_view {
position: absolute;
right: 3px;
bottom: 3px;
}
.main_container-right {
flex-grow: 1;
}
......
<template>
<div class="com_card">
<div class="com_card_top">
<img
:src="cellData.logo"
class="com_card_img"
/>
<img :src="cellData.logo" class="com_card_img" />
<div class="com_card_name_v">
<div class="com_card_msg_name">{{ cellData.app_name }}</div>
<div class="com_card_msg_version">V{{ cellData.version }}</div>
......@@ -35,10 +32,10 @@ export default {
components: {},
props: {
url: { type: String, default: "" },
cellData: { type: Object, default: {} }
cellData: { type: Object, default: {} },
},
data: () => ({
helper: helper
helper: helper,
}),
computed: {},
watch: {},
......@@ -48,9 +45,40 @@ export default {
this.$router.push(this.url + "/" + parame);
}
},
addShop(id) {}
addShop(id) {
let query = {
service_id: 0, // 0表示不是服务
app_id: parseFloat(id),
spec_id: 1,
duration: 1,
duration_method: 1,
is_subscribe: 0, // 是否订阅
};
this.$api.serviceShop
.addShoppingCart()
.then(({ data }) => {
if (data.success == 1) {
this.$message({
message: data.errMsg,
type: "success",
});
this.$store.commit("setMenuCartState");
} else {
this.$message({
message: data.errMsg,
type: "warning",
});
}
})
.catch((error) => {
this.$message({
message: `添加购物车失败`,
type: "warning",
});
});
},
},
mounted() {}
mounted() {},
};
</script>
......
......@@ -9,9 +9,11 @@
<div>
<div class="head_flex">
<el-breadcrumb separator="/" class="bread_crumb1 bread_left">
<el-breadcrumb-item :to="{ path: '/shop' }">{{
<el-breadcrumb-item :to="{ path: '/shop' }">
{{
$t("lang.service_shop")
}}</el-breadcrumb-item>
}}
</el-breadcrumb-item>
<el-breadcrumb-item>{{ name }}</el-breadcrumb-item>
</el-breadcrumb>
<div class="input_right">
......@@ -26,11 +28,7 @@
<block-radius>
<!-- filter -->
<div v-if="urlFilter" class="classification">
<div
v-for="(item, index) in filterLists"
:key="'cd' + index"
class="classification_line"
>
<div v-for="(item, index) in filterLists" :key="'cd' + index" class="classification_line">
<div
class="classification_line_if"
v-if="item.childDomains && item.childDomains.length != 0"
......@@ -60,8 +58,7 @@
? 'classification_act'
: ''
"
>全部</span
>
>全部</span>
</div>
</li>
<li
......@@ -83,8 +80,7 @@
? 'classification_act'
: ''
"
>{{ items.name }}</span
>
>{{ items.name }}</span>
<!-- if item have children, we will use an arrow to prompt -->
<i
v-if="
......@@ -120,14 +116,8 @@
>
<span v-if="openList[index] == 'down'">收起</span>
<span v-if="openList[index] == 'up'">展开</span>
<i
v-if="openList[index] == 'down'"
class="el-icon-caret-top"
></i>
<i
v-if="openList[index] == 'up'"
class="el-icon-caret-bottom"
></i>
<i v-if="openList[index] == 'down'" class="el-icon-caret-top"></i>
<i v-if="openList[index] == 'up'" class="el-icon-caret-bottom"></i>
</div>
</div>
<!-- filter children -->
......@@ -155,8 +145,7 @@
? 'classification_act'
: ''
"
>{{ itemChildren.name }}</span
>
>{{ itemChildren.name }}</span>
</div>
</li>
</ul>
......@@ -181,12 +170,9 @@
size="small"
:class="index == activeBtn ? 'button_filter_act' : 'button_filter'"
@click="clickButtonFilter(index)"
>{{ item.name }}</el-button
>
>{{ item.name }}</el-button>
<div v-if="urlFilter == 'app'" class="btn_right_check">
<el-checkbox v-model="couldTwice" @change="changeTwice"
>支持二次开发</el-checkbox
>
<el-checkbox v-model="couldTwice" @change="changeTwice">支持二次开发</el-checkbox>
</div>
</div>
<!-- the list -->
......@@ -441,7 +427,9 @@ export default {
let list = this.filterLists;
for (let i = 0; i < list.length; i++) {
if (list[i].childDomains.length != 0) {
let offHeight = Math.ceil(document.getElementById(list[i].id).offsetHeight);
let offHeight = Math.ceil(
document.getElementById(list[i].id).offsetHeight
);
if (offHeight > 60) {
list[i].showOpen = true;
this.openList[i] = "up";
......@@ -669,11 +657,26 @@ export default {
.button_filter {
background-color: #e6eefe;
color: #626de9;
font-size: 10px;
border: 1px solid #e6eefe;
font-size: 12px;
}
.button_filter:hover {
border: 1px solid rgb(198, 226, 255);
}
.button_filter:focus {
border: 1px solid rgb(58, 142, 230);
}
.button_filter_act {
background-color: #515fe7;
border: 1px solid #515fe7;
color: #f8f9fd;
font-size: 12px;
}
.button_filter_act:hover {
border: 1px solid #414fd7;
}
.button_filter_act:focus {
border: 1px solid #313fc7;
}
.btn_group {
margin-bottom: 15px;
......
......@@ -119,7 +119,7 @@ export default {
.service_shop_menu_list > li {
padding: 16px 10px 8px 22px;
border-left: 5px solid #0d1847;
font-size: 16px;
font-size: 15px;
line-height: 24px;
cursor: pointer;
}
......
......@@ -91,6 +91,7 @@ export default {
margin-bottom: 3px;
}
.detail-item .detail-text {
word-break: break-all;
font-size: 14px;
line-height: 25px;
color: #242c43;
......
......@@ -180,4 +180,7 @@ export default {
.service_info_tab .detail-list .el-table__row:nth-child(odd) td {
background-color: #fff;
}
.service_info_tab.el-tabs--border-card > .el-tabs__header .el-tabs__item:hover {
color: #e56600;
}
</style>
......@@ -48,7 +48,8 @@ export default {
},
rules: {
preson: [
{ required: true, message: "请输入部门联系人", trigger: "blur" }
{ required: true, message: "请输入部门联系人", trigger: "blur" },
{max:16, message: "不能超过16个字符", trigger: "blur" }
],
phone: [
{ required: true, message: "请输入联系电话", trigger: "blur" },
......
......@@ -53,7 +53,7 @@
</div>
<p class="inputtitle">应用场景:</p>
<div class="system">
<el-input v-model="sceneinput" placeholder="请填写申请服务的应用场景"></el-input>
<el-input maxlength="400" show-word-limit v-model="sceneinput" placeholder="请填写申请服务的应用场景"></el-input>
</div>
<p
class="inputtitle degr"
......
......@@ -4,41 +4,58 @@
<img :src="data.cover" width="100%" />
</div>
<div class="shop_card-top">
<p class="shop_card-title text_clip_2" v-text="data.name" :title="data.name"></p>
<p
class="shop_card-title text_clip_2"
v-text="data.name"
:title="data.name"
></p>
<p class="shop_card-text under_text">
<span class="text_clip" v-text="data.department_name" :title="data.department_name"></span>
<span
class="text_clip"
v-text="data.department_name"
:title="data.department_name"
></span>
<span>
<el-rate
v-model="data.score"
disabled
show-score
text-color="#ea7d19"
score-template="{value}"
></el-rate>
<img :src="require('../assets/imgs/shop_ic_star.png')" />
<span v-text="data.score"></span>
</span>
</p>
</div>
<div class="shop_card-bottom">
<p class="shop_card-text summary text_clip_2" v-if="data.resourceSummary">
<span v-text="data.resourceSummary"></span>
<p class="shop_card-text summary text_clip_2" v-if="data.descript">
<span v-text="data.descript"></span>
</p>
<p class="shop_card-text update_time">
<img :src="require('@/assets/imgs/icon_shijian.png')" style="margin-right: 5px;" />
<span class="text_clip" v-text="'更新时间:' + helper.dateStringTransform(data.update_date)"></span>
<img
:src="require('@/assets/imgs/shop_ic_updatetime.png')"
style="margin-right: 5px;"
/>
<span
class="text_clip"
v-text="'更新时间:' + helper.dateStringTransform(data.update_date)"
></span>
</p>
<div class="shop_card-text access">
<span>
<img :src="require('@/assets/imgs/icon_liulan.png')" />
<img :src="require('@/assets/imgs/shop_icon_liulan.png')" />
<span
class="text_clip"
v-text="helper.numberFormat(data.view_count, 2) + (data.view_count > 10000 ? '万' : '') + '次浏览'"
v-text="
helper.numberFormat(data.view_count, 2) +
(data.view_count > 10000 ? '万' : '') +
'次浏览'
"
></span>
</span>
<span>
<img :src="require('@/assets/imgs/icon_huoqu1.png')" />
<img :src="require('@/assets/imgs/shop_ic_huoqu.png')" />
<span
class="text_clip"
v-text="helper.numberFormat(data.apply_count, 2) + (data.apply_count > 10000 ? '万' : '') + '次获取'"
v-text="
helper.numberFormat(data.apply_count, 2) +
(data.apply_count > 10000 ? '万' : '') +
'次获取'
"
></span>
</span>
</div>
......@@ -52,27 +69,27 @@ export default {
props: {
data: {
type: Object,
default: () => {}
default: () => {},
},
detailPath: {
type: String,
required: true
required: true,
},
showImg: {
type: Boolean,
default: false
}
default: false,
},
},
data() {
return {
helper
helper,
};
},
methods: {
intoDetail() {
this.$router.push(this.detailPath + this.data.id);
}
}
},
},
};
</script>
......@@ -101,7 +118,6 @@ export default {
.shop_card-title {
height: 42px;
font-size: 16px;
font-weight: bold;
color: #0d1847;
line-height: 21px;
cursor: pointer;
......@@ -116,16 +132,11 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
color: #58617a;
}
.shop_card-text.under_text > span:nth-child(2) {
flex-shrink: 0;
margin-left: 10px;
}
.shop_card-text.under_text > span:nth-child(2) > i {
font-size: 20px;
color: #fac266;
}
.shop_card-text.under_text > span:nth-child(2) > span {
font-family: Arial;
font-size: 18px;
font-weight: bold;
......@@ -152,9 +163,9 @@ export default {
align-items: center;
padding-top: 11px;
border-top: 1px solid #ededed;
color: #58617a;
}
.shop_card-text.access > span > * {
width: 15px;
vertical-align: middle;
}
.shop_card-text.access > span > img {
......
......@@ -2,14 +2,16 @@
<div class="shop_list">
<h3 class="shop_list-title">
<span v-text="name"></span>
<a @click.prevent="goto" :style="{ cursor: to ? 'pointer' : 'text' }">
<i class="el-icon-arrow-right"></i>
</a>
<a @click.prevent="goto" :style="{ cursor: to ? 'pointer' : 'text' }"></a>
</h3>
<ul class="shop_cards">
<li v-for="(item, index) in data" :key="'card_' + index">
<shop-card :data="item" :showImg="showImg" :detail-path="detailPath"></shop-card>
<shop-card
:data="item"
:showImg="showImg"
:detail-path="detailPath"
></shop-card>
</li>
</ul>
</div>
......@@ -20,37 +22,37 @@ import shopCard from "./shop-card";
export default {
components: {
shopCard
shopCard,
},
props: {
name: {
type: String,
required: true
required: true,
},
to: {
type: String,
required: true
required: true,
},
detailPath: {
type: String,
required: true
required: true,
},
data: {
type: Array,
default: () => []
default: () => [],
},
showImg: {
type: Boolean,
default: false
}
default: false,
},
},
methods: {
goto() {
if (this.to) {
this.$router.push(this.to);
}
}
}
},
},
};
</script>
......@@ -59,26 +61,25 @@ export default {
margin: 13px 20px;
}
.shop_list-title > span {
display: inline-block;
vertical-align: middle;
font-size: 18px;
font-weight: bold;
color: #0d1847;
line-height: 27px;
}
.shop_list-title > a {
display: inline-flex;
justify-content: center;
align-items: center;
display: inline-block;
vertical-align: middle;
background-image: url("../assets/imgs/home_btn_enter.png");
width: 28px;
height: 28px;
background-color: #fff;
border: 1px solid #edeff6;
border-radius: 5px;
overflow: hidden;
margin-left: 10px;
background-size: 100%;
vertical-align: -9px;
margin-left: 5px;
}
.shop_list-title > a > i {
font-weight: bolder;
color: #1e3595;
.shop_list-title > a:hover {
background-image: url("../assets/imgs/home_btn_enter_hov.png");
}
.shop_cards {
display: flex;
......
......@@ -200,6 +200,7 @@
{{ scope.row[item.prop] }}
</span>
<!-- others -->
<span v-else-if="item.type === 'click'" style="cursor: pointer;" @click="gotopage(item.url,scope.row[item.prop][item.id])">{{ scope.row[item.prop] }}</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
</el-table-column>
......@@ -458,6 +459,9 @@ export default {
}
});
},
gotopage(url,id){
this.$router.push(`/fwgl/0/0/servicedetail/${id}`)
},
//本地删除
deleteLocal(val) {
this.selectedTabsPage.splice(val.$index, 1);
......
<template>
<div>
<div class="super-flow-demo1">
<div class="node-container">
<p class="label_head">节点类型</p>
<p class="label_explanation">请拖拽添加到流程中</p>
<el-input-number v-model="scale_num" @change="handleChange" :step="10" :step-strictly="true" :min="50" :max="150" label="描述文字"></el-input-number>
<span class="node-item" v-for="(item, index) in nodeItemList" :key="index" @mousedown="evt => nodeItemMouseDown(evt, item.value)">{{item.label}}</span>
</div>
<div class="flow-container" :class="`scale${scale_num}`" ref="flowContainer">
<super-flow ref="superFlow" :node-list="nodeList" :link-list="linkList" :link-menu="linkMenu" :link-base-style="linkBaseStyle" :link-style="linkStyle" :link-desc="linkDesc" :origin="origin">
<template v-slot:node="{meta}">
<div :class="{'flow-node-begin': meta.type == 0, 'flow-node-end': meta.type == 1, 'flow-node-default': meta.type == 2}" :id="meta.id">
<div @click="clickItem(meta)">
{{meta.name}}
</div>
</div>
</template>
</super-flow>
</div>
</div>
</div>
</template>
<script>
const drawerType = {
node: 0,
link: 1
};
export default {
data() {
return {
scale_num: 100,
origin: [0, 0],
nodeList: [],
linkList: [],
drawerType,
drawerConf: {
title: "",
visible: false,
type: null,
info: null,
open: (type, info) => {
const conf = this.drawerConf;
conf.visible = true;
conf.type = type;
conf.info = info;
if (conf.type === drawerType.node) {
conf.title = "节点";
if (this.$refs.nodeSetting) this.$refs.nodeSetting.resetFields();
this.$set(this.nodeSetting, "name", info.meta.name);
this.$set(this.nodeSetting, "desc", info.meta.desc);
} else {
conf.title = "连线";
if (this.$refs.linkSetting) this.$refs.linkSetting.resetFields();
this.$set(
this.linkSetting,
"desc",
info.meta ? info.meta.desc : ""
);
}
},
cancel: () => {
this.drawerConf.visible = false;
if (this.drawerConf.type === drawerType.node) {
this.$refs.nodeSetting.clearValidate();
} else {
this.$refs.linkSetting.clearValidate();
}
}
},
linkSetting: {
desc: ""
},
nodeSetting: {
name: "",
desc: ""
},
dragConf: {
isDown: false,
isMove: false,
offsetTop: 0,
offsetLeft: 0,
clientX: 0,
clientY: 0,
ele: null,
info: null
},
nodeItemList: [
{
label: "开始",
value: {
width: 120,
height: 40,
meta: {
label: "开始开始开始开始开始",
name: "开始开始开始开始开始",
type: 0
}
}
},
{
label: "结束",
value: {
width: 120,
height: 40,
meta: {
label: "结束",
name: "结束",
type: 1
}
}
},
{
label: "普通节点",
value: {
width: 120,
height: 40,
meta: {
label: "普通节点",
name: "普通节点",
type: 2
}
}
}
],
linkMenu: [
[
{
label: "删除",
selected: link => {
console.log(link);
link.remove();
}
},
{
label: "编辑",
selected: link => {
this.drawerConf.open(drawerType.link, link);
}
}
]
],
linkBaseStyle: {
color: "#666666", // line 颜色
hover: "#FF0000", // line hover 的颜色
textColor: "#666666", // line 描述文字颜色
textHover: "#FF0000", // line 描述文字 hover 颜色
font: "14px Arial", // line 描述文字 字体设置 参考 canvas font
dotted: false, // 是否是虚线
lineDash: [4, 4], // 虚线时生效
background: "rgba(255,255,255,0.6)" // 描述文字背景色
}
};
},
mounted() {
document.addEventListener("mousemove", this.docMousemove);
document.addEventListener("mouseup", this.docMouseup);
this.$once("hook:beforeDestroy", () => {
document.removeEventListener("mousemove", this.docMousemove);
document.removeEventListener("mouseup", this.docMouseup);
});
},
methods: {
linkStyle(link) {
return {
// hover: '#FF00FF'
};
},
linkDesc(link) {
return link.meta ? link.meta.desc : "";
},
docMousemove({ clientX, clientY }) {
const conf = this.dragConf;
if (conf.isMove) {
conf.ele.style.top = clientY - conf.offsetTop + "px";
conf.ele.style.left = clientX - conf.offsetLeft + "px";
} else if (conf.isDown) {
// 鼠标移动量大于 5 时 移动状态生效
conf.isMove =
Math.abs(clientX - conf.clientX) > 5 ||
Math.abs(clientY - conf.clientY) > 5;
}
},
docMouseup({ clientX, clientY }) {
const conf = this.dragConf;
conf.isDown = false;
if (conf.isMove) {
const {
top,
right,
bottom,
left
} = this.$refs.flowContainer.getBoundingClientRect();
// 判断鼠标是否进入 flow container
if (
clientX > left &&
clientX < right &&
clientY > top &&
clientY < bottom
) {
} else if (clientX <= left) {
clientX = left;
} else if (clientX >= right) {
clientX = right;
} else if (clientY <= top) {
clientY = top;
} else if (clientY >= bottom) {
clientY = bottom;
}
// 获取拖动元素左上角相对 super flow 区域原点坐标
const coordinate = this.$refs.superFlow.getMouseCoordinate(
clientX - conf.offsetLeft,
clientY - conf.offsetTop
);
// 添加节点
this.$refs.superFlow.addNode({
coordinate,
...conf.info
});
conf.isMove = false;
}
if (conf.ele) {
conf.ele.remove();
conf.ele = null;
}
},
nodeItemMouseDown(evt, info) {
info.meta.id = parseInt(Math.random() * 1000 * 1000);
const { clientX, clientY, currentTarget } = evt;
const { top, left } = evt.currentTarget.getBoundingClientRect();
const conf = this.dragConf;
const ele = currentTarget.cloneNode(true);
Object.assign(this.dragConf, {
offsetLeft: clientX - left,
offsetTop: clientY - top,
clientX: clientX,
clientY: clientY,
info,
ele,
isDown: true
});
ele.style.position = "fixed";
ele.style.margin = "0";
ele.style.top = clientY - conf.offsetTop + "px";
ele.style.left = clientX - conf.offsetLeft + "px";
this.$el.appendChild(this.dragConf.ele);
},
clickItem(item) {
console.log(item);
},
getData() {
return this.$refs.superFlow.toJSON();
},
handleChange() {}
}
};
</script>
<style lang="less">
.link-base-style-form {
.el-form-item {
margin-bottom: 12px;
}
padding-bottom: 20px;
border-bottom: 1px solid #dcdcdc;
}
.super-flow-demo1 {
margin-top: 20px;
width: 100%;
height: 800px;
background-color: #f5f5f5;
@list-width: 200px;
position: relative;
> .node-container {
width: @list-width;
position: absolute;
z-index: 2;
left: 0;
height: 400px;
text-align: center;
background-color: #ffffff;
.label_head {
font-weight: bold;
font-size: 18px;
text-align: center;
padding: 20px 0;
}
.label_explanation {
font-size: 16px;
text-align: center;
padding-bottom: 5px;
}
}
> .flow-container {
width: 100%;
float: left;
height: 100%;
overflow: hidden;
}
.super-flow__node {
box-shadow: none;
border: none;
background-color: transparent;
border-radius: 8px;
&:focus {
box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.8);
}
.flow-node-begin {
width: 100%;
height: 100%;
line-height: 36px;
padding: 0 6px;
font-size: 12px;
text-align: center;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 8px;
border: 2px solid #444;
}
.flow-node-end {
width: 100%;
line-height: 36px;
padding: 0 6px;
font-size: 12px;
text-align: center;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 8px;
border: 2px solid #f80;
}
.flow-node-default {
width: 100%;
line-height: 36px;
padding: 0 6px;
font-size: 12px;
text-align: center;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 8px;
border: 2px solid #3a9;
}
}
}
.node-item {
@node-item-height: 30px;
font-size: 14px;
display: inline-block;
height: @node-item-height;
width: 120px;
margin-top: 20px;
background-color: #ffffff;
line-height: @node-item-height;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.3);
cursor: pointer;
user-select: none;
text-align: center;
z-index: 6;
&:hover {
box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.4);
}
}
</style>
<style scoped>
.scale60 {
transform: scale(0.6, 0.6);
}
.scale70 {
transform: scale(0.7, 0.7);
}
.scale80 {
transform: scale(0.8, 0.8);
}
.scale90 {
transform: scale(0.9, 0.9);
}
.scale100 {
transform: scale(1, 1);
}
</style>
\ No newline at end of file
<template>
<div class="topo_inner">
<div id="container" ref="conCav" class="canvas"></div>
</div>
</template>
<script>
import G6 from "@antv/g6";
export default {
props: {
datas: {
type: Object,
default: () => {
return {
nodes: [],
edges: [],
};
},
},
namespace: String,
},
data: () => {
return {
options: [
{
value: "default",
label: "default",
},
{
value: "addNode",
label: "addNode",
},
{
value: "addEdge",
label: "addEdge",
},
],
value: "",
graph: null,
};
},
mounted() {
this.getCav();
},
watch: {
datas(val) {},
},
methods: {
getCav() {
/**
* 该案例演示切换交互模式,在不同模式下实现拖动节点、增加节点、增加边的交互行为。
*/
let addedCount = 0;
// Register a custom behavior: add a node when user click the blank part of canvas
G6.registerBehavior("click-add-node", {
// Set the events and the corresponding responsing function for this behavior
getEvents() {
// The event is canvas:click, the responsing function is onClick
return {
"canvas:click": "onClick",
};
},
// Click event
onClick(ev) {
console.log(ev.canvasX, ev.canvasY);
const self = this;
const graph = self.graph;
// Add a new node
graph.addItem("node", {
x: ev.canvasX,
y: ev.canvasY,
id: `node-${addedCount}`, // Generate the unique id
});
addedCount++;
},
});
// Register a custom behavior: click two end nodes to add an edge
G6.registerBehavior("click-add-edge", {
// Set the events and the corresponding responsing function for this behavior
getEvents() {
return {
"node:click": "onClick", // The event is canvas:click, the responsing function is onClick
mousemove: "onMousemove", // The event is mousemove, the responsing function is onMousemove
"edge:click": "onEdgeClick", // The event is edge:click, the responsing function is onEdgeClick
};
},
// The responsing function for node:click defined in getEvents
onClick(ev) {
const self = this;
const node = ev.item;
const graph = self.graph;
// The position where the mouse clicks
const point = { x: ev.x, y: ev.y };
const model = node.getModel();
if (self.addingEdge && self.edge) {
graph.updateItem(self.edge, {
target: model.id,
});
self.edge = null;
self.addingEdge = false;
} else {
// Add anew edge, the end node is the current node user clicks
self.edge = graph.addItem("edge", {
source: model.id,
target: model.id,
});
self.addingEdge = true;
}
},
// The responsing function for mousemove defined in getEvents
onMousemove(ev) {
const self = this;
// The current position the mouse clicks
const point = { x: ev.x, y: ev.y };
if (self.addingEdge && self.edge) {
// Update the end node to the current node the mouse clicks
self.graph.updateItem(self.edge, {
target: point,
});
}
},
// The responsing function for edge:click defined in getEvents
onEdgeClick(ev) {
const self = this;
const currentEdge = ev.item;
if (self.addingEdge && self.edge === currentEdge) {
self.graph.removeItem(self.edge);
self.edge = null;
self.addingEdge = false;
}
},
});
// Initial data
const data = {
nodes: [
{
id: "node1",
label: "123",
x: 100,
y: 200,
},
{
id: "node2",
label: "123",
x: 300,
y: 200,
},
{
id: "node3",
label: "123",
x: 300,
y: 300,
},
],
edges: [
{
id: "edge1",
target: "node2",
source: "node1",
},
],
};
const graphContainer = document.getElementById("container");
const width = document.getElementById("container").scrollWidth;
const height = document.getElementById("container").scrollHeight || 500;
const graph = new G6.Graph({
container: "container",
width,
height,
// The sets of behavior modes
modes: {
// Defualt mode
default: [
"drag-node",
"click-select",
"click-add-node",
"click-add-edge",
"zoom-canvas"
],
},
defaultNode: {
type: "rect",
style: {
radius: 4,
},
anchorPoints: [
[0.5, 0],
[1, 0.5],
[0.5, 1],
[0, 0.5],
],
},
// The node styles in different states
nodeStateStyles: {
// The node styles in selected state
selected: {
stroke: "#666",
lineWidth: 2,
fill: "steelblue",
},
},
defaultEdge: {
type: "line",
style: {
stroke: "#F6BD16",
endArrow: {
path: "M 0,0 L 20,10 L 20,-10 Z",
fill: "#F6BD16",
},
},
},
});
graph.data(data);
graph.render();
},
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.canvas {
height: 800px;
width: 100%;
margin: 0 auto;
position: relative;
}
.topo_inner {
position: relative;
}
</style>
......@@ -56,6 +56,10 @@ const i18n = new VueI18n({
}
})
import SuperFlow from 'vue-super-flow'
import 'vue-super-flow/lib/index.css'
Vue.use(SuperFlow)
import api from './request/api'
Vue.prototype.$api = api;
......
......@@ -124,15 +124,15 @@ export default {
rules: {
name: [
{ required: true, message: "请输入组织机构名称", trigger: "blur" },
{ max: 10, message: "长度小于10个字符", trigger: "blur" },
{ max: 20, message: "长度请小于20个字符", trigger: "blur" },
],
shortname: [
// { required: true, message: '请输入组织机构简称', trigger: 'blur' },
{ max: 10, message: "长度小于10个字符", trigger: "blur" },
{ max: 20, message: "长度请小于20个字符", trigger: "blur" },
],
desc: [
// { required: true, message: '请输入组织说明', trigger: 'blur' },
{ max: 500, message: "长度小于500个字符", trigger: "blur" },
{ max: 500, message: "长度小于500个字符", trigger: "blur" },
],
fileList: [
// {required: true, message: '请上传图片', trigger: 'change'}
......
......@@ -4,7 +4,7 @@
权限管理 / 角色管理 /
<span>{{
$route.path.indexOf("edit") !== -1
? "角色类型"
? "编辑角色"
: $route.path.indexOf("add") !== -1
? "新增角色"
: "分配权限"
......
......@@ -349,10 +349,10 @@ export default {
});
},
change_type() {
this.form.systemname = "";
this.form.domain = "";
this.form.ip = [];
this.form.origin = "";
// this.form.systemname = "";
// this.form.domain = "";
// this.form.ip = [];
// this.form.origin = "";
},
handleClose(tag) {
this.form.ip.splice(this.form.ip.indexOf(tag), 1);
......@@ -473,18 +473,22 @@ export default {
this.$router.back(-1);
},
add_user() {
// this.form.systemname = "";
// this.form.domain = "";
// this.form.ip = [];
// this.form.origin = "";
var temp = {
user_id: this.form.account, // 用户名
password: this.form.password,
user_name: this.form.nickname, // 昵称
system_name: this.form.systemname, //系统名称
system_name: this.form.type>=2?this.form.systemname:'', //系统名称
phone: this.form.phone + "", // 电话号
email: this.form.email, // 邮箱
department_id: this.form.origin, // 组织id
department_id: this.form.type>=2?this.form.origin:'', // 组织id
is_admin: this.form.type,
state: this.form.able, // 用户状态,1——启用,0 禁用
domain_name: this.form.domain, //
ip_whitelist: this.form.ip, //
domain_name: this.form.type>=3?this.form.domain:'', //
ip_whitelist: this.form.type>=3?this.form.ip:[], //
description: this.form.desc, //描述
link_man: this.form.contact,
};
......@@ -507,14 +511,14 @@ export default {
var temp = {
user_id: this.form.account, // 用户名
user_name: this.form.nickname, // 昵称
system_name: this.form.systemname, //系统名称
system_name: this.form.type>=2?this.form.systemname:'', //系统名称
phone: this.form.phone + "", // 电话号
email: this.form.email, // 邮箱
department_id: this.form.origin, // 组织id
department_id: this.form.type>=2?this.form.origin:'', // 组织id
is_admin: this.form.type,
state: this.form.able, // 用户状态,1——启用,0 禁用
domain_name: this.form.domain, //
ip_whitelist: this.form.ip && this.form.ip.length ? this.form.ip : [], //
domain_name: this.form.type>=3?this.form.domain:'', //
ip_whitelist: this.form.type>=3?this.form.ip && this.form.ip.length ? this.form.ip : []:[], //
description: this.form.desc, //描述
link_man: this.form.contact,
};
......
......@@ -28,6 +28,22 @@ export default {
{
name: "我的应用数据分析",
path: `/data_analysis/my_application`
},
{
name: "组织服务数据分析",
path: `/data_analysis/org_service`
},
{
name: "组织应用数据分析",
path: `/data_analysis/org_application`
},
{
name: "运行概况-组织",
path: `/data_analysis/operation_overview`
},
{
name: "服务管控-组织",
path: `/data_analysis/service_control`
}
],
navList: []
......
<template>
<div>
组织-运行概况
</div>
</template>
<script>
export default {
methods: {
getData() {}
}
};
</script>
<template>
<div>
组织-应用
</div>
</template>
<script>
export default {
methods: {
getData() {}
}
};
</script>
<template>
<div>
组织-服务
</div>
</template>
<script>
export default {
methods: {
getData() {}
}
};
</script>
<template>
<div>
组织-服务管控
</div>
</template>
<script>
export default {
methods: {
getData() {}
}
};
</script>
<template>
<div class="com_ex">
<WorkFlow />
</div>
</template>
<script>
// @ is an alias to /src
import WorkFlow from "@/components/work-flow/super-flow";
export default {
components: {
WorkFlow,
},
data: () => ({}),
mounted() {},
methods: {},
};
</script>
<style scoped>
.com_ex {
margin-top: 100px;
padding: 20px;
}
</style>
\ No newline at end of file
......@@ -268,8 +268,11 @@ export default {
});
});
},
resetCurrentPage() {
this.$refs.list.resetCurrentPage();
},
topFilterAction() {
this.initList(this.tempFilter);
this.resetCurrentPage();
},
topFilterClear() {
this.topFilter = {
......@@ -279,7 +282,7 @@ export default {
down_time: "",
};
this.initList(this.tempFilter);
this.resetCurrentPage();
},
showDialog() {
this.$refs.dialog.show();
......
......@@ -51,6 +51,7 @@
>
<select-template
class="apaas_step_content"
:tmp-types="[1]"
@change="selectTemplate"
></select-template>
......
......@@ -260,8 +260,11 @@ export default {
});
});
},
resetCurrentPage() {
this.$refs.list.resetCurrentPage();
},
topFilterAction() {
this.initList(this.tempFilter);
this.resetCurrentPage();
},
topFilterClear() {
this.topFilter = {
......@@ -270,7 +273,7 @@ export default {
push_time: "",
};
this.initList(this.tempFilter);
this.resetCurrentPage();
},
addNew() {
this.$router.push("/message/directed_push/add");
......
......@@ -32,6 +32,7 @@
<select-template
class="apaas_step_content"
:edit="true"
:tmp-types="[2, 3]"
@change="selectTemplate"
></select-template>
......@@ -98,7 +99,7 @@ export default {
step: 0,
done: false,
templateId: "",
templateContent:"",
templateContent: "",
targetUserIds: "",
};
},
......
......@@ -33,8 +33,9 @@
<span class="filter_title">状态:</span>
<el-select v-model="topFilter.state" placeholder="请选择">
<el-option label="全部" value=""> </el-option>
<el-option label="推送成功" value="1"> </el-option>
<el-option label="推送失败" value="0"> </el-option>
<el-option label="推送成功" value="success"> </el-option>
<el-option label="推送失败" value="fail"> </el-option>
<el-option label="推送中" value="pushing"> </el-option>
</el-select>
</div>
<div class="filter_item">
......@@ -259,8 +260,11 @@ export default {
});
});
},
resetCurrentPage() {
this.$refs.list.resetCurrentPage();
},
topFilterAction() {
this.initList(this.tempFilter);
this.resetCurrentPage();
},
topFilterClear() {
this.topFilter = {
......@@ -269,7 +273,7 @@ export default {
push_time: "",
};
this.initList(this.tempFilter);
this.resetCurrentPage();
},
addNew() {
this.$router.push("/message/message_alert/add");
......
......@@ -235,8 +235,11 @@ export default {
});
});
},
resetCurrentPage() {
this.$refs.list.resetCurrentPage();
},
topFilterAction() {
this.initList(this.tempFilter);
this.resetCurrentPage();
},
topFilterClear() {
this.topFilter = {
......@@ -245,7 +248,7 @@ export default {
update_time: "",
};
this.initList(this.tempFilter);
this.resetCurrentPage();
},
showDialog() {
this.$refs.dialog.show();
......
......@@ -181,7 +181,11 @@ export default {
.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;
if( response.data.data){
this.selected_arr = response.data.data;
}else{
this.selected_arr = [];
}
}
});
},
......
......@@ -196,8 +196,11 @@ export default {
});
});
},
resetCurrentPage() {
this.$refs.list.resetCurrentPage();
},
topFilterAction() {
this.initList(this.tempFilter);
this.resetCurrentPage();
},
topFilterClear() {
this.topFilter = {
......@@ -206,7 +209,7 @@ export default {
time: "",
};
this.initList(this.tempFilter);
this.resetCurrentPage();
},
detailAction(item) {
this.$router.push(
......
......@@ -88,7 +88,7 @@ export default {
{
name: "服务请求次数",
value: 0,
icon: require("@/assets/imgs/shop_ic_fuwuzs.png")
icon: require("@/assets/imgs/shop_ic_fuwuqqcs.png")
}
],
hot_datas: [],
......
......@@ -74,6 +74,7 @@ export default {
[];
this.baseInfo = {
portal_id: datas.portal_id || "", // 时空服务id
service_id: this.id,
app_id: 0,
name: datas.name,
......
<template>
<div class="notice_container">
<div class="apass_breadcrumb">
<el-breadcrumb separator="/">
<el-breadcrumb-item :to="{ path: '/user' }">
个人中心
</el-breadcrumb-item>
<el-breadcrumb-item>消息通知</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="main_container">
<div class="notice_header">
<div class="notcie_filter">
<a :class="{ current: unread }" @click.prevent="filterAction(true)">
<span class="btn_text">未读消息</span>
<span
class="width_num"
v-if="unreadMessageCount > 0"
v-text="unreadMessageCount"
></span>
</a>
<a :class="{ current: !unread }" @click.prevent="filterAction(false)">
<span class="btn_text">全部消息</span>
</a>
</div>
<div class="other_action">
<a @click.prevent="readAll">
<img :src="require('../../../assets/imgs/msg_icon_szyd.png')" />
<span class="btn_text">全部设置为已读</span>
</a>
<a @click.prevent="removeAll">
<img :src="require('../../../assets/imgs/msg_icon_qkxx.png')" />
<span class="btn_text">清空所有消息</span>
</a>
<span style="font-size: 12px;color: #d0d5e7;">|</span>
<a class="set_notice_btn">
<span>
<img :src="require('../../../assets/imgs/msg_icon_xxsz.png')" />
<span class="btn_text" style="color: #0f2683;">消息设置</span>
</span>
<set-notice></set-notice>
</a>
</div>
</div>
<ul class="notice_list">
<li
class="notice_item"
v-for="(item, index) in list"
:key="'item_' + index"
>
<div class="notice_icon">
<img :src="getIcon(item.msg_type, item.readed)" />
</div>
<div class="notice_detail">
<p class="notice_type" v-text="getType(item.msg_type)"></p>
<p class="notice_content" v-html="item.content"></p>
<p class="notice_time" v-text="getTime(item.create_time)"></p>
</div>
<div class="notice_action">
<a v-if="item.readed === 1" class="disabled">
<img :src="require('../../../assets/imgs/msg_icon_yidu.png')" />
</a>
<a v-else @click.prevent="readItem(item)">
<img :src="require('../../../assets/imgs/msg_icon_yidu.png')" />
</a>
<a @click.prevent="removeItem(item)">
<img
:src="require('../../../assets/imgs/msg_icon_shanchu.png')"
/>
</a>
</div>
</li>
</ul>
<list-pagination
:total="listTotal"
:page-sizes="pageSizes"
:page-size="pageSize"
:current-page="currentPage"
@size-change="changePageSize"
@current-change="changeCurrentPage"
style="margin-top: 20px;"
></list-pagination>
</div>
</div>
</template>
<script>
import ListPagination from "@/components/comments-pagination";
import setNotice from "./setNotice";
import helper from "@/services/helper.js";
import { mapState, mapMutations } from "vuex";
export default {
components: {
ListPagination,
setNotice,
},
data: () => ({
unread: true,
list: [],
listTotal: 0,
pageSizes: [10, 20, 50],
pageSize: 10,
currentPage: 1,
initDisabled: false,
allMeassageCount: 0,
}),
computed: {
...mapState({
unreadMessageCount: "unreadMessageCount",
}),
},
methods: {
...mapMutations({
setUnreadMessageCount: "setUnreadMessageCount",
}),
initList() {
let _self = this;
this.initDisabled = true;
this.getMessage({
unread: this.unread,
callback(data) {
_self.list = data.data || [];
_self.listTotal = data.total || 0;
},
finallyCallback() {
_self.initDisabled = false;
},
});
},
getMessage({ unread, callback, finallyCallback }) {
let url = unread
? "/apaas/service/v3/mymsg/unread"
: "/apaas/service/v3/mymsg/all";
this.$http
.get(url, {
params: {
size: this.pageSize,
page: this.currentPage,
},
})
.then(({ data }) => {
if (data.success === 1) {
if (unread) {
this.setUnreadMessageCount(data.data.total || 0);
} else {
this.allMeassageCount = data.data.total;
}
typeof callback === "function" && callback(data.data);
}
typeof finallyCallback === "function" && finallyCallback();
})
.catch((error) => {
console.log(error);
typeof finallyCallback === "function" && finallyCallback();
});
},
getType(type = 0) {
return ["系统通知", "版本更新", "平台维护", "服务推送"][type];
},
getIcon(type = 0, readed = false) {
if (!readed) {
return [
require("@/assets/imgs/msg_ic_xttz.png"),
require("@/assets/imgs/msg_ic_bbgx.png"),
require("@/assets/imgs/msg_ic_ptwh.png"),
require("@/assets/imgs/msg_ic_fwts.png"),
][type];
}
return [
require("@/assets/imgs/msg_ic_xttz_visited.png"),
require("@/assets/imgs/msg_ic_bbgx_visited.png"),
require("@/assets/imgs/msg_ic_ptwh_visited.png"),
require("@/assets/imgs/msg_ic_fwts_visited.png"),
][type];
},
getTime(date) {
return helper.dateStringTransform(date || "");
},
filterAction(unread = true) {
if (this.initDisabled) {
return;
}
this.unread = unread;
this.pageSize = 10;
this.currentPage = 1;
this.initList();
},
changePageSize(value) {
this.pageSize = value;
this.currentPage = 1;
this.initList();
},
changeCurrentPage(value) {
this.currentPage = value;
this.initList();
},
refreshList() {
this.initList(); // 刷新列表
if (!this.unread) {
this.getMessage({
unread: true,
});
}
},
readAction(ids) {
this.$http
.post("/apaas/service/v3/mymsg/setread", ids)
.then(({ data }) => {
if (data.success === 1) {
this.$message.success("操作成功");
this.refreshList();
} else {
this.$message.error(data.errMsg || "操作失败");
}
})
.catch((error) => {
console.log(error);
this.$message.error("操作失败");
});
},
removeAction(ids) {
this.$http
.post("/apaas/service/v3/mymsg/clear", ids)
.then(({ data }) => {
if (data.success === 1) {
this.$message.success("操作成功");
this.refreshList();
} else {
this.$message.error(data.errMsg || "操作失败");
}
})
.catch((error) => {
console.log(error);
this.$message.error("操作失败");
});
},
readItem(item) {
this.readAction([item.id]);
},
removeItem(item) {
this.removeAction([item.id]);
},
readAll() {
if (this.unreadMessageCount === 0) {
this.$message.warning("暂无未读消息");
return;
}
this.readAction([]);
},
removeAll() {
if (this.allMeassageCount === 0) {
this.$message.warning("暂无消息通知");
return;
}
this.removeAction([]);
},
},
created() {
this.initList();
this.getMessage({
unread: false, // 初始化消息总数
});
},
};
</script>
<style scoped>
.notice_container {
padding: 0 20px;
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: stretch;
overflow: auto;
}
.notice_container a.disabled {
cursor: not-allowed;
opacity: 0.5;
}
.main_container {
flex-grow: 1;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: stretch;
padding: 25px 20px 20px;
background-color: #fff;
border-radius: 10px;
margin-bottom: 40px;
}
.notice_header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 20px;
}
.notice_header a {
font-size: 14px;
line-height: 24px;
color: #8890a7;
cursor: pointer;
}
.notice_header > div > * + * {
margin-left: 30px;
}
.notice_header a > * {
display: inline-block;
vertical-align: middle;
}
.notice_header a > *:not(:first-child) {
margin-left: 5px;
}
.notcie_filter a .btn_text {
position: relative;
}
.notcie_filter a .btn_text::after {
position: absolute;
content: "";
width: 100%;
height: 3px;
border-radius: 2px;
background-color: #e56600;
left: 0;
bottom: -21px;
display: none;
}
.notcie_filter a .width_num {
min-width: 30px;
background-color: #8890a7;
font-size: 10px;
line-height: 16px;
color: #fff;
padding: 0 8px;
box-sizing: border-box;
border-radius: 8px;
text-align: center;
overflow: hidden;
}
.notcie_filter a.current {
color: #e56600;
}
.notcie_filter a.current .btn_text::after {
display: block;
}
.notcie_filter a.current .width_num {
background-color: #e56600;
}
.notice_list {
flex-grow: 1;
border-top: 2px solid #f4f7fc;
border-bottom: 2px solid #f4f7fc;
}
.notice_item {
padding: 25px 200px 25px 40px;
border-radius: 10px;
overflow: hidden;
position: relative;
display: flex;
justify-content: flex-start;
align-items: flex-start;
}
.notice_item:not(:first-child)::before {
position: absolute;
top: 0;
right: 40px;
left: 40px;
content: "";
border-top: 2px solid #f4f7fc;
}
.notice_item > .notice_icon {
margin: 5px 20px 0 0;
font-size: 0;
}
.notice_item > .notice_detail p {
font-size: 16px;
line-height: 28px;
color: #242c43;
}
.notice_item > .notice_detail .notice_type {
color: #58617a;
margin-bottom: 10px;
}
.notice_item > .notice_detail .notice_time {
color: #8890a7;
}
.notice_item:last-child {
border-bottom: none;
}
.notice_item:hover {
background-color: #f8f9fd;
}
.notice_action {
position: absolute;
top: 0;
right: 0;
width: 190px;
height: 100%;
display: none;
justify-content: center;
align-items: center;
}
.notice_action a {
font-size: 0;
cursor: pointer;
}
.notice_action a + a {
margin-left: 50px;
}
.notice_item:hover::before,
.notice_item:hover + .notice_item::before {
display: none;
}
.notice_item:hover .notice_action {
display: flex;
}
.set_notice_btn {
position: relative;
}
.set_notice_btn::after {
content: "";
position: absolute;
right: 0;
top: 100%;
width: 100%;
height: 30px;
z-index: 665;
}
.set_notice_btn > .set_notice {
position: absolute;
top: 40px;
right: 0;
z-index: 666;
display: none;
}
.set_notice_btn:hover > .set_notice {
display: block;
}
</style>
<template>
<div class="set_notice">
<div class="type_item">
<p class="item_title">服务推送</p>
<p class="item_description">关闭后用户将接收不到服务推送的消息通知</p>
<div class="item_action">
<a
:class="{ on: data.service_message === 1 }"
@click="toggleAction('service_message', 1)"
>
<img
class="icon_off"
:src="require('../../../assets/imgs/btn_off_hov.png')"
/>
<img
class="icon_on"
:src="require('../../../assets/imgs/btn_on_hov.png')"
/>
</a>
</div>
</div>
<div class="type_item">
<p class="item_title">平台维护</p>
<p class="item_description">关闭后用户将接收不到平台维护的消息通知</p>
<div class="item_action">
<a
:class="{ on: data.platform_message === 1 }"
@click="toggleAction('platform_message', 2)"
>
<img
class="icon_off"
:src="require('../../../assets/imgs/btn_off_hov.png')"
/>
<img
class="icon_on"
:src="require('../../../assets/imgs/btn_on_hov.png')"
/>
</a>
</div>
</div>
<div class="type_item">
<p class="item_title">版本更新</p>
<p class="item_description">关闭后用户将接收不到版本更新的消息通知</p>
<div class="item_action">
<a
:class="{ on: data.version_message === 1 }"
@click="toggleAction('version_message', 3)"
>
<img
class="icon_off"
:src="require('../../../assets/imgs/btn_off_hov.png')"
/>
<img
class="icon_on"
:src="require('../../../assets/imgs/btn_on_hov.png')"
/>
</a>
</div>
</div>
<div class="type_item">
<p class="item_title">系统通知</p>
<p class="item_description">关闭后用户将接收不到系统通知的消息通知</p>
<div class="item_action">
<a
:class="{ on: data.system_message === 1 }"
@click="toggleAction('system_message', 4)"
>
<img
class="icon_off"
:src="require('../../../assets/imgs/btn_off_hov.png')"
/>
<img
class="icon_on"
:src="require('../../../assets/imgs/btn_on_hov.png')"
/>
</a>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
data: {
service_message: 0,
platform_message: 0,
version_message: 0,
system_message: 0,
},
disabledstate: {},
};
},
methods: {
getOptions() {
this.$http.get("/apaas/backmgt/center/messageSets").then(({ data }) => {
if (data.success === 1) {
let options = data.data;
this.data.service_message = options.service_message;
this.data.platform_message = options.platform_message;
this.data.version_message = options.version_message;
this.data.system_message = options.system_message;
}
});
},
setOption(typeStr, type, state) {
this.$set(this.disabledstate, typeStr, true);
let finallycallback = () => {
this.$set(this.disabledstate, typeStr, false);
this.getOptions();
};
this.$http
.put("/apaas/backmgt/center/messageSets", null, {
params: {
type,
state,
},
})
.then(({ data }) => {
if (data.success === 1) {
this.$message.success("设置成功");
} else {
this.$message.error(data.errMsg || "设置失败");
}
finallycallback();
})
.catch((error) => {
console.log(error);
this.$message.error("设置失败");
finallycallback();
});
},
toggleAction(typeStr, type) {
if (this.disabledstate[typeStr]) {
this.$message.warning("你操作的频率过快,请稍等");
return;
}
let state = this.data[typeStr] === 1 ? 0 : 1;
this.$set(this.data, typeStr, state);
this.setOption(typeStr, type, state);
},
},
created() {
this.getOptions();
},
};
</script>
<style>
.set_notice {
width: 410px;
background-color: #fff;
border: 1px solid #e3e5ef;
box-sizing: border-box;
border-radius: 10px;
}
.set_notice::before {
content: "";
position: absolute;
top: -16px;
right: 20px;
border-top: 0 solid transparent;
border-right: 8px solid transparent;
border-bottom: 16px solid #e3e5ef;
border-left: 8px solid transparent;
}
.set_notice::after {
content: "";
position: absolute;
top: -14px;
right: 21px;
border-top: 0 solid transparent;
border-right: 7px solid transparent;
border-bottom: 14px solid #fff;
border-left: 7px solid transparent;
}
.type_item {
position: relative;
padding: 12px 100px 12px 35px;
}
.type_item + .type_item {
border-top: 1px solid #e3e5ef;
}
.type_item p {
font-size: 14px;
line-height: 24px;
color: #242c43;
}
.type_item p.item_title {
position: relative;
}
.type_item p.item_title::before {
content: "";
position: absolute;
top: 8px;
left: -18px;
width: 8px;
height: 8px;
border-radius: 50%;
}
.type_item:nth-child(1) p.item_title::before {
background-color: #e8740f;
}
.type_item:nth-child(2) p.item_title::before {
background-color: #3c61ff;
}
.type_item:nth-child(3) p.item_title::before {
background-color: #ffa80b;
}
.type_item:nth-child(4) p.item_title::before {
background-color: #7785ec;
}
.type_item p.item_description {
color: #a9aec0;
}
.item_action {
position: absolute;
top: 0;
right: 0;
width: 100px;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.item_action a {
font-size: 0;
cursor: pointer;
}
.item_action a .icon_on {
display: none;
}
.item_action a.on .icon_on {
display: inline-block;
}
.item_action a.on .icon_off {
display: none;
}
</style>
......@@ -25,7 +25,10 @@
class="detail_head_cell_val text_red"
v-else-if="(orderDetail.approval_first_level == -1 || orderDetail.approval_second_level == -1) && orderDetail.pay_status != -1"
>审核未通过</p>
<p class="detail_head_cell_val text_blackblue" v-else-if="orderDetail.pay_status == -1">订单已取消</p>
<p
class="detail_head_cell_val text_blackblue"
v-else-if="orderDetail.pay_status == -1"
>订单已取消</p>
</div>
<div class="detail_head_cell detail_head_no border_right">
<p class="detail_head_cell_title">订单编号</p>
......@@ -181,11 +184,11 @@
</div>
<div v-if="orderDetail.order_type == 2">
<div class="detail_s_title">应用简介:</div>
<div class="detail_app_scence">{{ orderDetail.scene }}</div>
<div class="detail_app_scence">{{ orderDetail.app_desc }}</div>
</div>
<div v-if="orderDetail.order_type == 2">
<div class="detail_s_title">功能简介:</div>
<div class="detail_app_scence">{{ orderDetail.scene }}</div>
<div class="detail_app_scence">{{ orderDetail.app_func }}</div>
</div>
<div v-if="orderDetail.order_type == 1 || orderDetail.order_type == 2">
<div class="detail_s_title">应用场景:</div>
......@@ -256,7 +259,7 @@ export default {
BlockRadius,
ProcessCard,
TableUm,
InfoList
InfoList,
},
data: () => ({
helper: helper,
......@@ -275,21 +278,21 @@ export default {
{
title: "审批时间:",
type: "time",
info: ""
info: "",
},
{
title: "审批单位:",
info: ""
info: "",
},
{
title: "审批人:",
info: ""
info: "",
},
{
title: "审批意见:",
info: ""
}
]
info: "",
},
],
},
{
title: "二级审批",
......@@ -298,21 +301,21 @@ export default {
{
title: "审批时间:",
type: "time",
info: ""
info: "",
},
{
title: "审批单位:",
info: ""
info: "",
},
{
title: "审批人:",
info: ""
info: "",
},
{
title: "审批意见:",
info: ""
}
]
info: "",
},
],
},
{
title: "三级审批",
......@@ -321,76 +324,76 @@ export default {
{
title: "审批时间:",
type: "time",
info: ""
info: "",
},
{
title: "审批单位:",
info: ""
info: "",
},
{
title: "审批人:",
info: ""
info: "",
},
{
title: "审批意见:",
info: ""
}
]
}
info: "",
},
],
},
],
header_arr: [
{
prop: "name",
label: "字段编码",
minWidth: "10%",
align: "center"
align: "center",
},
{
prop: "show_type",
label: "字段类型",
width: "120px",
align: "center"
align: "center",
},
{
prop: "label",
label: "字段名称",
minWidth: "20%",
align: "center"
align: "center",
},
{
prop: "descript",
label: "字段说明",
minWidth: "40%",
align: "center"
align: "center",
},
{
prop: "example",
label: "字段示例",
minWidth: "20%",
align: "center"
}
align: "center",
},
],
list_arr: [
{
title: "申请人:",
info: ""
info: "",
},
{
title: "联系方式:",
info: ""
info: "",
},
{
title: "申请单位:",
info: ""
info: "",
},
{
title: "申请文件:",
info: "",
url: "",
type: "down"
}
type: "down",
},
],
data: []
data: [],
}),
mounted() {
this.getOrderDetail();
......@@ -404,7 +407,7 @@ export default {
getOrderDetail() {
this.$api.user
.getOrderDetail({ order_id: this.$route.params.id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.orderDetail = response.data.data;
if (this.orderDetail.res_fields != "") {
......@@ -421,12 +424,14 @@ export default {
getOrderUser() {
this.$api.user
.getOrderUser({ order_id: this.$route.params.id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.list_arr[0].info = response.data.data.name;
this.list_arr[1].info = response.data.data.phone_number;
this.list_arr[2].info = response.data.data.organization;
this.list_arr[3].info = response.data.data.apply_file;
this.list_arr[3].info = helper.downloadFileFormat(
response.data.data.apply_file
);
this.list_arr[3].url = response.data.data.apply_file;
} else {
console.log(response.data.errMsg);
......@@ -437,9 +442,9 @@ export default {
this.$api.user
.getOrderApproval({
apply_id: this.orderDetail.apply_id,
kind: this.orderDetail.order_type
kind: this.orderDetail.order_type,
})
.then(response => {
.then((response) => {
if (response.data.success == 1) {
let data = response.data.data || [];
for (let i = 0; i < data.length; i++) {
......@@ -462,36 +467,36 @@ export default {
service_id: parseFloat(this.orderDetail.service_id),
spec_id: this.orderDetail.svc_spec_id,
duration: this.orderDetail.duration,
duration_unit: this.orderDetail.duration_unit
duration_unit: this.orderDetail.duration_unit,
};
} else if (this.orderDetail.order_type == 2) {
query = {
app_id: parseFloat(this.orderDetail.app_id),
spec_id: this.orderDetail.spec_app,
duration: this.orderDetail.duration,
duration_unit: this.orderDetail.duration_unit
duration_unit: this.orderDetail.duration_unit,
};
}
window.sessionStorage.setItem("shoppingCart", JSON.stringify(query));
this.$router.push({
path: "/shop/shop_car_apply",
query: query
query: query,
});
},
cancelDetail() {
this.$api.user
.cancelOrder({ order_id: this.orderDetail.order_id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.$message({
message: "取消订单成功",
type: "success"
type: "success",
});
this.$router.push({ name: "orderList" });
} else {
this.$message({
message: "取消订单失败",
type: "error"
type: "error",
});
}
});
......@@ -500,34 +505,34 @@ export default {
if (this.orderDetail.order_type == 1) {
this.$api.user
.getServiceEvaluation({ apply_id: this.orderDetail.apply_id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.message = response.data.data;
this.showMsgBox = true;
} else {
this.$message({
message: "获取评价失败",
type: "error"
type: "error",
});
}
});
} else if (this.orderDetail.order_type == 2) {
this.$api.user
.getAppEvaluation({ apply_id: this.orderDetail.apply_id })
.then(response => {
.then((response) => {
if (response.data.success == 1) {
this.message = response.data.data;
this.showMsgBox = true;
} else {
this.$message({
message: "获取评价失败",
type: "error"
type: "error",
});
}
});
}
}
}
},
},
};
</script>
<style scoped>
......
......@@ -90,21 +90,21 @@
<el-form-item label="应用简介:" prop="yyjj">
<el-input
v-model="app_info.yyjj"
type="textywly"
type="textarea"
placeholder="请输入应用简介"
></el-input>
</el-form-item>
<el-form-item label="功能简介:" prop="gnjj">
<el-input
v-model="app_info.gnjj"
type="textywly"
type="textarea"
placeholder="请输入功能简介"
></el-input>
</el-form-item>
<el-form-item label="应用场景示例:" prop="cjsl">
<el-input
v-model="app_info.cjsl"
type="textywly"
type="textarea"
placeholder="请输入应用场景示例"
></el-input>
</el-form-item>
......@@ -352,10 +352,11 @@ export default {
app_rules: {
name: [
{ required: true, message: "请输入应用名称", trigger: "blur" },
{ max: 16, message: "长度小于16个字符", trigger: "blur" },
{ max: 400, message: "长度小于16个字符", trigger: "blur" },
],
version: [
{ required: true, message: "请输入应用版本", trigger: "blur" },
{ max: 16, message: "长度小于16个字符", trigger: "blur" },
],
ywly: [
{ required: true, message: "请选择业务领域", trigger: "change" },
......@@ -371,12 +372,15 @@ export default {
],
yyjj: [
{ required: true, message: "请选择应用简介", trigger: "change" },
{ max: 400, message: "长度小于400个字符", trigger: "blur" },
],
gnjj: [
{ required: true, message: "请选择功能简介", trigger: "change" },
{ max: 400, message: "长度小于400个字符", trigger: "blur" },
],
cjsl: [
{ required: true, message: "请选择应用场景示例", trigger: "change" },
{ max: 400, message: "长度小于400个字符", trigger: "blur" },
],
},
deploy_info: {
......@@ -395,8 +399,14 @@ export default {
file: "",
},
image_rules: {
image_name: [{ validator: image_name_pass, trigger: "blur" }],
tag: [{ required: true, message: "请输入版本数", trigger: "blur" }],
image_name: [
{ validator: image_name_pass, trigger: "blur" },
{ max: 16, message: "长度小于16个字符", trigger: "blur" },
],
tag: [
{ required: true, message: "请输入版本数", trigger: "blur" },
{ max: 16, message: "长度小于16个字符", trigger: "blur" },
],
file: [
{ required: true, message: "请选择镜像文件", trigger: "change" },
],
......
......@@ -15,10 +15,11 @@
</template>
<script>
const gisServiceUrl = window.serviceConfig.gisServiceRoot;
export default {
data() {
return {
originUrl:'https://apaasgis.wodcloud.com/portal/apps/webappbuilder/index.html'
originUrl: gisServiceUrl + '/portal/apps/webappbuilder/index.html'
};
},
computed:{
......@@ -44,7 +45,7 @@ export default {
if (data.cmd == 'appbuildermsg'){
console.log(data);
this.$store.commit("setAppBuilderParams", data.params);
this.$router.push(`/fwzc/fwcs`);
this.$router.push(`/fwzc/fwcs?map=4`);
}
})
},
......
......@@ -15,29 +15,37 @@
</template>
<script>
const gisServiceUrl = window.serviceConfig.gisServiceRoot;
export default {
data() {
return {
originUrl:'https://apaasgis.wodcloud.com/portal/apaasplat/viewer/item.html'
originUrl: gisServiceUrl + '/portal/apaasplat/viewer/item.html',
};
},
computed:{
itemUrl:function(){
itemUrl(){
let _self = this;
if(_self.$route.name == 'intelligent_details'){
return `${_self.originUrl}?id=${_self.$route.query.id}&activeMenu=${_self.$route.query.type}`
return `${_self.originUrl}?id=${_self.$route.query.id}&activeMenu=${_self.$route.query.activeMenu}`
}
}
},
mounted() {
window.addEventListener('message',event =>{
let data = event.data;
if (data.cmd == 'mapmsg'){
console.log(data);
}
this.$nextTick(() => {
window.addEventListener('message',event =>{
let data = event.data;
if (data.cmd == 'mapdetailtoview'){
console.log(data);
this.$store.commit("setZnztDetailsParams", data.params);
this.$router.push('/intelligent_drawing')
}
})
})
},
methods: {},
destroyed () {
// window.removeEventListener('message')
}
};
</script>
......
......@@ -14,75 +14,103 @@
</template>
<script>
import { mapState } from "vuex";
const gisServiceUrl = window.serviceConfig.gisServiceRoot;
export default {
data() {
return {
url:'https://apaasgis.wodcloud.com/portal/apaasplat/viewer/mapViewer.html',
url: gisServiceUrl + '/portal/apaasplat/viewer/mapViewer.html',
queryType: '',
id: '',
};
},
computed:{
...mapState(['znztDetailsParams']),
getZnztParams() {
return this.$store.state.znztParams;
},
znztUrl(){
return this.url+this.urlParams
},
urlParams(){
if(this.$store.state.znztParams){
return `?webmap=${this.$store.state.znztParams.id}`;
}else{
return ''
if(this.queryType == 'webmap'){
return this.url + `?webmap=${this.id}`;
}else if (this.queryType == 'layers'){
return this.url + `?layers=${this.id}`;
}else {
return this.url
}
},
},
watch: {
getZnztParams(newVal) {
this.urlParams = `?webmap=${newVal.id}`
console.log('智能制图参数'+newVal)
},
},
mounted() {
this.id = this.znztDetailsParams.id;
this.queryType = this.znztDetailsParams.queryType;
this.$nextTick(() => {
window.addEventListener('message',event =>{
let data = event.data;
// 智能制图发布服务
if (data.cmd == 'mapviewmsg'){
console.log(data);
this.$store.commit("setZnztParams", data.params);
this.$router.push(`/fwzc/fwcs`);
}
// App Builder页面 -- 新窗口打开
if (data.cmd == 'mapviewtoapp'){
console.log(data);
let params = {
title: data.params.title,
tags: data.params.tags,
sharewithwebmap:data.params.shareWithWebMap,
webmap:data.params.id,
summary: data.params.summary,
};
let routeData = this.$router.resolve({
name: "intelligent_appbuilder",
query: params,
});
window.open(routeData.href, '_blank');
// this.$store.commit("setAppBuilderParams", data.params);
}
// 智能制图服务详情--新窗口打开
if (data.cmd == 'mapdetailmsg'){
console.log(data);
let routeData = this.$router.resolve({
name: "intelligent_details",
query: data.params,
});
window.open(routeData.href, '_blank');
}
})
window.addEventListener('message',this.postmassageevt);
})
},
methods: {},
methods: {
postmassageevt(event){
let data = event.data;
// 智能制图发布服务
if (data.cmd == 'mapviewmsg'){
console.log(data);
this.$store.commit("setZnztParams", data.params);
this.$router.push(`/fwzc/fwcs?map=1`);
}
// App Builder页面 -- 新窗口打开
if (data.cmd == 'mapviewtoapp'){
console.log(data);
let params = {
title: data.params.title,
tags: data.params.tags,
sharewithwebmap:data.params.shareWithWebMap,
webmap:data.params.id,
summary: data.params.summary,
};
let routeData = this.$router.resolve({
name: "intelligent_appbuilder",
query: params,
});
window.open(routeData.href, '_blank');
// this.$store.commit("setAppBuilderParams", data.params);
}
// 智能制图服务详情--新窗口打开
if (data.cmd == 'mapdetailmsg'){
console.log(data);
let routeData = this.$router.resolve({
name: "intelligent_details",
query: data.params,
});
window.open(routeData.href, '_blank');
}
// 智能制图页面跳转
if (data.cmd == 'mapviewurl'){
console.log(data);
switch (data.params.queryType) {
case 'webmap':
this.queryType = 'webmap';
this.$store.commit("setZnztIdParams", data.params.id);
this.id = data.params.id;
break;
case 'layers':
this.queryType = 'layers';
this.$store.commit("setZnztIdParams", data.params.id);
this.id = data.params.id;
break;
default:
this.queryType = '';
this.$store.commit("setZnztIdParams", '');
this.id = '';
break;
}
}
}
},
destroyed () {
window.removeEventListener('message')
window.removeEventListener('message',this.postmassageevt);
}
};
</script>
......
<template>
<div class="detail_contain">
<p class="now_page_title">在线组件工具 / 流程设计 / 流程管理 / <span>详情</span></p>
<div class="info_contain">
<service-header :data="service_header_arr"></service-header>
<div class="type_box">
<div class="type_title">
<div v-for="(item,index) in service_arr" :key="index+1000" class="type_select" @click="now_service=index" :style="now_service==index?{borderBottom: '4px solid #f5ab4c',color: '#e56600'}:{}">{{item}}</div>
</div>
<div class="type_box_select">
<info-list :list_arr="now_service==0?list_arr:servicead_arr">
<table-um style="width:700px;" v-if="zd_table_arr.length" height='250px' :stripe="true" :headers="header_arr" :datas="zd_table_arr" slot="fw_table"></table-um>
<div slot="process">流程</div>
<div slot="count">
<div class="charts">
<div class="charts_box">
<div class="charts_box_detail" style="width:233px;">
<img style="width:48px;float:left;margin-top:20px;" src="../../../../../assets/imgs/shop_ic_jierujg.png" alt="">
<div style="float:right;">
<p>流程实例总数</p>
<p><span>2,980</span><span></span></p>
</div>
</div>
</div>
<div class="charts_box">
<div class="charts_box_detail" style="width:245px;">
<img style="width:48px;float:left;margin-top:20px;" src="../../../../../assets/imgs/liucheng_ic_haoshi.png" alt="">
<div style="float:right;margin-right:40px;">
<p>流程平均耗时</p>
<p style="right:-38px;"><span>35</span><span>min</span></p>
</div>
</div>
</div>
<div class="charts_box">
<div class="charts_box_detail" style="width:245px;">
<img style="width:48px;float:left;margin-top:20px;" src="../../../../../assets/imgs/liucheng_ic_haoshi.png" alt="">
<div style="float:right;">
<p>流程超时率</p>
<p><span>5</span><span>%</span></p>
</div>
</div>
</div>
</div>
<div class="data_charts">
<div class="data_charts_box">
<block-radius
class="block"
:show_header="true"
title="流程实例趋势分析"
:buttons_arr="['近7天', '近6个月']"
@changeButton="changeday"
>
<line-chart class="block-radius-content" :area_flag="false" :data="line_data"></line-chart>
</block-radius>
</div>
<div class="data_charts_box">
<block-radius
:show_header="true"
title="节点平均耗时排行"
class="block"
>
<toplist
class="block-radius-content"
:options="toplistData"
:target-value="toplistTargetValue"
></toplist>
</block-radius>
</div>
<div class="data_charts_box">
<block-radius :show_header="true" title="节点超时率排行" class="block">
<BarChart :data="bar_data_org" :colors="['#274fee', '#274fee']" :x_router="30" />
</block-radius>
</div>
</div>
</div>
<div slot="suvice">流程</div>
</info-list>
</div>
</div>
</div>
</div>
</template>
<script>
import serviceHeader from '@/components/service-header'
import infoList from '@/components/infoList'
import tableUm from '@/components/table/table-um'
import BlockRadius from "@/components/general/block-radius";
import lineChart from "@/components/e-charts/line_chart";
import Toplist from "@/components/e-charts/toplist";
import BarChart from "@/components/e-charts/bar-chart";
export default {
components: {
serviceHeader,
infoList,
tableUm,
BlockRadius,
lineChart,
Toplist,
BarChart
},
data(){
return{
service_header_arr:{
id: "",
isMap: false,
name:'',
first:[],
second:[],
fixed_process:false,
public:false,
unpublic:false,
undeploy:false,
deploy:false,
fixed_url:'/',
url:''
},
toplistData:[],
toplistTargetValue:0,
bar_data_org: {},
state:1,
now_service:0,
service_arr:[],
line_data:{
xAxisData: ['01-02','01-03','01-04','01-05','01-06','01-07'],
seriesData: [
{
name: "趋势",
data: [100,200,500,1000,1800,500]
}
]
},
list_arr:[
{
title:'流程描述:',
info:''
},
{
title:'所属组织:',
info:''
},
{
title:'创建时间:',
info:''
},
{
title:'流程挂载服务:',
info:'',
type:'solt',
solt_name:'fw_table'
},
{
title:'流程概览:',
info:'',
type:'solt',
solt_name:'process'
},
],
servicead_arr:[
{
title: "流程统计",
prop:"title",
type: "solt",
solt_name: "count",
},
{
title: "流程概览",
prop:"title",
type: "solt",
solt_name: "suvice",
},
],
header_arr:[
{
prop:'fwmc',
label:'服务名称',
align:'left',
type:'click',
url:'/',
id:'id',
},
{
prop:'time',
label:'到期时间',
width:'200px',
align:'center',
},
],
zd_table_arr:[]
}
},
created(){
this.get_header()
this.getbaseinfo()
},
methods:{
changeday(){
},
get_header(){
this.$set(this.service_header_arr,'name','长兴综治事故申报处理流程')
let state = this.state
//未部署
if(state==0){
this.$set(this.service_header_arr,'first',[])
this.$set(this.service_header_arr,'second',[])
this.service_header_arr.first.push({
name:'工作区域',
text:'1111'
})
this.service_header_arr.first.push({
name:'流程状态',
text:'未部署'
})
this.service_header_arr.second.push({
name:'修改时间',
text:'2020-04-11'
})
this.service_arr = ['流程基本信息']
this.service_header_arr.fixed_process=true
this.service_header_arr.public=false
this.service_header_arr.unpublic=false
this.service_header_arr.undeploy=false
this.service_header_arr.deploy=true
//已部署
}else if(state == 1){
this.$set(this.service_header_arr,'first',[])
this.$set(this.service_header_arr,'second',[])
this.service_header_arr.first.push({
name:'工作区域',
text:'1111'
})
this.service_header_arr.first.push({
name:'流程状态',
text:'已部署'
})
this.service_header_arr.first.push({
name:'部署时间',
text:'2020-04-11'
})
this.service_header_arr.second.push({
name:'服务接口地址',
text:'http://localhost:1z/zdrylx?code=430100000000'
})
this.service_arr = ['流程基本信息','流程运行状态']
this.service_header_arr.fixed_process=true
this.service_header_arr.public=true
this.service_header_arr.unpublic=false
this.service_header_arr.undeploy=true
this.service_header_arr.deploy=false
//已发布
}else{
this.$set(this.service_header_arr,'first',[])
this.$set(this.service_header_arr,'second',[])
this.service_header_arr.first.push({
name:'工作区域',
text:'1111'
})
this.service_header_arr.first.push({
name:'流程状态',
text:'已发布'
})
this.service_header_arr.first.push({
name:'发布时间',
text:'2020-04-11'
})
this.service_header_arr.second.push({
name:'服务接口地址',
text:'http://localhost:1z/zdrylx?code=430100000000'
})
this.service_arr = ['流程基本信息','流程运行状态']
this.service_header_arr.fixed_process=true
this.service_header_arr.public=false
this.service_header_arr.unpublic=true
this.service_header_arr.undeploy=false
this.service_header_arr.deploy=false
}
},
getbaseinfo(){
this.$set(this.list_arr[0],'info','浙江省长兴县综合治理平台事故申报处理流程服务,仅供长兴县使用')
this.$set(this.list_arr[1],'info','北京比格大数据有限公司')
this.$set(this.list_arr[2],'info','2019-02-17 21:09:23')
this.zd_table_arr=[
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
{
fwmc:'身份验证服务',
time:'2020-11-15 15:20:30'
},
]
}
}
}
</script>
<style scoped>
.detail_contain{
width: 100%;
padding: 0 20px;
margin-bottom: 20px;
}
.info_contain{
padding: 25px 20px;
background-color: #fff;
width: 100%;
box-shadow: 0px 3px 6px 0px
#f4f7fc;
border-radius: 12px;
}
.now_page_title{
margin: 15px 0;
color: #898d9e;
}
.now_page_title span{
color: #242c43;
font-weight: 600;
}
.type_box{
width: 100%;
}
.type_title{
width: 100%;
height: 65px;
line-height: 65px;
color: #8890a7;
border-bottom: 2px solid #f4f7fc;
}
.type_select{
float: left;
width: auto;
margin-right: 40px;
height: 65px;
cursor: pointer;
}
.type_box_select{
padding: 30px 10px 10px 10px;
width: 100%;
}
.charts{
width: 100%;
height: 128px;
background-color: #fbfcfe;
border-radius: 12px;
overflow: hidden;
}
.charts_box{
float: left;
width: calc((100% - 4px)/3);
height: 65px;
box-sizing: content-box;
border-right: 2px solid #e6ebfe;
margin-top: 30px;
}
.charts .charts_box:nth-last-of-type(1){
border: 0;
}
.charts_box_detail{
margin: 0 auto;
overflow: hidden;
}
.charts_box_detail div{
position: relative;
margin-right: 30px;
}
.charts_box_detail div p{
font-size: 16px;
color: #58617a;
}
.charts_box_detail div p:nth-last-of-type(1){
position: absolute;
right: -28px;
}
.charts_box_detail div p span:nth-of-type(1){
font-size: 24px;
font-weight: 600;
color: #242c43;
margin-right: 10px;
}
.charts_box_detail div p span:nth-of-type(2){
font-size: 16px;
color: #242c43;
}
.data_charts{
width: 100%;
height: 300px;
overflow: hidden;
}
.data_charts_box{
width: calc((100% - 40px)/3);
float: left;
height: 300px;
box-sizing: border-box;
background-color: #fbfcfe;
border-radius: 12px;
margin-right: 20px;
margin-top: 26px;
}
.data_charts .data_charts_box:nth-last-of-type(1){
margin-right: 0px;
}
.data_charts_box >>> .block_radius{
background-color: #fbfcfe;
height: 100%;
}
.block-radius-content {
width: 100%;
background-color: #fbfcfe;
height: calc(100% - 36px);
margin-top: 15px;
}
.block {
width: 100%;
height: 100%;
}
</style>
<template>
<div class="process-designer-container">
<apass-list
ref="list"
search-placeholder="请输入关键字"
:list-filter="filterList"
:list-header="listHeader"
:list-data="listData"
:list-total="listTotal"
@list-action="init"
:list-padding-left="40"
>
<el-button type="primary" slot="header-left" @click="addNewProcess">
新建流程
</el-button>
<el-breadcrumb separator="/" slot="breadcrumb">
<el-breadcrumb-item>
在线组件工具
</el-breadcrumb-item>
<el-breadcrumb-item>
流程设计
</el-breadcrumb-item>
<el-breadcrumb-item>
流程管理
</el-breadcrumb-item>
</el-breadcrumb>
</apass-list>
<apass-dialog
ref="dialog"
:title="dialogInfo.title"
:msg="dialogInfo.msg"
:submit="dialogInfo.submit"
></apass-dialog>
</div>
</template>
<script>
import helper from "@/services/helper.js";
import apassList from "@/components/apass-list";
import apassDialog from "@/components/apass-dialog";
export default {
components: {
apassList,
apassDialog,
},
data: () => ({
filterList: [
{
name: "服务领域",
},
{
name: "工作区域",
},
{
name: "流程状态",
},
],
listHeader: [],
listData: [],
listTotal: 0,
dialogInfo: {
msg: "",
submit: null,
},
tempFilter: null,
}),
methods: {
init(filter) {
console.log(filter);
this.tempFilter = filter;
this.listTotal = 3;
this.listData = [
{
id: "WF00000001",
name: "保安资格申请流程",
sectors_name: "经济建设",
create_time: "2021-01-01T00:00:00Z",
state: "0",
},
{
id: "WF00000002",
name: "保安考试流程",
sectors_name: "经济建设",
create_time: "2021-01-01T00:00:00Z",
state: "1",
},
{
id: "WF00000003",
name: "申请材料审核流程",
sectors_name: "经济建设",
create_time: "2021-01-01T00:00:00Z",
state: "2",
},
];
},
initFilter() {
Promise.all([
this.$http.get("/apaas/service/v3/service/manager/servtype"),
this.$http.get("/apaas/service/v3/service/manager/servarea"),
])
.then((response) => {
let filterList = response.map((item) => {
return {
name: item.body.data[0].type_name,
prop: item.body.data[0].type_code,
data: item.body.data.map((v) => ({
name: v.name,
value: v.id,
})),
};
});
this.filterList = [
...filterList,
{
name: "流程状态",
prop: "state",
data: [
{
name: "已发布",
value: 2,
},
{
name: "已部署",
value: 1,
},
{
name: "未部署",
value: 0,
},
],
},
];
})
.catch((error) => {
console.log(error);
});
},
iniHeader() {
this.listHeader = [
{
label: "流程编号",
prop: "id",
width: 180,
},
{
label: "流程名称",
prop: "name",
type: "button",
callback: this.detailItem,
},
{
label: "服务领域",
prop: "sectors_name",
align: "center",
width: 240,
},
{
label: "创建时间",
prop: "create_time",
getText(item) {
return helper.dateStringTransform(item.create_time || "");
},
align: "center",
width: 180,
},
{
label: "状态",
prop: "state",
getText(item) {
return ["未部署", "已部署", "已发布"][item.state || 0];
},
align: "center",
width: 180,
},
{
label: "操作",
type: "buttons",
align: "center",
width: 300,
actionList: [
{
label: "发布",
callback: this.publishItem,
disableHide: true,
disabledRule(item) {
return item.state == 2;
},
},
{
label: "编辑",
callback: this.editItem,
},
],
moreActionList: [
{
label: "取消部署",
callback: this.canceldeployItem,
},
{
label: "复制",
callback: this.copyItem,
},
{
label: "删除",
callback: this.deleteItem,
},
],
},
];
},
refresh() {
this.init(this.tempFilter);
},
addNewProcess() {
console.log("addNewProcess");
},
detailItem(item) {
this.$router.push(`/progress/designer/detail/${item.id}`);
},
publishItem(item) {
console.log(`publish ${item.name}`);
},
editItem(item) {
console.log(`edit ${item.name}`);
},
canceldeployItem(item) {
console.log(`cancel deploy ${item.name}`);
},
copyItem(item) {
console.log(`copy ${item.name}`);
},
deleteItem(item) {
console.log(`delete ${item.name}`);
},
},
created() {
this.initFilter();
this.iniHeader();
},
};
</script>
<style scoped>
.process-designer-container {
height: 100%;
}
</style>
<template>
<div class="process_container">
<side-nav-bar
title="流程设计"
imgSrc="tool_ic_tuisong"
:nav-list="navList"
:title-path="navList[0] && navList[0].path"
></side-nav-bar>
<div class="main_container">
<router-view></router-view>
</div>
</div>
</template>
<script>
import sideNavBar from "@/components/side-nav-bar";
export default {
components: {
sideNavBar,
},
data: () => ({
userNav: [
{
name: "流程管理",
path: `/progress/designer`,
},
{
name: "流程监控",
path: `/progress/monitoring`,
},
{
name: "流程设计",
path: `/progress/designs`,
}
],
navList: [],
}),
watch: {
"$route.fullPath"(path) {
this.initNavList();
},
},
methods: {
initNavList() {
this.navList = this.userNav;
},
},
mounted() {
this.initNavList();
},
};
</script>
<style scoped>
.process_container {
height: calc(100vh - 84px);
display: flex;
justify-content: flex-start;
align-items: stretch;
}
.side_nav_bar {
width: 180px;
flex-shrink: 0;
}
.main_container {
width: calc(100% - 180px);
flex-grow: 1;
flex-shrink: 1;
background-color: #f6f7fb;
overflow: auto;
}
</style>
<template>
<div class="design_contain">
<el-button @click="getData">获取参数</el-button>
<WorkFlow ref="workFlow" />
</div>
</template>
<script>
import WorkFlow from "@/components/work-flow/super-flow";
export default {
components: {
WorkFlow
},
methods: {
getData() {
let self = this;
let data = self.$refs.workFlow.getData();
console.log(data);
let start_num = 0;
let end_num = 0;
let start_id = "";
let end_id = "";
let start_before = 0;
let end_after = 0;
data.nodeList.forEach(item => {
if (item.meta.type == 0) {
start_num++;
start_id = item.id;
}
if (item.meta.type == 1) {
end_num++;
end_id = item.id;
}
});
data.linkList.forEach(item => {
if (start_id == item.endId) {
start_before++;
}
if (end_id == item.startId) {
end_after++;
}
});
if (start_num != 1 || end_num != 1) {
this.$message({
message: "开始节点与结束节点均应有且只有一个",
type: "warning"
});
} else if (start_before != 0) {
this.$message({
message: "开始节点前面不应连接其它节点",
type: "warning"
});
} else if (end_after != 0) {
this.$message({
message: "结束节点后面不应连接其它节点",
type: "warning"
});
}
}
}
};
</script>
<style scoped>
.design_contain {
width: 100%;
padding: 0 20px;
margin-bottom: 20px;
}
</style>
......@@ -126,7 +126,7 @@ export default {
// )
temp.push({...e._source,_source:temp_str,index:idx+1+(this.currentPage-1)*10})
temp.push({...e._source,_source:temp_str,index:idx+1+(this.currentPage-1)*this.pageSize})
});
this.tableData = temp
}
......
......@@ -183,6 +183,8 @@ export default {
],
service_arr:['服务基本信息','接口详细信息','申请审批信息'],
service_header_arr:{
id: "",
isMap: false,
name:'',
first:[
{
......@@ -339,8 +341,9 @@ export default {
this.$message.error(response.data.errMsg)
return
}
console.log(response.data.data);
let data = response.data.data;
this.$set(this.service_header_arr, "portal_id", data.portal_id); // 时空服务id
this.$set(this.service_header_arr, "isMap", data.data_service_type1 === 6);
this.$set(this.service_header_arr, "name", data.name);
this.$set(this.service_header_arr['first'][0], 'text', data.data_service_type1_name);
this.$set(this.service_header_arr['first'][1], 'text', data.service_apply_info.approval_status==1?'待审批':data.service_apply_info.approval_status==2?'审批中':data.service_apply_info.approval_status==3?'审批通过':'审批未通过');
......
......@@ -39,7 +39,7 @@
</el-form-item>
<el-form-item class="btnsty">
<el-button @click="onSubmit('form')" class="right">提交</el-button>
<el-button class="right">取消</el-button>
<el-button class="right" @click="backpage">取消</el-button>
</el-form-item>
</el-form>
</div>
......@@ -81,7 +81,7 @@ export default {
option:[
{ required: true, message: '请输入意见', trigger: 'blur' },
{
min: 10, message: '长度应大于10个字符', trigger: 'blur'
min: 10,max:200, message: '长度应大于10个小于200个字符', trigger: 'blur'
}
]
},
......@@ -158,6 +158,8 @@ export default {
],
color_arr:['#e15260','"#ef9433','#515fe7'],
service_header_arr: {
id: "",
isMap: false,
name: "",
first: [
{
......@@ -307,6 +309,9 @@ export default {
}
});
},
backpage(){
this.$router.back(-1)
},
set_approval(){
this.$http.post('/apaas/service/v3/service/approval/applied/approval',{
apply_id:this.id,
......@@ -337,6 +342,8 @@ export default {
return
}
let data = response.data.data;
this.$set(this.service_header_arr, "portal_id", data.portal_id); // 时空服务id
this.$set(this.service_header_arr, "isMap", data.data_service_type1 === 6);
this.$set(this.service_header_arr, "name", data.name);
this.$set(this.service_header_arr['first'][0], 'text', data.data_service_type1_name);
this.$set(this.service_header_arr['first'][1], 'text', data.sectors_name);
......
......@@ -81,7 +81,7 @@
<div class="params_block_item_in">
<span class="params_block_item_title">数据盘:</span>
<div class="params_block_item_val">
<div>{{ cloudDteail.disk }}</div>
<div>{{ cloudDteail.disk != "" ? cloudDteail.disk : "" }}</div>
</div>
</div>
<!-- <div class="params_block_item_in">
......@@ -131,7 +131,7 @@
<div class="params_block_item_in">
<span class="params_block_item_title">数据盘:</span>
<div class="params_block_item_val">
<div>{{ cloudDetailNew.adjust_disk}}</div>
<div>{{ cloudDetailNew.adjust_disk != "" ? cloudDetailNew.adjust_disk : ""}}</div>
</div>
</div>
<!-- <div class="params_block_item_in">
......@@ -238,9 +238,7 @@
</div>
</InfoList>
</div>
<div
class="btn_footer"
>
<div class="btn_footer">
<el-button
v-if="now_user == 1 && apploy_msg.first_level == 0"
class="submit"
......@@ -454,7 +452,7 @@ export default {
apploy_msg: {
first_level: null,
second_level: null,
state: null
state: null,
},
use_uid: "",
could_delete: false,
......
......@@ -106,6 +106,7 @@
:title="dialogInfo.title"
:msg="dialogInfo.msg"
:submit="dialogInfo.submit"
:sunbmitText="dialogInfo.sunbmitText"
></apass-dialog>
<allot-info-confirm
......@@ -282,7 +283,8 @@ export default {
callback: this.deleteItem,
class: "warn",
disabledRule(item) {
return item.state != 2;
// 只有下架状态可以删除
return item.state !== 0;
},
},
],
......@@ -981,7 +983,11 @@ export default {
},
callback: this.cloudAllot,
disabledRule(item) {
return !(item.approve_state === 1 && item.use_uid === "");
return !(
item.state == 1 &&
item.approve_state === 1 &&
item.use_uid === ""
);
},
},
],
......@@ -1053,28 +1059,33 @@ export default {
return "上架";
} else if (item.state == 1 || item.state == 3) {
return "下架";
} else {
return "-";
}
},
callback(item) {
if (item.state == 2) {
return _self.soldUpItem(item);
if (item.state == 0) {
return null; // 已下架,上架的操作需要普通用户申请
} else
if (item.state == 1) {
return _self.soldOutItem(item); // 已上架,超管用户可以直接下架
} else if (item.state == 2) {
return _self.soldUpItem(item); // 上架审核中,超管用户可以直接上架
} else if (item.state == 3) {
return _self.soldOutItem(item);
} else {
return null;
return _self.soldOutItem(item); // 下架审核中,超管用户可以直接下架
}
},
disabledRule(item) {
return item.state == 0 || item.state == 1;
return item.state == 0;
},
},
{
label: "删除",
class: "warn",
callback: this.deleteItem,
},
disabledRule(item) {
// 只有非下架状态可以删除(已上架,下架审核中)
return item.state == 1 || item.state == 3;
},
}, // ["已下架", "已上架", "上架审核中", "下架审核中"]
],
},
];
......
......@@ -185,6 +185,8 @@ export default {
],
service_size_data: [], //服务规格数组
service_header_arr: {
id: "",
isMap: false,
url: "",
name: "",
first: [
......@@ -472,7 +474,7 @@ export default {
dyyw: e.business_name,
ywxt: e.business_url,
cjms: e.scene,
sqsj: e.apply_time
sqsj: e.apply_time.split('+')[0].replace('T',' ')
});
});
}
......@@ -514,7 +516,8 @@ export default {
.then(response => {
if (response.data.success === 1) {
let data = response.data.data;
console.log(data);
this.$set(this.service_header_arr, "portal_id", data.portal_id); // 时空服务id
this.$set(this.service_header_arr, "isMap", data.data_service_type1 === 6);
this.$set(this.service_header_arr, "name", data.name);
this.$set(
this.service_header_arr["first"][0],
......@@ -747,6 +750,9 @@ export default {
padding: 30px 10px 10px 10px;
width: 100%;
}
.type_box_select >>> .outlist .list p{
word-wrap:break-word;
}
.service_title {
font-size: 16px;
font-weight: bold;
......
......@@ -305,9 +305,15 @@ export default {
.catch(function(response) {});
},
setService(){
var reg = /^[1-9][0-9]{0,5}$/
if(this.open){
if(this.maxline){
if(reg.test(this.maxline)){
}else{
this.$message.error('请输入长度小于6的正整数')
return
}
}else{
this.$message.error('请输入最大连接数')
return
......@@ -317,10 +323,24 @@ export default {
if(!this.maxline1){
this.$message.error('请输入最大连接数')
return
}else{
if(reg.test(this.maxline1)){
}else{
this.$message.error('请输入长度小于6的正整数')
return
}
}
if(!this.usetime1){
this.$message.error('请输入有效时间')
return
}else{
if(reg.test(this.maxline1)){
}else{
this.$message.error('请输入长度小于6的正整数')
return
}
}
if(this.timevalue==''){
this.$message.error('请选择时间')
......@@ -355,7 +375,8 @@ export default {
return
}
this.$message.success('保存成功')
this.getServiceInfo()
// this.getServiceInfo()
this.$router.back(-1)
})
.catch(function(response) {
......@@ -424,6 +445,9 @@ export default {
background-color: #f7f8f9;
width: 1022px;
}
.info_contain .comments_pagination .el-input__inner{
width: auto;
}
.info_contain .el-textarea__inner{
background-color: #f7f8f9;
width: 1022px;
......
<template>
<div class="fwcs">
<el-breadcrumb separator="/" class="bread_crumb">
<el-breadcrumb v-if="is_map != 0" separator="/" class="bread_crumb">
<el-breadcrumb-item :to="{ path: '/workplace' }">在线组件工具</el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/intelligent_drawing' }">智能制图</el-breadcrumb-item>
<el-breadcrumb-item>发布信息填写</el-breadcrumb-item>
</el-breadcrumb>
<el-breadcrumb v-else separator="/" class="bread_crumb">
<el-breadcrumb-item :to="{ path: '/fwzc' }">服务注册</el-breadcrumb-item>
<el-breadcrumb-item v-if="!jcxxtx">服务测试</el-breadcrumb-item>
<el-breadcrumb-item v-else :to="{ path: '/fwzc' }">服务测试</el-breadcrumb-item>
......@@ -22,9 +27,9 @@
<el-select @change="changeZhType" v-model="zhyyVal" placeholder="请选择" class="zhyy_select">
<el-option
v-for="item in optionsZhyy"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</div>
......@@ -337,8 +342,11 @@
<el-radio :label="3">敏感</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item class="btn_footer">
<el-form-item v-if="is_map != 0" class="btn_footer">
<el-button class="previous" @click="goBack">{{ is_map == 1 ? "返回智能制图" : "返回Web应用程序" }}</el-button>
<el-button class="registe" @click="registeMap">服务发布</el-button>
</el-form-item>
<el-form-item v-else class="btn_footer">
<el-button class="previous" @click="previous">上一步</el-button>
<el-button class="registe" @click="registe">服务注册</el-button>
</el-form-item>
......@@ -346,23 +354,41 @@
</div>
</block-radius>
</div>
<div style="display: none">
<iframe
id="listener"
:src="addPortalItemUrl"
></iframe>
</div>
<apass-dialog
ref="alertChange"
:title="dialogInfo.title"
:msg="dialogInfo.msg"
:submit="dialogInfo.submit"
:cancelHide="true"
></apass-dialog>
</div>
</template>
<script>
const gisServiceUrl = window.serviceConfig.gisServiceRoot;
import BlockRadius from "@/components/general/block-radius";
import CesTable from "@/components/table/table-um";
import Codes from "@/components/general/codes";
import uploadFile from "@/components/general/upload_file";
import helper from "@/services/helper";
import apassDialog from "@/components/apass-dialog";
export default {
components: {
BlockRadius,
CesTable,
apassDialog,
"v-apaas-code": Codes,
uploadFile
uploadFile,
},
data() {
return {
addPortalItemUrl: gisServiceUrl + '/portal/apaasplat/viewer/addPortalItem.html',
btnList: [],
activeBtn: null,
serviceUrl: "",
......@@ -371,7 +397,7 @@ export default {
{ label: "GET", value: "GET" },
{ label: "POST", value: "POST" },
{ label: "PUT", value: "PUT" },
{ label: "DELETE", value: "DELETE" }
{ label: "DELETE", value: "DELETE" },
],
optionType1: [{ label: "GET", value: "GET" }],
activeName: 0,
......@@ -381,9 +407,9 @@ export default {
label: "请求字段编码",
prop: "requestEncoding",
type: "input",
align: "left"
align: "left",
},
{ label: "请求值", prop: "requestValue", type: "input", align: "left" }
{ label: "请求值", prop: "requestValue", type: "input", align: "left" },
],
sjfwQqcstx: [
{ label: "字段编码", prop: "name", type: "", align: "left" },
......@@ -393,13 +419,13 @@ export default {
prop: "show_type",
type: "",
align: "left",
width: "140"
width: "140",
},
{
label: "字段名称*",
prop: "label",
type: "input",
align: "left"
align: "left",
},
{
label: "是否必须*",
......@@ -409,11 +435,11 @@ export default {
width: 100,
selectArr: [
{ label: "", value: 1 },
{ label: "", value: 0 }
{ label: "", value: 0 },
],
hasDefault: true
hasDefault: true,
},
{ label: "字段说明", prop: "descript", type: "input", align: "left" }
{ label: "字段说明", prop: "descript", type: "input", align: "left" },
],
sjfwFhcstx: [
{ label: "字段编码", prop: "name", type: "", align: "left" },
......@@ -423,9 +449,9 @@ export default {
label: "字段名称*",
prop: "label",
type: "input",
align: "left"
align: "left",
},
{ label: "字段说明", prop: "descript", type: "input", align: "left" }
{ label: "字段说明", prop: "descript", type: "input", align: "left" },
],
zhfwQqcsForm: [
{ label: "请求字段编码", prop: "key", type: "input", align: "left" },
......@@ -437,15 +463,15 @@ export default {
width: 100,
selectArr: [
{ label: "text", value: "text" },
{ label: "file", value: "file" }
]
{ label: "file", value: "file" },
],
},
{
label: "请求值",
prop: "val",
type: "upload",
align: "center",
uploadKey: "field_type"
uploadKey: "field_type",
},
{
label: "操作",
......@@ -455,10 +481,10 @@ export default {
btnList: [
{
type: "primary-del",
label: "删除"
}
]
}
label: "删除",
},
],
},
],
datasZhForm: [],
datasZhwww: [],
......@@ -472,12 +498,7 @@ export default {
zhfwQqt: "JSON",
skfwQqt: "",
skfwRadios: [],
optionsZhyy: [
{ label: "模型算法类", value: 22 },
{ label: "查询验证类", value: 23 },
{ label: "流程类", value: 24 },
{ label: "应用类", value: 34 }
],
optionsZhyy: [],
zhyyVal: 22,
jcxxtx: false,
form: {
......@@ -486,12 +507,12 @@ export default {
area: "",
origin: "",
code: "自动生成",
resource: 1
resource: 1,
},
rules: {
name: [
{ required: true, message: "请输入服务名称", trigger: "blur" },
{ min: 0, max: 15, message: "服务名称不超过15个字", trigger: "blur" }
{ min: 0, max: 15, message: "服务名称不超过15个字", trigger: "blur" },
],
desc: [
{ required: true, message: "请输入服务描述", trigger: "blur" },
......@@ -499,16 +520,16 @@ export default {
min: 0,
max: 200,
message: "服务描述不超过200个字",
trigger: "blur"
}
trigger: "blur",
},
],
area: [{ required: true, message: "请选择服务领域", trigger: "blur" }],
origin: [
{ required: true, message: "请选择所属组织", trigger: "blur" }
{ required: true, message: "请选择所属组织", trigger: "blur" },
],
resource: [
{ required: true, message: "请选择开放程度", trigger: "blur" }
]
{ required: true, message: "请选择开放程度", trigger: "blur" },
],
},
cover: [],
optionsArea: [],
......@@ -520,7 +541,17 @@ export default {
response_fields: [],
noSearchUrl: "",
requestRules: 0,
responseRules: 0
responseRules: 0,
is_map: 0,
param_fields: [],
body_fields: [],
dialogInfo: {
title: "时空服务参数已修改",
msg: "",
submit: null,
},
is_portal: false,
portal_id: "",
};
},
computed: {},
......@@ -589,7 +620,7 @@ export default {
}
}
} else if (this.activeBtn == 1) {
} else if (this.activeBtn == 4) {
} else if (this.activeBtn == 4 && this.zhyyVal != 34) {
let request = this.$refs.fwcs_zhfw_qq.getTableData();
for (let i = 0; i < request.length; i++) {
if (
......@@ -651,15 +682,17 @@ export default {
? this.skfwQqt
: this.activeBtn == 4
? this.zhyyVal
: 0
: 0,
};
this.$api.workbench.fwzcFwcs(query).then(response => {
this.$api.workbench.fwzcFwcs(query).then((response) => {
if (response.data.success == 1) {
let data = response.data.data;
if (data.body_fields && data.body_fields.length != 0) {
this.datasQqcs = data.body_fields;
this.param_fields = data.param_fields;
} else {
this.datasQqcs = data.param_fields;
this.body_fields = [];
}
this.datasFhcs = data.response_fields;
this.resSuccess = true;
......@@ -696,6 +729,21 @@ export default {
} else if (this.responseRules != 0) {
this.$message.error("请完善返回参数信息中的字段名称");
}
} else if (this.activeBtn == 1) {
let value = helper.getQueryString("id", this.serviceUrl);
console.log(value);
if (value && value != "") {
this.getItemInfo(value);
} else {
this.form.name = "";
this.form.desc = "";
this.form.area = "";
this.cover = [];
}
this.request_fields = [];
this.response_fields = [];
this.jcxxtx = true;
this.getOrganization();
} else {
this.request_fields = [];
this.response_fields = [];
......@@ -732,9 +780,9 @@ export default {
},
getOrganization() {
let query = {
id: this.$store.state.userInfo.user_id
id: this.$store.state.userInfo.user_id,
};
this.$api.user.getUserDetail(query).then(request => {
this.$api.user.getUserDetail(query).then((request) => {
if (request.data.success == 1) {
this.form.origin = request.data.data.department;
} else {
......@@ -742,42 +790,51 @@ export default {
}
});
},
registe() {
this.$refs.form.validate(valid => {
registeMap() {
this.$refs.form.validate((valid) => {
if (valid) {
if (this.cover.length != 0) {
let contentType = "";
if (this.activeBtn == 0) {
contentType = this.sjfwQqt;
} else if (this.activeBtn == 4) {
if (this.activeZh == 1) {
contentType = this.zhfwQqt;
}
let query = {};
if (this.is_map == 1) {
query = {
name: this.form.name,
sectors: this.form.area,
organization: this.form.origin,
cover: this.cover[0],
openness: this.form.resource,
descript: this.form.desc,
data_service_type1: 6,
data_service_type2: this.skfwQqt,
encode_method: this.form.code,
method: "GET",
url: this.serviceUrl,
request_fields: [],
request_query_fields: [],
response_fields: [],
content_type: "json",
portal_id: this.portal_id,
};
} else if (this.is_map == 4) {
query = {
name: this.form.name,
sectors: this.form.area,
organization: this.form.origin,
cover: this.cover[0],
openness: this.form.resource,
descript: this.form.desc,
data_service_type1: 21,
data_service_type2: 34,
encode_method: this.form.code,
method: "GET",
url: this.serviceUrl,
request_fields: [],
request_query_fields: [],
response_fields: [],
content_type: "json",
portal_id: this.portal_id,
};
}
let query = {
name: this.form.name,
sectors: this.form.area,
organization: this.form.origin,
cover: this.cover[0],
openness: this.form.resource,
descript: this.form.desc,
data_service_type1: this.btnList[this.activeBtn].id,
data_service_type2:
this.activeBtn == 0
? 12
: this.activeBtn == 1
? this.skfwQqt
: this.activeBtn == 4
? this.zhyyVal
: 0,
encode_method: this.form.code,
method: this.select,
url: this.serviceUrl,
request_fields: this.request_fields,
response_fields: this.response_fields,
content_type: contentType
};
this.$api.workbench.serviceAdd(query).then(response => {
this.$api.workbench.serviceAdd(query).then((response) => {
if (response.data.success == 1) {
this.$message.success("服务注册成功");
this.$router.push("/fwgl/" + this.$store.getters.level);
......@@ -794,6 +851,66 @@ export default {
}
});
},
registe() {
this.$refs.form.validate((valid) => {
if (valid) {
if (this.cover.length != 0) {
let contentType = "";
if (this.activeBtn == 1 && !this.is_portal) {
this.addPortalItem();
} else {
if (this.activeBtn == 0) {
contentType = this.sjfwQqt;
} else if (this.activeBtn == 4) {
if (this.activeZh == 1) {
contentType = this.zhfwQqt;
}
}
let query = {
name: this.form.name,
sectors: this.form.area,
organization: this.form.origin,
cover: this.cover[0],
openness: this.form.resource,
descript: this.form.desc,
data_service_type1: this.btnList[this.activeBtn].id,
data_service_type2:
this.activeBtn == 0
? 12
: this.activeBtn == 1
? this.skfwQqt
: this.activeBtn == 4
? this.zhyyVal
: 0,
encode_method: this.form.code,
method: this.select,
url: this.serviceUrl,
request_fields:
this.body_fields.length == 0 ? [] : this.request_fields,
request_query_fields:
this.param_fields.length == 0 ? [] : this.request_fields,
response_fields: this.response_fields,
content_type: contentType,
portal_id: this.portal_id,
};
this.$api.workbench.serviceAdd(query).then((response) => {
if (response.data.success == 1) {
this.$message.success("服务注册成功");
this.$router.push("/fwgl/" + this.$store.getters.level);
} else {
console.log(response.data.errMsg);
this.$message.error(response.data.errMsg);
}
});
}
} else {
this.$message.error("请上传服务封面");
}
} else {
this.$message.error("请完善服务基本信息");
}
});
},
changeTable(val) {
let search = "?";
for (let i = 0; i < val.length; i++) {
......@@ -831,7 +948,7 @@ export default {
},
changeZhfwQqt() {},
getArea() {
this.$api.workbench.getServiceAreaList().then(response => {
this.$api.workbench.getServiceAreaList().then((response) => {
if (response.data.success == 1) {
this.optionsArea = response.data.data;
} else {
......@@ -840,22 +957,140 @@ export default {
});
},
getServiceType1() {
this.$api.workbench.getServiceTypeList().then(response => {
this.$api.workbench.getServiceTypeList().then((response) => {
if (response.data.success == 1) {
this.btnList = response.data.data;
this.skfwRadios = this.btnList[1].childDomains;
this.skfwQqt = this.skfwRadios[0].id;
this.optionsZhyy = this.btnList[4].childDomains;
this.activeBtn = 0;
} else {
console.log(response.data.errMsg);
}
});
}
},
judgeMap() {
let self = this;
if (self.$route.query.map && self.$route.query.map != 0) {
self.is_map = self.$route.query.map;
self.jcxxtx = true;
if (self.$store.state.znztParams) {
let data = this.$store.state.znztParams;
console.log(data);
self.form.name = data.name;
self.form.desc = data.descript;
self.form.area = Number(data.sectors);
self.serviceUrl = data.url;
self.skfwQqt = Number(data.data_service_type2);
self.cover[0] = data.cover;
self.portal_id = data.portalid;
self.is_portal = true;
} else if (self.$store.state.appBuilderParams) {
let data = this.$store.state.appBuilderParams;
console.log(data);
self.form.name = data.name;
self.form.desc = data.descript;
self.form.area = Number(data.sectors);
self.serviceUrl = data.url;
self.skfwQqt = Number(data.data_service_type2);
self.cover[0] = data.cover;
self.portal_id = data.portalid;
self.is_portal = true;
}
this.getOrganization();
} else {
self.is_map = 0;
self.getServiceType1();
}
},
goBack() {
let self = this;
self.$store.commit("setZnztDetailsParams", {
type: "",
queryType: "webmap",
id: self.portal_id,
});
this.$router.go(-1);
},
addPortalItem() {
console.log("添加portal");
let self = this;
document.getElementById("listener").contentWindow.postMessage(
{
cmd: "addPortalItem",
params: {
name: self.form.name,
url: self.serviceUrl,
sectors: self.form.area,
data_service_type2: self.skfwQqt,
descript: self.form.desc,
},
},
"*"
);
},
getItemInfo(itemid) {
console.log(`获取portal参数${itemid}`);
document.getElementById("listener").contentWindow.postMessage(
{
cmd: "getPortalItemInfo",
params: itemid,
},
"*"
);
},
listeners(event) {
console.log(event);
let self = this;
if (event && event.origin == gisServiceUrl && event.data) {
if (event.data.cmd == "getPortalItemInfo") {
console.log(event.data.params);
let data = event.data.params;
self.form.name = data.name;
self.form.desc = data.descript;
self.form.area = Number(data.sectors);
self.portal_id = data.portalid;
self.cover[0] = data.cover;
if (
self.serviceUrl != data.url ||
self.skfwQqt != Number(data.data_service_type2)
) {
self.serviceUrl = data.url;
self.skfwQqt = Number(data.data_service_type2);
self.dialogInfo.msg = `您的时空服务地址已更新为${
self.serviceUrl
},服务类型更新为${
self.skfwRadios.find((item) => {
return item.id == self.skfwQqt;
}).name
}`;
self.dialogInfo.submit = () => {
self.$refs.alertChange.hide();
};
self.$refs.alertChange.show();
}
self.is_portal = true;
} else if (event.data.cmd == "getPortalItemInfoError") {
console.log(event.data.params);
self.is_portal = false;
} else if (event.data.cmd == "addPortalItem") {
console.log(event.data.params);
self.portal_id = event.data.params;
self.is_portal = true;
self.registe();
} else if (event.data.cmd == "addPortalItemError") {
console.log(event.data.params);
self.is_portal = false;
}
}
},
},
mounted() {
this.getServiceType1();
this.getArea();
}
let self = this;
window.addEventListener("message", self.listeners, false);
self.judgeMap();
self.getArea();
},
};
</script>
......@@ -924,7 +1159,6 @@ export default {
color: #f8f9fd;
}
.btn_footer .previous {
width: 100px;
background-color: #c3caf8;
color: #0f2683;
}
......
......@@ -3,7 +3,7 @@
<div class="person_info">
<div class="preson">
<div class="person_text">
<img src="@/assets/imgs/img_head.png" alt />
<img style="width:40px;" :src="picture_path" alt />
<span>你好,{{ person }}{{login_time?'最近登录 ':''}}{{ login_time }}</span>
</div>
<div class="person_menu">
......@@ -57,9 +57,9 @@
<p
style="margin-top:15px;margin-bottom:10px;font-size:18px;color: #0d1847;font-weight:600;padding-left:20px;"
>
<span style="cursor:pointer;" @click="$router.push('/data_analysis')">
<span>
<span style="display: inline-block;vertical-align:middle;">数据分析中心</span>
<div class="enter_btn"></div>
<div class="enter_btn" @click="$router.push('/data_analysis')"></div>
</span>
</p>
<div class="data_charts">
......@@ -158,9 +158,9 @@
<p
style="margin-top:15px;margin-bottom:10px;font-size:18px;color: #0d1847;font-weight:600;padding-left:20px;"
>
<span style="cursor:pointer;" @click="$router.push('/data_analysis')">
<span>
<span style="display: inline-block;vertical-align:middle;">数据分析中心</span>
<div class="enter_btn"></div>
<div class="enter_btn" @click="$router.push('/data_analysis')"></div>
</span>
</p>
<div class="data_charts" style="width:100%;">
......@@ -201,9 +201,9 @@
<p
style="margin-top:15px;margin-bottom:10px;font-size:18px;color: #0d1847;font-weight:600;padding-left:20px;"
>
<span style="cursor:pointer;" @click="$router.push('/data_analysis')">
<span>
<span style="display: inline-block;vertical-align:middle;">数据分析中心</span>
<div class="enter_btn"></div>
<div class="enter_btn" @click="$router.push('/data_analysis')"></div>
</span>
</p>
<div class="data_charts" style="width:100%;">
......@@ -235,9 +235,9 @@
<p
style="margin-top:10px;margin-bottom:10px;font-size:18px;color: #0d1847;font-weight:600;padding-left:20px;"
>
<span style="cursor:pointer;" @click="gotofw">
<span>
<span style="display: inline-block;vertical-align:middle;"> {{ now_user == 0||now_user == 4 ? "我的服务" : "服务管理" }}</span>
<div class="enter_btn"></div>
<div class="enter_btn" @click="gotofw"></div>
</span>
</p>
<div class="myservice">
......@@ -281,9 +281,9 @@
<p
style="margin-top:10px;margin-bottom:10px;font-size:18px;color: #0d1847;font-weight:600;padding-left:20px;"
>
<span style="cursor:pointer;" @click="gotoyy">
<span>
<span style="display: inline-block;vertical-align:middle;">{{ now_user == 0||now_user == 4 ? "我的应用" : "平台应用" }}</span>
<div class="enter_btn"></div>
<div class="enter_btn" @click="gotoyy"></div>
</span>
</p>
<div class="myapp">
......@@ -357,6 +357,7 @@ export default {
helper: helper,
service_data: [],
app_data: [],
picture_path:'',
listTotal: 0,
currentPage: 1,
listTotal1: 0,
......@@ -990,15 +991,14 @@ export default {
pic: require("@/assets/imgs/home_tool_ic_lcsj.png"),
bg: "#e6ebfe",
color: "#515fe7",
url: "https://apaas-nologo.wodcloud.com/lcgl/index.html#/",
target: 1
url: "/progress",
},
{
text: "可视化图表",
pic: require("@/assets/imgs/home_tool_ic_kshbb.png"),
bg: "#fff2e2",
color: "#ea7d19",
url: "https://apaas.wodcloud.com/bi/",
url: "/bi",
target: 1
},
{
......@@ -1346,6 +1346,7 @@ export default {
this.$router.push("/fwzc/fwcs");
},
getUserData() {
this.picture_path = this.userInfo.picture_path;
this.person = this.userInfo.user_name;
this.login_time = decodeURIComponent(getCookie("lastLogin")).replace(
"+",
......@@ -2316,6 +2317,7 @@ export default {
height: 28px;
background-size: 100%;
vertical-align: -9px;
cursor: pointer;
margin-left: 5px;
}
.enter_btn:hover{
......
......@@ -172,7 +172,16 @@
</nor-card>
<nor-card title="服务设置" flag="true" v-show="is_current_user">
<div class="addimage">多版本回滚</div>
<div class="addimage">
<el-select v-model="mesh_value" placeholder="请选择">
<el-option
v-for="item in mesh_options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<p class="imagebox">
<span
@click="image_select = index;getImageInfo()"
......@@ -191,7 +200,7 @@
:key="index+7000"
v-show="image_select == index"
stripe
height="300"
height="376"
style="width: 100%">
<el-table-column
prop="tag"
......@@ -301,6 +310,21 @@ export default {
},
data() {
return {
mesh_value:0,
mesh_options:[
{
value:0,
label:'多版本回滚'
},
{
value:1,
label:'AB测试'
},
{
value:2,
label:'权重管理'
},
],
now_user: 0, //0:普通用户,1:组织管理员,2:超级管理员
buy_style: 0,
image_select: 0,
......@@ -1008,6 +1032,17 @@ background-color:cyan;
background:khaki;
}
.addimage .el-input__inner{
width: 110px;
height: 28px;
line-height: 28px;
font-size: 12px;
color: #707693;
}
.addimage .el-input__icon{
line-height: 28px;
}
</style>
<style scoped>
.info_contain >>> .apass_dialog .el-dialog__footer{
......@@ -1087,19 +1122,9 @@ background:khaki;
color: #58617a;
}
.addimage {
display: inline-block;
color: #f8f9fd;
font-size: 16px;
width: 124px;
height: 44px;
line-height: 44px;
text-align: center;
background-color: #0f2683;
border-radius: 8px;
margin-top: 20px;
margin-bottom: 30px;
margin-left: 40px;
cursor: pointer;
position: absolute;
right:20px;
top:-36px;
}
.use_know p {
height: 44px;
......@@ -1187,12 +1212,12 @@ background:khaki;
color: #58617a;
}
.imagebox {
padding-top: 20px;
overflow: hidden;
margin-bottom: 20px;
padding-left: 40px;
}
.imagebox span {
width: 165px;
height: 34px;
padding: 0 10px;
line-height: 34px;
......
......@@ -3,6 +3,7 @@ import qs from 'qs'; // 根据需求是否导入qs模块
const general = {
// general api
// logout is not used
logout(params) {
return axios.get(`/iam/api/logout?ReturnUrl=${encodeURIComponent(params.returnUrl)}`);
},
......
......@@ -235,27 +235,55 @@ export default new Router({
{
path: "/app_build",
name: "app_build",
component: () => import("@/pages/workbench/app_build"),
component: () => import("@/pages/workbench/component-center/app-build/index"),
}, // 应用构建(镜像形式)
{
path: "/intelligent_drawing",
name: "intelligent_drawing",
component: () => import("@/pages/workbench/intelligent_drawing"),
component: () => import("@/pages/workbench/component-center/intelligent-drawing/intelligent_drawing"),
}, // 智能制图
{
path: "/intelligent_details",
name: "intelligent_details",
component: () => import("@/pages/workbench/intelligent_details"),
component: () => import("@/pages/workbench/component-center/intelligent-drawing/intelligent_details"),
}, // 智能制图--详情页面
{
path: "/intelligent_appbuilder",
name: "intelligent_appbuilder",
component: () => import("@/pages/workbench/intelligent_appbuilder"),
component: () => import("@/pages/workbench/component-center/intelligent-drawing/intelligent_appbuilder"),
}, // 智能制图--应用程序页面
{
path: "/progress", // 流程设计
name: "progress",
redirect: "/progress/designer",
component: () => import("@/pages/workbench/component-center/process-management/index"),
children: [
{
path: "/progress/designer",
name: "process_designer",
component: () => import("@/pages/workbench/component-center/process-management/designer/index"),
}, // 流程设计--列表
{
path: "/progress/designer/detail/:id",
name: "process_designer_detail/:id",
component: () => import("@/pages/workbench/component-center/process-management/designer/detail"),
}, // 流程设计--详情
{
path: "/progress/monitoring",
name: "process_monitoring",
component: () => import("@/pages/workbench/component-center/process-management/monitoring/index"),
}, // 流程监控
{
path: "/progress/designs",
name: "process_designs",
component: () => import("@/pages/workbench/component-center/process-management/process-design/index"),
}, // 流程设计
],
}, // 流程设计
{
path: "/search_engine",
name: "search_act",
component: () => import("@/pages/workbench/search_act"),
name: "search_engine",
component: () => import("@/pages/workbench/component-center/search-engine/index"),
}, // 搜索引擎
{
path: "/user", // 个人中心
......@@ -268,6 +296,11 @@ export default new Router({
name: "userInfo",
component: () => import("@/pages/user/user_info"),
},
{
path: "/user/notice", // 消息通知
name: "notice",
component: () => import("@/pages/user/notice/notice"),
},
{
path: "/user/order_list", // 订单管理页
name: "orderList",
......@@ -377,15 +410,35 @@ export default new Router({
component: () => import("@/pages/data-analysis/data-analysis"),
children: [
{
path: "/data_analysis/my_service", // 数据分析中心
path: "/data_analysis/my_service", // 数据分析中心-普通
name: "myServiceDataAnalysis",
component: () => import("@/pages/data-analysis/my-service"),
},
{
path: "/data_analysis/my_application", // 数据分析中心
path: "/data_analysis/my_application", // 数据分析中心-普通
name: "myApplicationDataAnalysis",
component: () => import("@/pages/data-analysis/my-application"),
},
{
path: "/data_analysis/org_service", // 数据分析中心服务-组织
name: "orgServiceDataAnalysis",
component: () => import("@/pages/data-analysis/org-service"),
},
{
path: "/data_analysis/org_application", // 数据分析中心应用-组织
name: "orgApplicationDataAnalysis",
component: () => import("@/pages/data-analysis/org-application"),
},
{
path: "/data_analysis/operation_overview", // 运行概况-组织
name: "operationOverview",
component: () => import("@/pages/data-analysis/operation-overview"),
},
{
path: "/data_analysis/service_control", // 服务管控-组织
name: "serviceControl",
component: () => import("@/pages/data-analysis/service-control"),
},
],
},
{
......@@ -503,5 +556,10 @@ export default new Router({
name: "example_com_list",
component: () => import("@/pages/example/example_com_list"),
},
{
path: "/example_com_flow", // 流程图实例
name: "example_com_flow",
component: () => import("@/pages/example/example_com_flow"),
},
],
});
......@@ -84,4 +84,17 @@ module.exports.CreationDateDesc = function (timestamp) {
return date.toLocaleDateString("zh-CN", {
timeZone: "Asia/Shanghai"
});
}
module.exports.getQueryString = function (name, url) {
let search = url.substr(url.indexOf("?"));
let theRequest = new Object();
if (search.indexOf("?") != -1) {
let str = search.substr(1);
strs = str.split("&");
for (let i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
}
return theRequest[name];
}
\ No newline at end of file
......@@ -21,6 +21,13 @@ const store = new Vuex.Store({
menuCartState: 0, //购物车操作都要修改这个值,menu监听这个值的变化实时获取购物车列表
znztParams: null, //智能制图传入过来的数据
appBuilderParams: null, //应用程序传入过来的数据
znztIdParams: '', //智能制图服务id
znztDetailsParams: {
type: '',
queryType: '',
id: '',
}, //智能制图服务详情id
unreadMessageCount: 0
},
getters: {
// 1:超管 2:组织管理员 3:普通用户 4:开发者
......@@ -60,6 +67,15 @@ const store = new Vuex.Store({
setAppBuilderParams(state, newValue) {
state.appBuilderParams = newValue;
},
setZnztIdParams(state, newValue) {
state.znztIdParams = newValue;
},
setZnztDetailsParams(state, newValue) {
state.znztDetailsParams = newValue;
},
setUnreadMessageCount(state, newValue) {
state.unreadMessageCount = newValue;
},
},
});
......
window.serviceConfig = {
gisServiceRoot: 'https://apaasgis.wodcloud.com'
};
\ No newline at end of file
......@@ -2022,7 +2022,7 @@ clone@^1.0.2:
resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
clone@^2.1.1:
clone@^2.1.1, clone@^2.1.2:
version "2.1.2"
resolved "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
......@@ -2937,7 +2937,7 @@ entities@^2.0.0:
resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
integrity sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=
errno@^0.1.3, errno@~0.1.7:
errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
version "0.1.7"
resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=
......@@ -3879,7 +3879,7 @@ ignore@^3.3.5:
resolved "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
integrity sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=
image-size@^0.5.1:
image-size@^0.5.1, image-size@~0.5.0:
version "0.5.5"
resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
......@@ -4405,6 +4405,31 @@ last-call-webpack-plugin@^3.0.0:
lodash "^4.17.5"
webpack-sources "^1.1.0"
less-loader@^6.2.0:
version "6.2.0"
resolved "https://registry.npm.taobao.org/less-loader/download/less-loader-6.2.0.tgz?cache=0&sync_timestamp=1593788012269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless-loader%2Fdownload%2Fless-loader-6.2.0.tgz#8b26f621c155b342eefc24f5bd6e9dc40c42a719"
integrity sha1-iyb2IcFVs0Lu/CT1vW6dxAxCpxk=
dependencies:
clone "^2.1.2"
less "^3.11.3"
loader-utils "^2.0.0"
schema-utils "^2.7.0"
less@^3.11.3, less@^3.12.2:
version "3.12.2"
resolved "https://registry.npm.taobao.org/less/download/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4"
integrity sha1-FX5t0ypohp34hZMUrTjnAhGvOrQ=
dependencies:
tslib "^1.10.0"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
make-dir "^2.1.0"
mime "^1.4.1"
native-request "^1.0.5"
source-map "~0.6.0"
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
......@@ -4441,6 +4466,15 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4
emojis-list "^3.0.0"
json5 "^1.0.1"
loader-utils@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
integrity sha1-5MrOW4FtQloWa18JfhDNErNgZLA=
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
json5 "^2.1.2"
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
......@@ -4538,7 +4572,7 @@ make-dir@^1.0.0:
dependencies:
pify "^3.0.0"
make-dir@^2.0.0:
make-dir@^2.0.0, make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=
......@@ -4694,7 +4728,7 @@ mime-types@~2.1.17, mime-types@~2.1.24:
dependencies:
mime-db "1.44.0"
mime@1.6.0:
mime@1.6.0, mime@^1.4.1:
version "1.6.0"
resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=
......@@ -4889,6 +4923,11 @@ nanomatch@^1.2.1, nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
native-request@^1.0.5:
version "1.0.7"
resolved "https://registry.npm.taobao.org/native-request/download/native-request-1.0.7.tgz#ff742dc555b4c8f2f1c14b548639ba174e573856"
integrity sha1-/3QtxVW0yPLxwUtUhjm6F05XOFY=
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
......@@ -6323,7 +6362,7 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
schema-utils@^2.6.5:
schema-utils@^2.6.5, schema-utils@^2.7.0:
version "2.7.0"
resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
integrity sha1-FxUfdtjq5n+793lgwzxnatn078c=
......@@ -7342,6 +7381,11 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
hash-sum "^1.0.2"
loader-utils "^1.0.2"
vue-super-flow@^1.3.2:
version "1.3.2"
resolved "https://registry.npm.taobao.org/vue-super-flow/download/vue-super-flow-1.3.2.tgz#1de9b8c907b0cbcda9dfca6a36ed95ec9b45f35e"
integrity sha1-Hem4yQewy82p38pqNu2V7JtF814=
vue-template-compiler@^2.6.10:
version "2.6.11"
resolved "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
......
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