Commit 88de374d authored by xinzhedeai's avatar xinzhedeai

add: daping home

parent 70a6c43d
Pipeline #583 canceled with stages
var CoordTransform = new function(){
//定义一些常量
const BD_FACTOR = (3.14159265358979324 * 3000.0) / 180.0;
const PI = 3.1415926535897932384626;
const RADIUS = 6378245.0;
const EE = 0.00669342162296594323;
/**
* 判断是否在国内,不在国内则不做偏移
* @param lng
* @param lat
* @returns {boolean}
*/
function out_of_china(lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
};
return {
/**
* BD-09(百度坐标系) To GCJ-02(火星坐标系)
* @param lng
* @param lat
* @returns {number[]}
*/
BD09ToGCJ02: function(){
let x = +lng - 0.0065;
let y = +lat - 0.006;
let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * BD_FACTOR);
let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * BD_FACTOR);
let gg_lng = z * Math.cos(theta);
let gg_lat = z * Math.sin(theta);
return [gg_lng, gg_lat];
},
/**
* GCJ-02(火星坐标系) To BD-09(百度坐标系)
* @param lng
* @param lat
* @returns {number[]}
* @constructor
*/
GCJ02ToBD09: function(){
let z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * BD_FACTOR);
let theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * BD_FACTOR);
let bd_lng = z * Math.cos(theta) + 0.0065;
let bd_lat = z * Math.sin(theta) + 0.006;
return [bd_lng, bd_lat];
},
/**
* GCJ-02(火星坐标系) To WGS-84(世界大地坐标系)
* @param lng
* @param lat
* @returns {number[]}
* @constructor
*/
GCJ02ToWGS84: function(lng, lat){
if (out_of_china(lng, lat)) {
return [lng, lat];
} else {
let d = this.delta(lng, lat);
let mgLng = lng + d[0];
let mgLat = lat + d[1];
return [lng * 2 - mgLng, lat * 2 - mgLat];
}
},
/**
*
* @param lng
* @param lat
* @returns {number[]}
*/
delta: function(lng, lat){
let dLng = this.transformLng(lng - 105, lat - 35);
let dLat = this.transformLat(lng - 105, lat - 35);
const radLat = (lat / 180) * PI;
let magic = Math.sin(radLat);
magic = 1 - EE * magic * magic;
const sqrtMagic = Math.sqrt(magic);
dLng = (dLng * 180) / ((RADIUS / sqrtMagic) * Math.cos(radLat) * PI);
dLat = (dLat * 180) / (((RADIUS * (1 - EE)) / (magic * sqrtMagic)) * PI);
return [dLng, dLat];
},
transformLng: function(lng, lat){
lat = +lat;
lng = +lng;
let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0;
ret += ((20.0 * Math.sin(lng * PI) + 40.0 * Math.sin((lng / 3.0) * PI)) * 2.0) / 3.0;
ret += ((150.0 * Math.sin((lng / 12.0) * PI) + 300.0 * Math.sin((lng / 30.0) * PI)) * 2.0) / 3.0;
return ret;
},
transformLat: function(lng, lat){
let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0;
ret += ((20.0 * Math.sin(lat * PI) + 40.0 * Math.sin((lat / 3.0) * PI)) * 2.0) / 3.0;
ret += ((160.0 * Math.sin((lat / 12.0) * PI) + 320 * Math.sin((lat * PI) / 30.0)) * 2.0) / 3.0;
return ret;
},
/**
* WGS-84(世界大地坐标系) To GCJ-02(火星坐标系)
* @param lng
* @param lat
* @returns {number[]}
*/
WGS84ToGCJ02: function(lng, lat){
if (this.out_of_china(lng, lat)) {
return [lng, lat];
} else {
let d = this.delta(lng, lat);
return [lng + d[0], lat + d[1]];
}
},
out_of_china: function(lng, lat){
return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
},
};
};
export var CoordTransform = CoordTransform;
\ No newline at end of file
import Highcharts from 'highcharts';
import HTreemap from 'highcharts/modules/treemap.js';
import Highcharts3D from 'highcharts/highcharts-3d.js';
import Highstock from 'highcharts/highstock.js';
//import oldie from 'highcharts/oldie.js';
//import cylinder from 'highcharts/cylinder.js';
HTreemap(Highcharts); // treemap 类型
Highcharts3D(Highcharts); // 3D 类型
var Highchart = function(){
/**
* 图表数据格式化
* @param: {Array} list
* @param: {Object} opts [standOut(突出最大值)]
* @example1:
var chartData = formatSeriesList(data, {value:'num'});
input:
[
{"name":"高区应急行业","num":3},
{"name":"0705行业","num":2},
{"name":"船舶工业行业","num":2},
]
output:
{
"seriesData":[
{"0":"上海","1":24.25,"name":"高区应急行业","y":3},
{"0":"卡拉奇","1":23.5,"name":"0705行业","y":2},
{"0":"北京","1":21.51,"name":"船舶工业行业","y":2},
],
"sum":7
}
* @example2:
input:
var list = [{"name":"高区应急行业","num":16},{"name":"船舶工业行业","num":7}];
var colors = ['#2CAFFE', '#90ED7D', '#8085E9', '#F15C80', '#E4D354'];
var series = Highchart.formatSeriesList(list, {value:'num', colors:colors});
output:{
"seriesData":[{"name":"高区应急行业","y":16,"color":"#2CAFFE"},{"name":"船舶工业行业","y":7,"color":"#90ED7D"},],
"sum":28
}
* @return:
* @author: Kimber
* @updatetime: 2021/12/25
* @createtime: 2021/12/25
*/
var formatSeriesList = function(list, opts){
var sdata = [], sum = 0, maxVal = 0, mark = 0, colors = opts.colors || [];
var len = list.length;
for(var i=0; i<len; i++){
var item = list[i], color = colors[i];
var value = item[opts.value] * 1;
value > maxVal && (maxVal = value, mark = i);
var nitem = {name:item[opts.name || 'name'], y:value}
item.color && (nitem['color'] = item.color);
color && (nitem['color'] = color);
sdata.push(nitem);
sum += value;
};
if(opts.standOut){
sdata[mark].sliced = true;
sdata[mark].selected = true;
};
return {seriesData:sdata, sum:sum};
};
/**
* series数据格式化
* @param: {Array} list
* @param: {Object} opts [standOut(突出最大值)]
* @example1:
var chartData = Highchart.seriesDataFormat(list, {datekey:'date', dataReverse:true,});
* @return:
* @author: Kimber
* @updatetime: 2022/12/28
* @createtime: 2022/12/28
*/
var seriesDataFormat = function(data, opts){
var names = data.names || [], list = data.list || data.lists, series = [], categories = [],
maxVal = 0;
if(names[0] && list){
var colors = ['#7CB5EC', '#90ED7D', '#F7A35C', '#8085E9', '#F15C80', '#E4D354', '#2B908F', '#F45B5B', '#91E8E1', '#0769CB', '#00ABBD', '#ffd886', "#9F2E61", "#4D670C"];
var len = names.length;
for(var i=0; i<len; i++){
var item = names[i];
var serie = {name:item.name, data:[], key:item.key, type:data.chartType, color:colors[i]};
opts && serie.type && (serie.type = opts.type);
series.push(serie);
};
for(var item of list){
var values = item.values;
//var datetime = item[opts.datekey || 'dateUnit'];
//var time = datetime.indexOf(' ') > 0 ? datetime.split(' ')[1] : datetime;
var timestamp = item['date'];
categories.push(timestamp);
for(var serie of series){
var value = values[serie.key] * 1;
Math.abs(value) > maxVal && (maxVal = Math.abs(value));
serie.data.push(opts.dataReverse ? [value, timestamp] : [timestamp, value]);
};
};
};
return {series:series, categories:categories, maxVal:maxVal}
};
/**
* 递归继承, 新对象在先, 原对象在后, 节省运行效率
* @param: {Object} inherit // 继承者
* @param: {Object} give // 传承者
* @param: {Function} call // 方法回调, 于在在特殊情况自定义
* @example1: var options = reversExtends(option, opts);
* @return:
* @author: Kimber
* @updatetime: 2022/1/12
* @createtime: 2022/1/12
*/
var reversExtends = function(inherit, give, fn){
return (function run(main, assist){
var keys = Object.keys(assist), i = 0;
return (function loop(){
var key = keys[i]; i++;
if(key){
fn && fn(key, main, assist);
return typeof main[key] === 'object' ? run(main[key], assist[key]) : (main[key] = assist[key]), loop();
}else{
return inherit;
};
})();
})(inherit, give);
};
/**
* 根据报警级别识别近两条报警线
* @param: {Number} level
* @param: {Object} value
* @example1: series = discernValidAlarmValue(data.alarm, data.lists, series);
* @return:
* @author: Kimber
* @updatetime: 2022/4/18(周一)
* @createtime: 2022/4/18(周一)
*/
var discernValidAlarmValue = function(alarms, list, series, direction, opts){
var xLength = (list || []).length, maxAlarm = 0, opts = opts || {};
if(alarms && xLength){
var value = alarms.value;
// discern
var levelDist = [
{color:'red', name:'红色报警线'},
{color:'orange', name:'橙色报警线'},
{color:'yellow', name:'黄色报警线'},
{color:'blue', name:'蓝色报警线'}],
alarmLine = {}, setAlarmSerie = function(value, name, color){
// 修改蓝色色值
(color === 'blue') && (color = '#3BAFFB');
var sx = list[0].date, ex = list[xLength-1].date;
var serie = {name:name, type:'spline', data:[{x:sx, y:value}, {x:ex, y:value}],
color:color,
enableMouseTracking:false,
legend:false,
showInLegend:false,
dashStyle:'ShortDot',
lineWidth:opts.lineWidth || 1,
states:{
inactive:{
opacity:opts.opacity
},
},
dataLabels:{
enabled:opts.valEnabled || false, // 数据值, 2022/11/11(周五) 因多条报警线暂时关闭
//backgroundColor:'red',
verticalAlign:'middle',
padding:0,
defer:false,
allowOverlap:true,
color:color,
style:{
textOutline:'none',
},
},
tooltip:{
//footerFormat:'',
//pointFormat:'',
headerFormat:'',
//nullFormat:'',
},
marker:{
enabled:false
},
zIndex:-10,
};
series.push(serie);
};
/* 智能报警线
var level = (~~alarms.alarmLevel || levelDist.length+1) - 1;
var nearLevel = level ? level - 1 : level;
var alarm = levelDist[level];
var nearAlarm = levelDist[nearLevel];
nearAlarm.value = value[nearAlarm.color];
alarmLine[nearAlarm.color] = nearAlarm;
if(alarm){
alarm.value = value[alarm.color];
alarmLine[alarm.color] = alarm;
}; */
// 多条报警线
for(var item of levelDist){
item.value = value[item.color];
alarmLine[item.color] = item;
};
// add
for(var key in alarmLine){
var line = alarmLine[key];
line.value > maxAlarm && (maxAlarm = line.value);
setAlarmSerie(line.value, line.name, line.color);
direction && setAlarmSerie(0-line.value, line.name, line.color);
};
};
return {series, maxAlarm};
};
var addAlarmLine = function(alarms, list, series, direction){
var xLength = (list || []).length;
if(alarms && xLength){
var value = alarms.value;
// discern
var levelDist = [
{color:'red', name:'红色报警线'},
{color:'orange', name:'橙色报警线'},
{color:'yellow', name:'黄色报警线'},
{color:'blue', name:'蓝色报警线'}],
alarmLine = {}, setAlarmSerie = function(value, name, color){
var serie = {name:name, type:'spline', data:[{x:0, y:value}, {x:xLength, y:value}], color:color,
//enableMouseTracking:false,
legend:false,
showInLegend:false,
dashStyle:'ShortDot',
states:{
inactive:{
opacity:1
},
},
};
series.push(serie);
};
for(var item of levelDist){
var value = alarms[item.color] * 1;
if(value){
setAlarmSerie(value, item.name, item.color);
direction && setAlarmSerie(0-value, item.name, item.color);
};
};
};
return series;
};
var template = {
pie: function(el, list, opts){
var chartConfig = opts.chartConfig || {};
var chartData = {}, seriesData = [];
if(!opts.isSeriesData){
// opts.formatLimit = {datekey:'date'}
chartData = formatSeriesList(list, {value:'num'});
seriesData = chartData.seriesData;
};
var options = {
chart: {
backgroundColor:'transparent',
},
title: {
floating:true,
text: '总数<br/>'+chartData.sum,
verticalAlign: 'middle',
y:22,
floating: true,
style:{
color:'#00f6ff',
}
},
tooltip: {
pointFormat: '{seriesData.name}: <b>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
borderWidth: 0,
minSize:130,
cursor: 'pointer',
dataLabels: {
enabled: true,
distance:10,
format: '<b>{point.name}</b>: {point.percentage:.1f} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
},
}
},
credits: {
enabled: false
},
series: [{
type: 'pie',
innerSize: '70%',
name: '设备数量',
data: seriesData
}]
};
options = reversExtends(options, chartConfig, opts.callback);
return new Highcharts.chart(el, options, function(c) { // 图表初始化完毕后的会掉函数
opts.chartCallback && opts.chartCallback(c);
});
},
/**
* 浮动菜单容器
* @param: {Dom} el
* @param: {Object} data
* @param: {Object} opts {chartConfig:{}, callback:Function}
* @example1:
* @return:
* @author: Kimber
* @updatetime: 2022/1/11
* @createtime: 2022/1/11
*/
high: function(el, data, opts){
var list = data.list;
data.chartType = data.range === 'month' ? 'line' : 'column';
var chartConfig = opts.chartConfig || {};
var chartData, categories = [], series = [], maxVal = null;
if(opts.isSeriesData){
}else{
chartData = seriesDataFormat(data, {});
categories = chartData.categories;
series = chartData.series;
};
// add alarm line
var alarmData = discernValidAlarmValue(data.alarm, data.lists, series, opts.warningLine);
//series = addAlarmLine(data.alarm, data.lists, series, opts.warningLine);
// 识别最大值
var maxVal = chartData && chartData.maxVal > alarmData.maxAlarm ? chartData.maxVal : alarmData.maxAlarm;
var option = {
chart: {
type: data.chartType,
backgroundColor:'transparent',
//marginTop:30,
marginBottom:22,
marginLeft:30,
},
title: {
text: ''
},
subtitle: {
text: ''
},
xAxis: {
type: 'datetime' || 'category',
labels: {
rotation:0, // 设置轴标签旋转角度
style:{
color:'#fff'
},
y:15,
},
categories: categories[0] && categories,
lineWidth:0,
//lineColor:'#ff0000',
gridLineColor:'#aaa',
tickLength:0, // 刻度线
dateTimeLabelFormats: {
millisecond: '%H:%M:%S.%L',
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%m-%d',
week: '%m-%d',
month: '%Y-%m',
year: '%Y'
}
},
yAxis: {
title: {
text: ''
},
labels:{
style:{
color:'#fff'
},
x:-6,
},
gridLineColor:'#0F5680',
//minorGridLineWidth: 5,
//gridLineWidth: 5,
max:opts.maxValDev ? maxVal + maxVal * opts.maxValDev : null,
},
plotOptions: {
column: {
borderWidth: 0,
//y:50,
//itemMarginTop:50,
},
bar:{
borderWidth: 0,
},
},
legend: {
enabled: series.length > 1 ? true : false,
// 图例定位
layout: 'horizontal', // 水平布局:“horizontal”, 垂直布局:“vertical”
floating: false, // 图列是否浮动
align: 'right',
// 图例容器
//width:'100%', // number || String
padding:2, // 内边距
margin:2,
borderRadius:5,
//borderWidth:1,
verticalAlign: 'top',
// 图例项
//itemWidth:120, // 宽度
itemDistance:10, // 间距 20
y:-10,
itemMarginTop:2,
itemStyle:{color:'#fff',},
itemHoverStyle:{color:'#fff',},
},
credits: {
enabled: false
},
tooltip: {
/* formatter: function (e) {
return this.series.name + ":"+ this.key +'<br/>'+ this.y.toFixed(3)+' ' + data.unit;
}, */
pointFormat: '{series.name}:{point.y} ' + data.unit,
dateTimeLabelFormats: {
millisecond: '%H:%M:%S.%L',
second: '%H:%M:%S',
minute: '%m-%d %H:%M',
hour: '%m-%d %H:%M',
day: '%m-%d %H:%M',
week: '%m-%d %H:%M',
month: '%Y-%m',
year: '%Y'
}
},
series: series
};
Highcharts.setOptions({
global: {
useUTC: false
},
});
var options;
if(opts.isSeriesData){
options = reversExtends(option, chartConfig, opts.callback);
if(opts.type === "t_10"){
delete options.legend;
delete options.xAxis;
delete options.yAxis;
};
}else{
options = reversExtends(option, chartConfig, opts.callback);
};
return new Highcharts.chart(el, options);
},
rich: function(el, list, opts){
var chartConfig = opts.chartConfig || {};
var chartData, categories = [], series = [], maxVal = null, unit = opts.danwei || '';
if(opts.isSeriesData){
}else{
chartData = seriesDataFormat(list, {datekey:'date'});
categories = chartData.categories;
series = chartData.series;
};
var option = {
chart: {
//type: '',
backgroundColor:'transparent',
//marginTop:30,
//marginBottom:30,
//marginLeft:30,
zoomType: 'x', // xy
},
title: {
text: ''
},
subtitle: {
text: ''
},
tooltip:{
enabled:false,
borderWidth:10,
},
xAxis: {
type: 'datetime',
labels: {
rotation:0, // 设置轴标签旋转角度
style:{
color:'#fff'
},
//y:15,
},
categories: categories[0] && categories,
lineWidth:0,
//lineColor:'#ff0000',
gridLineColor:'#aaa',
dateTimeLabelFormats: {
millisecond: '%H:%M:%S.%L',
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%m-%d',
week: '%m-%d',
month: '%Y-%m',
year: '%Y'
}
},
yAxis: {
title: {
text: ''
},
labels:{
style:{
color:'#fff'
},
x:-6,
},
gridLineColor:'#aaa',
max:null,
},
plotOptions: {
column: {
borderWidth: 0,
//y:50,
//itemMarginTop:50,
},
bar:{
borderWidth: 0,
},
},
tooltip: {
// {point.y:.4f} // 保留4位小数
//headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}:</td>' +
'<td style="padding:0"><b>{point.y}'+unit+'</b> </td></tr>',
footerFormat: '</table>',
shared: true,
useHTML: true,
dateTimeLabelFormats: {
millisecond: '%H:%M:%S.%L',
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%m-%d %H时',
week: '%m-%d',
month: '%Y-%m',
year: '%Y'
}
},
legend: {
enabled: series.length > 1 ? true : false,
// 图例定位
layout: 'horizontal', // 水平布局:“horizontal”, 垂直布局:“vertical”
floating: false, // 图列是否浮动
align: 'right',
// 图例容器
//width:'100%', // number || String
padding:2, // 内边距
margin:2,
borderRadius:5,
//borderWidth:1,
verticalAlign: 'top',
// 图例项
//itemWidth:120, // 宽度
itemDistance:10, // 间距 20
y:-10,
itemMarginTop:2,
itemStyle:{},
itemHoverStyle:{},
},
credits: {
enabled: false
},
series: series
};
Highcharts.setOptions({
global: {
useUTC: false
},
lang:{
resetZoom:'重置缩放比例',
},
});
var options;
if(opts.isSeriesData){
options = reversExtends(option, chartConfig, opts.callback);
}else{
options = reversExtends(option, chartConfig, opts.callback);
};
return new Highcharts.chart(el, options, function(c) { // 图表初始化完毕后的会掉函数
opts.chartCallback && opts.chartCallback(c);
});
},
/**
* 注释标题
* @param: {Dom} el
* @param: {Object} data
* @param: {Object} opts {chartConfig:{}, callback:Function}
* @example1:
var opts = {
chartConfig:{
chart:{
type: 'column',
marginTop:0,
marginLeft:25,
marginBottom:0,
spacingLeft:0,
spacingBottom:-5,
},
series: [{
name: '',
tooltip: {
valueDecimals: 2
},
}]
},
notExtendsOptions:false,
};
Highchart.template.stock(wrap32, data, opts);
* @return:
* @version: V0.1
* @author: Kimber
* @updatetime: 2024/7/12(周五)
* @createtime: 2024/7/12(周五)
*/
stock: function(el, data, opts){
var chartData = formatSeriesList(data, {value:'num'});
var chartConfig = opts.chartConfig || {};
var option = {
chart:{
backgroundColor:'transparent',
},
rangeSelector: { // 关闭选择列表
enabled: false
},
title: {
//text: 'AAPL Stock Price'
},
xAxis: {
type: 'datetime',
max:10,
labels: {
rotation:0, // 设置轴标签旋转角度
style:{
color:'#ffffff'
},
y:2,
enabled:false,
},
lineWidth:0,
gridLineColor:'#aaa',
tickLength:0, // 刻度线
alignTicks:false,
},
yAxis: {
title: {
text: ''
},
labels:{
style:{
color:'#fff'
},
x:-5,
},
gridLineColor:'#00C4FE',
opposite: false,
offset: 0,
lineWidth: 1,
lineColor:'#00C4FE'
},
plotOptions: {
column: {
borderWidth: 0,
//y:50,
//itemMarginTop:50,
},
bar:{
borderWidth: 0,
},
},
navigator : {
enabled : false
},
scrollbar : {
enabled : true,
barBackgroundColor: '#00C4FE',
barBorderRadius: 7,
barBorderWidth: 0,
buttonBackgroundColor: '#00C4FE',
buttonBorderWidth: 0,
buttonBorderRadius: 7,
trackBackgroundColor: 'rgba(0,28,57, .5)',
trackBorderWidth: 1,
trackBorderRadius: 5,
trackBorderColor: '#65D6F7',
height:12,
},
credits: {
enabled: false
},
legend: {
},
tooltip: {
formatter: function (e) {
return this.series.name + ""+ this.key +'<br/>'+ this.y.toFixed(3);
},
//pointFormat: '{point.y} ',
},
series: [{
name: '',
data: chartData.seriesData,
tooltip: {
valueDecimals: 2
},
dataLabels: { // 柱内显示文字内容
enabled: true,
rotation: 90,
color: '#FFFFFF',
align: 'top',
formatter: function(e){
return this.key + ' ' + this.y;
},
y:10,
style:{
fontSize:10,
textShadow:'none',
},
}
}]
};
var options;
if(opts.isSeriesData){
options = reversExtends(option, chartConfig, opts.callback);
}else{
options = reversExtends(option, chartConfig, opts.callback);
};
Highstock.setOptions({
global: {
useUTC: false
},
});
return new Highstock.stockChart(el, options);
},
};
var getRandomColor = function(random){
if(random === true){
return 'rgb(' + [Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160)].join(',') + ')';
}else{
var colors = ['#7CB5EC', '#434348', '#90ED7D', '#F7A35C', '#8085E9', '#F15C80', '#E4D354', '#2B908F', '#F45B5B', '#91E8E1', '#0769CB', '#00ABBD', '#ffd886', "#9F2E61", "#4D670C"];
if(typeof random === 'number'){
return colors[~~random];
}else{
return colors[~~(Math.random()*colors.length)];
};
};
};
return {
template:template, getRandomColor:getRandomColor, seriesDataFormat, formatSeriesList
}
};
export var Highchart = Highchart();
var Tools = function(){
var isHighTech = function(){
return ~~localStorage.getItem('groupIdByloginType')===2
};
// 日期时间工具
var Dates = function(){
/*
Tools.Dates.format('yyyy-MM-dd EE HH:mm:ss')
Dates.format.call(new Date(), 'yyyy-MM-dd EE HH:mm:ss')
*/
var format = function(fmt){
var Date_ = this.getDate ? this : new Date();
var o = {
"M+" : Date_.getMonth()+1, //月份
"d+" : Date_.getDate(), //日
"h+" : Date_.getHours()%12 == 0 ? 12 : Date_.getHours()%12, //小时
"H+" : Date_.getHours(), //小时
"m+" : Date_.getMinutes(), //分
"s+" : Date_.getSeconds(), //秒
"q+" : Math.floor((Date_.getMonth()+3)/3), //季度
"S" : Date_.getMilliseconds() //毫秒
};
var week = {
"0" : "\u65e5",
"1" : "\u4e00",
"2" : "\u4e8c",
"3" : "\u4e09",
"4" : "\u56db",
"5" : "\u4e94",
"6" : "\u516d"
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (Date_.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[Date_.getDay()+""]);
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
var getDayStamp = function(){
var start = new Date(new Date().toLocaleDateString()).getTime() / 1000;
var end = ~~(new Date().getTime() / 1000);
return {start:start, end:end};
}
return {format:format, getDayStamp:getDayStamp,}
};
/**
* 异步遍历
* @param: {Object || Array} param
* @param: {Function} fn
* @example1: var selectList = this.Dict.selectList;
Tools.asyncLoop.call(this, selectList, function(key, value, next){
if(typeof value === 'function'){
value().then(function(res){
selectList[key] = res;
next();
})
}else{
next();
};
}, function(){});
* @example1: Tools.asyncLoop.call(this, [{name:'123'}, {name:'234'}], function(key, value, next){
var reqItem = value;
reqApi.getItem(reqItem.param).then((res) => {
if(res && res.stat){
next();
};
});
}, function(){});
* @author: Kimber
* @updatetime: 2021/12/10(周五)
* @createtime: 2021/12/10(周五)
*/
var asyncLoop = function(param, fn, end){
var list = typeof param === 'object' ? Object.keys(param) : param || [], len = list.length;
!function loop(i){
(i < len) ? (()=>{
var key = list[i];
var item = param[key];
fn && fn.call(this,key, item, ()=>{
loop.call(this, ++i);
});
})() : (()=>{end&&end.call(this)})();
}.bind(this)(0);
};
/**
* checkbox列表渲染
* @param: {Object} opts
* @example1: var result = {}; // 域外变量或常量
Tools.checkbox({
vue:self || this,
el:document.getElementById("checkctn2222") || checkctn2222,
list:[{name:'测试1', value:'a001'}, {name:'测试2', value:'a002'}],
select:['a001', 'a002'],
result:result || {}, // 用于外部记录
change: function(val){},
});
* @return:
* @author: Kimber
* @updatetime: 2022/1/22
* @createtime: 2022/1/22
*/
var checkbox = function(opts){
var that = opts.vue;
if(that && that.$root){
var Vue = that.$root.constructor, result = opts.result || {};result.items = {};
var selBox = new Vue({
el: opts.el,
name: 'checkbox',
data:opts.data,
props: ['value2'],
render: function(h){
var self = this;
return h('div', {
'class': {'checkboxctn': true,},
}, [h('ul', {}, (opts.list || []).map(function (item, index) {
var checked = opts.select && opts.select.indexOf(item.value) > -1;
checked && (result.items[item.value] = item.name);
result.values = Object.keys(result.items);
return h('li', {
}, [h('el-checkbox', {
props:['test'],data:{},
domProps:{value:item.value,index:index,},
attrs:{checked:checked,},
on:{
'change': function (val, e) {
var tag = e.target || e.srcElement;
var lable = tag.labels[0];
if(val){
result.items[lable.value] = item.name;
}else{
delete result.items[lable.value]
};
result.values = Object.keys(result.items);
opts.change && opts.change(result.values, result.items);
},
},
scopedSlots: {
default: function (a,b,c) {
return h('span', item.name)
}
},
children:[],
}, true)]);
}))]);
}
});
}else{
console.log(new Error('vue must is a vue Object'))
};
};
// 单窗口无缝滚动
var singleViewSeamlessScroll = function(el, opts){
el = typeof el === "string" ? document.getElementById(el) : el;
if(!el) return console.log('%c sliderPlate Error Element is a invalid param! ', 'color:red');
var Widget = function(unitEl){
var scroll = unitEl.firstElementChild.firstElementChild, pointer = 0;
var list = this.list = scroll.children;
var listnum = this.listnum = list.length;
var firstEl = list[pointer];
firstEl.className = 'is-animating scroll-in';
var timerA = new qf.Async.timerCtrl(5000, 'timerA');
(listnum > 1) && timerA(function(){
var index = pointer, newi = ++pointer, pi = index ? index -1 : listnum-1;
pointer = newi % (listnum);
var target = list[index];
var previous = list[pi];
var next = list[pointer];
if(previous && previous.classList.contains('is-animating')){
previous.classList.remove('scroll-in');
previous.classList.add('scroll-out');
(function(a){
setTimeout(() => {
a.className = '';
}, 800)
})(previous);
};
target.classList.add('scroll-in');
setTimeout(() => {
next.classList.add('is-animating');
}, 1000)
});
}; Widget.prototype = {
update: function(){},
};return new Widget(el);
};
// 数组对象转对象(用于格式化Dict)
var arrayJsonToJson = function(arr, key, value){
var json = {};
if(arr[0] && arr.push){
for(var item of arr){
json[item[value || 'value']] = item[key || 'name'];
};
};return json;
};
// 利用 canvas 将 File 的 blob stream 转为 base64
var canvasTobase64 = function(img, w, h){
// canvas
var canvas = document.createElement('canvas');
canvas.width = w;
canvas.height = h;
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'transparent';
ctx.fillRect(0, 0, w, h);
ctx.drawImage(img, 0, 0, w, h);
// 生成结果
var results = {};
results.base64 = canvas.toDataURL('image/jpeg', 0.7);
results.base64Len = results.base64.length;
canvas = null; // 释放内存
return results;
};
var blobStreamToBase64 = function(blob, fn){
var img = new Image();
img.src = blob;
img.crossOrigin = "*";
img.onerror = function() {
var error = new Error('图片加载失败');
};
img.onload = function(){
var w = img.width, h = img.height;
return fn(canvasTobase64(img, w, h), img = null);
//var verify = fn(img); // 自定义验证
// 重设比例
//that.setCoordRatio();
}
};
/**
* 图片转 base64
* @param: {Element} el
* @param: {Function} fn
* @example1: Tools.fileElTobase64(tag, function(res){});
* @example2: Tools.fileElTobase64(tag).then(function(res){}).catch(function(err){});
* @return:
*/
var fileElTobase64 = function(el, fn, opts){
var file = el && el.files[0];
return new Promise((resolve, reject) => {
if(file.name.indexOf(".jpg") > 0 || file.name.indexOf(".png") > 0){
var blob = (typeof file === 'string') ? file : URL.createObjectURL(file);
blobStreamToBase64(blob, function(res){
return res.base64Len ? fn && fn(res) || resolve(res) : reject(res);
});
}else{
el.value = '';
return reject({type:4, msg:'图片文件类型不正确!'})
}
})
};
// 创建选择列表绑定事件
var createOnSelect = function(dom, arr, opts){
var len = arr.length, optionText = '';
for(var i=0; i<len; i++){
var item = arr[i];
optionText += '<option value="'+item[opts.value || 'value']+'" data-index="'+i+'">'+item[opts.name || 'name']+'</option>';
};
opts.fn && (dom.onchange = function(e){
var tag = e.target || e.srcElement;
var option = tag.selectedOptions[0];
opts.fn(option.value, option);
});
return dom.innerHTML = optionText, opts.onload && opts.onload(dom.options[0] && dom.options[0].value), dom;
};
var cuPrint = function(dom, options){
var Print = function () {
if (!(this instanceof Print)) return new Print(dom, options);
this.options = this.extend({
'noPrint': '.no-print'
}, options);
if ((typeof dom) === "string") {
this.dom = document.querySelector(dom);
} else {
this.isDOM(dom)
this.dom = this.isDOM(dom) ? dom : dom.$el;
}
this.init();
};
Print.prototype = {
init: function () {
var content = this.getStyle() + this.getHtml();
this.writeIframe(content);
},
extend: function (obj, obj2) {
for (var k in obj2) {
obj[k] = obj2[k];
}
return obj;
},
getStyle: function () {
var str = "",
styles = document.querySelectorAll('style,link');
for (var i = 0; i < styles.length; i++) {
str += styles[i].outerHTML;
}
str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>";
return str;
},
getHtml: function () {
var inputs = document.querySelectorAll('input');
var textareas = document.querySelectorAll('textarea');
var selects = document.querySelectorAll('select');
for (var k = 0; k < inputs.length; k++) {
if (inputs[k].type == "checkbox" || inputs[k].type == "radio") {
if (inputs[k].checked == true) {
inputs[k].setAttribute('checked', "checked")
} else {
inputs[k].removeAttribute('checked')
}
} else if (inputs[k].type == "text") {
inputs[k].setAttribute('value', inputs[k].value)
} else {
inputs[k].setAttribute('value', inputs[k].value)
}
}
for (var k2 = 0; k2 < textareas.length; k2++) {
if (textareas[k2].type == 'textarea') {
textareas[k2].innerHTML = textareas[k2].value
}
}
for (var k3 = 0; k3 < selects.length; k3++) {
if (selects[k3].type == 'select-one') {
var child = selects[k3].children;
for (var i in child) {
if (child[i].tagName == 'OPTION') {
if (child[i].selected == true) {
child[i].setAttribute('selected', "selected")
} else {
child[i].removeAttribute('selected')
}
}
}
}
}
// 包裹要打印的元素
// fix: https://github.com/xyl66/vuePlugs_printjs/issues/36
let outerHTML = this.wrapperRefDom(this.dom).outerHTML
return outerHTML;
},
// 向父级元素循环,包裹当前需要打印的元素
// 防止根级别开头的 css 选择器不生效
wrapperRefDom: function (refDom) {
let prevDom = null
let currDom = refDom
// 判断当前元素是否在 body 中,不在文档中则直接返回该节点
if (!this.isInBody(currDom)) return currDom
while (currDom) {
if (prevDom) {
let element = currDom.cloneNode(false)
element.appendChild(prevDom)
prevDom = element
} else {
prevDom = currDom.cloneNode(true)
}
currDom = currDom.parentElement
}
return prevDom
},
writeIframe: function (content) {
var w, doc, iframe = document.createElement('iframe'),
f = document.body.appendChild(iframe);
iframe.id = "myIframe";
//iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";
iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;');
w = f.contentWindow || f.contentDocument;
doc = f.contentDocument || f.contentWindow.document;
doc.open();
doc.write(content);
doc.close();
var _this = this
iframe.onload = function(){
_this.toPrint(w);
setTimeout(function () {
document.body.removeChild(iframe)
}, 100)
}
},
toPrint: function (frameWindow) {
try {
setTimeout(function () {
frameWindow.focus();
try {
if (!frameWindow.document.execCommand('print', false, null)) {
frameWindow.print();
}
} catch (e) {
frameWindow.print();
}
frameWindow.close();
}, 10);
} catch (err) {
console.log('err', err);
}
},
// 检查一个元素是否是 body 元素的后代元素且非 body 元素本身
isInBody: function (node) {
return (node === document.body) ? false : document.body.contains(node);
},
isDOM: (typeof HTMLElement === 'object') ?
function (obj) {
return obj instanceof HTMLElement;
} :
function (obj) {
return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';
}
};
Print();
};
var downloadFile = function(obj, name, suffix){
var url = window.URL.createObjectURL(new Blob([obj]));
var link = document.createElement('a');
link.style.display = 'none';
link.href = url;
var fileName = name + '.' + suffix;
link.setAttribute('download', fileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
return {
Dates:Dates(), arrayJsonToJson,
asyncLoop, checkbox, fileElTobase64,
createOnSelect, cuPrint, downloadFile,
isHighTech,
}
};
/**
* 文件下载
* @return: Object
* @author: Kimber
* @updatetime: 2021/7/20
* @createtime: 2021/7/20
*/
var FileStream = function(){
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
};
/**
* 字符转换 Blob 对象
* @param: {String} str
* @example1: var aaa = FileStream.toBlob(str);
* @return:
* @author: Kimber
* @updatetime: 2021/7/20
* @createtime: 2021/7/20
*/
var toBlob = function(str){
return new Blob([s2ab(str)], {
type: "application/octet-stream"
});
};
/**
* 利用 A标签 下载文件
* @param: {Blob} url
* @param: {String} saveName // 文件名
* @example1: FileStream.download(blob, 'Test.xlsx');
* @return:
* @author: Kimber
* @updatetime: 2021/7/20
* @createtime: 2021/7/20
*/
var download = function(url, saveName){
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url); // 创建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if (window.MouseEvent) event = new MouseEvent('click');
else {
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
};
return {toBlob:toBlob, download:download}
};
export var Tools = Tools();
export var FileStream = FileStream();
/* exports = {
HttpReq: HttpReq(),
Dates: Dates(),
Tools: Tools(),
}; */
import { Notification } from 'element-ui';
import request from '@/utils/request';
import { Tools } from './common';
//var baseAPI = process.env.VUE_APP_LOCAL_API + '/';
var baseAPI = process.env.NODE_ENV === 'development' ? process.env.VUE_APP_LOCAL_API + '/' : (VUE_APP_API.ServiceURL || process.env.VUE_APP_LOCAL_API) + '/';
var DownloadUrl = process.env.VUE_APP_Download + '/';
var reqPublic = function(url, type, param, opts){
type = type.toLowerCase();
var paramKey = type === 'get' ? 'params' : 'data', opts = opts || {};
var reqConfig = {
url: url,
method: type,
};
reqConfig[paramKey] = param;
opts.responseType && (reqConfig['responseType'] = opts.responseType);
opts.key && (reqConfig['token'] = opts.key);
return request(reqConfig)
};
var reqApis = function(){
return {
getRules: function (baseInfo) {
var rules = {};
for (var key in baseInfo) {
var item = baseInfo[key];
if (item.must) {
var typeStr = item.type ? '请选择' : '请输入';
var rule = { required: true, message: typeStr + item.name, trigger: 'blur' };
item.ruleType && (rule.type = item.ruleType)
rules[key] = [rule];
};
}; return Object.keys(rules)[0] ? rules : void 0;
},
getBaseParams: function (searchItem) {
var searchItem = reqApi.common.getSearchParam(this.form, searchItem) || {};
var param = searchItem || {};
param.page = this.table.page - 1;
param.size = this.table.size;
param.sort = 'date,desc';
return param;
},
common:{
requst:function(type, url, param){
var param = param || {};
var opts = this.query || {};
return qf.Async.Promise((resolve, reject) => {
reqPublic(url, type, param, opts).then((res)=>{
return resolve(res)
}).catch(function(error) {
console.log('requst catch ________________ ', error);
return reject(error);
});
});
},
getRequst: function (searchItem) {
var param = reqApi.getBaseParams.call(this, searchItem);
this.table.loading = true;
return this.pageApi.request('get', param).then((res) => {
this.table.loading = false;
if (res && res.code) {
var body = res.body || {};
var list = body.list || [];
this.table.dataList = list;
this.table.total = body.total * 1;
this.table.body = body;
} else {
this.$notify({
title: res.msg,
type: 'error',
duration: 2500
})
};return body
}).catch(function (error) {
this.table.loading = false;
})
},
requstEdge:function(type, url, param){
var param = param || {};
return new Promise((resolve, reject) => {
reqPublic(url, type, param).then((res)=>{
if(res && (res.code === 200 || res.status === 200)){
return resolve(res)
}else{
Notification({
title: res.status + ': ' + (res.msg || res.message),
type: 'error',
duration: 2500
});
return reject(res);
};
}).catch(function(error) {
console.log('catch ________________ ', error);
return reject(error);
});
})
},
addRequst: function (item) {
return this.pageApi.request('post', item).then((res) => {
this.form.visible = false;
if (res.code === 200) {
this.$notify({
title: '添加成功!',
type: 'success',
duration: 2500
});
this.loadData(this.baseParams || void 0)
} else {
this.$notify({
type: 'error',
title: res.msg,
duration: 2500
})
};
}).catch(function (error) {
this.form.status.cu = 0
});
},
removeRequst: function (item) {
var table = this.table;
return this.pageApi.request('delete', item).then((res) => {
if (res.code === 200) {
this.$notify({
title: '删除成功!',
type: 'success',
duration: 2500
});
// 为空时返回前一页
(table.dataList.length === 1) && table.page--;
this.loadData(this.baseParams || void 0)
} else {
this.$notify({
title: res.msg,
type: 'error',
duration: 2500
})
};
});
},
putRequst: function (item) {
return this.pageApi.request('put', item).then((res) => {
this.form.visible = false;
if (res.code === 200) {
this.$notify({
title: '修改成功!',
type: 'success',
duration: 2500
});
this.loadData(this.baseParams || void 0)
} else {
this.$notify({
title: res.msg,
type: 'error',
duration: 2500
})
};
}).catch(function (error) {
this.form.status.cu = 0
});
},
upload: function (e, pathName, file) {
var that = this, tag = e.target || e.srcElement;
var file = file || tag.files[0];
if (file) {
this.fullLoading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
var data = new FormData();
data.append('file', file);
data.append('modelName', pathName);
return this.pageApi.upload(data).then((res) => {
this.fullLoading.close();
if (res.code === 200) {
tag && (tag.value = '');
this.$notify({
title: '提示',
message: '文件上传成功',
type: 'success',
duration: 5000
}); return res.body;
};
}).catch(function (error) {
that.form.status.cu = 0
});
};
},
getSearchParam: function (form, searchItem) {
var search = form.config.search, query = form.query, searchItem = searchItem || {};
if (Object.prototype.toString.call(search) === '[object Array]' && Object.keys(query || [])[0]) {
for (var item of search) {
var queryVal = query[item.word];
if ((queryVal || typeof queryVal === 'number') && item.type !== "button") {
var key = item.mode === 0 ? 'vague' : 'exact';
if (item.type.indexOf('date') > -1) {
if(item.datetype === 'year'){
var groub = searchItem[key] || (searchItem[key] = {});
groub[item.word] = queryVal.split('-')[0];
}else{
searchItem[item.word || item.type] = queryVal.join(',');
};
} else {
var groub = searchItem[key] || (searchItem[key] = {});
groub[item.word] = queryVal;
};
};
};
}; return searchItem
},
toSearch: function (form) {
this.table.page = 1;
var searchItem = {
searchName: form.search.key,
searchValue: form.query[form.search.key],
limit: form.search.mode
}
this.loadData(searchItem)
},
toDownload: function (item) {
var download = this.pageApi.download;
var filePath = download.filePath;
var fileName = item[download.keyName].indexOf('.') > 0 ? item[download.keyName] : '';
if (filePath && fileName) {
window.open(DownloadUrl + filePath + fileName);
} else {
this.$notify({
title: '提示',
message: '未找到要下载的文件!',
type: 'warning',
duration: 5000
})
};
},
toAdd: function (data) { // 添加表单
this.$refs['form1'] && this.$refs['form1'].clearValidate();
this.form.title = '添加' + this.form.config.title;
this.form.status.cu = 0;
this.form.visible = true;
this.form.reqType = 'add';
var item = data || {}, Dict = this.Dict;
for (var key in Dict.baseInfo) {
var obj = Dict.baseInfo[key];
item[key] = obj.default || obj.dataType || '';
};
this.form.item = item;
Dict.addFormItem && Dict.addFormItem.call(this, item);
},
toEdit: function (item) { // 添加表单
var form = this.form, Dict = this.Dict;
var cuForm = this.$refs['cuForm'];
cuForm.$refs['form1'] && cuForm.$refs['form1'].clearValidate();
form.title = '编辑' + form.config.title;
form.status.cu = 0;
form.visible = true;
form.reqType = 'edit';
form.item = item;
Dict.editFormItem && Dict.editFormItem.call(this, item);
},
toDelete: function (item, opts) { // 删除表单
opts = opts || {};
var text = opts.text || '确认删除该条数据吗?';
this.$confirm(text, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then((e) => {
reqApi.common.removeRequst.call(this, item);
}).catch((e) => {
})
},
submitForm: function (form, item) {
if (!this.form.status.cu) {
form.validate(valid => {
if (valid) {
this.form.status.cu = 2;
if (this.form.reqType === 'add') {
reqApi.common.addRequst.call(this, item);
} else {
reqApi.common.putRequst.call(this, item);
}
} else {
this.form.status.cu = 0
}
});
};
},
toExports: function (item) {
this.$confirm('您确认要导出该页数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then((e) => {
var loading = this.$loading({
lock: true,
text: '请稍后.....',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
var param = reqApi.getBaseParams.call(this);
this.pageApi.download(param).then((res) => {
loading.close();
var name = this.pageApi.name + '数据' + Tools.Dates.format('yyyy-MM-dd HH:mm:ss');
Tools.downloadFile(res, name, 'xlsx')
})
})
},
getPermission: function (item) {
var list = item.permission || [];
var username = this.$store.state.user.user.username;
return list.includes(username);
},
},
business: {
incubator: { // 孵化器管理
name: '孵化器管理',
Dict: {
baseInfo: {
"incubatorName": {name:"孵化器名称", must:true },
"operatingAgency": {name:"运营机构", must:true},
"contactPerson": {name:"联系人", must:true },
"contactPhone": {name:"联系电话", must:true },
"incubatorImage": {name:"孵化器图片", type:'img',
'src': function (row, key) {
var path = row[key];
return path ? baseAPI + 'file/' + row[key] : ''
},
'change': function (e, key) {
var tag = e.target || e.srcElement, that = this;
reqApi.common.upload.call(this, e, 'incubator').then(function(res){
that.form.item[key] = res;
});
},
'click': function(src){
qf.UI.popupLayer({
html: '<div style="position:relative;width:13rem;height:80vh;display:flex;justify-content:center;"></div>',
onload: function (el) {
var box = el.firstElementChild;
var url = baseAPI + 'file/' + src;
box.innerHTML = '<img style="margin-top:25px;max-width:100%;" src="'+url+'"/>';
},
})
},
},
"totalArea": {name:"孵化器使用总面积(㎡)", table:0, },
"incubationArea": {name:"用于企业孵化的面积(㎡)", table:0, },
"address":{
name:"孵化器地址",/* must:true, */disabled: true, type:'map', style:"display:flex",
mapHeight:'260px',
mapConfig: {
options: {
zoom: 12,
center: [122.04789902023334, 37.50932209221578],
//showLabel: true,
//pitch: 40,
onload: function (cmap) {
var item = this.form.item, self = this;
this.Dict.cmap = cmap;
if (item.longitude && item.latitude) {
cmap.setCenter([item.longitude, item.latitude]);
// 添加标记
cmap.addMarker({
lnglat: [item.longitude, item.latitude],
title: '',
draggable: true,
dragend: function (e) {
var lnglat = e.lnglat;
cmap.deGeocode([lnglat.lng, lnglat.lat], function (addr) {
item.address = addr;
item.longitude = lnglat.lng;
item.latitude = lnglat.lat;
self.$forceUpdate();
});
},
});
};
},
click: function (e, cmap) {
var that = this, lnglat = e.lnglat, form = this.form, item = form.item;
// 如果为添加
if (this.form.reqType === 'add') {
cmap.deGeocode([lnglat.lng, lnglat.lat], function (addr) {
form.item.address = addr;
form.item.longitude = lnglat.lng;
form.item.latitude = lnglat.lat;
});
cmap.marker && cmap.removeMarker();
// 添加标记
cmap.addMarker({
lnglat: [lnglat.lng, lnglat.lat],
title: '',
draggable: true,
dragend: function (e) {
var lnglat = e.lnglat;
cmap.deGeocode([lnglat.lng, lnglat.lat], function (addr) {
item.address = addr;
item.longitude = lnglat.lng;
item.latitude = lnglat.lat;
});
},
});
};
},
},
},
},
"longitude":{name:"经度", table:0, form:0 },
"latitude":{name:"纬度", table:0, form:0 },
"createTime":{name:"添加时间", table:0, form:0},
},
selectList: {
},
},
config: {
formWidth: '900px',
labelWidth: '120',
operWidth: '220',
title: '孵化器',
buttons: [
{
'type': 'primary', 'icon': 'el-icon-view', name: '查看收入', 'callback': function (item) {
//window.location.href = '/business/income';
var id = item.id;
var popupTabel = this.$parent.popupTabel;
popupTabel.status.cu = 1;
popupTabel.close = function(){
popupTabel.status.cu = 0;
};
reqPublic('/api/incubator/incubatorRevenue', 'get', {page:0,size:100, id:id}).then(function (res) {
var list = res.list || [];
if(list[0]){
popupTabel.dataList = list;
};
});
}
},
{
'fn': 'toEdit', 'type': 'primary', 'icon': 'el-icon-edit', 'callback': function (item) {
item = Object.assign({}, item);
reqApi.common.toEdit.call(this.$parent, item);
}
},
{
'fn': 'toDelete', 'type': 'danger', 'icon': 'el-icon-delete', 'callback': function (item) {
reqApi.common.toDelete.call(this.$parent, item);
}
}
],
otherBtn: [
{
fn: 'toAdd', type: 'primary', icon: 'el-icon-plus', name: '添加孵化器', 'callback': function () {
reqApi.common.toAdd.call(this);
}
}
],
rightBtn: [
],
search: [
{
'type': 'string', 'name': '孵化器名称', 'word': 'incubatorName', 'mode': 0, 'width': '180px', 'clear': function () {
this.loadData()
}
},
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
this.loadData()
}
},
],
},
request: function (type, param) {
return reqPublic('api/incubator', type, param)
},
upload: function (data) {
return reqPublic('api/file/upload', 'post', data)
},
},
income: { // 孵化器收入管理
name: '孵化器管理',
Dict: {
baseInfo: {
"incubatorId": {name:"孵化器名称", must:true, 'type':'select', val:'id', key:'name', showYN: Tools.isHighTech()},
"year": {
name:"年度", must:true, 'type':'date', 'datetype':'year','format':'yyyy'
},
"totalRevenue": {name:"孵化器总收入(万元)", must:true },
"serviceRevenue": {name:"综合服务收入(万元)", },
// "rentRevenue": {name:"房租及物业收入(万元)", },
"propertyRevenue": {name:"物业费收入(万元)", },
"rentRevenue": {name:"房租费收入(万元)", },
"investmentRevenue": {name:"投资收入(万元)", },
"policyRevenue": {name:"政策性收入(万元)", },
"otherRevenue": {name:"其他收入(万元)", },
"createBy": {name:"创建人", table:0, form:0},
"createTime": {name:"创建日期", table:0, form:0},
},
selectList: {
incubatorId: function () {
return reqPublic('/api/incubator/list', 'get', {}).then(function (res) {
return res.body || [];
});
},
},
},
config: {
formWidth: '900px',
labelWidth: '120',
operWidth: '140',
title: '孵化器收入',
buttons: [
{
'fn': 'toEdit', 'type': 'primary', 'icon': 'el-icon-edit', 'callback': function (item) {
item = Object.assign({}, item);
reqApi.common.toEdit.call(this.$parent, item);
}
},
{
'fn': 'toDelete', 'type': 'danger', 'icon': 'el-icon-delete', 'callback': function (item) {
reqApi.common.toDelete.call(this.$parent, item);
}
}
],
otherBtn: [
{
fn: 'toAdd', type: 'primary', icon: 'el-icon-plus', name: '添加收入信息', 'callback': function () {
reqApi.common.toAdd.call(this);
}
}
],
rightBtn: [
],
search: [
{
'type': 'string', 'name': '孵化器名称', 'word': 'incubatorName', 'mode': 0, 'width': '180px', showYN: Tools.isHighTech(), 'clear': function () {
this.loadData()
}
},
{
'type': 'date', 'datetype':'year','defaultTime': ['2024'], 'name': '年度', 'word': 'year', 'mode': 0, 'width':'140px',
'change': function(a, b){
},
},
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
this.loadData()
}
},
],
},
request: function (type, param) {
return reqPublic('api/incubatorRevenue', type, param)
},
},
basicInfo: { // 企业基本信息 mode:7(默认元素隐藏,通过其他元素改变主动触发显示)
name: '企业基本信息',
Dict: {
baseInfo: {
"companyName": {name:"企业名称", must:true,width: 215},
"incubatorId": {name:"所属孵化器", must:true, 'type':'select', key:'name', showYN: Tools.isHighTech()},
"technicalField": {name:"所属技术领域", must:true, 'type':'select', key:'name', },
"entryDate": {
name:"入驻时间", must:true, 'type':'date', 'format':'yyyy-MM-dd',
},
"founderCharacteristics": {name:"主要负责人创业特征", must:true, table:0, 'type':'select', key:'name', },
"companyType": {name:"企业类型", must:true, 'type':'select', key:'name', },
"legalPerson": { 'type': '', 'name': '法人', table:0, width: 215 },
"address":{
name:"位置",/* must:true, disabled: true,type:'map',style:"display:flex",*/ table:0, width: 215,
mapConfig: {
options: {
zoom: 12,
center: [122.050189, 37.515189],
//showLabel: true,
//pitch: 40,
onload: function (cmap) {
var item = this.form.item, self = this;
this.Dict.cmap = cmap;
var center = cmap.options.center;
var lng = item.longitude || center[0], lat = item.latitude || center[1];
if (lng && lat) {
cmap.setCenter([lng, lat]);
// 添加标记
cmap.addMarker({
lnglat: [lng, lat],
title: '',
draggable: true,
dragend: function (e) {
item = self.form.item;
var lnglat = e.lnglat;
cmap.deGeocode([lnglat.lng, lnglat.lat], function (addr) {
item.address = addr;
item.longitude = lnglat.lng;
item.latitude = lnglat.lat;
self.$forceUpdate();
});
},
});
};
},
click: function (e, cmap) {
var that = this, lnglat = e.lnglat, form = this.form, item = form.item;
// 如果为添加
if (this.form.reqType === 'add') {
cmap.deGeocode([lnglat.lng, lnglat.lat], function (addr) {
form.item.address = addr;
form.item.longitude = lnglat.lng;
form.item.latitude = lnglat.lat;
});
cmap.marker && cmap.removeMarker();
// 添加标记
cmap.addMarker({
lnglat: [lnglat.lng, lnglat.lat],
title: '',
draggable: true,
dragend: function (e) {
var lnglat = e.lnglat;
cmap.deGeocode([lnglat.lng, lnglat.lat], function (addr) {
item.address = addr;
item.longitude = lnglat.lng;
item.latitude = lnglat.lat;
});
},
});
};
},
},
},
},
// "longitude": {name:"经度", must:true, table:0, form:0 },
// "latitude": {name:"纬度", must:true, table:0, form:0 },
"mentorId": {name:"全职导师", table:0, 'type':'select', key:'name',},
"parMentorId": { 'type': 'select', 'name': '兼职导师', table:0, width: 215 },
"outsideIncubation": { 'type': 'select', 'name': '是否体外孵化', table:0, },
"occupiedArea": {name:"占用孵化场地面积", table:0,width: 215 },
"principal": {name:"联系人", must:true ,width: 215},
"contactPhone": {name:"联系方式", must:true ,width: 215},
// "intellectualProperty": {name:"知识产权", table:0, 'type':'select', key:'name',},
"totalFunding": {name:"累计获得融资总额(万元)", table:0,width: 215},
"registeredCapital": { 'type': '', 'name': '注册资金(万元)', table:0, width: 215 },
"incubationStatus": {name:"企业孵化状态", 'type':'select',
change: function (val){
var Dict = this.Dict, slist = Dict.selectList, fitem = this.form.item;
Dict.baseInfo.graduationDate.form = ~~(val === 2);
}
},
"graduationDate": {name:"毕业日期", type:"date", table:0, form:0},
// 新增字段
"companyLevel": { 'type': 'select', 'name': '企业级别', table:0 },
"technicalField": { 'type': 'select', 'name': '所属技术领域', },
"inventionPatentsNumber": { 'type': '', 'name': '发明专利数(件)', table:0, width: 215 },
"inventionApplicationsNumber": { 'type': '', 'name': '发明申请数(件)', table:0, width: 215 },
"utilityModelsNumber": { 'type': '', 'name': '实用新型数(件)', table:0, width: 215 },
"softwareCopyrightNumber": { 'type': '', 'name': '软件著作权数(件)', table:0, width: 215 },
// 新增字段
// 后台没有这个字段,目前有联系方式这个字段,是否为同一个。还是说新增的为导师的联系方式?
// "legalPerson": { 'type': '', 'name': '联系电话', table:0, },
// 字段已有!
// "registeredCapital": { 'type': 'date', 'name': '注册资金', table:0, },
"investorsName": { 'type': '', 'name': '投资方名称', table:0, width: 215 },
"investmentArea": { 'type': '', 'name': '投资地区', table:0, width: 215 },
"registerDate": { 'type': 'date', 'name': '注册时间', table:0, width: 215 },
"isTechSme": { 'type': 'select', 'name': '是否科技型中小企业', table:0, inputCombine_1:'Y', inputCombineArr_1: {
"isTechSme":{'name': '是否科技型中小企业','type':'select'},
"techSmeDate":{'name':'最新评选日期'},
},
}, // inputCombine_1 组合框中的父输入框
"techSmeDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"isHighTech": { 'type': 'select', 'name': '是否高新技术企业', table:0, inputCombine_1:'Y' , inputCombineArr_1: {
"isHighTech":{'name': '是否高新技术企业','type':'select'},
"highTechDate":{'name':'最新评选日期'},
}},
"highTechDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"isSpecializedSpecialEnterprises": { 'type': 'select', 'name': '是否专精特新企业', table:0, inputCombine_1:'Y' , inputCombineArr_1: {
"isSpecializedSpecialEnterprises":{'name': '是否专精特新企业','type':'select'},
"specializedSpecialEnterprisesDate":{'name':'最新评选日期'},
}},
"specializedSpecialEnterprisesDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"isGazelle": { 'type': 'select', 'name': '是否瞪羚企业', table:0, inputCombine_1:'Y' , inputCombineArr_1: {
"isGazelle":{'name': '是否瞪羚企业','type':'select'},
"gazelleDate":{'name':'最新评选日期'},
}},
"gazelleDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"isLittleGiant": { 'type': 'select', 'name': '是否小巨人企业', table:0, inputCombine_1:'Y' , inputCombineArr_1: {
"isLittleGiant":{'name': '是否小巨人企业','type':'select'},
"littleGiantDate":{'name':'最新评选日期'},
}},
"littleGiantDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"isHighGrowthInnovative": { 'type': 'select', 'name': '是否创新性中小企业', table:0, inputCombine_1:'Y', inputCombineArr_1: {
"isHighGrowthInnovative":{'name': '是否创新性中小企业','type':'select'},
"highGrowthInnovativeDate":{'name':'最新评选日期'},
}},
"highGrowthInnovativeDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"isAdvancedTechService": { 'type': 'select', 'name': '是否技术先进型服务企业', table:0, inputCombine_1:'Y', inputCombineArr_1: {
"isAdvancedTechService":{'name': '是否技术先进型服务企业','type':'select'},
"advancedTechServiceDate":{'name':'最新评选日期'},
}},
"advancedTechServiceDate": { 'type': 'date', 'name': '最新评选日期', table:0, mode:7, inputCombine_2:'Y',inputCombineArr_2: {}},
"introduction": {
name:"企业介绍", table:0, style:"display:block", 'type':'editor',
'change': function (file, pathBack) {
reqApi.common.upload.call(this, file, 'introduction', file).then(function(res){
var url = baseAPI + 'file/' + res;
pathBack(url, '', '')
});
}
},
//"createBy": {name:"创建人ID", table:0},
//"createTime": {name:"创建时间", },
},
selectList: {
incubatorId: function () {
var slist = this.selectList;
return reqPublic('api/company/dic', 'get', {}).then(function (res) {
var body = res.body || {};
for (var key in body) {
var val = body[key];
slist[key] = val
}; return body.incubatorId;
});
},
isHighTech: [{ name: '', value: true, }, { name: '', value: false, },],
isTechSme: [{ name: '', value: true, }, { name: '', value: false, },],
isHighGrowthInnovative: [{ name: '', value: true, }, { name: '', value: false, },],
isAdvancedTechService: [{ name: '', value: true, }, { name: '', value: false, },],
isGazelle: [{ name: '', value: true, }, { name: '', value: false, },],
isLittleGiant: [{ name: '', value: true, }, { name: '', value: false, },],
isSpecializedSpecialEnterprises: [{ name: '', value: true, }, { name: '', value: false, },],
companyType:[{"name":"服务企业","value":2},{"name":"中介机构","value":1}],
incubationStatus:[{"name":"在孵化企业","value":1},{"name":"毕业企业","value":2}],
// 新增 241103
outsideIncubation: [{ name: '', value: true, }, { name: '', value: false, },],
},
},
config: {
formWidth: '900px',
labelWidth: '150',
operWidth: '210',
title: '企业信息',
buttons: [
{
'fn': 'toSee', 'type': 'primary', 'icon': 'el-icon-edit', name: '查看', 'callback': function(item) {
item = Object.assign({}, item);
this.$parent.basicActv = true;
// for( let key in item){
// if(item[key] === false){
// item[key] = true
// }
// // if(key.indexOf('Date')>-1){
// // item[key] = ''
// // }
// }
this.$parent.catchItem = item;
// 标签索引复位
this.$parent.tabindex = 0;
}
},
// {
// 'fn': 'toEdit', 'type': 'primary', name: '经营信息管理', 'callback': function (item) {
// item = Object.assign({}, item);
// var that = this.$parent;
// tha// t.iframeSrc = '/business/achievement?companyId=1';
// that.popupTabel.status.cu = 1;
// }
// },
// {
// 'fn': 'toEdit', 'type': 'primary', name: '产品管理', 'callback': function (item) {
// item = Object.assign({}, item);
// }
// },
{
'fn': 'toEdit', 'type': 'primary', 'icon': 'el-icon-edit', 'callback': function (item) {
item = Object.assign({}, item);
reqApi.common.toEdit.call(this.$parent, item);
}
},
{
'fn': 'toDelete', 'type': 'danger', 'icon': 'el-icon-delete', 'callback': function (item) {
reqApi.common.toDelete.call(this.$parent, item);
}
}
],
otherBtn: [
{
type: 'primary', icon: 'el-icon-document', name: '导出企业基本信息', showYN: true, 'callback': function () {
// reqApi.common.toExports.call(this);
this.$confirm('您确认要导出该页数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then((e) => {
var loading = this.$loading({
lock: true,
text: '请稍后.....',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
var param = reqApi.getBaseParams.call(this);
this.pageApi.downloadEnterpriseExcelBasic(param).then((res) => {
loading.close();
var name = '企业基本信息数据' + Tools.Dates.format('yyyy-MM-dd HH:mm:ss');
Tools.downloadFile(res, name, 'xlsx')
})
})
}
},
{
type: 'primary', icon: 'el-icon-document', name: '导出企业经营信息', showYN: true, 'callback': function () {
// reqApi.common.toExports.call(this);
this.$confirm('您确认要导出该页数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then((e) => {
var loading = this.$loading({
lock: true,
text: '请稍后.....',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
var param = reqApi.getBaseParams.call(this);
this.pageApi.downloadEnterpriseExcelJy(param).then((res) => {
loading.close();
var name = '企业经营信息数据' + Tools.Dates.format('yyyy-MM-dd HH:mm:ss');
Tools.downloadFile(res, name, 'xlsx')
})
})
}
},
{
fn: 'toAdd', type: 'primary', icon: 'el-icon-plus', name: '添加企业', 'callback': function () {
reqApi.common.toAdd.call(this);
}
},
{
type: 'primary', icon: 'el-icon-folder-add', name: '导入企业基础信息', showYN: !Tools.isHighTech(), 'callback':function(){
var m = this;
m.uploadView = qf.UI.popWindow({
cover:true,
coverFull: true,
className:'qyzz-dialog',
//container:b0_e, // id || Element对象
//backgroundColor:'rgba(0,0,0,.4);backdrop-filter:blur(15px);',
closeEvent:true,
html:`
<div role="dialog" aria-modal="true" aria-label="信息导入" class="el-dialog" style="width:500px;">
<div class="el-dialog__header"><span class="el-dialog__title">信息导入</span><button type="button" aria-label="Close" class="el-dialog__headerbtn"><i class="el-dialog__close el-icon el-icon-close"></i></button></div>
<div class="el-dialog__body">
<div class="el-form-item el-form-item--small">
<label for="incubatorImage" class="el-form-item__label" style="width: 120px;">上传企业信息</label>
<div class="el-form-item__content">
<div class="img-upload">
<input type="file" id="kimUpload" accept=".xls,.xlsx" >
</div>
</div>
</div>
<div class="el-form-item el-form-item--small">
<div class="el-form-item__content">
<input type="checkbox" id="updateJCYN" value="yes"> 是否更新已存在企业基础信息数据
</div>
</div>
<div style="color:red;">仅允许导入xls、xlsx格式文件</div>
</div>
<div class="el-dialog__footer"><div class="dialog-footer"><button type="button" class="el-button el-button--text el-button--small cancel">取消</button><button type="button" class="el-button el-button--primary el-button--small confirm">确认</button></div></div>
</div>
`,
onload: function(v){
m.loginView = v;
var el = v.el;
v.file = el.querySelector("#kimUpload");
v.updateJCYN = el.querySelector("#updateJCYN");
},
click: function(tag){
if(tag.classList.contains('el-icon-close')){ // 移除
m.uploadView.remove()
}else if(tag.classList.contains('confirm')){
var file = m.loginView.file.files[0];
m.uploadView.remove();
if(file){
m.fullLoading = m.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
var data = new FormData();
data.append('file', file);
data.append('flag', m.loginView.updateJCYN.checked) // 是否更新
return m.pageApi.uploadfile(data).then((res) => {
m.fullLoading.close();
if(res.code === 200){
//m.loginView.file.value = '';
m.loadData()
};
m.$notify({
title: '提示',
message: res.msg,
type: 'success',
duration: 5000,
zIndex:2000,
})
}).catch(function(error) {
});
};
}else if(tag.classList.contains('cancel')){ // 取消
m.uploadView.remove()
};
},
close: function(e){
},
});
}
},
{
type: 'primary', icon: 'el-icon-folder-add', name: '导入企业经营信息', 'callback':function(){
var m = this;
m.uploadView = qf.UI.popWindow({
cover:true,
coverFull: true,
className:'qyzz-dialog',
//container:b0_e, // id || Element对象
//backgroundColor:'rgba(0,0,0,.4);backdrop-filter:blur(15px);',
closeEvent:true,
html:`
<div role="dialog" aria-modal="true" aria-label="经营信息导入" class="el-dialog" style="width:500px;">
<div class="el-dialog__header"><span class="el-dialog__title">经营信息导入</span><button type="button" aria-label="Close" class="el-dialog__headerbtn"><i class="el-dialog__close el-icon el-icon-close"></i></button></div>
<div class="el-dialog__body">
<div class="el-form-item el-form-item--small">
<label for="incubatorImage" class="el-form-item__label" style="width: 120px;">上传经营信息</label>
<div class="el-form-item__content">
<div class="img-upload">
<input type="file" id="kimUpload1" accept=".xls,.xlsx" >
</div>
</div>
</div>
<div class="el-form-item el-form-item--small">
<div class="el-form-item__content">
<input type="checkbox" id="updateJYYN" value="yes"> 是否更新已存在企业经营信息数据(同年份同企业)
</div>
</div>
<div style="color:red;">仅允许导入xls、xlsx格式文件</div>
</div>
<div class="el-dialog__footer"><div class="dialog-footer"><button type="button" class="el-button el-button--text el-button--small cancel">取消</button><button type="button" class="el-button el-button--primary el-button--small confirm">确认</button></div></div>
</div>
`,
onload: function(v){
m.loginView = v;
var el = v.el;
v.file = el.querySelector("#kimUpload1");
v.updateJYYN = el.querySelector("#updateJYYN");
},
click: function(tag){
// console.log(m.loginView.updateJYYN.checked)
if(tag.classList.contains('el-icon-close')){ // 移除
m.uploadView.remove()
}else if(tag.classList.contains('confirm')){
var file = m.loginView.file.files[0];
m.uploadView.remove();
if(file){
m.fullLoading = m.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
var data = new FormData();
data.append('file', file);
data.append('flag', m.loginView.updateJYYN.checked) // 是否更新
return m.pageApi.uploadjyfile(data).then((res) => {
m.fullLoading.close();
if(res.code === 200){
//m.loginView.file.value = '';
m.loadData()
};
m.$notify({
title: '提示',
message: res.msg,
type: 'success',
duration: 5000,
zIndex:2000,
})
}).catch(function(error) {
});
};
}else if(tag.classList.contains('cancel')){ // 取消
m.uploadView.remove()
};
},
close: function(e){
},
});
}
},
],
rightBtn: [
{
fn:'download', type:'primary', name:'下载企业基础信息模板', 'callback':function(){
window.open(baseAPI + 'api/company/exportTemplate');
}
},
{
fn:'download', type:'primary', name:'下载企业经营信息模板', 'callback':function(){
window.open(baseAPI + 'api/companyAnnualInfo/exportTemplate');
}
},
],
search: [
{
'type': 'string', 'name': '企业名称', 'word': 'companyName', 'mode': 0, 'width': '180px', 'clear': function () {
this.loadData()
}
},
{
'type': 'string', 'name': '孵化器名称', 'word': 'incubatorName', 'mode': 0, 'width': '180px', showYN: Tools.isHighTech(), 'clear': function () {
this.loadData()
}
},
{ 'type': 'select', 'name': '在孵状态', 'word': 'incubationStatus', 'mode': 1, 'width': '140px' },
{ 'type': 'select', 'name': '企业类型', 'word': 'companyType', 'mode': 1, 'width': '140px' },
{ 'type': 'select', 'name': '企业级别', 'word': 'companyLevel', 'mode': 1, 'width': '140px' },
{ 'type': 'select', 'name': '所属技术领域', 'word': 'technicalField', 'mode': 9, 'width': '140px' },
{ 'type': 'select', 'name': '创新创业类型', 'word': 'innovationEntrepreneurship', 'mode': 1, 'width': '140px' },
{ 'type': 'daterange', 'defaultTime': ['00:00:00', '23:59:59'], 'name': '日期范围', 'word': 'daterange', 'mode': 0, 'width': '300px', format: 'yyyy-MM-dd' },
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
this.loadData()
}
},
],
},
request: function (type, param) {
return reqPublic('api/company', type, param)
},
upload: function (data) {
return reqPublic('api/file/upload', 'post', data)
},
uploadfile: function (data) {
return reqPublic('api/company/import', 'post', data)
},
uploadjyfile: function (data) {
return reqPublic('api/companyAnnualInfo/import', 'post', data)
},
downloadEnterpriseExcelBasic: function (param) {
return reqPublic('api/company/exportExcel', 'get', param, { responseType: 'blob' })
},
downloadEnterpriseExcelJy: function (param) {
return reqPublic('api/companyAnnualInfo/exportExcel', 'get', param, { responseType: 'blob' })
},
},
product: { // 产品信息
name: '企业产品信息',
Dict: {
baseInfo: {
"productName": {name:"产品名称", must:true},
"image": {
name:"图片", must:true, type:'img',
'src': function (row, key) {
var path = row[key];
return path ? baseAPI + 'file/' + row[key] : ''
},
'change': function (e, key) {
var tag = e.target || e.srcElement, that = this;
reqApi.common.upload.call(this, e, 'product').then(function(res){
that.form.item[key] = res;
});
}
},
"description": {name:"简介", must:true, type:'textarea', width:300, rows:4},
// "isDisplayed": {name:"是否在大屏显示", must:true, 'type':'select', },
},
selectList: {
isDisplayed: [{ name: '', value: true, }, { name: '', value: false, },],
},
},
config: {
formWidth: '600px',
labelWidth: '120',
operWidth: '140',
title: '添加产品',
buttons: [
{
'fn': 'toEdit', 'type': 'primary', 'icon': 'el-icon-edit', 'callback': function (item) {
item = Object.assign({}, item);
reqApi.common.toEdit.call(this.$parent, item);
}
},
{
'fn': 'toDelete', 'type': 'danger', 'icon': 'el-icon-delete', 'callback': function (item) {
reqApi.common.toDelete.call(this.$parent, item);
}
}
],
otherBtn: [
{
fn: 'toAdd', type: 'primary', icon: 'el-icon-plus', name: '添加产品', 'callback': function () {
reqApi.common.toAdd.call(this, {companyId:this.companyId});
}
}
],
rightBtn: [
],
search: [
{
'type': 'string', 'name': '产品名称', 'word': 'productName', 'mode': 0, 'width': '180px', 'clear': function () {
this.loadData()
}
},
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
var param = new URLSearchParams(window.location.search);
var companyId = param.get('companyId');
this.loadData({exact:{companyId:companyId}})
}
},
],
},
request: function (type, param) {
var searchParam = new URLSearchParams(window.location.search);
var companyId = searchParam.get('companyId');
if(companyId){
if(param.exact){ // 有exact则直接追加companyId 没有则新增值
param.exact.companyId = companyId
}else{
param.exact = {
companyId
}
}
}
return reqPublic('api/companyProduct', type, param)
},
upload: function (data) {
return reqPublic('api/file/upload', 'post', data)
},
},
achievement: { // 经营信息
name: '企业经营信息',
Dict: {
baseInfo: {
"year": {name:"年度", must:true, 'type':'date', 'datetype':'year','format':'yyyy', },
"totalEmployees": {name:"从业人数", must:true },
"phdEmployees": {name:"博士从业人数", },
"overseasEmployees": {name:"留学人数", },
"masterEmployees": { 'name': '硕士人数', },
"undergraduateEmployees": { 'name': '本科人数', },
// "revenueLastYear": {name:"上年营收收入(万元)", must:true},
"netProfit": {name:"净利润(万元)", must:true},
"taxesPaid": {name:"上缴税费(万元)"},
"grossIncome": {name:"总收入(万元)", table:0,},
"researchInput": {name:"研发投入(万元)"},
"investmentProportion": {name:"研发投入占比", disabled:true},
},
selectList: {
incubatorId: function () {
return reqPublic('/api/incubator/list', 'get', {}).then(function (res) {
return res.body || [];
});
},
},
},
config: {
formWidth: '600px',
labelWidth: '120',
operWidth: '140',
title: '经营信息',
buttons: [
{
'fn': 'toEdit', 'type': 'primary', 'icon': 'el-icon-edit', 'callback': function (item) {
item = Object.assign({}, item);
reqApi.common.toEdit.call(this.$parent, item);
}
},
{
'fn': 'toDelete', 'type': 'danger', 'icon': 'el-icon-delete', 'callback': function (item) {
reqApi.common.toDelete.call(this.$parent, item);
}
}
],
otherBtn: [
{
fn: 'toAdd', type: 'primary', icon: 'el-icon-plus', name: '添加经营信息', 'callback': function () {
reqApi.common.toAdd.call(this, {companyId:this.companyId});
}
}
],
rightBtn: [
],
search: [
{
'type': 'date', 'datetype':'year','defaultTime': ['2024'], 'name': '年度', 'word': 'year', 'mode': 0, 'width':'140px',
'change': function(a, b){
},
},
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
var param = new URLSearchParams(window.location.search);
var companyId = param.get('companyId');
this.loadData({exact:{companyId:companyId}})
}
},
],
},
request: function (type, param) {
var searchParam = new URLSearchParams(window.location.search);
var companyId = searchParam.get('companyId');
if(companyId){
if(param.exact){ // 有exact则直接追加companyId 没有则新增值
param.exact.companyId = companyId
}else{
param.exact = {
companyId
}
}
}
return reqPublic('api/companyAnnualInfo', type, param)
},
},
mentor: { // 导师管理
name: '导师管理',
Dict: {
baseInfo: {
"mentorName": {name:"导师姓名", must:true},
"incubatorId": {name:"所属孵化器", must:true, 'type':'select', key:'name', showYN: Tools.isHighTech()},
"education": {name:"学历", must:true },
"graduationSchool": {name:"毕业学校", },
"contactPhone": {name:"联系电话", },
"photo": {
name:"照片", type:'img',
'src': function (row, key) {
var path = row[key];
return path ? baseAPI + 'file/' + row[key] : ''
},
'change': function (e, key) {
var tag = e.target || e.srcElement, that = this;
reqApi.common.upload.call(this, e, 'mentor').then(function(res){
that.form.item[key] = res;
});
}
},
"introduction": {
name:"导师介绍", table:0, style:"display:block", 'type':'editor',
'change': function (file, pathBack) {
reqApi.common.upload.call(this, file, 'introduction', file).then(function(res){
var url = baseAPI + 'file/' + res;
pathBack(url, '', '')
});
}
},
"createTime": {name:"创建时间", form:0},
},
selectList: {
incubatorId: function () {
var slist = this.selectList;
return reqPublic('api/company/dic', 'get', {}).then(function (res) {
var body = res.body || {};
for (var key in body) {
var val = body[key];
slist[key] = val
}; return body.incubatorId;
});
},
},
},
config: {
formWidth: '600px',
labelWidth: '120',
operWidth: '140',
title: '导师',
buttons: [
{
'fn': 'toEdit', 'type': 'primary', 'icon': 'el-icon-edit', 'callback': function (item) {
item = Object.assign({}, item);
reqApi.common.toEdit.call(this.$parent, item);
}
},
{
'fn': 'toDelete', 'type': 'danger', 'icon': 'el-icon-delete', 'callback': function (item) {
reqApi.common.toDelete.call(this.$parent, item);
}
}
],
otherBtn: [
{
fn: 'toAdd', type: 'primary', icon: 'el-icon-plus', name: '添加导师', 'callback': function () {
reqApi.common.toAdd.call(this);
}
}
],
rightBtn: [
],
search: [
{
'type': 'string', 'name': '导师姓名', 'word': 'mentorName', 'mode': 0, 'width': '180px', 'clear': function () {
this.loadData()
}
},
{
'type': 'string', 'name': '孵化器名称', 'word': 'incubatorName', 'mode': 0, 'width': '180px', showYN: Tools.isHighTech(), 'clear': function () {
this.loadData()
}
},
{ 'type': 'daterange', 'defaultTime': ['00:00:00', '23:59:59'], 'name': '日期范围', 'word': 'daterange', 'mode': 0, 'width': '300px', format: 'yyyy-MM-dd' },
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
this.loadData()
}
},
],
},
request: function (type, param) {
return reqPublic('api/mentor', type, param)
},
upload: function (data) {
return reqPublic('api/file/upload', 'post', data)
},
},
statistics: { // 信息统计
name: '信息统计',
Dict: {
baseInfo: {
"companyName": {name:"企业名称", must:true, 'width': '300px', fixed: true,},
"incubatorName": {name:"所属孵化器", must:true, key:'name', 'width': '180px', fixed: true,},
"entryDate": {name:"入驻时间", 'width': '180px', },
"companyType": {name:"企业类型", 'type':'select', key:'name','width': '180px', },
"incubationStatus": {name:"企业孵化状态", 'type':'select', key:'name','width': '180px', },
"principal": {name:"企业负责人", key:'name', 'width': '200px',},
"contactPhone": {name:"联系方式",'width': '180px', },
"technicalFieldName": {name:"企业所属技术领域", must:true, key:'name', 'width': '180px'},
"inventionPatentsNumber": {name:"发明专利数(件)", must:true, key:'name', 'width': '180px', },
"inventionApplicationsNumber": {name:"发明申请数(件)", must:true, key:'name', 'width': '180px', },
"utilityModelsNumber": {name:"实用新型数(件)", must:true, key:'name', 'width': '180px',},
"softwareCopyrightNumber": {name:"软件著作权数(件)", must:true, key:'name', 'width': '180px',},
// "companyLevel": {name:"企业级别", must:true, 'type':'select', key:'name', 'width': '180px',},
"companyLevelName": {name:"企业级别", must:true, key:'name', 'width': '180px',},
"totalEmployees": {name:"今年从业人数(人)", must:true, key:'name', 'width': '180px',},
"phdEmployees": {name:"博士人数(人)", must:true, key:'name', 'width': '180px',},
"overseasEmployees": {name:"留学人数(人)", must:true, key:'name', 'width': '180px',},
// "revenueLastYear": {name:"上年营业收入(万元)", must:true, key:'name', 'width': '180px',},
"netProfit": {name:"净利润(万元)", must:true, key:'name', 'width': '180px',},
"taxesPaid": {name:"上缴税费(万元)", must:true, key:'name', 'width': '180px',},
"investmentProportion": {name:"研发投入占比", must:true, key:'name', 'width': '180px',},
"grossIncome": {name:"总收入(万元)", must:true, key:'name', 'width': '180px',},
"researchInput": {name:"研发投入(万元)", must:true, key:'name', 'width': '180px',},
// "mentorId": {name:"创业导师", 'type':'select', key:'name','width': '180px',},
"totalEmployees": {name:"今年从业人数(人)", must:true, key:'name', 'width': '180px',},
"phdEmployees": {name:"博士人数(人)", must:true, key:'name', 'width': '180px',},
"overseasEmployees": {name:"留学人数(人)", must:true, key:'name', 'width': '180px',},
//"revenueLastYear": {name:"上年营业收入(万元)", must:true, key:'name', 'width': '180px',},
"netProfit": {name:"净利润(万元)", must:true, key:'name', 'width': '180px',},
"taxesPaid": {name:"上缴税费(万元)", must:true, key:'name', 'width': '180px',},
"investmentProportion": {name:"研发投入占比", must:true, key:'name', 'width': '180px',},
"grossIncome": {name:"总收入(万元)", must:true, key:'name', 'width': '180px',},
"researchInput": {name:"研发投入(万元)", must:true, key:'name', 'width': '180px',},
// "mentorId": {name:"创业导师", 'type':'select', key:'name','width': '180px',},
},
selectList: {
incubatorId: function(slist) {
return reqPublic('api/company/dic', 'get', {}).then(function (res) {
var body = res.body || {};
for (var key in body) {
var val = body[key];
slist[key] = val;
}; return body.incubatorId;
});
},
companyType:[{"name":"服务企业","value":2},{"name":"中介机构","value":1}],
},
},
config: {
formWidth: '600px',
labelWidth: '120',
operWidth: '140',
title: '信息统计',
buttons: [
],
otherBtn: [
],
rightBtn: [
{
type: 'warning', icon: 'el-icon-document', name: '导出', 'callback': function () {
reqApi.common.toExports.call(this);
}
},
],
search: [
{
'type': 'string', 'name': '孵化器名称', 'word': 'incubatorName', 'mode': 0, 'width': '180px', 'clear': function () {
this.loadData()
}
},
{
'type': 'string', 'name': '企业名称', 'word': 'companyName', 'mode': 0, 'width': '180px', 'clear': function () {
this.loadData()
}
},
{ 'type': 'select', 'name': '在孵状态', 'word': 'incubationStatus', 'mode': 1, 'width': '140px' },
{ 'type': 'select', 'name': '企业类型', 'word': 'companyType', 'mode': 1, 'width': '140px' },
{ 'type': 'select', 'name': '企业级别', 'word': 'companyLevel', 'mode': 1, 'width': '140px' },
{ 'type': 'select', 'name': '所属技术领域', 'word': 'technicalField', 'mode': 9, 'width': '140px' },
{ 'type': 'select', 'name': '创新创业类型', 'word': 'innovationEntrepreneurship', 'mode': 1, 'width': '140px' },
{ 'type': 'daterange', 'defaultTime': ['00:00:00', '23:59:59'], 'name': '日期范围', 'word': 'daterange', 'mode': 0, 'width': '300px', format: 'yyyy-MM-dd' },
{
'type': 'button', 'label': '查询', 'width': '140px', 'icon': 'el-icon-search', 'click': function (e) {
this.table.page = 1;
this.loadData()
}
},
],
},
request: function (type, param) {
return reqPublic('api/company/incubatorStats', type, param)
},
download: function (param) {
return reqPublic('api/company/exportIncubatorStats', 'get', param, { responseType: 'blob' })
},
},
}
};
};
// 配制信息
var Config = function () {
// 获取单元信息
var getModuleInfo = function (that) {
var path = that.$route.path || '';
var parts = path.replace('/', '').split('/');
var i = 0;
// 递归遍历
return (function loop(json) {
var key = parts[i]; i++;
return json[key] ? loop(json[key]) : json;
})(reqApi);
};
return { getModuleInfo: getModuleInfo }
};
//export var tailingPond = tailingPond();
export var reqApi = reqApis();
export var Config = Config();
// WEBPACK FOOTER //
// ./src/common/js/common.js
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
<!--
/**
* 高德地图组件
* @example1:
1, 引入
import cuAmap from '@/components/AMap';
2, 注册
export default {
components: {
cuAmap
},
data() {
return {
amapinfo:{
zoom:6,
//longitude: 120.651884,
//latitude: 36.962533,
}
}
},
}
3, 创建
<cu-amap
ref="amap"
//:mapinfo="amapinfo"
//:onload="amapOnload"
//@click="mapClick"
:options="amapOptions()"
//:parent="_self"
/>
4, onload [Function] 回调函数, 地图的显示: {如果设置了回调函数不需要初始化地图, 否则要初始化}
export default {
methods: {
#amapOnload(cmap){
this.mapOnload && this.mapOnload()
},
amapOptions(cmap){
var self = this;
return {
zoom:6,
center:[107.260044, 36.737982],
//showLabel: true,
//pitch: 40,
onload: function(cmap){
console.log('onload ________________ ', self, cmap);
self.cmap = cmap;
},
click: function(e, cmap){
console.log('click ________________ ', cmap);
},
};
},
}
}
5, || 初始化
var opts = {
center:[107.260044, 36.737982],
showLabel: true,
pitch: 40,
zoom: 4,
mapStyle: 'amap://styles/blue',
};
var cmap = this.$refs.amap.init(opts);
// 使用
cmap.addMarker({{lnglat:[item.longitude, item.latitude], draggable:true,dragend: function(e){}});
* @author: Kimber
* @updatetime: 2022/5/13(周五)
* @createtime: 2021/7/3
*/
-->
<template>
<div id="A_Map" class="amap">amap</div>
</template>
<script>
export default {
name: 'amap',
data() {
return {
icons:{
red1:'https://webapi.amap.com/theme/v1.3/markers/n/mark_rs.png',
red2:'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
default1:'https://webapi.amap.com/theme/v1.3/markers/n/mark_bs.png',
default2:'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
},
Markers:{},
}
},
props:{
options: {
type: Object,
default: {},
},
parent: {
type: Object,
},
},
watch: {
},
created() {
var that = this;
/**
* 初始化地图
* @param: {Object} options {
center:[107.260044, 36.737982],
showLabel: true,
pitch: 40,
zoom: 4,
// (normal(标准), dark(幻影黑), light(月光银), whitesmoke(远山黛), fresh(草色青), grey(雅士灰), graffiti(涂鸦), macaron(马卡龙), blue(靛青蓝), darkblue(极夜蓝), wine(酱籽))
mapStyle: 'amap://styles/grey',
};
* @example1: var camap = this.$refs.amap.init(options);
* @return:
* @author: Kimber
* @updatetime: 2021/7/15(周四)
* @createtime: 2021/7/15(周四)
*/
that.init = function(options, callback){
options = options || this.options || {
resizeEnable: true, // 是否监控地图容器尺寸变化
zoom: 4, // 初始化地图层级
center: [122.081977,37.50653], // 初始化地图中心点
//viewMode:'3D',
//pitch:60,
//rotation:-35,
//features:['bg','road','point'],//隐藏默认楼块
//mapStyle:'amap://styles/light',
//layers: [new AMap.TileLayer.Satellite(), new AMap.Buildings({
//'zooms':[16,18],
//'zIndex':10,
//'heightFactor':2 //2倍于默认高度,3D下有效
//})],
};
// 卫星地图条件
if(options.satellite){
var Satellite = new AMap.TileLayer.Satellite();
options.layers && options.layers.push(Satellite) || (options.layers = [Satellite]);
/* var disCountry = new AMap.DistrictLayer.World({
zIndex: 1,
rejectMapMask: true
}); */
//options.layers.push(disCountry);
options.layers.push(new AMap.TileLayer.RoadNet({zIndex:7}));
};
var Map = new AMap.Map('A_Map', options);
Map.on('click', function(ev) {
// 触发事件的对象
var target = ev.target;
// 触发事件的地理坐标,AMap.LngLat 类型
var lnglat = ev.lnglat;
// 触发事件的像素坐标,AMap.Pixel 类型
var pixel = ev.pixel;
// 触发事件类型
var type = ev.type;
if(type === 'click'){
//that.$emit('click', ev, Map, that);
that.options.click && that.options.click.call(that.parent, ev, that);
};
});
/* Map.on('zoomstart', function(e){
});
Map.on('zoomend', function(e){
}); */
that.Map = Map;
callback && callback.call(that, Map);
return that
};
this.$nextTick(() => {
this.options.onload && this.options.onload.call(this.parent, that.init());
});
},
mounted() {
},
methods: {
/**
* 添加标记
* @param: {Object} options []
* @example1: this.$refs.amap.addMarker({});
* @example2:
camap.addMarker({
lnglat:[data.lng, data.lat],
title:'',
draggable:true,
dragend: function(e){
var lnglat = e.lnglat;
camap.deGeocode([lnglat.lng, lnglat.lat], function(addr){
that.form.item.lng = lnglat.lng;
that.form.item.lat = lnglat.lat;
that.form.item.address = addr;
});
},
});
* @method: Kimber
* @return:
* @updatetime: 2022/5/13(周五)
* @createtime: 2021/6/11
*/
addMarker(param){
/* if(this.marker){
this.removeMarker()
}; */
if(param.lnglat && param.lnglat[0]){
var icon = this.icons[param.icon];
var marker = this.marker = new AMap.Marker({
icon: icon,
map: this.Map,
position: param.lnglat, // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
title: param.title,
draggable: param.draggable,
extData:param.extData,
});
param.dragging && marker.on('dragging', param.dragging);
param.dragend && marker.on('dragend', param.dragend);
// 缓存
marker.id = marker._amap_id;
this.Markers[marker.id] = marker;
return marker
};
},
// amap.removeMarker()
removeMarker(marker){
marker = marker || this.marker;
marker && this.Map.remove(marker);
delete this.marker
},
setTargetMarker(tag){
this.tagMarker = tag;
},
getTargetMarker(){
return this.tagMarker
},
getMarkerById(id){
this.Markers[~~id]
},
createInfoWindow(opts){
var infoWindow = new AMap.InfoWindow(opts);
infoWindow.Map = this.Map;
return infoWindow
},
/**
* 地理位置解码
* @param: {Array} lnglat [longitude, latitude]
* @example1: this.$refs.amap.deGeocode([lnglat.lng, lnglat.lat], function(addr){});
* @method: Kimber
* @return:
* @create: 2021/6/11
*/
deGeocode(lnglat, fn){
//AMap.service('AMap.Geocoder', function() {
AMap.plugin('AMap.Geocoder', function() {
var geocoder = new AMap.Geocoder({});
geocoder.getAddress(lnglat, function(status, result) {
if (status === 'complete' && result.info === 'OK') {
//var address = result.regeocode.formattedAddress;
var addrObj = result.regeocode.addressComponent || {};
var address = addrObj.province + addrObj.city + addrObj.district + addrObj.township;
fn && fn(address, addrObj)
} else {
}
});
});
},
/**
* 设置中心点
* @param: {Arrar} arr
* @example1: this.$refs.amap.setCenter([lng, lat]);
* @createtime: 2021/7/2
*/
setCenter: function(arr){
this.Map.setCenter(arr)
},
/**
* 根据中心点 marker 自适应缩放
* @param: {Arrar} arr
* @example1: this.$refs.amap.setFitView(marker);
* @createtime: 2021/7/3
*/
setFitView: function(marker){
this.Map.setFitView(marker)
},
/**
* 按地址定位坐标
* @param: {String} str
* @example1: this.$refs.amap.addressSearch(addr).then((res) => {});
* @createtime: 2021/7/3
*/
addressSearch: function(str){
return new Promise(function(resolve, reject){
// 实例化Autocomplete
var autoOptions = {
city: '全国'
}
var autoComplete = new AMap.Autocomplete(autoOptions);
autoComplete.search(str, function(status, result) {
var list = result.tips || [];
for(var item of list){
if(item.location){
return resolve(item)
};
};
return resolve(list.pop())
})
})
},
/**
* 按区域画高亮遮罩层
* @param: {Object} opts
opts = {
level: "province", // province(省), country(国) 在区域内搜索(行政区级别)
city: '威海市',
color: '#00000cc',
strokeColor: 'rgba(7, 247, 247, 1)',
fillColor: 'rgba(7, 247, 247, 1)',
}
* @example1:
* @return:
* @author: Kimber
* @updatetime: 2021/7/15(周四)
* @createtime: 2021/7/15(周四)
*/
area3DLayer: function(opts){
var cMap = this.Map;
var district = new AMap.DistrictSearch({
subdistrict: 1,
extensions: 'all',
level: opts.level
});
district.search(opts.city, function (status, result) {
var bounds = result.districtList[0].boundaries;
var mask = []
for (var i = 0; i < bounds.length; i += 1) {
mask.push([bounds[i]])
};
//添加高度面
var object3Dlayer = new AMap.Object3DLayer({zIndex: 1});
cMap.add(object3Dlayer)
var height = -7000;
var wall = new AMap.Object3D.Wall({
path: bounds,
height: height,
color: opts.color
});
wall.transparent = true
object3Dlayer.add(wall);
//添加描边
for(var i=0; i<bounds.length; i+=1) {
var polygon = new AMap.Polygon({
map: cMap,
bubble: true,
strokeWeight: 1,
strokeDasharray: [10, 20],
strokeColor: opts.strokeColor || 'rgba(7, 247, 247, 1)',
fillColor: opts.fillColor || 'rgba(7, 247, 247, 1)',
fillOpacity: 0.5,
path: bounds[i],
})
}
});
},
}
}
</script>
<style lang="scss" scoped>
.amap{height:100%;width:100%;background-color:#29557A;}
</style>
<style lang="scss">
.amap-logo{display:none !important;}
</style>
......@@ -61,19 +61,19 @@ export const constantRoutes = [
component: () => import('@/views/error/401'),
hidden: true
},
{
path: '',
component: Layout,
redirect: 'index',
children: [
{
path: 'index',
component: () => import('@/views/index'),
name: 'Index',
meta: { title: '首页', icon: 'dashboard', affix: true }
}
]
},
// {
// path: '',
// component: Layout,
// redirect: 'index',
// children: [
// {
// path: 'index',
// component: () => import('@/views/index'),
// name: 'Index',
// meta: { title: '首页', icon: 'dashboard', affix: true }
// }
// ]
// },
{
path: '/user',
component: Layout,
......
/******* SHA1 ******/
function hex_sha1(txt) {
var hexcase = 0, chrsz = 8;
var hex_sha1 = function(r) {
return binb2hex(core_sha1(AlignSHA1(r)))
}
function sha1_vm_test() {
return "a9993e364706816aba3e25717850c26c9cd0d89d" == hex_sha1("abc")
}
function core_sha1(r) {
for (var e = r, t = Array(80), n = 1732584193, a = -271733879, h = -1732584194, d = 271733878, c = -1009589776, f = 0; f < e.length; f += 16) {
for (var o = n, i = a, _ = h, m = d, g = c, s = 0; 80 > s; s++) {
t[s] = 16 > s ? e[f + s] : rol(t[s - 3] ^ t[s - 8] ^ t[s - 14] ^ t[s - 16], 1);
var l = safe_add(safe_add(rol(n, 5), sha1_ft(s, a, h, d)), safe_add(safe_add(c, t[s]), sha1_kt(s)));
c = d,
d = h,
h = rol(a, 30),
a = n,
n = l
}
n = safe_add(n, o),
a = safe_add(a, i),
h = safe_add(h, _),
d = safe_add(d, m),
c = safe_add(c, g)
}
return new Array(n,a,h,d,c)
}
function sha1_ft(r, e, t, n) {
return 20 > r ? e & t | ~e & n : 40 > r ? e ^ t ^ n : 60 > r ? e & t | e & n | t & n : e ^ t ^ n
}
function sha1_kt(r) {
return 20 > r ? 1518500249 : 40 > r ? 1859775393 : 60 > r ? -1894007588 : -899497514
}
function safe_add(r, e) {
var t = (65535 & r) + (65535 & e)
, n = (r >> 16) + (e >> 16) + (t >> 16);
return n << 16 | 65535 & t
}
function rol(r, e) {
return r << e | r >>> 32 - e
}
function AlignSHA1(r) {
for (var e = (r.length + 8 >> 6) + 1, t = new Array(16 * e), n = 0; 16 * e > n; n++)
t[n] = 0;
for (n = 0; n < r.length; n++)
t[n >> 2] |= r.charCodeAt(n) << 24 - 8 * (3 & n);
return t[n >> 2] |= 128 << 24 - 8 * (3 & n),
t[16 * e - 1] = 8 * r.length,
t
}
function binb2hex(r) {
for (var e = hexcase ? "0123456789ABCDEF" : "0123456789abcdef", t = "", n = 0; n < 4 * r.length; n++)
t += e.charAt(15 & r[n >> 2] >> 8 * (3 - n % 4) + 4) + e.charAt(15 & r[n >> 2] >> 8 * (3 - n % 4));
return t
}
return hex_sha1(txt);
};
module.exports = {
//Base64: Base64,
//hex_md5: hex_md5,
hex_sha1: hex_sha1,
//des: des,
}
\ No newline at end of file
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min';
//import jsencrypt from 'jsencrypt'
//import crypto from 'crypto'
import encryption from './encryption'
// 密钥对生成 http://web.chacuo.net/netrsakeypair
/* Node env
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKgzvKMsX/l5eI+12W6reo5VDw5wOS380zdNc6HpmdRYvfwrM02GOKgvx8pJGaSNf7ZF7llofOwNVIaIrCOS6nECAwEAAQ==';
// 加密
export function encrypt(txt) {
var hashCode = encryption.hex_sha1(txt);
var encryptor = new JSEncrypt();
encryptor.setPublicKey(publicKey) // 设置公钥
return encryptor.encrypt(hashCode);
}; */
// eladmin
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ==';
// 加密
export function encrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
return encryptor.encrypt(txt) // 对需要加密的数据进行加密
}
// 解密
/* export function decrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPrivateKey(privateKey)
return encryptor.decrypt(txt)
} */
<template>
<div class="Screen cm-layout">
<div class="Screen cm-layout">
<div class="a_0">
<div id="container"></div>
<div class="a0_">
......@@ -107,10 +107,12 @@
</section>
</div>
</div>
</template>
<script>
import { Highchart } from "@/assets/js/chartTemplates.js";
</template>
<script>
import { Highchart } from "@/assets/js/chartTemplates.js";
import cuAmap from "@/components/AMap";
import request from "@/utils/request";
import { Tools } from '@/assets/js/common.js';
......@@ -136,9 +138,8 @@
let pxValue = remValue * fontSize;
return pxValue
}
export default {
data() {
export default {
data() {
return {
isTechUser: false,
// 图表数据为空情况
......@@ -183,7 +184,7 @@ emptyFlag4byqyndsjsfbhqs:false,
this.navActive = 0;
this.getRoleInfo();
// this.getRoleInfo();
});
},
methods: {
......@@ -946,10 +947,10 @@ emptyFlag4byqyndsjsfbhqs:false,
});
},
},
};
</script>
<style lang="scss" scope>
}
</script>
<style lang="scss" scope>
.amap-icon {
// 高德地图样式覆盖
img {
......
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