10.13问题修复
parent
71baa4f1ae
commit
8a3097c456
|
|
@ -14,6 +14,7 @@ import labor from "./labor";
|
|||
import bim from "./bim"
|
||||
import machMater from './machmater'
|
||||
import checked from './checked'
|
||||
import pitmonit from './pitmonit'
|
||||
|
||||
export default {
|
||||
http: axios,
|
||||
|
|
@ -32,5 +33,6 @@ export default {
|
|||
labor,
|
||||
bim,
|
||||
machMater,
|
||||
checked
|
||||
checked,
|
||||
pitmonit
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
import request from "@/utils/request";
|
||||
|
||||
const totalCount=(prjId)=>{
|
||||
return request({
|
||||
url: `/manage/bgscreen/pitmonit/totalCount?prjId=${prjId}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
const alarmList=(prjId)=>{
|
||||
return request({
|
||||
url: `/manage/bgscreen/pitmonit/alarm?prjId=${prjId}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
const getLastDataForElement=(prjId)=>{
|
||||
return request({
|
||||
url: `/manage/bgscreen/pitmonit/getLastDataForElement?prjId=${prjId}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
const selectByDate=data=>{
|
||||
return request({
|
||||
url: `/manage/bgscreen/pitmonit/selectByDate`,
|
||||
method: 'post',
|
||||
data:data
|
||||
})
|
||||
}
|
||||
|
||||
const monitDays=(prjId)=>{
|
||||
return request({
|
||||
url: `/manage/bgscreen/pitmonit/monitDays?prjId=${prjId}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export default{
|
||||
totalCount,
|
||||
alarmList,
|
||||
getLastDataForElement,
|
||||
selectByDate,
|
||||
monitDays
|
||||
}
|
||||
|
|
@ -0,0 +1,256 @@
|
|||
import Vue from 'vue'
|
||||
Vue.component("classify-bar", {
|
||||
template: `
|
||||
<div :style="{'height': height+'px'}" ref="chart">
|
||||
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
data:{
|
||||
type:Array
|
||||
},
|
||||
height:{
|
||||
type:Number
|
||||
},
|
||||
legend:{
|
||||
type:Array
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
classData:[],
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
this.getChartData()
|
||||
},
|
||||
getChartData(){
|
||||
//品类金额占比 饼图
|
||||
var chChartPie = echarts.init(this.$refs.chart);
|
||||
this.echartPie(chChartPie,this.data)
|
||||
},
|
||||
echartPie(chChart,data){
|
||||
let newPromise = new Promise((resolve) => {
|
||||
resolve()
|
||||
})
|
||||
|
||||
//然后异步执行echarts的初始化函数
|
||||
newPromise.then(() => {
|
||||
if(data.length==0){
|
||||
return;
|
||||
}
|
||||
var max = data[0].total
|
||||
var nameData = [];
|
||||
var totalData = []
|
||||
var background = []
|
||||
var yesMonitor = []
|
||||
var notMonitor = []
|
||||
var yesProp = []
|
||||
var notProp = []
|
||||
var unitData = []
|
||||
|
||||
for (let i = data.length-1; i >=0 ; i--) {
|
||||
nameData.push(data[i].name);
|
||||
totalData.push(data[i].total)
|
||||
unitData.push(data[i].unit)
|
||||
background.push(100);
|
||||
yesMonitor.push(data[i].yesMonitor);
|
||||
notMonitor.push(data[i].notMonitor);
|
||||
yesProp.push((data[i].yesMonitor/max)*100)
|
||||
notProp.push((data[i].notMonitor/max)*100)
|
||||
}
|
||||
|
||||
var legend = ["已监控", "未监控"]
|
||||
if(this.legend){
|
||||
legend = this.legend
|
||||
}
|
||||
|
||||
this.option = {
|
||||
grid: {
|
||||
//图表的位置
|
||||
top: "8%",
|
||||
left: "3%",
|
||||
right: "5%",
|
||||
bottom: "-12%",
|
||||
containLabel: true,
|
||||
},
|
||||
legend: {
|
||||
right: "0",
|
||||
top: "0",
|
||||
//icon: "circle",
|
||||
itemWidth: 15,
|
||||
itemHeight:10,
|
||||
itemGap: 8,
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color:'#c6d9fa'
|
||||
},
|
||||
data: legend,
|
||||
},
|
||||
xAxis: [{
|
||||
show: false,
|
||||
},
|
||||
//由于下边X轴已经是百分比刻度了,所以需要在顶部加一个X轴,刻度是金额,也隐藏掉
|
||||
{
|
||||
show: false,
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
axisLabel: {
|
||||
show: false, //让Y轴数据不显示
|
||||
},
|
||||
itemStyle: {
|
||||
|
||||
},
|
||||
axisTick: {
|
||||
show: false, //隐藏Y轴刻度
|
||||
},
|
||||
axisLine: {
|
||||
show: false, //隐藏Y轴线段
|
||||
},
|
||||
data: [],
|
||||
},{
|
||||
show: false,
|
||||
data: [],
|
||||
axisLine: {
|
||||
show: false
|
||||
}
|
||||
}],
|
||||
series: [
|
||||
//数据条--------------------我是分割线君------------------------------//
|
||||
{
|
||||
show: true,
|
||||
type: 'bar',
|
||||
xAxisIndex: 1, //代表使用第二个X轴刻度!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
barGap: '-100%',
|
||||
barWidth: '6', //统计条宽度
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(22,203,115,0.05)'
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
//label 的position位置可以是top bottom left,right,也可以是固定值
|
||||
//在这里需要上下统一对齐,所以用固定值
|
||||
position: [0, '-25'],
|
||||
rich: { //富文本
|
||||
prop: { //自定义颜色
|
||||
color: '#c6d9fa',
|
||||
fontSize:'14',
|
||||
},
|
||||
unit:{
|
||||
color: '#6c829a',
|
||||
fontSize:'12',
|
||||
},
|
||||
yes:{
|
||||
color: '#55adf7',
|
||||
fontSize:'14',
|
||||
},
|
||||
not:{
|
||||
color: '#4677fa',
|
||||
fontSize:'14',
|
||||
},
|
||||
index:{
|
||||
color: '#fcbc02',
|
||||
fontStyle: 'italic',
|
||||
padding:[0,0,0,5],
|
||||
fontSize:'14',
|
||||
},
|
||||
name: {
|
||||
width: 200,
|
||||
color: '#c6d9fa',
|
||||
padding:[0,0,0,10],
|
||||
fontSize:'14',
|
||||
},
|
||||
color:{
|
||||
color: '#8ca2be',
|
||||
fontSize:'14',
|
||||
},
|
||||
arrow:{
|
||||
width:12,
|
||||
height:8,
|
||||
backgroundColor: {
|
||||
image: "/cdn/images/WEB_2B7C06210CD44D55BFEE6205A35DE4A7.png",
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
formatter: function(data) {
|
||||
//富文本固定格式{colorName|这里填你想要写的内容}
|
||||
//return '{arrow|}'
|
||||
return '{arrow|}{index|No.'+(nameData.length-data.dataIndex)+'}{name|' + nameData[data.dataIndex] + '}{prop|' + totalData[data.dataIndex] + '}{unit| '+unitData[data.dataIndex]+'}{prop|(} {yes|'+yesMonitor[data.dataIndex]+'}{unit| '+unitData[data.dataIndex]+'/}{not|'+notMonitor[data.dataIndex]+'}{unit| '+unitData[data.dataIndex]+'}{prop|)} ';
|
||||
},
|
||||
}
|
||||
},
|
||||
data: background
|
||||
},
|
||||
{
|
||||
type: 'bar',
|
||||
|
||||
silent: true,
|
||||
yAxisIndex: 1,
|
||||
barWidth: 6,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(0,82,198,0.3)'
|
||||
},
|
||||
emphasis: {
|
||||
color: 'rgba(0,82,198,0.3)'
|
||||
}
|
||||
},
|
||||
data: background
|
||||
},
|
||||
{
|
||||
type: 'bar',
|
||||
name:legend[0],
|
||||
|
||||
stack: '1',
|
||||
legendHoverLink: false,
|
||||
barWidth: 6,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#52adf4'
|
||||
},
|
||||
emphasis: {
|
||||
color: '#52adf4'
|
||||
}
|
||||
},
|
||||
data: yesProp
|
||||
}, {
|
||||
type: 'bar',
|
||||
name:legend[1],
|
||||
stack: '1',
|
||||
legendHoverLink: false,
|
||||
barWidth: 6,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#4677ff'
|
||||
},
|
||||
emphasis: {
|
||||
color: '#4677ff'
|
||||
}
|
||||
},
|
||||
data: notProp
|
||||
}]
|
||||
};
|
||||
|
||||
chChart.setOption(this.option);
|
||||
window.onresize = chChart.resize;
|
||||
})
|
||||
},
|
||||
},
|
||||
watch:{
|
||||
data: function (n,o) {
|
||||
this.getChartData()
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
|
@ -7,80 +7,113 @@
|
|||
<div :class="nav == 2 ? 'head-nav active' : 'head-nav'" @click="doNav(2)" v-if="1 == 2">项目详情</div>
|
||||
<div :class="nav == 7 ? 'head-nav active' : 'head-nav'" @click="doNav(7)" v-if="1 == 2">劳务管理</div>
|
||||
|
||||
<div v-if="showMenusNavIds.includes('1')" :class="(nav >= 100 && nav < 200) || nav == 1 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
|
||||
<div v-if="showMenusNavIds.includes('1')"
|
||||
:class="(nav >= 100 && nav < 200) || nav == 1 ? 'head-nav active' : 'head-nav'" style="position: relative"
|
||||
class="has-submenu">
|
||||
<div>项目概况</div>
|
||||
<div class="header-btn-list">
|
||||
<div class="header-btn-list-arrow"></div>
|
||||
<div class="header-btn-list-item" style>
|
||||
<div class="header-btn-list-padding menu-row1" style="text-align: left" :class="getMenuClass(100)">
|
||||
<button v-if="showMenusNavIds.includes('101')" type="button" :class="nav == 101 ? 'active' : ''" class="sub-btn" @click="doNav(101)">项目详情</button>
|
||||
<button v-if="showMenusNavIds.includes('102')" type="button" :class="nav == 102 ? 'active' : ''" class="sub-btn" @click="doNav(102)">劳务管理</button>
|
||||
<button v-if="showMenusNavIds.includes('101')" type="button" :class="nav == 101 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(101)">项目详情</button>
|
||||
<button v-if="showMenusNavIds.includes('102')" type="button" :class="nav == 102 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(102)">劳务管理</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="showMenusNavIds.includes('3')" :class="(nav >= 300 && nav < 400) || nav == 3 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
|
||||
<div v-if="showMenusNavIds.includes('3')"
|
||||
:class="(nav >= 300 && nav < 400) || nav == 3 ? 'head-nav active' : 'head-nav'" style="position: relative"
|
||||
class="has-submenu">
|
||||
<div>安全管理</div>
|
||||
<div class="header-btn-list">
|
||||
<div class="header-btn-list-arrow"></div>
|
||||
<div class="header-btn-list-item" style>
|
||||
<div class="header-btn-list-padding menu-row1" style="text-align: left" :class="getMenuClass(300)">
|
||||
<button v-if="showMenusNavIds.includes('301')" type="button" :class="nav == 301 ? 'active' : ''" class="sub-btn" @click="doNav(301)">安全隐患排查</button>
|
||||
<button v-if="showMenusNavIds.includes('302')" type="button" :class="nav == 302 ? 'active' : ''" class="sub-btn" @click="doNav(302)">教育培训</button>
|
||||
<button v-if="showMenusNavIds.includes('303')" type="button" :class="nav == 303 ? 'active' : ''" class="sub-btn" @click="doNav(303)">基坑监测</button>
|
||||
<button v-if="showMenusNavIds.includes('304')" type="button" :class="nav == 304 ? 'active' : ''" class="sub-btn" @click="doNav(304)">塔机监测</button>
|
||||
<button v-if="showMenusNavIds.includes('301')" type="button" :class="nav == 301 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(301)">安全隐患排查</button>
|
||||
<button v-if="showMenusNavIds.includes('302')" type="button" :class="nav == 302 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(302)">教育培训</button>
|
||||
<button v-if="showMenusNavIds.includes('303')" type="button" :class="nav == 303 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(303)">基坑监测</button>
|
||||
<button v-if="showMenusNavIds.includes('304')" type="button" :class="nav == 304 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(304)">塔机监测</button>
|
||||
|
||||
<button v-if="showMenusNavIds.includes('305')" type="button" :class="nav == 305 ? 'active' : ''" class="sub-btn" @click="doNav(305)">高支模监测</button>
|
||||
<button v-if="showMenusNavIds.includes('306')" type="button" :class="nav == 306 ? 'active' : ''" class="sub-btn" @click="doNav(306)">配电箱监测</button>
|
||||
<button v-if="showMenusNavIds.includes('307')" type="button" :class="nav == 307 ? 'active' : ''" class="sub-btn" @click="doNav(307)">爬架监测</button>
|
||||
<button v-if="showMenusNavIds.includes('308')" type="button" :class="nav == 308 ? 'active' : ''" class="sub-btn" @click="doNav(308)">升降机监测</button>
|
||||
<button v-if="showMenusNavIds.includes('305')" type="button" :class="nav == 305 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(305)">高支模监测</button>
|
||||
<button v-if="showMenusNavIds.includes('306')" type="button" :class="nav == 306 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(306)">配电箱监测</button>
|
||||
<button v-if="showMenusNavIds.includes('307')" type="button" :class="nav == 307 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(307)">爬架监测</button>
|
||||
<button v-if="showMenusNavIds.includes('308')" type="button" :class="nav == 308 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(308)">升降机监测</button>
|
||||
|
||||
<button v-if="showMenusNavIds.includes('309')" type="button" :class="nav == 309 ? 'active' : ''" class="sub-btn" @click="doNav(309)">视频监控</button>
|
||||
<button v-if="showMenusNavIds.includes('310')" type="button" :class="nav == 310 ? 'active' : ''" class="sub-btn" @click="doNav(310)">AI预警</button>
|
||||
<button v-if="showMenusNavIds.includes('311')" type="button" :class="nav == 311 ? 'active' : ''" class="sub-btn" @click="doNav(311)">标准化管理</button>
|
||||
<button v-if="showMenusNavIds.includes('309')" type="button" :class="nav == 309 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(309)">视频监控</button>
|
||||
<button v-if="showMenusNavIds.includes('310')" type="button" :class="nav == 310 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(310)">AI预警</button>
|
||||
<button v-if="showMenusNavIds.includes('311')" type="button" :class="nav == 311 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(311)">标准化管理</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showMenusNavIds.includes('4')" :class="(nav >= 400 && nav < 500) || nav == 4 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
|
||||
<div v-if="showMenusNavIds.includes('4')"
|
||||
:class="(nav >= 400 && nav < 500) || nav == 4 ? 'head-nav active' : 'head-nav'" style="position: relative"
|
||||
class="has-submenu">
|
||||
<div>质量管理</div>
|
||||
<div class="header-btn-list">
|
||||
<div class="header-btn-list-arrow"></div>
|
||||
<div class="header-btn-list-item" style>
|
||||
<div class="header-btn-list-padding menu-row1" style="text-align: left" :class="getMenuClass(400)">
|
||||
<button v-if="showMenusNavIds.includes('401')" type="button" :class="nav == 401 ? 'active' : ''" class="sub-btn" @click="doNav(401)">质量隐患排查</button>
|
||||
<button v-if="showMenusNavIds.includes('402')" type="button" :class="nav == 402 ? 'active' : ''" class="sub-btn" @click="doNav(402)">材料取样复试</button>
|
||||
<button v-if="showMenusNavIds.includes('403')" type="button" :class="nav == 403 ? 'active' : ''" class="sub-btn" @click="doNav(403)">举牌验收</button>
|
||||
<button v-if="showMenusNavIds.includes('404')" type="button" :class="nav == 404 ? 'active' : ''" class="sub-btn" @click="doNav(404)">标养室监测</button>
|
||||
<button v-if="showMenusNavIds.includes('401')" type="button" :class="nav == 401 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(401)">质量隐患排查</button>
|
||||
<button v-if="showMenusNavIds.includes('402')" type="button" :class="nav == 402 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(402)">材料取样复试</button>
|
||||
<button v-if="showMenusNavIds.includes('403')" type="button" :class="nav == 403 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(403)">举牌验收</button>
|
||||
<button v-if="showMenusNavIds.includes('404')" type="button" :class="nav == 404 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(404)">标养室监测</button>
|
||||
|
||||
<button v-if="showMenusNavIds.includes('405')" type="button" :class="nav == 405 ? 'active' : ''" class="sub-btn" @click="doNav(405)">标准化管理</button>
|
||||
<button v-if="showMenusNavIds.includes('406')" type="button" :class="nav == 406 ? 'active' : ''" class="sub-btn" @click="doNav(406)">混泥土监测</button>
|
||||
<button v-if="showMenusNavIds.includes('405')" type="button" :class="nav == 405 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(405)">标准化管理</button>
|
||||
<button v-if="showMenusNavIds.includes('406')" type="button" :class="nav == 406 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(406)">混泥土监测</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showMenusNavIds.includes('5')" :class="(nav >= 500 && nav < 600) || nav == 5 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
|
||||
<div v-if="showMenusNavIds.includes('5')"
|
||||
:class="(nav >= 500 && nav < 600) || nav == 5 ? 'head-nav active' : 'head-nav'" style="position: relative"
|
||||
class="has-submenu">
|
||||
<div>进度管理</div>
|
||||
<div class="header-btn-list">
|
||||
<div class="header-btn-list-arrow"></div>
|
||||
<div class="header-btn-list-item" style>
|
||||
<div class="header-btn-list-padding menu-row1" style="text-align: left" :class="getMenuClass(500)">
|
||||
<button v-if="showMenusNavIds.includes('502')" type="button" :class="nav == 502 ? 'active' : ''" class="sub-btn" @click="doNav(502)">进度管理</button>
|
||||
<button v-if="showMenusNavIds.includes('501')" type="button" :class="nav == 501 ? 'active' : ''" class="sub-btn" @click="doNav(501)">延时摄影</button>
|
||||
<button v-if="showMenusNavIds.includes('502')" type="button" :class="nav == 502 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(502)">进度管理</button>
|
||||
<button v-if="showMenusNavIds.includes('501')" type="button" :class="nav == 501 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(501)">延时摄影</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="showMenusNavIds.includes('8')" :class="(nav >= 800 && nav < 900) || nav == 8 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
|
||||
<div v-if="showMenusNavIds.includes('8')"
|
||||
:class="(nav >= 800 && nav < 900) || nav == 8 ? 'head-nav active' : 'head-nav'" style="position: relative"
|
||||
class="has-submenu">
|
||||
<div>物机管理</div>
|
||||
<div class="header-btn-list">
|
||||
<div class="header-btn-list-arrow"></div>
|
||||
<div class="header-btn-list-item" style>
|
||||
<div class="header-btn-list-padding menu-row1" style="text-align: left" :class="getMenuClass(800)">
|
||||
<button v-if="showMenusNavIds.includes('801')" type="button" :class="nav == 801 ? 'active' : ''" class="sub-btn" @click="doNav(801)">机械管理</button>
|
||||
<button v-if="showMenusNavIds.includes('802')" type="button" :class="nav == 802 ? 'active' : ''" class="sub-btn" @click="doNav(802)">材料管理</button>
|
||||
<button v-if="showMenusNavIds.includes('801')" type="button" :class="nav == 801 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(801)">机械管理</button>
|
||||
<button v-if="showMenusNavIds.includes('802')" type="button" :class="nav == 802 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(802)">材料管理</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -88,25 +121,34 @@
|
|||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8" class="header-center">
|
||||
<img class="prj-logo" :src="selProject.setting.orgLogo" v-if="selProject && selProject.setting && selProject.setting.orgLogo" />
|
||||
<img class="prj-logo" :src="selProject.setting.orgLogo"
|
||||
v-if="selProject && selProject.setting && selProject.setting.orgLogo" />
|
||||
<span class="sp-title">{{ selProject?.setting?.orgName || selProject?.projectName || "数字建安施工管理平台" }}</span>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="head-title-tab" style="display: inline-flex">
|
||||
<div v-if="showMenusNavIds.includes('6')" :class="nav == 6 ? 'head-nav active' : 'head-nav'" @click="doNav(6)">绿碳中心</div>
|
||||
<div v-if="showMenusNavIds.includes('7')" :class="(nav >= 700 && nav < 800) || nav == 7 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
|
||||
<div v-if="showMenusNavIds.includes('6')" :class="nav == 6 ? 'head-nav active' : 'head-nav'"
|
||||
@click="doNav(6)">绿碳中心</div>
|
||||
<div v-if="showMenusNavIds.includes('7')"
|
||||
:class="(nav >= 700 && nav < 800) || nav == 7 ? 'head-nav active' : 'head-nav'" style="position: relative"
|
||||
class="has-submenu">
|
||||
<div>数字孪生</div>
|
||||
<div class="header-btn-list">
|
||||
<div class="header-btn-list-arrow"></div>
|
||||
<div class="header-btn-list-item" style>
|
||||
<div class="header-btn-list-padding menu-row1" style="text-align: left" :class="getMenuClass(700)">
|
||||
<button v-if="showMenusNavIds.includes('701')" type="button" :class="nav == 701 ? 'active' : ''" class="sub-btn" @click="doNav(701)">项目沙盘</button>
|
||||
<button v-if="showMenusNavIds.includes('701')" type="button" :class="nav == 701 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(701)">项目沙盘</button>
|
||||
|
||||
<button v-if="showMenusNavIds.includes('702')" type="button" :class="nav == 702 ? 'active' : ''" class="sub-btn" @click="doNav(702)">项目漫游</button>
|
||||
<button v-if="showMenusNavIds.includes('703')" type="button" :class="nav == 703 ? 'active' : ''" class="sub-btn" @click="doNav(703)">BIM应用</button>
|
||||
<button v-if="showMenusNavIds.includes('702')" type="button" :class="nav == 702 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(702)">项目漫游</button>
|
||||
<button v-if="showMenusNavIds.includes('703')" type="button" :class="nav == 703 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(703)">BIM应用</button>
|
||||
|
||||
<button v-if="showMenusNavIds.includes('704')" type="button" :class="nav == 704 ? 'active' : ''" class="sub-btn" @click="doNav(704)">BIM交底</button>
|
||||
<button v-if="showMenusNavIds.includes('705')" type="button" :class="nav == 705 ? 'active' : ''" class="sub-btn" @click="doNav(705)">4D模拟</button>
|
||||
<button v-if="showMenusNavIds.includes('704')" type="button" :class="nav == 704 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(704)">BIM交底</button>
|
||||
<button v-if="showMenusNavIds.includes('705')" type="button" :class="nav == 705 ? 'active' : ''"
|
||||
class="sub-btn" @click="doNav(705)">4D模拟</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -121,14 +163,17 @@
|
|||
<i class="el-icon-switch-button"></i>
|
||||
</span>
|
||||
</div>
|
||||
<i class="set-fullscreen set-font-size" style="margin-left: 16px; position: absolute; top: 0px; right: 24px" @click="toggleFullScreen">
|
||||
<svg class="icon" v-if="!isFullScreen" style="width: 20px; vertical-align: middle; fill: currentColor; overflow: hidden" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3304">
|
||||
<i class="set-fullscreen set-font-size" style="margin-left: 16px; position: absolute; top: 0px; right: 24px"
|
||||
@click="toggleFullScreen">
|
||||
<svg class="icon" v-if="!isFullScreen"
|
||||
style="width: 20px; vertical-align: middle; fill: currentColor; overflow: hidden" viewBox="0 0 1024 1024"
|
||||
version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3304">
|
||||
<path
|
||||
d="M145.066667 85.333333h153.6c25.6 0 42.666667-17.066667 42.666666-42.666666S324.266667 0 298.666667 0H34.133333C25.6 0 17.066667 8.533333 8.533333 17.066667 0 25.6 0 34.133333 0 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666666s42.666667-17.066667 42.666666-42.666666V145.066667l230.4 230.4c17.066667 17.066667 42.666667 17.066667 59.733334 0 17.066667-17.066667 17.066667-42.666667 0-59.733334L145.066667 85.333333z m170.666666 563.2L162.133333 802.133333l-76.8 76.8V725.333333C85.333333 699.733333 68.266667 682.666667 42.666667 682.666667s-42.666667 17.066667-42.666667 42.666666v256c0 25.6 17.066667 42.666667 42.666667 42.666667h256c25.6 0 42.666667-17.066667 42.666666-42.666667s-17.066667-42.666667-42.666666-42.666666H145.066667l76.8-76.8 153.6-153.6c17.066667-17.066667 17.066667-42.666667 0-59.733334-17.066667-17.066667-42.666667-17.066667-59.733334 0z m665.6 34.133334c-25.6 0-42.666667 17.066667-42.666666 42.666666v153.6l-76.8-76.8-153.6-153.6c-17.066667-17.066667-42.666667-17.066667-59.733334 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l153.6 153.6 76.8 76.8H725.333333c-25.6 0-42.666667 17.066667-42.666666 42.666666s17.066667 42.666667 42.666666 42.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666666z m0-682.666667h-256c-25.6 0-42.666667 17.066667-42.666666 42.666667s17.066667 42.666667 42.666666 42.666666h153.6l-76.8 76.8-153.6 153.6c-17.066667 17.066667-17.066667 42.666667 0 59.733334 17.066667 17.066667 42.666667 17.066667 59.733334 0l153.6-153.6 76.8-76.8v153.6c0 25.6 17.066667 42.666667 42.666666 42.666666s42.666667-17.066667 42.666667-42.666666v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z"
|
||||
fill
|
||||
p-id="3305" />
|
||||
fill p-id="3305" />
|
||||
</svg>
|
||||
<svg class="icon" v-else style="width: 24px; vertical-align: middle; fill: currentColor; overflow: hidden" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3952">
|
||||
<svg class="icon" v-else style="width: 24px; vertical-align: middle; fill: currentColor; overflow: hidden"
|
||||
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3952">
|
||||
<path
|
||||
d="M384 597.333333h-256c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h153.6L17.066667 947.2c-17.066667 17.066667-17.066667 42.666667 0 59.733333 17.066667 17.066667 42.666667 17.066667 59.733333 0L341.333333 742.4v153.6c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z m358.4 85.333334h153.6c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667h-256c-25.6 0-42.666667 17.066667-42.666667 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667V742.4l264.533333 264.533333c17.066667 17.066667 42.666667 17.066667 59.733333 0 17.066667-17.066667 17.066667-42.666667 0-59.733333L742.4 682.666667zM640 426.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667H742.4L1006.933333 76.8c17.066667-17.066667 17.066667-42.666667 0-59.733333-17.066667-17.066667-42.666667-17.066667-59.733333 0L682.666667 281.6V128c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666667 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666667z m-256-341.333334c-25.6 0-42.666667 17.066667-42.666667 42.666667v153.6L76.8 8.533333C59.733333 0 25.6 0 8.533333 8.533333 0 25.6 0 59.733333 8.533333 76.8L281.6 341.333333H128c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z"
|
||||
p-id="3953" />
|
||||
|
|
@ -271,6 +316,7 @@ export default {
|
|||
});
|
||||
},
|
||||
doNav(n) {
|
||||
console.log("--->",n);
|
||||
if (this.nav == n) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -294,6 +340,9 @@ export default {
|
|||
case 304:
|
||||
this.$router.push("/towerCrane");
|
||||
break;
|
||||
case 303:
|
||||
this.$router.push("/excavation");
|
||||
break;
|
||||
case 306:
|
||||
this.$router.push("/powerIot");
|
||||
break;
|
||||
|
|
@ -358,7 +407,7 @@ export default {
|
|||
location.href = window.XDBSAPP;
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -367,6 +416,7 @@ export default {
|
|||
<style lang="less">
|
||||
.div-header {
|
||||
line-height: 100px;
|
||||
|
||||
.header-title-user-info {
|
||||
font-size: 20px;
|
||||
|
||||
|
|
@ -379,10 +429,12 @@ export default {
|
|||
right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.sp-title {
|
||||
line-height: 40px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.header-center {
|
||||
text-align: center;
|
||||
color: #3da2ff;
|
||||
|
|
@ -415,14 +467,17 @@ export default {
|
|||
.header-btn-list-item {
|
||||
.header-btn-list-padding {
|
||||
padding: 0px;
|
||||
|
||||
&.grid3 {
|
||||
display: grid;
|
||||
grid-template-columns: 33% 33% 33%;
|
||||
}
|
||||
|
||||
&.grid2 {
|
||||
display: grid;
|
||||
grid-template-columns: 50% 50%;
|
||||
}
|
||||
|
||||
button {
|
||||
width: 120px;
|
||||
}
|
||||
|
|
@ -458,9 +513,11 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-sel-project-pop {
|
||||
top: 60px !important;
|
||||
}
|
||||
|
||||
@media (min-width: 1921px) and (max-width: 2560px) {
|
||||
.div-header {
|
||||
.head-nav {
|
||||
|
|
@ -479,10 +536,12 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sp-title {
|
||||
line-height: 48px !important;
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
.header-center {
|
||||
font-size: 42px !important;
|
||||
padding: 0px 60px;
|
||||
|
|
@ -526,6 +585,7 @@ export default {
|
|||
.header-center {
|
||||
font-size: 52px !important;
|
||||
padding: 0px 60px;
|
||||
|
||||
.prj-logo {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
|
|
@ -533,10 +593,12 @@ export default {
|
|||
border-radius: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.sp-title {
|
||||
line-height: 50px !important;
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.header-title-user-info {
|
||||
font-size: 30px !important;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,173 @@
|
|||
import Vue from 'vue'
|
||||
Vue.component("trend-line-chart", {
|
||||
template: `
|
||||
<div :style="{'height': height+'px'}" ref="chart">
|
||||
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
chartdata:{
|
||||
type:Object
|
||||
},
|
||||
height:{
|
||||
type:Number
|
||||
},
|
||||
data:{
|
||||
type:Array
|
||||
},
|
||||
fn:{
|
||||
type:Function
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
option:{}
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
this.getChartData()
|
||||
},
|
||||
getChartData(){
|
||||
//品类金额占比 饼图
|
||||
var myChart = echarts.init(this.$refs.chart);
|
||||
this.echartPie(myChart,this.chartdata)
|
||||
},
|
||||
echartPie(myChart,data){
|
||||
let newPromise = new Promise((resolve) => {
|
||||
resolve()
|
||||
})
|
||||
//然后异步执行echarts的初始化函数
|
||||
newPromise.then(() => {
|
||||
var series =[]
|
||||
if(data && data.data){
|
||||
for (let i = 0; i < data.data.length; i++) {
|
||||
series.push({
|
||||
name:data.legend[i],
|
||||
type: "line",
|
||||
smooth: true,
|
||||
symbol: "circle",
|
||||
symbolSize: 5,
|
||||
showSymbol: true,
|
||||
lineStyle: {
|
||||
normal: {
|
||||
width: 2,
|
||||
},
|
||||
},
|
||||
data: data.data[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
var unit = ''
|
||||
if(data.unit){
|
||||
unit = '单位:'+data.unit
|
||||
}
|
||||
|
||||
this.option = {
|
||||
color : data.color,
|
||||
dataZoom:[
|
||||
{show:true,type:'slider'},
|
||||
{type:'inside'}
|
||||
],
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
color: "#57617B",
|
||||
},
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
top:'15%',
|
||||
left: "1%",
|
||||
right: "3%",
|
||||
bottom: "1%",
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
boundaryGap: false,
|
||||
data: data.dataX,
|
||||
axisLine: {
|
||||
//坐标轴轴线相关设置。数学上的x轴
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "#25597e",
|
||||
type: "dashed",
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
|
||||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#c5d9fc",
|
||||
margin: 20,
|
||||
fontSize:16
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
name:unit,
|
||||
nameTextStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 14,
|
||||
},
|
||||
type: "value",
|
||||
axisLine: {
|
||||
//坐标轴轴线相关设置。数学上的x轴
|
||||
show: false,
|
||||
lineStyle: {
|
||||
color: "#c5d9fc",
|
||||
type: "dashed",
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
axisLabel: {
|
||||
show: true,
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#c5d9fc",
|
||||
margin: 20,
|
||||
fontSize:16
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "#25597e",
|
||||
type: "dashed",
|
||||
},
|
||||
},
|
||||
},
|
||||
series: series
|
||||
};
|
||||
if(this.fn){
|
||||
this.option=this.fn(this.option);
|
||||
}
|
||||
myChart.setOption(this.option,true);
|
||||
window.onresize = myChart.resize;
|
||||
})
|
||||
},
|
||||
},
|
||||
watch:{
|
||||
/*chartdata: {
|
||||
deep:true,
|
||||
handler: function (val, oldVal){
|
||||
this.init()
|
||||
}
|
||||
},*/
|
||||
data: function (val, oldVal){
|
||||
this.init()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
|
@ -92,6 +92,12 @@ const routes = [
|
|||
name: "towerCrane",
|
||||
meta: { nav: 304 },
|
||||
component: () => import(/* webpackChunkName: "towerCrane" */ "../views/safety/towerCrane.vue"),
|
||||
},
|
||||
{
|
||||
path: "/excavation",
|
||||
name: "excavation",
|
||||
meta: { nav: 303 },
|
||||
component: () => import(/* webpackChunkName: "excavation" */ "../views/safety/excavation.vue"),
|
||||
},
|
||||
{
|
||||
path: "/powerIot",
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,142 @@
|
|||
.el-tooltip__popper {
|
||||
max-width: 50%;
|
||||
}
|
||||
.font-size-tools .set-font-size {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
}
|
||||
.font-size-tools .set-font-size.active {
|
||||
color: aqua;
|
||||
}
|
||||
.font-size-tools .set-font-size.active .svg-icon * {
|
||||
fill: aqua;
|
||||
}
|
||||
.font-size-tools .set-font-size .svg-icon {
|
||||
width: 40px !important;
|
||||
height: 40px !important;
|
||||
}
|
||||
.font-size-tools .set-font-size.font-size2 {
|
||||
margin-right: 4px;
|
||||
}
|
||||
.font-size-tools .set-font-size.font-size2::after {
|
||||
content: "+";
|
||||
font-style: normal;
|
||||
right: 0px;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
font-size: 16px !important;
|
||||
}
|
||||
.font-size-tools .set-font-size.font-size0::after {
|
||||
content: "-";
|
||||
font-style: normal;
|
||||
right: 0px;
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
font-size: 16px !important;
|
||||
}
|
||||
.finish-0 {
|
||||
color: #e6a23c;
|
||||
}
|
||||
.finish-1 {
|
||||
color: red;
|
||||
}
|
||||
.finish-2 {
|
||||
color: #01A9FF;
|
||||
}
|
||||
.finish-3 {
|
||||
color: green;
|
||||
}
|
||||
.finish-4 {
|
||||
color: #a2c8f9;
|
||||
}
|
||||
.hide-scroll {
|
||||
overflow: hidden;
|
||||
}
|
||||
.bg-date-picker {
|
||||
border: none;
|
||||
background: transparent;
|
||||
}
|
||||
.bg-date-picker .el-range-input {
|
||||
background: transparent;
|
||||
}
|
||||
.bg-date-picker .el-range-separator {
|
||||
color: #fff;
|
||||
}
|
||||
.bg-date-picker-pop {
|
||||
color: #eee;
|
||||
}
|
||||
.bg-date-picker-pop .el-picker-panel__sidebar {
|
||||
background: transparent;
|
||||
border-right-color: #01a9ff;
|
||||
}
|
||||
.bg-date-picker-pop .el-picker-panel__icon-btn {
|
||||
color: #01A9FF;
|
||||
}
|
||||
.bg-date-picker-pop .el-picker-panel__icon-btn:hover {
|
||||
color: #ced7db;
|
||||
}
|
||||
.bg-date-picker-pop .el-date-range-picker__content .el-date-table th {
|
||||
border-bottom-color: #01a9ff;
|
||||
}
|
||||
.bg-date-picker-pop .el-date-range-picker__content .el-date-table td.in-range div {
|
||||
background-color: #01A9FF;
|
||||
}
|
||||
.bg-date-picker-pop .el-date-range-picker__content.is-left {
|
||||
border-right-color: #01a9ff;
|
||||
}
|
||||
.bg-date-picker-pop .popper__arrow {
|
||||
border-bottom-color: #01A9FF !important;
|
||||
}
|
||||
.bg-date-picker-pop .popper__arrow::after {
|
||||
border-bottom-color: #01A9FF !important;
|
||||
border-top-color: #01a9ff !important;
|
||||
}
|
||||
.el-loading-mask {
|
||||
background-color: rgba(255, 255, 255, 0.4);
|
||||
}
|
||||
.el-loading-mask .el-loading-spinner {
|
||||
height: 100px;
|
||||
}
|
||||
.el-loading-mask .el-loading-spinner .circular {
|
||||
right: unset;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
.el-pagination.bg-pagination {
|
||||
text-align: center;
|
||||
}
|
||||
.el-pagination.bg-pagination .btn-next,
|
||||
.el-pagination.bg-pagination .btn-prev {
|
||||
background-color: rgba(1, 169, 255, 0.4);
|
||||
color: #fff;
|
||||
}
|
||||
.el-pagination.bg-pagination .btn-next {
|
||||
margin-left: 20px;
|
||||
}
|
||||
.el-pagination.bg-pagination .el-pagination__total {
|
||||
color: #fff;
|
||||
}
|
||||
.el-pagination.bg-pagination .el-pager li {
|
||||
background-color: rgba(1, 169, 255, 0.4);
|
||||
margin-left: 20px;
|
||||
color: #fff;
|
||||
}
|
||||
.el-pagination.bg-pagination .el-pager li.active {
|
||||
background-color: #01a9ff;
|
||||
}
|
||||
.el-message-box {
|
||||
background-color: rgba(1, 169, 255, 0.5);
|
||||
border: solid 1px #01a9ff;
|
||||
}
|
||||
.el-message-box__title {
|
||||
color: #fff;
|
||||
}
|
||||
.el-message-box__btns {
|
||||
text-align: center;
|
||||
}
|
||||
.el-message-box__content {
|
||||
color: #fff;
|
||||
}
|
||||
.head-title-tab {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
border-bottom-color:#01A9FF !important;
|
||||
&::after{
|
||||
border-bottom-color:#01A9FF !important;
|
||||
top:0px !important;
|
||||
border-top-color: #01a9ff !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -222,10 +222,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</foreach>
|
||||
</delete>
|
||||
<select id="queryByState" parameterType="PitmonitSouthsmosAlarm" resultMap="PitmonitSouthsmosAlarmResult">
|
||||
SELECT a.*,c.unitName AS deptName,b.project_id as projectId
|
||||
SELECT a.*,b.project_id as projectId
|
||||
FROM dev_pitmonit_southsmos_alarm a
|
||||
JOIN sur_project_pit_monit_cfg b ON a.cfgId = b.id
|
||||
JOIN sur_project_unit_info c ON b.sub_dept_id = c.unitId AND b.project_id = c.projectId
|
||||
left JOIN sur_project_unit_info c ON b.sub_dept_id = c.unitId AND b.project_id = c.projectId
|
||||
WHERE
|
||||
a.is_del = 0
|
||||
<if test="status != null and status != ''"> and a.status = #{status}</if>
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
SELECT a.*, c.unitName AS deptName, b.project_id AS projectId
|
||||
FROM dev_pitmonit_southsmos_data a
|
||||
JOIN sur_project_pit_monit_cfg b ON a.cfgId = b.id
|
||||
JOIN sur_project_unit_info c ON b.sub_dept_id = c.unitId AND b.project_id = c.projectId
|
||||
left JOIN sur_project_unit_info c ON b.sub_dept_id = c.unitId AND b.project_id = c.projectId
|
||||
JOIN LatestData ld ON a.id = ld.max_id
|
||||
WHERE b.project_id = #{id}
|
||||
AND a.is_del = 0
|
||||
|
|
@ -194,7 +194,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
SELECT a.cfgid, a.spId, a.NAME, a.meNameEn,c.unitName AS deptName,c.projectId,a.position as remark
|
||||
FROM dev_pitmonit_southsmos_surveypoint a
|
||||
JOIN sur_project_pit_monit_cfg b ON a.cfgId = b.id
|
||||
JOIN sur_project_unit_info c ON b.sub_dept_id=c.unitId AND b.project_id=c.projectId
|
||||
left JOIN sur_project_unit_info c ON b.sub_dept_id=c.unitId AND b.project_id=c.projectId
|
||||
WHERE b.project_id = #{id}
|
||||
)
|
||||
SELECT sp.cfgid, sp.spId, sp.NAME AS spName, sp.meNameEn AS datatype,
|
||||
|
|
|
|||
|
|
@ -399,7 +399,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
pi.licence_number, pi.project_person, pi.project_person_phone, pi.longitude, pi.latitude, pi.project_time_limit, pi.total_investment,
|
||||
pi.floor_area, pi.total_output_value, pi.planned_completion_time, pi.scheduled_start_time, pi.actual_operating_time, pi.actual_completion_time,
|
||||
pi.contract_amount, pi.paid_amount, pi.on_account_amount, pi.project_schedule, pi.project_summarize, pi.project_qr_code, pi.project_status,
|
||||
pi.project_sort, pi.is_del, pi.create_by, pi.create_time, pi.update_by, pi.update_time, pi.remark,pi.bim_config,
|
||||
pi.project_sort, pi.is_del, pi.create_by, pi.create_time, pi.update_by, pi.update_time, pi.remark,pi.bim_config,ps.pit_img_url ps_pit_img_url,
|
||||
ps.id ps_id,ps.org_name ps_org_name,ps.org_logo ps_org_logo,ps.org_image ps_org_image,ps.org_video ps_org_video,ps.org_plane ps_org_plane,cfg.vendors_code
|
||||
from pro_project_info pi
|
||||
left join pro_project_info_setting ps on pi.id=ps.project_id
|
||||
|
|
|
|||
|
|
@ -168,6 +168,9 @@ public class ProCostOutputController extends BaseController
|
|||
*/
|
||||
@PostMapping("/addYearInvestment")
|
||||
public AjaxResult addYearInvestment(@RequestBody ProCostOutput where){
|
||||
if(where.getProjectId()==null || where.getYear()==null || where.getComId()==null){
|
||||
return AjaxResult.error("项目ID、年度、公司ID不能为空!");
|
||||
}
|
||||
List<ProCostOutput> list=proCostOutputService.selectProCostOutputList(where);
|
||||
if(list.size()==0){
|
||||
proCostOutputService.addYearInvestment(where);
|
||||
|
|
@ -177,10 +180,13 @@ public class ProCostOutputController extends BaseController
|
|||
}
|
||||
}
|
||||
@PostMapping("/addMonthInvestment")
|
||||
public AjaxResult addMonthInvestment(@RequestBody ProCostOutput where) {
|
||||
List<ProCostOutput> list=proCostOutputService.selectProCostOutputList(where);
|
||||
public AjaxResult addMonthInvestment(@RequestBody ProCostOutput data) {
|
||||
if(data.getProjectId()==null || data.getYear()==null || data.getComId()==null){
|
||||
return AjaxResult.error("项目ID、年度、公司ID不能为空!");
|
||||
}
|
||||
List<ProCostOutput> list=proCostOutputService.selectProCostOutputList(data);
|
||||
if(list.size()==0){
|
||||
proCostOutputService.addMonthInvestment(where);
|
||||
proCostOutputService.addMonthInvestment(data);
|
||||
return AjaxResult.success("增加月度投资成功!");
|
||||
}else{
|
||||
return AjaxResult.error("此月度投资已存在!");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
package com.yanzhu.manage.controller.bigscreen;
|
||||
|
||||
import com.yanzhu.common.core.web.controller.BaseController;
|
||||
import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||
import com.yanzhu.device.domain.PitmonitSouthsmosAlarm;
|
||||
import com.yanzhu.device.domain.PitmonitSouthsmosData;
|
||||
import com.yanzhu.manage.service.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/***
|
||||
* 基坑监测
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/bgscreen/pitmonit")
|
||||
public class PitMonitController extends BaseController {
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosDataService dataService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosAlarmService alarmService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosDeviceService deviceService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosDevSpService devSpService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosElementItemService elementItemService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosElementService elementService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosSurveypointService surveypointService;
|
||||
@Autowired
|
||||
private IPitmonitSouthsmosThresholdService thresholdService;
|
||||
@Autowired
|
||||
private IProjectPitMonitCfgService cfgService;
|
||||
|
||||
@GetMapping("/totalCount")
|
||||
public AjaxResult totalCount(Long prjId) {
|
||||
int dataCount=dataService.getCountByPrjId(prjId);
|
||||
int devCount=deviceService.getCountByPrjId(prjId);
|
||||
Map<String,Integer> map=new HashMap<>();
|
||||
map.put("data",dataCount);
|
||||
map.put("dev",devCount);
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
|
||||
@GetMapping("/alarm")
|
||||
public AjaxResult alarmList(Long prjId){
|
||||
String status="false";
|
||||
List<PitmonitSouthsmosAlarm> list=alarmService.queryByState(prjId,status);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
/**
|
||||
* 获取项目中测点最后一条数据
|
||||
*/
|
||||
@GetMapping("/getLastDataForElement")
|
||||
public AjaxResult getLastDataForElement(Long prjId){
|
||||
List<PitmonitSouthsmosData> list=dataService.getLastDataForElement(prjId);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
/**
|
||||
* 按收集日期和数据类型查询数据
|
||||
*/
|
||||
@PostMapping("/selectByDate")
|
||||
public AjaxResult selectByDate(@RequestBody PitmonitSouthsmosData where){
|
||||
List<PitmonitSouthsmosData> list=dataService.selectByDate(where);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据监控天数
|
||||
*/
|
||||
@GetMapping("/monitDays")
|
||||
public AjaxResult monitDays(Long prjId){
|
||||
Long days=dataService.monitDays(prjId);
|
||||
return AjaxResult.success(days);
|
||||
}
|
||||
}
|
||||
|
|
@ -143,7 +143,10 @@ public class ProCostOutputServiceImpl implements IProCostOutputService
|
|||
it.setRemark("");
|
||||
it.setIsDel(0l);
|
||||
it.setCostType(2l);//年度投资
|
||||
insertProCostOutput(it);
|
||||
if(selectProCostOutputList(it).size()==0){
|
||||
insertProCostOutput(it);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -154,7 +157,9 @@ public class ProCostOutputServiceImpl implements IProCostOutputService
|
|||
it.setCostType(9l);//月度投资
|
||||
for(int i=1;i<=12;i++){
|
||||
it.setMonth(i*1l);
|
||||
insertProCostOutput(it);
|
||||
if(selectProCostOutputList(it).size()==0){
|
||||
insertProCostOutput(it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,275 +1,277 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="renderer" content="webkit" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
|
||||
/>
|
||||
<script src="/cdn/webcfg.js?20250913"></script>
|
||||
<script>
|
||||
window.yanzhuAppTitle = window.webCfg?.webTitle || "数字建安施工";
|
||||
</script>
|
||||
<link rel="icon" href="/cdn/bsimages/faviconnew.ico?v=6" />
|
||||
<title>数字建安施工</title>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=eseRcUMFiUlnWA6miQLejNpvS70H8SRN"
|
||||
></script>
|
||||
<script src="/cdn/Cesium/Cesium.js"></script>
|
||||
<script src="/cdn/Cesium/BIMGISEngine_edit.js?v=20250909"></script>
|
||||
<script src="/cdn/Cesium/initApi.js?v=20230920"></script>
|
||||
<script src="/cdn/echarts/echarts.min.js"></script>
|
||||
<script src="/cdn/bim/sapi/BIMGISEngine250906.js?v=2025090602"></script>
|
||||
<script src="/cdn/bim/sapi/config.js?v=20250816"></script>
|
||||
|
||||
<link rel="stylesheet" href="/cdn/Cesium/Widgets/widgets.css" />
|
||||
|
||||
<!--[if lt IE 11
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="renderer" content="webkit" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
||||
<script src="/cdn/webcfg.js?20250913"></script>
|
||||
<script>
|
||||
window.yanzhuAppTitle = window.webCfg?.webTitle || "数字建安施工";
|
||||
</script>
|
||||
<link rel="icon" href="/cdn/bsimages/faviconnew.ico?v=6" />
|
||||
<title>数字建安施工</title>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=eseRcUMFiUlnWA6miQLejNpvS70H8SRN"></script>
|
||||
<script src="/cdn/Cesium/Cesium.js"></script>
|
||||
<script src="/cdn/Cesium/BIMGISEngine_edit.js?v=20250909"></script>
|
||||
<script src="/cdn/Cesium/initApi.js?v=20230920"></script>
|
||||
<script src="/cdn/echarts/echarts.min.js"></script>
|
||||
<script src="/cdn/bim/sapi/BIMGISEngine250906.js?v=2025090602"></script>
|
||||
<script src="/cdn/bim/sapi/config.js?v=20250816"></script>
|
||||
<link rel="stylesheet" href="/cdn/Cesium/Widgets/widgets.css" />
|
||||
<!--[if lt IE 11
|
||||
]><script>
|
||||
window.location.href = "/html/ie.html";
|
||||
</script><!
|
||||
[endif]-->
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
color: #000;
|
||||
padding: 0.2em 0;
|
||||
}
|
||||
#loader-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 999999;
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
color: #000;
|
||||
padding: 0.2em 0;
|
||||
}
|
||||
|
||||
#loader-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 999999;
|
||||
}
|
||||
|
||||
#loader {
|
||||
display: block;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: -75px 0 0 -75px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
-ms-animation: spin 2s linear infinite;
|
||||
-moz-animation: spin 2s linear infinite;
|
||||
-o-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 1001;
|
||||
}
|
||||
|
||||
#loader:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 3s linear infinite;
|
||||
-moz-animation: spin 3s linear infinite;
|
||||
-o-animation: spin 3s linear infinite;
|
||||
-ms-animation: spin 3s linear infinite;
|
||||
animation: spin 3s linear infinite;
|
||||
}
|
||||
|
||||
#loader:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-moz-animation: spin 1.5s linear infinite;
|
||||
-o-animation: spin 1.5s linear infinite;
|
||||
-ms-animation: spin 1.5s linear infinite;
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
#loader {
|
||||
display: block;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: -75px 0 0 -75px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
-ms-animation: spin 2s linear infinite;
|
||||
-moz-animation: spin 2s linear infinite;
|
||||
-o-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 1001;
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
#loader:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 3s linear infinite;
|
||||
-moz-animation: spin 3s linear infinite;
|
||||
-o-animation: spin 3s linear infinite;
|
||||
-ms-animation: spin 3s linear infinite;
|
||||
animation: spin 3s linear infinite;
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#loader:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-moz-animation: spin 1.5s linear infinite;
|
||||
-o-animation: spin 1.5s linear infinite;
|
||||
-ms-animation: spin 1.5s linear infinite;
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
#loader-wrapper .loader-section {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 51%;
|
||||
height: 100%;
|
||||
background: #7171c6;
|
||||
z-index: 1000;
|
||||
-webkit-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
#loader-wrapper .loader-section.section-left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
#loader-wrapper .loader-section.section-right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
.loaded #loader-wrapper .loader-section.section-left {
|
||||
-webkit-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
.loaded #loader-wrapper .loader-section.section-right {
|
||||
-webkit-transform: translateX(100%);
|
||||
-ms-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 51%;
|
||||
height: 100%;
|
||||
background: #7171c6;
|
||||
z-index: 1000;
|
||||
-webkit-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
.loaded #loader {
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.3s ease-out;
|
||||
transition: all 0.3s ease-out;
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-left {
|
||||
left: 0;
|
||||
}
|
||||
.loaded #loader-wrapper {
|
||||
visibility: hidden;
|
||||
-webkit-transform: translateY(-100%);
|
||||
-ms-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
-webkit-transition: all 0.3s 1s ease-out;
|
||||
transition: all 0.3s 1s ease-out;
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-right {
|
||||
right: 0;
|
||||
}
|
||||
.no-js #loader-wrapper {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-left {
|
||||
-webkit-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
.no-js h1 {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-right {
|
||||
-webkit-transform: translateX(100%);
|
||||
-ms-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
#loader-wrapper .load_title {
|
||||
font-family: "Open Sans";
|
||||
color: #fff;
|
||||
font-size: 19px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9999999999999;
|
||||
position: absolute;
|
||||
top: 60%;
|
||||
opacity: 1;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.loaded #loader {
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.3s ease-out;
|
||||
transition: all 0.3s ease-out;
|
||||
}
|
||||
#loader-wrapper .load_title span {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 13px;
|
||||
color: #fff;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper {
|
||||
visibility: hidden;
|
||||
-webkit-transform: translateY(-100%);
|
||||
-ms-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
-webkit-transition: all 0.3s 1s ease-out;
|
||||
transition: all 0.3s 1s ease-out;
|
||||
}
|
||||
#translate {
|
||||
position: absolute;
|
||||
top: 11px;
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
.no-js #loader-wrapper {
|
||||
display: none;
|
||||
}
|
||||
/* 隐藏原生的 select 样式 */
|
||||
#translate select {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
padding: 7px;
|
||||
border: 1px solid rgb(159, 206, 255);
|
||||
border-radius: 5px;
|
||||
background-color: rgb(235, 245, 255);
|
||||
color: rgb(72, 162, 255);
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.no-js h1 {
|
||||
color: #222222;
|
||||
}
|
||||
/* 美化 select 的下拉箭头 */
|
||||
#translate::after {
|
||||
content: "▼";
|
||||
/* Unicode编码,表示向下的箭头 */
|
||||
position: absolute;
|
||||
color: rgb(72, 162, 255);
|
||||
top: 8px;
|
||||
right: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#loader-wrapper .load_title {
|
||||
font-family: "Open Sans";
|
||||
color: #fff;
|
||||
font-size: 19px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9999999999999;
|
||||
position: absolute;
|
||||
top: 60%;
|
||||
opacity: 1;
|
||||
line-height: 30px;
|
||||
}
|
||||
/* 美化选项内容 */
|
||||
#translate option {
|
||||
padding: 5px;
|
||||
background-color: #f9f9f9;
|
||||
color: rgb(72, 162, 255);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
#loader-wrapper .load_title span {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 13px;
|
||||
color: #fff;
|
||||
opacity: 0.5;
|
||||
}
|
||||
#translate {
|
||||
position: absolute;
|
||||
top: 11px;
|
||||
left: 50%;
|
||||
}
|
||||
/* 隐藏原生的 select 样式 */
|
||||
#translate select {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
padding: 7px;
|
||||
border: 1px solid rgb(159, 206, 255);
|
||||
border-radius: 5px;
|
||||
background-color: rgb(235, 245, 255);
|
||||
color: rgb(72, 162, 255);
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
/* 美化 select 的下拉箭头 */
|
||||
#translate::after {
|
||||
content: "▼"; /* Unicode编码,表示向下的箭头 */
|
||||
position: absolute;
|
||||
color: rgb(72, 162, 255);
|
||||
top: 8px;
|
||||
right: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/* 美化选项内容 */
|
||||
#translate option {
|
||||
padding: 5px;
|
||||
background-color: #f9f9f9;
|
||||
color: rgb(72, 162, 255);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
</div>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
<script>
|
||||
window.document.title = window.yanzhuAppTitle;
|
||||
</script>
|
||||
<!-- 全局配置-多语言切换-开始 -->
|
||||
<!-- <script src="<%= BASE_URL %>static/translate.js"></script> -->
|
||||
<script src="/cdn/tools/translate.js"></script>
|
||||
</div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
<script>
|
||||
window.document.title = window.yanzhuAppTitle;
|
||||
</script>
|
||||
<!-- 全局配置-多语言切换-开始 -->
|
||||
<!-- <script src="<%= BASE_URL %>static/translate.js"></script> -->
|
||||
<!-- <script src="/cdn/tools/translate.js"></script>
|
||||
<script>
|
||||
//设置本地语种(当前网页的语种)。如果不设置,默认就是 'chinese_simplified' 简体中文
|
||||
// translate.language.setDefaultTo('english') //设置默认翻译为的语种
|
||||
|
|
@ -296,6 +298,7 @@
|
|||
translate.execute()
|
||||
}, 2000)
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</script> -->
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -17,7 +17,6 @@
|
|||
<div id="index-map" style="width: 100%; height: 600px"></div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
|
@ -31,47 +30,6 @@ const data = reactive({
|
|||
});
|
||||
const emit = defineEmits(["docom"]);
|
||||
|
||||
// 百度地图API加载状态
|
||||
const baiduMapLoaded = ref(false);
|
||||
|
||||
// 加载百度地图API
|
||||
function loadBaiduMap() {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (window.BMapGL) {
|
||||
baiduMapLoaded.value = true;
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否正在加载
|
||||
if (window.baiduMapLoading) {
|
||||
const checkInterval = setInterval(() => {
|
||||
if (window.BMapGL) {
|
||||
clearInterval(checkInterval);
|
||||
baiduMapLoaded.value = true;
|
||||
resolve();
|
||||
}
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
window.baiduMapLoading = true;
|
||||
|
||||
const script = document.createElement('script');
|
||||
script.src = 'https://api.map.baidu.com/api?v=1.0&type=webgl&ak=eseRcUMFiUlnWA6miQLejNpvS70H8SRN&services=&callback=onBMapLoadComplete';
|
||||
script.async = true;
|
||||
script.defer = true;
|
||||
script.onerror = reject;
|
||||
|
||||
window.onBMapLoadComplete = function() {
|
||||
baiduMapLoaded.value = true;
|
||||
window.baiduMapLoading = false;
|
||||
resolve();
|
||||
};
|
||||
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
}
|
||||
|
||||
function doOk() {
|
||||
emit("docom", point.value, cityInfo.value);
|
||||
|
|
@ -83,24 +41,15 @@ function getAddress() {
|
|||
return addr;
|
||||
}
|
||||
|
||||
async function showDlg(opt) {
|
||||
function showDlg(opt) {
|
||||
title.value = opt?.title || "选择地址";
|
||||
show.value = true;
|
||||
|
||||
try {
|
||||
await loadBaiduMap();
|
||||
setTimeout(() => {
|
||||
initMap(opt);
|
||||
}, 400);
|
||||
} catch (error) {
|
||||
proxy.$modal.msgError("地图加载失败,请检查网络连接");
|
||||
console.error("百度地图加载失败:", error);
|
||||
}
|
||||
setTimeout(() => {
|
||||
initMap(opt);
|
||||
}, 400);
|
||||
}
|
||||
|
||||
function currentPoint() {
|
||||
if (!window.BMapGL) return;
|
||||
|
||||
let geolocation = new BMapGL.Geolocation();
|
||||
geolocation.enableSDKLocation();
|
||||
geolocation.getCurrentPosition((e) => {
|
||||
|
|
@ -113,8 +62,6 @@ function currentPoint() {
|
|||
}
|
||||
|
||||
function mapClick(e) {
|
||||
if (!window.BMapGL) return;
|
||||
|
||||
point.value = e.latlng;
|
||||
let myGeo = new BMapGL.Geocoder({ extensions_town: true });
|
||||
myGeo.getLocation(e.latlng, (r) => {
|
||||
|
|
@ -137,9 +84,8 @@ function mapClick(e) {
|
|||
}
|
||||
|
||||
function initMap(opt) {
|
||||
if (!window.BMapGL) return;
|
||||
|
||||
let imap = new BMapGL.Map("index-map");
|
||||
|
||||
map.value = imap;
|
||||
let point = new BMapGL.Point(116.404, 39.915);
|
||||
//初始化地图,设置中心点坐标和地图级别
|
||||
|
|
@ -174,7 +120,6 @@ function initMap(opt) {
|
|||
currentPoint();
|
||||
}
|
||||
}
|
||||
|
||||
function initMapData(opt) {
|
||||
if (opt.latitude && opt.longitude) {
|
||||
point.value = {};
|
||||
|
|
@ -193,10 +138,7 @@ defineExpose({
|
|||
showDlg,
|
||||
initMapData,
|
||||
});
|
||||
|
||||
function search() {
|
||||
if (!window.BMapGL) return;
|
||||
|
||||
if (!data.txtAarea) {
|
||||
proxy.$modal.msgError("请输入要搜索的地址");
|
||||
return;
|
||||
|
|
@ -212,7 +154,6 @@ function search() {
|
|||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.baidu-map-dialog {
|
||||
.el-dialog__body {
|
||||
|
|
|
|||
|
|
@ -1,26 +1,84 @@
|
|||
<template>
|
||||
<div class="custom-viewpoint-container">
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>视点管理</span>
|
||||
<el-button type="primary" @click="AddViewPoint">新增视点</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-table :data="viewpointList" border>
|
||||
<el-table-column prop="name" label="视点名称" width="180" />
|
||||
<el-table-column prop="description" label="描述" />
|
||||
<el-table-column label="操作" width="150">
|
||||
<template v-slot="scope">
|
||||
<el-button type="primary" text @click="ApplyViewPoint(scope.row)">应用</el-button>
|
||||
<el-button type="danger" text @click="DelViewPoint(scope.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
<div class="custom-viewpoint">
|
||||
<el-tabs v-model="tab" size="small" @tab-click="ChangeTab">
|
||||
<el-tab-pane label="漫游设置" name="tab1">
|
||||
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="30%">
|
||||
<el-form-item label="漫游名称" prop="name">
|
||||
<el-input v-model="form.name" style="width: 100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="移动速度" prop="moveRate" v-if="isClient && false">
|
||||
<el-radio-group v-model="form.moveRate" size="small">
|
||||
<el-radio-button v-for="(it, idx) in speed" :label="it.label" :value="it.value"
|
||||
:key="idx" />
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="漫游时长" prop="time">
|
||||
<el-input-number v-model="form.time" :step="1" :min="1" style="width: 100%" />
|
||||
<template #append>秒</template>
|
||||
</el-form-item>
|
||||
<el-form-item label="轨迹创建">
|
||||
<el-button @click="GetViewPort">添加轨迹点</el-button>
|
||||
</el-form-item>
|
||||
<div>
|
||||
<el-table :data="form.viewPortPoints" border style="width: 100%" max-height="50vh">
|
||||
<el-table-column prop="name" label="视点">
|
||||
<template #default="scope">{{ '视点' + (++scope.$index) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template #default="scope">
|
||||
<el-button type="text" @click="DelViewPoint(scope.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<el-form-item style="margin-top: 10px">
|
||||
<el-button @click="StartViewPortRoam">开始漫游</el-button>
|
||||
<el-button @click="StopViewPortRoam">结束漫游</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="漫游历史" name="tab2">
|
||||
<el-table :data="roamList" style="width: 100%">
|
||||
<el-table-column prop="name" label="名称" />
|
||||
<el-table-column label="操作" width="220px" class-name="opt-td">
|
||||
<template #default="scope">
|
||||
<el-button v-if="scope.row.play === 0" type="primary" link
|
||||
@click="playIR(scope.row)">播放</el-button>
|
||||
<el-button v-else-if="scope.row.play === 1" type="primary" auto-insert-spacelink
|
||||
@click="playIRPause(scope.row)">暂停</el-button>
|
||||
<el-button v-else-if="scope.row.play === 2" type="primary" link
|
||||
@click="playContinue(scope.row)">继续</el-button>
|
||||
<el-button link @click="playCancel(scope.row)" type="primary">取消</el-button>
|
||||
<el-button link @click="delCamera(scope.row, scope.$index)" type="danger">删除</el-button>
|
||||
<el-button link @click="renamed(scope.row)" type="success">改名</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination-container">
|
||||
<el-pagination v-model:current-page="pagination.current" v-model:page-size="pagination.pageSize"
|
||||
:page-sizes="[10, 20, 30, 50]" :total="pagination.total" layout="total, prev, pager, next"
|
||||
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-dialog title="漫游重命名" v-model="visibleRenamed" width="280px" :before-close="() => visibleRenamed = false">
|
||||
<el-form ref="formRenamedRef" :rules="rulesRenamed" :model="formRenamed" label-width="80px">
|
||||
<el-form-item label="漫游名称" prop="name">
|
||||
<el-input v-model="formRenamed.name" maxlength="20" placeholder="请输入名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" v-show="false">
|
||||
<el-input type="textarea" v-model="formRenamed.remark" :rows="4" placeholder="备注"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visibleRenamed = false">取消</el-button>
|
||||
<el-button type="primary" @click="handSaveRenamed">确定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { roamingAdd, roamingGet, roamingUpdateByName, roamingDeleteById } from '@/api/bim/bim.js'
|
||||
import { _isMobile } from '@/utils/public'
|
||||
|
|
@ -275,9 +333,9 @@ export default {
|
|||
})
|
||||
},
|
||||
resetScene() {
|
||||
try{
|
||||
try {
|
||||
api.Camera.stopViewPortRoam()
|
||||
}catch(e){
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
api.Model.location(api.m_model.keys().toArray()[0])
|
||||
|
|
@ -358,36 +416,35 @@ export default {
|
|||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.custom-viewpoint-container {
|
||||
width: 360px;
|
||||
padding: 0px 10px 10px;
|
||||
.custom-viewpoint {
|
||||
width: 360px;
|
||||
padding: 0px 10px 10px;
|
||||
|
||||
.el-tabs__content {
|
||||
padding: 0px;
|
||||
|
||||
.opt-td {
|
||||
.cell {
|
||||
.el-tabs__content {
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.opt-td {
|
||||
.cell {
|
||||
padding: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pagination-container {
|
||||
margin-top: 0px;
|
||||
height: 32px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
.pagination-container {
|
||||
margin-top: 0px;
|
||||
height: 32px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
.el-pagination {
|
||||
font-size: 12px;
|
||||
.el-pagination {
|
||||
font-size: 12px;
|
||||
|
||||
.el-pagination__total,
|
||||
.el-pagination__sizes {
|
||||
margin-right: 16px;
|
||||
}
|
||||
.el-pagination__total,
|
||||
.el-pagination__sizes {
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,44 +1,34 @@
|
|||
<template>
|
||||
<div class="flow-form-container">
|
||||
<div class="form-header">
|
||||
<el-button type="primary" @click="saveFormJson">
|
||||
<el-icon><Promotion /></el-icon>保存
|
||||
</el-button>
|
||||
<el-button type="success" @click="previewForm">预览</el-button>
|
||||
</div>
|
||||
<div class="form-content">
|
||||
<el-alert
|
||||
title="表单设计器使用说明"
|
||||
type="info"
|
||||
description="1. 从左侧拖拽组件到中间画布区域 2. 点击组件可进行属性配置 3. 点击保存按钮保存表单设计"
|
||||
show-icon
|
||||
/>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<div class="components-panel">
|
||||
<h3>组件库</h3>
|
||||
<!-- 组件列表 -->
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="canvas-panel">
|
||||
<h3>设计区域</h3>
|
||||
<!-- 设计画布 -->
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<div class="properties-panel">
|
||||
<h3>属性配置</h3>
|
||||
<!-- 属性面板 -->
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div>
|
||||
<v-form-designer ref="vfDesigner" :designer-config="designerConfig">
|
||||
<!-- 保存按钮 -->
|
||||
<template #customSaveButton>
|
||||
<el-button type="text" @click="saveFormJson"><el-icon>
|
||||
<Promotion />
|
||||
</el-icon>保存</el-button>
|
||||
</template>
|
||||
</v-form-designer>
|
||||
<!--系统表单信息-->
|
||||
<el-dialog :title="formTitle" v-model="formOpen" width="500px" append-to-body>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="表单名称" prop="formName">
|
||||
<el-input v-model="form.formName" placeholder="请输入表单名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="FlowForm">
|
||||
import {addForm, getForm, updateForm} from "@/api/flowable/form";
|
||||
import { addForm, getForm, updateForm } from "@/api/flowable/form";
|
||||
import { StrUtil } from '@/utils/StrUtil'
|
||||
|
||||
// 获取当前组件实例
|
||||
|
|
@ -69,7 +59,7 @@ const data = reactive({
|
|||
},
|
||||
});
|
||||
|
||||
const { form, rules , designerConfig} = toRefs(data);
|
||||
const { form, rules, designerConfig } = toRefs(data);
|
||||
|
||||
onMounted(() => {
|
||||
const formId = proxy.$route.query && proxy.$route.query.formId;
|
||||
|
|
@ -81,10 +71,10 @@ onMounted(() => {
|
|||
})
|
||||
form.value = res.data;
|
||||
})
|
||||
}else {
|
||||
} else {
|
||||
proxy.$nextTick(() => {
|
||||
// 加载表单json数据
|
||||
vfDesigner.value.setFormJson({"widgetList":[],"formConfig":{"modelName":"formData","refName":"vForm","rulesName":"rules","labelWidth":80,"labelPosition":"left","size":"","labelAlign":"label-left-align","cssCode":"","customClass":"","functions":"","layoutType":"PC","onFormCreated":"","onFormMounted":"","onFormDataChange":"","onFormValidate":""}})
|
||||
vfDesigner.value.setFormJson({ "widgetList": [], "formConfig": { "modelName": "formData", "refName": "vForm", "rulesName": "rules", "labelWidth": 80, "labelPosition": "left", "size": "", "labelAlign": "label-left-align", "cssCode": "", "customClass": "", "functions": "", "layoutType": "PC", "onFormCreated": "", "onFormMounted": "", "onFormDataChange": "", "onFormValidate": "" } })
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
@ -112,7 +102,7 @@ function submitForm() {
|
|||
});
|
||||
}
|
||||
// 关闭当前标签页并返回上个页面
|
||||
const obj = { path: "/flowable/form", query: { t: Date.now()} };
|
||||
const obj = { path: "/flowable/form", query: { t: Date.now() } };
|
||||
proxy.$tab.closeOpenPage(obj);
|
||||
}
|
||||
});
|
||||
|
|
@ -136,14 +126,14 @@ function reset() {
|
|||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
body {
|
||||
margin: 0; /* 如果页面出现垂直滚动条,则加入此行CSS以消除之 */
|
||||
margin: 0;
|
||||
/* 如果页面出现垂直滚动条,则加入此行CSS以消除之 */
|
||||
}
|
||||
.el-container.main-container{
|
||||
|
||||
.el-container.main-container {
|
||||
background: #fff;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="login main-login">
|
||||
<el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
|
||||
<h3 class="title">{{title}}</h3>
|
||||
<h3 class="title">{{ title }}</h3>
|
||||
<el-form-item prop="username" style="margin-top:60px;">
|
||||
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
|
||||
<template #prefix>
|
||||
|
|
@ -45,7 +45,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getCodeImg } from '@/api/login'
|
||||
import Cookies from 'js-cookie'
|
||||
|
|
@ -139,11 +138,12 @@ function getCookie() {
|
|||
|
||||
getCode()
|
||||
getCookie()
|
||||
setTimeout(()=>{
|
||||
translate.execute();
|
||||
},1000);
|
||||
setTimeout(() => {
|
||||
if (translate && translate.execute) {
|
||||
translate.execute();
|
||||
}
|
||||
}, 1000);
|
||||
</script>
|
||||
|
||||
<style lang='scss'>
|
||||
.login.main-login {
|
||||
display: flex;
|
||||
|
|
@ -261,11 +261,11 @@ setTimeout(()=>{
|
|||
border: solid 1px #1262b5;
|
||||
}
|
||||
|
||||
.el-checkbox__input + .el-checkbox__label {
|
||||
.el-checkbox__input+.el-checkbox__label {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.el-checkbox__input.is-checked + .el-checkbox__label {
|
||||
.el-checkbox__input.is-checked+.el-checkbox__label {
|
||||
color: var(--el-checkbox-checked-text-color) !important;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,37 @@
|
|||
<template>
|
||||
<div class="cost-month-container">
|
||||
<el-dialog v-model="data.showPop2" title="确认取消" width="30%">
|
||||
<span>确定要取消当前操作吗?</span>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button size="small" @click="data.showPop2 = false">取消</el-button>
|
||||
<el-button size="small" type="primary" @click="confirmCancel">确定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div class="cost-month" style="border:solid 1px #409eff;margin: 12px 0px;padding: 6px 12px 0px;position: relative;">
|
||||
<el-popover placement="top" :visible="data.showPop2" ref="pop" width="300px">
|
||||
<p>选择年份</p>
|
||||
<div style="margin-bottom: 12px;">
|
||||
<el-date-picker v-model="data.selYear" type="year" placeholder="选择年份" style="width:100%"
|
||||
:picker-options="{ disabledDate: doPick }">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div style="text-align: right; margin: 0">
|
||||
<el-button size="small" type="text" @click="data.showPop2 = false">取消</el-button>
|
||||
<el-button type="primary" size="small" @click="doAddYear">确定</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button size="small" type="success" @click="data.showPop2 = true" style="margin-right: 12px;"
|
||||
class="btn-add-year" round>增加年份</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
<el-tabs type="card" v-model="data.activeName">
|
||||
<el-tab-pane v-for="(it, idx) in data.monthInv" :label="'' + it.year" :name="'' + it.year" :key="idx">
|
||||
<el-row>
|
||||
<el-col v-for="(item, idxx) in it.value" :key="idxx" :span="12">
|
||||
<el-form-item :label="data.names[item.month]" class="w200"
|
||||
:class="item.money * 1 < 0 ? 'txt-error' : ''">
|
||||
<el-input-number :precision="2" v-model="item.money" placeholder="年度投资">
|
||||
</el-input-number>
|
||||
<span class="sp-unit">万元</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { addMonthInvestment } from '@/api/manage/costOutput.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
|
|
|||
|
|
@ -1,17 +1,32 @@
|
|||
<template>
|
||||
<div class="cost-year-container">
|
||||
<el-dialog v-model="data.showPop" title="确认取消" width="30%">
|
||||
<span>确定要取消当前操作吗?</span>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button size="small" @click="doCancel">取消</el-button>
|
||||
<el-button size="small" type="primary" @click="confirmCancel">确定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div class="cost-year" style="border:solid 1px #409eff;margin: 12px 0px;padding: 12px 12px 0px;position: relative;">
|
||||
<el-popover placement="top" :visible="data.showPop2" width="300px">
|
||||
<p>选择年份</p>
|
||||
<div style="margin-bottom: 12px;">
|
||||
<el-date-picker v-model="data.selYear" type="year" placeholder="选择年份" style="width:100%"
|
||||
:picker-options="{ disabledDate: doPick }">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div style="text-align: right; margin: 0">
|
||||
<el-button size="small" type="text" @click="doCancel">取消</el-button>
|
||||
<el-button type="primary" size="small" @click="doAddYear">确定</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button class="btn-add-year" size="small" @click="data.showPop2 = true" type="success"
|
||||
style="margin-right: 12px;" round>增加年份</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
<el-tabs type="card" v-model="data.activeName">
|
||||
<el-tab-pane v-for="(it, idx) in data.yearInv" :label="'' + it.year" :name="'' + it.year" :key="idx">
|
||||
<el-form-item label="年度投资" class="w400" :class="it.money * 1 < 0 ? 'txt-error' : ''">
|
||||
<el-input-number :precision="2" v-model="it.money" placeholder="年度投资">
|
||||
</el-input-number>
|
||||
<span class="sp-unit">万元</span>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { addYearInvestment } from '@/api/manage/costOutput.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
|
|
|||
|
|
@ -57,12 +57,12 @@
|
|||
<el-tag effect="plain"> {{ scope.row.projectTimeLimit + " 天" }} </el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="总投资" align="center" prop="totalInvestment">
|
||||
<el-table-column label="总投资" align="center" prop="totalInvestment" width="120">
|
||||
<template #default="scope">
|
||||
<el-tag effect="dark"> {{ scope.row.totalInvestment + " 万元" }} </el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="合同金额" align="center" prop="contractAmount">
|
||||
<el-table-column label="合同金额" align="center" prop="contractAmount" width="120">
|
||||
<template #default="scope">
|
||||
<el-tag effect="dark"> {{ scope.row.contractAmount + " 万元" }} </el-tag>
|
||||
</template>
|
||||
|
|
|
|||
Loading…
Reference in New Issue