西海岸bug修复

This commit is contained in:
wuhongjian 2022-11-26 18:39:45 +08:00
parent ea3f9b693a
commit 555672eeb8
9 changed files with 790 additions and 642 deletions

View File

@ -2,38 +2,42 @@
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2020-07-07 16:03:23 * @Date: 2020-07-07 16:03:23
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-10-13 20:53:24 * @LastEditTime: 2022-11-26 13:57:51
* @Description: 数据资源参数配置 * @Description: 数据资源参数配置
*/ */
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
const newLocation = CONFIGITEM.version const newLocation = CONFIGITEM.version
// const newLocation = 'baotou' // const newLocation = 'baotou'
// const newLocation = 'xihaian' // const newLocation = 'xihaian'
// //
const whoShow = {} const whoShow = {}
const launchedDataNumObject = {} const launchedDataNumObject = {}
// //
const navListManagement = {} const navListManagement = {}
// //
const uavAndIndividualSoldier = {} const uavAndIndividualSoldier = {}
// //
const infrastructure = {} const infrastructure = {}
// //
const mapTestNum = {} const mapTestNum = {}
// //
const footerDataList = {} const footerDataList = {}
// 西-- // 西--
const xhaHasPermissionUser = {} const xhaHasPermissionUser = {}
// qingdao // qingdao
if (newLocation !== 'baotou' && newLocation !== 'xihaian') { if (newLocation !== 'baotou' && newLocation !== 'xihaian') {
whoShow.itShowQingDao = true whoShow.itShowQingDao = true
infrastructure.deptName = '青岛市大数据发展管理局' infrastructure.deptName = '青岛市大数据发展管理局'
infrastructure.deptId = '1067246875800000066' infrastructure.deptId = '1067246875800000066'
navListManagement.navList = [ navListManagement.navList = [
{ name: '共享门户', key: 'home' }, { name: '共享门户', key: 'home' },
{ name: '能力集市', key: 'DetailsPageconetent', innerKey: 'algorithmCompare' }, {
// { name: '', key: 'capabilityCloud' }, name: '能力集市',
key: 'DetailsPageconetent',
innerKey: 'algorithmCompare',
},
{ name: '能力云图', key: 'capabilityCloud' },
{ name: '能力统计', key: 'abilityStatistics' }, { name: '能力统计', key: 'abilityStatistics' },
// { name: '', key: 'developmentGuide' }, // { name: '', key: 'developmentGuide' },
{ name: '新手指南', key: 'instructionManual' }, { name: '新手指南', key: 'instructionManual' },
@ -50,7 +54,8 @@ if (newLocation !== 'baotou' && newLocation !== 'xihaian') {
left: '青岛市大数据发展管理局', left: '青岛市大数据发展管理局',
right: '政府标识码3702000106', right: '政府标识码3702000106',
}, },
address: [{ address: [
{
name: '邮编: 266071', name: '邮编: 266071',
value: 'Email: QDDSJJ@qingdao.shandong.cn', value: 'Email: QDDSJJ@qingdao.shandong.cn',
}, },
@ -64,7 +69,8 @@ if (newLocation !== 'baotou' && newLocation !== 'xihaian') {
}, },
], ],
} }
mapTestNum.lsNum = [{ mapTestNum.lsNum = [
{
name: '基础设施', name: '基础设施',
key: 'lsjcss', key: 'lsjcss',
num: '20135个', num: '20135个',
@ -80,7 +86,8 @@ if (newLocation !== 'baotou' && newLocation !== 'xihaian') {
num: '28个', num: '28个',
}, },
] ]
mapTestNum.xhaNum = [{ mapTestNum.xhaNum = [
{
name: '基础设施', name: '基础设施',
key: 'xhajcss', key: 'xhajcss',
num: '35282个', num: '35282个',
@ -105,7 +112,8 @@ if (newLocation !== 'baotou' && newLocation !== 'xihaian') {
// baotou // baotou
else if (newLocation === 'baotou') { else if (newLocation === 'baotou') {
whoShow.itShowBaoTou = true whoShow.itShowBaoTou = true
launchedDataNumObject.launchedDataNum = [{ launchedDataNumObject.launchedDataNum = [
{
num: 10372, num: 10372,
}, },
{ {
@ -132,7 +140,8 @@ else if (newLocation === 'baotou') {
left: '包头市工业和信息化局大数据中心建设', left: '包头市工业和信息化局大数据中心建设',
right: '海信网络科技股份有限公司', right: '海信网络科技股份有限公司',
}, },
address: [{ address: [
{
name: '蒙ICP备05003330-1号', name: '蒙ICP备05003330-1号',
value: '政府标识码1502000040', value: '政府标识码1502000040',
}, },
@ -153,32 +162,41 @@ else if (newLocation === 'xihaian') {
infrastructure.deptName = '西海岸新区大数据发展' infrastructure.deptName = '西海岸新区大数据发展'
// infrastructure.deptId = '1067246875800000066' // infrastructure.deptId = '1067246875800000066'
uavAndIndividualSoldier.num = 4 uavAndIndividualSoldier.num = 4
uavAndIndividualSoldier.uavList = [{ uavAndIndividualSoldier.uavList = [
{
name: '经纬 M300 RTK-1', name: '经纬 M300 RTK-1',
url: '', url: '',
details: [{ details: [
{
name: '飞行器', name: '飞行器',
attribute: { attribute: {
尺寸: '尺寸展开不包含桨叶810×670×430 mm××尺寸折叠包含桨叶430×420×430 mm××', 尺寸: '尺寸展开不包含桨叶810×670×430 mm××尺寸折叠包含桨叶430×420×430 mm××',
对称电机轴距: '895 mm', 对称电机轴距: '895 mm',
'重量(含下置单云台支架):空机重量(不含电池)': '3.6 kg空机重量含双电池6.3 kg', '重量(含下置单云台支架):空机重量(不含电池)':
'3.6 kg空机重量含双电池6.3 kg',
单云台减震球最大负重: '930g', 单云台减震球最大负重: '930g',
最大起飞重量: '9 kg', 最大起飞重量: '9 kg',
工作频率: '2.4000-2.4835 GHz5.725-5.850 GHz', 工作频率: '2.4000-2.4835 GHz5.725-5.850 GHz',
'发射功率EIRP': '2.4000-2.4835 GHz29.5 dBmFCC、18.5dBmCE、18.5 dBmSRRC、18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC、12.5dBmCE、28.5 dBmSRRC', '发射功率EIRP':
'悬停精度P-GPS': '垂直±0.1 m视觉定位正常工作时、±0.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时水平±0.3 m视觉定位正常工作时、±1.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时)', '2.4000-2.4835 GHz29.5 dBmFCC、18.5dBmCE、18.5 dBmSRRC、18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC、12.5dBmCE、28.5 dBmSRRC',
'RTK 位置精度': '在 RTK FIX 时1 cm+1 ppm水平、1.5 cm + 1 ppm垂直', '悬停精度P-GPS':
'垂直±0.1 m视觉定位正常工作时、±0.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时水平±0.3 m视觉定位正常工作时、±1.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时)',
'RTK 位置精度':
'在 RTK FIX 时1 cm+1 ppm水平、1.5 cm + 1 ppm垂直',
最大旋转角速度: '俯仰轴300°/s、航向轴100°/s', 最大旋转角速度: '俯仰轴300°/s、航向轴100°/s',
最大俯仰角度: '30° P模式且前视视觉系统启用25°', 最大俯仰角度: '30° P模式且前视视觉系统启用25°',
最大上升速度: 'S 模式6 m/s、P 模式5 m/s', 最大上升速度: 'S 模式6 m/s、P 模式5 m/s',
'最大下降速度(垂直)': 'S 模式5 m/s、P 模式4 m/s', '最大下降速度(垂直)': 'S 模式5 m/s、P 模式4 m/s',
最大倾斜下降速度: 'S 模式7 m/s', 最大倾斜下降速度: 'S 模式7 m/s',
最大水平飞行速度: 'S 模式23 m/s、P 模式17 m/s', 最大水平飞行速度: 'S 模式23 m/s、P 模式17 m/s',
最大飞行海拔高度: '5000 m2110 桨叶起飞重量≤7 kg/ 7000 m2195 高原静音桨叶起飞重量≤7 kg', 最大飞行海拔高度:
'5000 m2110 桨叶起飞重量≤7 kg/ 7000 m2195 高原静音桨叶起飞重量≤7 kg',
最大可承受风速: '15m/s起飞及降落阶段为12m/s', 最大可承受风速: '15m/s起飞及降落阶段为12m/s',
最大飞行时间: '55 min', 最大飞行时间: '55 min',
'适配 DJI 云台': '禅思 XT2、禅思 XT S、禅思 Z30、禅思 H20、禅思 H20T、DJI P1、DJI L1', '适配 DJI 云台':
支持云台安装方式: '下置单云台、上置单云台、下置双云台、下置单云台+上置单云台、下置双云台+上置单云台', '禅思 XT2、禅思 XT S、禅思 Z30、禅思 H20、禅思 H20T、DJI P1、DJI L1',
支持云台安装方式:
'下置单云台、上置单云台、下置双云台、下置单云台+上置单云台、下置双云台+上置单云台',
'IP 防护等级': 'IP45', 'IP 防护等级': 'IP45',
GNSS: 'GPS+GLONASS+BeiDou+Galileo', GNSS: 'GPS+GLONASS+BeiDou+Galileo',
工作环境温度: '-20°C 至 50°C', 工作环境温度: '-20°C 至 50°C',
@ -188,10 +206,14 @@ else if (newLocation === 'xihaian') {
name: '遥控器', name: '遥控器',
attribute: { attribute: {
工作频率: '2.4000-2.4835 GHz、5.725-5.850 GHz', 工作频率: '2.4000-2.4835 GHz、5.725-5.850 GHz',
'最大信号有效距离(无干扰、无遮挡)': 'NCC/FCC15 km、CE/MIC8 km、SRRC8 km', '最大信号有效距离(无干扰、无遮挡)':
'等效全向辐射功率EIRP': '2.4000-2.4835 GHz29.5 dBmFCC18.5dBmCE、18.5 dBmSRRC18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC12.5dBmCE、20.5 dBmSRRC', 'NCC/FCC15 km、CE/MIC8 km、SRRC8 km',
外置电池: '名称WB37 智能电池容量4920 mAh电压7.6 V电池类型LiPo能量37.39 Wh充电时间使用 BS60 智能电池箱70 分钟15°C 至 45°C130 分钟0°C 至 15°C', '等效全向辐射功率EIRP':
内置电池: '类型18650 锂离子电池 5000 mAh @ 7.2 V充电方式使用规格为 12V/2A 的 USB 充电器额定功率17 W充电时间2 小时 15 分钟使用规格为12V/2A 的 USB 充电器)', '2.4000-2.4835 GHz29.5 dBmFCC18.5dBmCE、18.5 dBmSRRC18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC12.5dBmCE、20.5 dBmSRRC',
外置电池:
'名称WB37 智能电池容量4920 mAh电压7.6 V电池类型LiPo能量37.39 Wh充电时间使用 BS60 智能电池箱70 分钟15°C 至 45°C130 分钟0°C 至 15°C',
内置电池:
'类型18650 锂离子电池 5000 mAh @ 7.2 V充电方式使用规格为 12V/2A 的 USB 充电器额定功率17 W充电时间2 小时 15 分钟使用规格为12V/2A 的 USB 充电器)',
续航时间: '内置电池:约 2.5 小时内置电池+外置电池:约 4.5 小时', 续航时间: '内置电池:约 2.5 小时内置电池+外置电池:约 4.5 小时',
'USB-A 接口供电电压/电流': '5 V / 1.5 A', 'USB-A 接口供电电压/电流': '5 V / 1.5 A',
工作环境温度: '-20° 至 40° C', 工作环境温度: '-20° 至 40° C',
@ -202,7 +224,8 @@ else if (newLocation === 'xihaian') {
attribute: { attribute: {
障碍物感知范围: '前后左右0.7-40 m、上下0.6-30 m', 障碍物感知范围: '前后左右0.7-40 m、上下0.6-30 m',
FOV: '前后下65°H50°V、左右上75°H60°V', FOV: '前后下65°H50°V、左右上75°H60°V',
使用环境: '表面有丰富纹理,光照条件充足(>15 lux室内日光灯正常照射环境', 使用环境:
'表面有丰富纹理,光照条件充足(>15 lux室内日光灯正常照射环境',
}, },
}, },
{ {
@ -238,8 +261,10 @@ else if (newLocation === 'xihaian') {
电池整体重量: '约 1.35 kg', 电池整体重量: '约 1.35 kg',
工作环境温度: '-20℃ 至 50℃', 工作环境温度: '-20℃ 至 50℃',
理想存放环境温度: '22℃ 至 30℃', 理想存放环境温度: '22℃ 至 30℃',
充电环境温度: '-20°C 至 40°C当环境温度低于 5°C时电池会启动自加热功能在低温环境下充电有可能会降低电池使用寿命', 充电环境温度:
充电时间: '使用 BS60 智能电池箱时,使用 220 V 电源:完全充满两块 TB60 智能飞行电池约需 60 分钟,从 20% 充到 90% 约需 30 分钟;使用 110 V 电源:完全充满两块 TB60 智能飞行电池约需 70 分钟,从 20% 充到 90% 约需 40 分钟', '-20°C 至 40°C当环境温度低于 5°C时电池会启动自加热功能在低温环境下充电有可能会降低电池使用寿命',
充电时间:
'使用 BS60 智能电池箱时,使用 220 V 电源:完全充满两块 TB60 智能飞行电池约需 60 分钟,从 20% 充到 90% 约需 30 分钟;使用 110 V 电源:完全充满两块 TB60 智能飞行电池约需 70 分钟,从 20% 充到 90% 约需 40 分钟',
}, },
}, },
{ {
@ -259,29 +284,37 @@ else if (newLocation === 'xihaian') {
{ {
name: '经纬 M300 RTK-2', name: '经纬 M300 RTK-2',
url: '', url: '',
details: [{ details: [
{
name: '飞行器', name: '飞行器',
attribute: { attribute: {
尺寸: '尺寸展开不包含桨叶810×670×430 mm××尺寸折叠包含桨叶430×420×430 mm××', 尺寸: '尺寸展开不包含桨叶810×670×430 mm××尺寸折叠包含桨叶430×420×430 mm××',
对称电机轴距: '895 mm', 对称电机轴距: '895 mm',
'重量(含下置单云台支架):空机重量(不含电池)': '3.6 kg空机重量含双电池6.3 kg', '重量(含下置单云台支架):空机重量(不含电池)':
'3.6 kg空机重量含双电池6.3 kg',
单云台减震球最大负重: '930g', 单云台减震球最大负重: '930g',
最大起飞重量: '9 kg', 最大起飞重量: '9 kg',
工作频率: '2.4000-2.4835 GHz5.725-5.850 GHz', 工作频率: '2.4000-2.4835 GHz5.725-5.850 GHz',
'发射功率EIRP': '2.4000-2.4835 GHz29.5 dBmFCC、18.5dBmCE、18.5 dBmSRRC、18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC、12.5dBmCE、28.5 dBmSRRC', '发射功率EIRP':
'悬停精度P-GPS': '垂直±0.1 m视觉定位正常工作时、±0.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时水平±0.3 m视觉定位正常工作时、±1.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时)', '2.4000-2.4835 GHz29.5 dBmFCC、18.5dBmCE、18.5 dBmSRRC、18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC、12.5dBmCE、28.5 dBmSRRC',
'RTK 位置精度': '在 RTK FIX 时1 cm+1 ppm水平、1.5 cm + 1 ppm垂直', '悬停精度P-GPS':
'垂直±0.1 m视觉定位正常工作时、±0.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时水平±0.3 m视觉定位正常工作时、±1.5 mGPS 正常工作时、±0.1 mRTK 定位正常工作时)',
'RTK 位置精度':
'在 RTK FIX 时1 cm+1 ppm水平、1.5 cm + 1 ppm垂直',
最大旋转角速度: '俯仰轴300°/s、航向轴100°/s', 最大旋转角速度: '俯仰轴300°/s、航向轴100°/s',
最大俯仰角度: '30° P模式且前视视觉系统启用25°', 最大俯仰角度: '30° P模式且前视视觉系统启用25°',
最大上升速度: 'S 模式6 m/s、P 模式5 m/s', 最大上升速度: 'S 模式6 m/s、P 模式5 m/s',
'最大下降速度(垂直)': 'S 模式5 m/s、P 模式4 m/s', '最大下降速度(垂直)': 'S 模式5 m/s、P 模式4 m/s',
最大倾斜下降速度: 'S 模式7 m/s', 最大倾斜下降速度: 'S 模式7 m/s',
最大水平飞行速度: 'S 模式23 m/s、P 模式17 m/s', 最大水平飞行速度: 'S 模式23 m/s、P 模式17 m/s',
最大飞行海拔高度: '5000 m2110 桨叶起飞重量≤7 kg/ 7000 m2195 高原静音桨叶起飞重量≤7 kg', 最大飞行海拔高度:
'5000 m2110 桨叶起飞重量≤7 kg/ 7000 m2195 高原静音桨叶起飞重量≤7 kg',
最大可承受风速: '15m/s起飞及降落阶段为12m/s', 最大可承受风速: '15m/s起飞及降落阶段为12m/s',
最大飞行时间: '55 min', 最大飞行时间: '55 min',
'适配 DJI 云台': '禅思 XT2、禅思 XT S、禅思 Z30、禅思 H20、禅思 H20T、DJI P1、DJI L1', '适配 DJI 云台':
支持云台安装方式: '下置单云台、上置单云台、下置双云台、下置单云台+上置单云台、下置双云台+上置单云台', '禅思 XT2、禅思 XT S、禅思 Z30、禅思 H20、禅思 H20T、DJI P1、DJI L1',
支持云台安装方式:
'下置单云台、上置单云台、下置双云台、下置单云台+上置单云台、下置双云台+上置单云台',
'IP 防护等级': 'IP45', 'IP 防护等级': 'IP45',
GNSS: 'GPS+GLONASS+BeiDou+Galileo', GNSS: 'GPS+GLONASS+BeiDou+Galileo',
工作环境温度: '-20°C 至 50°C', 工作环境温度: '-20°C 至 50°C',
@ -291,10 +324,14 @@ else if (newLocation === 'xihaian') {
name: '遥控器', name: '遥控器',
attribute: { attribute: {
工作频率: '2.4000-2.4835 GHz、5.725-5.850 GHz', 工作频率: '2.4000-2.4835 GHz、5.725-5.850 GHz',
'最大信号有效距离(无干扰、无遮挡)': 'NCC/FCC15 km、CE/MIC8 km、SRRC8 km', '最大信号有效距离(无干扰、无遮挡)':
'等效全向辐射功率EIRP': '2.4000-2.4835 GHz29.5 dBmFCC18.5dBmCE、18.5 dBmSRRC18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC12.5dBmCE、20.5 dBmSRRC', 'NCC/FCC15 km、CE/MIC8 km、SRRC8 km',
外置电池: '名称WB37 智能电池容量4920 mAh电压7.6 V电池类型LiPo能量37.39 Wh充电时间使用 BS60 智能电池箱70 分钟15°C 至 45°C130 分钟0°C 至 15°C', '等效全向辐射功率EIRP':
内置电池: '类型18650 锂离子电池 5000 mAh @ 7.2 V充电方式使用规格为 12V/2A 的 USB 充电器额定功率17 W充电时间2 小时 15 分钟使用规格为12V/2A 的 USB 充电器)', '2.4000-2.4835 GHz29.5 dBmFCC18.5dBmCE、18.5 dBmSRRC18.5dBmMIC5.725-5.850 GHz28.5 dBmFCC12.5dBmCE、20.5 dBmSRRC',
外置电池:
'名称WB37 智能电池容量4920 mAh电压7.6 V电池类型LiPo能量37.39 Wh充电时间使用 BS60 智能电池箱70 分钟15°C 至 45°C130 分钟0°C 至 15°C',
内置电池:
'类型18650 锂离子电池 5000 mAh @ 7.2 V充电方式使用规格为 12V/2A 的 USB 充电器额定功率17 W充电时间2 小时 15 分钟使用规格为12V/2A 的 USB 充电器)',
续航时间: '内置电池:约 2.5 小时内置电池+外置电池:约 4.5 小时', 续航时间: '内置电池:约 2.5 小时内置电池+外置电池:约 4.5 小时',
'USB-A 接口供电电压/电流': '5 V / 1.5 A', 'USB-A 接口供电电压/电流': '5 V / 1.5 A',
工作环境温度: '-20° 至 40° C', 工作环境温度: '-20° 至 40° C',
@ -305,7 +342,8 @@ else if (newLocation === 'xihaian') {
attribute: { attribute: {
障碍物感知范围: '前后左右0.7-40 m、上下0.6-30 m', 障碍物感知范围: '前后左右0.7-40 m、上下0.6-30 m',
FOV: '前后下65°H50°V、左右上75°H60°V', FOV: '前后下65°H50°V、左右上75°H60°V',
使用环境: '表面有丰富纹理,光照条件充足(>15 lux室内日光灯正常照射环境', 使用环境:
'表面有丰富纹理,光照条件充足(>15 lux室内日光灯正常照射环境',
}, },
}, },
{ {
@ -341,8 +379,10 @@ else if (newLocation === 'xihaian') {
电池整体重量: '约 1.35 kg', 电池整体重量: '约 1.35 kg',
工作环境温度: '-20℃ 至 50℃', 工作环境温度: '-20℃ 至 50℃',
理想存放环境温度: '22℃ 至 30℃', 理想存放环境温度: '22℃ 至 30℃',
充电环境温度: '-20°C 至 40°C当环境温度低于 5°C时电池会启动自加热功能在低温环境下充电有可能会降低电池使用寿命', 充电环境温度:
充电时间: '使用 BS60 智能电池箱时,使用 220 V 电源:完全充满两块 TB60 智能飞行电池约需 60 分钟,从 20% 充到 90% 约需 30 分钟;使用 110 V 电源:完全充满两块 TB60 智能飞行电池约需 70 分钟,从 20% 充到 90% 约需 40 分钟', '-20°C 至 40°C当环境温度低于 5°C时电池会启动自加热功能在低温环境下充电有可能会降低电池使用寿命',
充电时间:
'使用 BS60 智能电池箱时,使用 220 V 电源:完全充满两块 TB60 智能飞行电池约需 60 分钟,从 20% 充到 90% 约需 30 分钟;使用 110 V 电源:完全充满两块 TB60 智能飞行电池约需 70 分钟,从 20% 充到 90% 约需 40 分钟',
}, },
}, },
{ {
@ -360,7 +400,8 @@ else if (newLocation === 'xihaian') {
], ],
}, },
] ]
uavAndIndividualSoldier.individualSoldier = [{ uavAndIndividualSoldier.individualSoldier = [
{
name: 'T950天通-1', name: 'T950天通-1',
type: '单兵设备', type: '单兵设备',
details: { details: {
@ -370,9 +411,11 @@ else if (newLocation === 'xihaian') {
CPU: '展锐 Makalu T7510;虎贲T710+春藤IVY510', CPU: '展锐 Makalu T7510;虎贲T710+春藤IVY510',
存储: '标配:6GB ROM +128G RAM', 存储: '标配:6GB ROM +128G RAM',
显示屏: '6.52吋水滴屏;HD+1600*720(20:9)', 显示屏: '6.52吋水滴屏;HD+1600*720(20:9)',
后置摄像头: '后置为4800万主摄+200万微距+200万红外三摄组合支持闪光灯', 后置摄像头:
'后置为4800万主摄+200万微距+200万红外三摄组合支持闪光灯',
前置摄像头: '1600万', 前置摄像头: '1600万',
传感器相关: '指纹|光线传感器|距离传感器|加速度传感器|地磁传感器|陀螺仪|气压传感器', 传感器相关:
'指纹|光线传感器|距离传感器|加速度传感器|地磁传感器|陀螺仪|气压传感器',
WLAN: '802.11a/b/g/n/AC 支持MIMO', WLAN: '802.11a/b/g/n/AC 支持MIMO',
电池: '6000mAh@3.8V内置不可拆卸支持18W快充', 电池: '6000mAh@3.8V内置不可拆卸支持18W快充',
工作时间: '待机时长180h卫星通话时长16h', 工作时间: '待机时长180h卫星通话时长16h',
@ -414,9 +457,11 @@ else if (newLocation === 'xihaian') {
CPU: '展锐 Makalu T7510;虎贲T710+春藤IVY510', CPU: '展锐 Makalu T7510;虎贲T710+春藤IVY510',
存储: '标配:6GB ROM +128G RAM', 存储: '标配:6GB ROM +128G RAM',
显示屏: '6.52吋水滴屏;HD+1600*720(20:9)', 显示屏: '6.52吋水滴屏;HD+1600*720(20:9)',
后置摄像头: '后置为4800万主摄+200万微距+200万红外三摄组合支持闪光灯', 后置摄像头:
'后置为4800万主摄+200万微距+200万红外三摄组合支持闪光灯',
前置摄像头: '1600万', 前置摄像头: '1600万',
传感器相关: '指纹|光线传感器|距离传感器|加速度传感器|地磁传感器|陀螺仪|气压传感器', 传感器相关:
'指纹|光线传感器|距离传感器|加速度传感器|地磁传感器|陀螺仪|气压传感器',
WLAN: '802.11a/b/g/n/AC 支持MIMO', WLAN: '802.11a/b/g/n/AC 支持MIMO',
电池: '6000mAh@3.8V内置不可拆卸支持18W快充', 电池: '6000mAh@3.8V内置不可拆卸支持18W快充',
工作时间: '待机时长180h卫星通话时长16h', 工作时间: '待机时长180h卫星通话时长16h',
@ -467,7 +512,8 @@ else if (newLocation === 'xihaian') {
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
right: CONFIGITEM.vNum, right: CONFIGITEM.vNum,
}, },
address: [{ address: [
{
name: '鲁IC备00000000号', name: '鲁IC备00000000号',
value: '政府标识码3702000106', value: '政府标识码3702000106',
}, },

View File

@ -92,9 +92,9 @@ instance.interceptors.request.use(
*/ */
instance.interceptors.response.use( instance.interceptors.response.use(
(response) => { (response) => {
console.log('接口返回', response) // console.log('', response)
console.log('接口返回headers', response.headers) // console.log('headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect) // console.log('REDIRECT', response.headers.redirect)
response['Access-Control-Expose-Headers'] = 'redirect' response['Access-Control-Expose-Headers'] = 'redirect'
const { code, message } = response.data const { code, message } = response.data
@ -154,14 +154,14 @@ instance.interceptors.response.use(
// } // }
}, },
(error) => { (error) => {
console.log('接口error', error) // console.log('error', error)
if (loadingInstance) loadingInstance.close() if (loadingInstance) loadingInstance.close()
const { response, myMessage } = error const { response, myMessage } = error
if (error.response) { if (error.response) {
console.log('接口返回', response) // console.log('', response)
console.log('接口返回headers', response.headers) // console.log('headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect) // console.log('REDIRECT', response.headers.redirect)
const { status, data } = response const { status, data } = response
handleCode(status, data.msg || myMessage, response.headers.redirect) handleCode(status, data.msg || myMessage, response.headers.redirect)

View File

@ -296,17 +296,29 @@
const num = ref(0) const num = ref(0)
// //
const expireDateOptions = [ const expireDateOptions = [
{
value: moment().add(7, 'days').format('YYYY-MM-DD HH:mm:ss'),
label: '7天',
},
{ {
value: moment().add(30, 'days').format('YYYY-MM-DD HH:mm:ss'), value: moment().add(30, 'days').format('YYYY-MM-DD HH:mm:ss'),
label: '30天', label: '1个月',
}, },
{ {
value: moment().add(60, 'days').format('YYYY-MM-DD HH:mm:ss'), value: moment().add(180, 'days').format('YYYY-MM-DD HH:mm:ss'),
label: '60天', label: '6个月',
}, },
{ {
value: moment().add(90, 'days').format('YYYY-MM-DD HH:mm:ss'), value: moment().add(365, 'days').format('YYYY-MM-DD HH:mm:ss'),
label: '90天', label: '1年',
},
{
value: moment().add(730, 'days').format('YYYY-MM-DD HH:mm:ss'),
label: '2年',
},
{
value: moment().add(1095, 'days').format('YYYY-MM-DD HH:mm:ss'),
label: '3年',
}, },
] ]
const apiURL = window.SITE_CONFIG.apiURL const apiURL = window.SITE_CONFIG.apiURL

View File

@ -2,10 +2,10 @@
海康H5Player 海康H5Player
--> -->
<template> <template>
<div id="player" style="width: 800px; height: 600px; z-index: 9999"></div> <div :id="videoId" style="width: 800px; height: 600px; z-index: 9999"></div>
</template> </template>
<script> <script>
const IS_MOVE_DEVICE = document.body.clientWidth < 992 // // const IS_MOVE_DEVICE = document.body.clientWidth < 992 //
const MSE_IS_SUPPORT = !!window.MediaSource // mse const MSE_IS_SUPPORT = !!window.MediaSource // mse
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
@ -16,6 +16,10 @@
type: String, type: String,
default: '', default: '',
}, },
videoId: {
type: String,
default: 'player',
},
index: { index: {
type: Number, type: Number,
default: 0, default: 0,
@ -24,11 +28,16 @@
type: Boolean, type: Boolean,
default: false, default: false,
}, },
unStopable: {
type: Boolean,
default: false,
},
}, },
data() { data() {
return { return {
player: null, player: null,
splitNum: 1, splitNum: 1,
realTime: true,
mseSupport: MSE_IS_SUPPORT, mseSupport: MSE_IS_SUPPORT,
// tabActive: MSE_IS_SUPPORT ? 'mse' : 'decoder', // tabActive: MSE_IS_SUPPORT ? 'mse' : 'decoder',
tabActive: 'decoder', tabActive: 'decoder',
@ -65,8 +74,13 @@
mybus.emit('closeLoading', true) mybus.emit('closeLoading', true)
this.createPlayer() this.createPlayer()
this.arrangeWindow() this.arrangeWindow()
//videoUrl this.realplay(this.videoUrl,0);//index if (this.unStopable) {
this.videoPlay(this.videoUrl, 0)
} else {
this.realplay(this.videoUrl, 0) this.realplay(this.videoUrl, 0)
}
//videoUrl this.realplay(this.videoUrl,0);//index
//this.realplay('wss://10.134.135.44:6014/proxy/10.10.20.14:559/openUrl/y3mFfcA',0); //this.realplay('wss://10.134.135.44:6014/proxy/10.10.20.14:559/openUrl/y3mFfcA',0);
}, },
watch: { watch: {
@ -76,7 +90,16 @@
console.log('oldVal:', oldVal) console.log('oldVal:', oldVal)
console.log('newVal:', newVal) console.log('newVal:', newVal)
if (newVal) { if (newVal) {
if (!this.player) {
setTimeout(() => {
this.init()
this.createPlayer()
this.arrangeWindow()
this.realplay(newVal, 0) this.realplay(newVal, 0)
}, 1000)
} else {
this.realplay(newVal, 0)
}
} }
}, },
// //
@ -92,12 +115,13 @@
}) })
}, },
createPlayer() { createPlayer() {
//console.log('this.index',this.index); console.log('初始化id', this.videoId)
this.player = new window.JSPlugin({ this.player = new window.JSPlugin({
//szId: 'player'+this.index, //szId: 'player'+this.index,
szId: 'player', szId: this.videoId,
szBasePath: '/util/', //public/jsjs szBasePath: '/util/', //public/jsjs
iMaxSplit: 4, iMaxSplit: 4,
iWidth: '800px',
iCurrentSplit: 4, iCurrentSplit: 4,
openDebug: true, openDebug: true,
oStyle: { oStyle: {
@ -141,8 +165,10 @@
iWidth, iWidth,
iHeight iHeight
) )
// //
if (!that.realTime) {
that.pausePlay(iWndIndex) that.pausePlay(iWndIndex)
}
mybus.emit('closeLoading', false) mybus.emit('closeLoading', false)
}, },
performanceLack: function () { performanceLack: function () {
@ -165,10 +191,13 @@
// //
// //
realplay(playURL, index1) { realplay(playURL, index1) {
this.realTime = false
mybus.emit('closeLoading', true) mybus.emit('closeLoading', true)
setTimeout(() => {
mybus.emit('closeLoading', false)
}, 3000)
this.mode = 0 //0 1 this.mode = 0 //0 1
const { player, mode, urls } = this, const { player, mode, urls } = this
index = player.currentWindowIndex
// playURL = this.realplay // playURL = this.realplay
console.log('视频播放地址', playURL) console.log('视频播放地址', playURL)
// const startTime = { // const startTime = {
@ -195,6 +224,40 @@
} }
) )
}, },
videoPlay(playURL, index1) {
let that = this
this.realTime = true
mybus.emit('closeLoading', true)
setTimeout(() => {
mybus.emit('closeLoading', false)
if (!that.unStopable) {
message.warning('预览将在2s后停止')
setTimeout(() => {
that.stopAllPlay()
}, 6000)
}
}, 3000)
this.mode = 0 //0 1
const { player, mode, urls } = this
// playURL = this.realplay
console.log('视频播放地址', playURL)
// const startTime = {
// startTime: ,
// }
// const endTime = {
// endTime: ,
// }
player.JS_Play(playURL, { playURL, mode }, index1).then(
() => {
console.log('realplay success')
// 6s
},
(e) => {
console.error(e)
// message.error(':' + e)
}
)
},
// //
stopAllPlay() { stopAllPlay() {
this.player.JS_StopRealPlayAll().then( this.player.JS_StopRealPlayAll().then(
@ -210,12 +273,15 @@
}, },
// //
pausePlay(index) { pausePlay(index) {
let that = this
this.player.JS_Pause(index).then( this.player.JS_Pause(index).then(
() => { () => {
console.log('暂停成功') console.log('暂停成功')
}, },
(e) => { (e) => {
console.error(e) console.error(e)
//
that.videoPlay(that.videoUrl, 0)
} }
) )
}, },

View File

@ -1,12 +1,12 @@
<!-- <!--
* @Author: Light * @Author: Light
* @Date: 2022-11-18 11:53:43 * @Date: 2022-11-18 11:53:43
* @LastEditors: Light * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-11-25 20:05:47 * @LastEditTime: 2022-11-26 16:30:51
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<template> <template>
<div class="infrastructureApplication" v-if="showFlag"> <div class="infrastructureApplication" v-show="showFlag">
<div class="top"> <div class="top">
<a-list size="small" bordered :data-source="dataList.toBeApplied"> <a-list size="small" bordered :data-source="dataList.toBeApplied">
<template #renderItem="{ item }"> <template #renderItem="{ item }">
@ -47,7 +47,7 @@
</div> </div>
<a-tag <a-tag
color="cyan" color="cyan"
style="margin-right: 0" style="margin-right: 0; cursor: pointer"
@click="selectItem(item)" @click="selectItem(item)"
> >
{{ {{
@ -88,6 +88,7 @@
</div> </div>
</div> </div>
<a-modal <a-modal
v-if="!dataList.selectItem.cameraInfo"
:width="800" :width="800"
v-model:visible="visible" v-model:visible="visible"
title="撤销申请" title="撤销申请"
@ -110,28 +111,27 @@
</a-table> </a-table>
</a-modal> </a-modal>
<a-modal <a-modal
v-if="dataList.selectItem.cameraInfo" v-else
v-model:visible="showVisible" v-model:visible="showVisible"
:title="dataList.selectItem.cameraInfo.channelName" :title="dataList.selectItem.cameraInfo.channelName"
:footer="null" :footer="null"
:width="845"
destroyOnClose
@cancel="clear" @cancel="clear"
> >
<div style="width: 100%; display: flex; justify-content: center"> <div
<div style="width: 100%; height: 100%; position: relative"> style="
<div class="waterMark waterMark-left-top"> width: 800px;
{{ userInfo.usernameShow }} height: 600px;
</div> display: flex;
<div class="waterMark waterMark-right-top"> justify-content: center;
{{ userInfo.realNameShow }} "
</div> >
<div class="waterMark waterMark-left-bottom"> <h5-player
{{ userInfo.usernameShow }} videoId="preview"
</div> unStopable="true"
<div class="waterMark waterMark-right-bottom"> :video-url="videoUrl"
{{ userInfo.realNameShow }} ></h5-player>
</div>
<h5-player :video-url="videoUrl"></h5-player>
</div>
</div> </div>
</a-modal> </a-modal>
</template> </template>
@ -209,6 +209,10 @@
} }
} }
const apply = () => { const apply = () => {
if (dataList.toBeApplied.length === 0) {
message.warning('待申请列表为空!')
return
}
let obj = { let obj = {
arr: [ arr: [
{ {
@ -286,6 +290,7 @@
getVideoUrl(item.cameraInfo) getVideoUrl(item.cameraInfo)
} else { } else {
dataList.selectItem = {} dataList.selectItem = {}
message.info('请耐心等待审核通过')
showVisible.value = false showVisible.value = false
} }
} }
@ -347,8 +352,10 @@
//console.log('555555rrrrr',res) //console.log('555555rrrrr',res)
if (res.data.data) { if (res.data.data) {
videoUrl.value = res.data.data.url videoUrl.value = res.data.data.url
}
showVisible.value = true showVisible.value = true
} else {
message.warning('申请内容已失效,请撤销后重新进行申请!')
}
}) })
} }
mybus.on('selectCamera', (obj) => { mybus.on('selectCamera', (obj) => {

View File

@ -691,6 +691,7 @@
import { Form } from 'ant-design-vue' import { Form } from 'ant-design-vue'
import moment from 'moment' import moment from 'moment'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import debounce from 'lodash/debounce'
const store = useStore() const store = useStore()
const username = store.getters['user/username'] const username = store.getters['user/username']
const props = defineProps({ const props = defineProps({
@ -1971,7 +1972,8 @@
const wrjFlag = ref(false) const wrjFlag = ref(false)
// 西-loading // 西-loading
const loadingCamera = ref(false) const loadingCamera = ref(false)
const getCamera = (flag, str) => { const getCamera = debounce(
function (flag, str) {
loadingCamera.value = true loadingCamera.value = true
if (flag) { if (flag) {
mapSearchParam.value.cameraName = str mapSearchParam.value.cameraName = str
@ -2046,7 +2048,10 @@
message.error(err) message.error(err)
}) })
} }
} },
1000,
{ leading: true, trailing: false }
)
defineExpose({ defineExpose({
getCamera, getCamera,
reSetSearch, reSetSearch,

View File

@ -121,6 +121,7 @@ import { ElMessage } from 'element-plus'
selectByChannelName, selectByChannelName,
} from '@/api/videoSurveillance' } from '@/api/videoSurveillance'
import { getCameraByCondition,getListForPOI,CameraConditionPlaceType } from '@/api/file' import { getCameraByCondition,getListForPOI,CameraConditionPlaceType } from '@/api/file'
import debounce from 'lodash/debounce'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
import * as turf from '@turf/turf'; import * as turf from '@turf/turf';
@ -378,7 +379,7 @@ import { ElMessage } from 'element-plus'
} }
}) })
}, },
getCameraByParentId(type,dataName) { getCameraByParentId : debounce(function(type,dataName) {
if (!this.whoShow1.itShowXiHaiAn) { if (!this.whoShow1.itShowXiHaiAn) {
getCameraByParentId(this.mapSearchParam).then((res) => { getCameraByParentId(this.mapSearchParam).then((res) => {
console.log('根据parent查询摄像头', res.data.data) console.log('根据parent查询摄像头', res.data.data)
@ -436,7 +437,7 @@ import { ElMessage } from 'element-plus'
}) })
} }
}, }, 1000, { 'leading': true, 'trailing': false }),
// //
initAddressMatchService() { initAddressMatchService() {
this.L = window.L || {} this.L = window.L || {}
@ -534,7 +535,7 @@ import { ElMessage } from 'element-plus'
cb([]) cb([])
} }
}, },
getCameraAllPage(page) { getCameraAllPage: debounce(function(page) {
let params = { let params = {
regionId: "70be8c5b664f4bcf869d82f2e8335051", regionId: "70be8c5b664f4bcf869d82f2e8335051",
borderPolygonList: [] borderPolygonList: []
@ -546,7 +547,7 @@ import { ElMessage } from 'element-plus'
// let t2 = new Date().getTime(); // let t2 = new Date().getTime();
// console.log("#############" + (t2 - t1)); // console.log("#############" + (t2 - t1));
}) })
}, },1000, { 'leading': true, 'trailing': false }),
getCameraAllLabel() {}, getCameraAllLabel() {},
tabChange(item) { tabChange(item) {
if (this.checkboxGroup.indexOf(item.labelName) !== -1) { if (this.checkboxGroup.indexOf(item.labelName) !== -1) {

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua * @Author: hisense.liangjunhua
* @Date: 2022-07-12 09:42:44 * @Date: 2022-07-12 09:42:44
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-10-26 18:15:01 * @LastEditTime: 2022-11-26 14:47:12
* @Description:我的申请 能力申请 查看详情 * @Description:我的申请 能力申请 查看详情
--> -->
<template> <template>
@ -172,7 +172,6 @@
> >
附件下载 附件下载
</a-button> </a-button>
</div> </div>
</div> </div>
</div> </div>
@ -225,11 +224,17 @@
style="cursor: pointer" style="cursor: pointer"
@click=" @click="
openView( openView(
'http://10.134.135.92:9537/data_service/getCamera/getCameraLiveStream?cameraIndexCode=' + val.channelCode+'&protocol=wss&transmode=1&streamType=1' 'http://10.134.135.92:9537/data_service/getCamera/getCameraLiveStream?cameraIndexCode=' +
val.channelCode +
'&protocol=wss&transmode=1&streamType=1'
) )
" "
> >
{{ 'http://10.134.135.92:9537/data_service/getCamera/getCameraLiveStream?cameraIndexCode=' + val.channelCode+'&protocol=wss&transmode=1&streamType=1' }} {{
'http://10.134.135.92:9537/data_service/getCamera/getCameraLiveStream?cameraIndexCode=' +
val.channelCode +
'&protocol=wss&transmode=1&streamType=1'
}}
</span> </span>
</div> </div>
</div> </div>
@ -245,7 +250,7 @@
border-radius: 5px; border-radius: 5px;
font-size: 14px; font-size: 14px;
color: #fff; color: #fff;
cursor:pointer; cursor: pointer;
" "
href="/static/download/InstallRootCert.exe" href="/static/download/InstallRootCert.exe"
> >
@ -262,8 +267,8 @@
border-radius: 5px; border-radius: 5px;
font-size: 14px; font-size: 14px;
color: #fff; color: #fff;
margin-left:40px; margin-left: 40px;
cursor:pointer; cursor: pointer;
" "
@click="downLoadClient()" @click="downLoadClient()"
> >
@ -280,7 +285,7 @@
wrapClassName="single-preview-modal" wrapClassName="single-preview-modal"
v-model:visible="visible" v-model:visible="visible"
title="视频预览" title="视频预览"
:width="1000" :width="850"
destroyOnClose destroyOnClose
> >
<template #footer></template> <template #footer></template>
@ -300,7 +305,11 @@
{{ userInfo.realNameShow }} {{ userInfo.realNameShow }}
</div> </div>
<!-- <vue3VideoPlay v-bind="options" /> --> <!-- <vue3VideoPlay v-bind="options" /> -->
<h5-player :video-url="videoUrl"></h5-player> <h5-player
unStopable="true"
:video-id="videoId"
:video-url="videoUrl"
></h5-player>
</div> </div>
</div> </div>
</a-modal> </a-modal>
@ -315,7 +324,7 @@
import { getStreamByChannelCode } from '@/api/videoSurveillance' import { getStreamByChannelCode } from '@/api/videoSurveillance'
import { getUser } from '@/api/home' import { getUser } from '@/api/home'
import H5Player from '@/views/home/components/H5Player.vue' import H5Player from '@/views/home/components/H5Player.vue'
import {getCameraLiveStream} from '@/api/file' import { getCameraLiveStream } from '@/api/file'
const router = useRouter() const router = useRouter()
const backUrl = ref(window.SITE_CONFIG.apiURL + '/') const backUrl = ref(window.SITE_CONFIG.apiURL + '/')
const props = defineProps({ const props = defineProps({
@ -323,6 +332,7 @@
}) })
const whoShow1 = ref(whoShow) const whoShow1 = ref(whoShow)
let visible = ref(false) let visible = ref(false)
const videoId = ref('111111111111')
const options = reactive({ const options = reactive({
width: '912px', // width: '912px', //
height: '513px', // height: '513px', //
@ -359,7 +369,7 @@
dept.deptName = infrastructure.deptName dept.deptName = infrastructure.deptName
} }
const showThis = () => { const showThis = () => {
console.log('props.refObj.enclosure',props.refObj); console.log('props.refObj.enclosure', props.refObj)
window.open( window.open(
window.SITE_CONFIG.previewUrl + window.SITE_CONFIG.previewUrl +
'hisense_office/onlinePreview?url=' + 'hisense_office/onlinePreview?url=' +
@ -368,8 +378,9 @@
} }
// //
const downLoadClient = () => { const downLoadClient = () => {
let url = "https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=10"; let url =
window.open( url, '_blank') 'https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=10'
window.open(url, '_blank')
} }
const showArr = ref([]) const showArr = ref([])
console.log(props.refObj, '=====================================') console.log(props.refObj, '=====================================')
@ -517,13 +528,13 @@
const videoUrl = ref('') const videoUrl = ref('')
// //
const getVideoUrl = (data) =>{ const getVideoUrl = (data) => {
debugger debugger
let param = data; let param = data
getCameraLiveStream(param).then((res) => { getCameraLiveStream(param).then((res) => {
//console.log('555555rrrrr',res) //console.log('555555rrrrr',res)
if(res.data.data){ if (res.data.data) {
videoUrl.value = res.data.data.url; videoUrl.value = res.data.data.url
} }
visible.value = true visible.value = true
}) })
@ -578,7 +589,7 @@
}) })
} }
const openView = (url) => { const openView = (url) => {
console.log('valval',url); console.log('valval', url)
//http://10.134.135.92:9537/data_service/getCamera/getCameraLiveStream?cameraIndexCode=37021100421318000090&protocol=wss&transmode=1&streamType=1 //http://10.134.135.92:9537/data_service/getCamera/getCameraLiveStream?cameraIndexCode=37021100421318000090&protocol=wss&transmode=1&streamType=1
window.open(url, '_blank') window.open(url, '_blank')
} }
@ -628,7 +639,7 @@
width: 2.5rem; width: 2.5rem;
} }
} }
.downButton{ .downButton {
display: flex; display: flex;
justify-content: normal; justify-content: normal;
} }
@ -658,7 +669,7 @@
.box { .box {
margin-left: 0.1rem; margin-left: 0.1rem;
.ability { .ability {
height: 2.0rem; height: 2rem;
display: flex; display: flex;
border-bottom: 1px #eee solid; border-bottom: 1px #eee solid;
padding: 0.1rem 0; padding: 0.1rem 0;
@ -766,7 +777,7 @@
position: relative; position: relative;
} }
} }
.button-bottom{ .button-bottom {
margin-top: 0; margin-top: 0;
margin-bottom: 10px; margin-bottom: 10px;
} }

View File

@ -29,8 +29,8 @@ const productionGzipExtensions = [
'ico', 'ico',
] ]
// gzip // gzip
// const isPro = process.env.NODE_ENV === 'production' const isPro = process.env.NODE_ENV === 'production'
const isPro = false // const isPro = false
if (donation) donationConsole() if (donation) donationConsole()
const { version, author } = require('./package.json') const { version, author } = require('./package.json')
const Webpack = require('webpack') const Webpack = require('webpack')