Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pdczt_qd
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhaopanyu
pdczt_qd
Commits
3cd04a10
Commit
3cd04a10
authored
Aug 13, 2025
by
cat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
zd
parent
d976850e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
2515 additions
and
2 deletions
+2515
-2
src/router/index.js
+17
-0
src/views/efficiencyAnalysis/djxx/index.vue
+2
-2
src/views/efficiencyAnalysis/djzt/detail/components/CurveGraph.vue
+232
-0
src/views/efficiencyAnalysis/djzt/detail/components/DataTable.vue
+1205
-0
src/views/efficiencyAnalysis/djzt/detail/components/HistogramGraph.vue
+354
-0
src/views/efficiencyAnalysis/djzt/detail/index.vue
+164
-0
src/views/efficiencyAnalysis/djzt/index.vue
+541
-0
No files found.
src/router/index.js
View file @
3cd04a10
...
@@ -343,6 +343,23 @@ export const dynamicRoutes = [
...
@@ -343,6 +343,23 @@ export const dynamicRoutes = [
],
],
},
},
{
{
path
:
"/efficiencyAnalysis/djzt/detail"
,
component
:
Layout
,
hidden
:
true
,
permissions
:
[
"efficiencyAnalysis:djzt:list"
],
children
:
[
{
path
:
"index/:jh/:famc/:qk/:jhs"
,
component
:
()
=>
import
(
"@/views/efficiencyAnalysis/djzt/detail"
),
name
:
"DjztDetail"
,
meta
:
{
title
:
"多井钻头详情"
,
activeMenu
:
"/views/efficiencyAnalysis/djzt"
,
},
},
],
},
{
path
:
"/jtzb/jtzbGt"
,
path
:
"/jtzb/jtzbGt"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
...
...
src/views/efficiencyAnalysis/djxx/index.vue
View file @
3cd04a10
...
@@ -508,8 +508,8 @@ export default {
...
@@ -508,8 +508,8 @@ export default {
return
true
return
true
}
}
// 邻井选择限制为
3
个
// 邻井选择限制为
2
个
const
maxSelection
=
3
const
maxSelection
=
2
return
this
.
wellSelection
.
length
<
maxSelection
return
this
.
wellSelection
.
length
<
maxSelection
},
},
...
...
src/views/efficiencyAnalysis/djzt/detail/components/CurveGraph.vue
0 → 100644
View file @
3cd04a10
<
template
>
<div
class=
"drilling-chart-container"
v-loading=
"loading"
>
<div
id=
"drillingEfficiencyChartdj"
class=
"chart"
></div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
'echarts'
;
import
{
getdjqxt
}
from
'@/api/optimization/initialization'
;
export
default
{
props
:
{
jh
:
{
type
:
String
,
required
:
true
,
},
jhs
:
{
type
:
String
,
required
:
true
,
}
},
data
()
{
return
{
chartData
:
null
,
myChart
:
null
,
resizeHandler
:
null
,
loading
:
false
// 新增loading状态
};
},
mounted
()
{
// this.getList(); // 移除自动加载
this
.
$once
(
'hook:beforeDestroy'
,
this
.
cleanup
);
},
methods
:
{
/**
* 外部调用:加载数据
*/
loadData
()
{
this
.
loading
=
true
;
this
.
getList
();
},
getList
()
{
const
params
=
{
jhs
:
this
.
jhs
};
this
.
loading
=
true
;
getdjqxt
(
params
)
.
then
(
res
=>
{
console
.
log
(
'接口返回数据:'
,
res
);
this
.
chartData
=
res
;
this
.
initChart
();
})
.
catch
(
error
=>
{
console
.
error
(
'接口请求失败:'
,
error
);
this
.
chartData
=
null
;
this
.
initChart
();
})
.
finally
(()
=>
{
this
.
loading
=
false
;
});
},
initChart
()
{
if
(
!
this
.
chartData
)
{
const
chartDom
=
document
.
getElementById
(
'drillingEfficiencyChartdj'
);
if
(
chartDom
&&
this
.
myChart
)
{
this
.
myChart
.
clear
();
}
return
;
}
const
chartDom
=
document
.
getElementById
(
'drillingEfficiencyChartdj'
);
if
(
!
chartDom
)
{
console
.
error
(
'未找到图表容器'
);
return
;
}
if
(
chartDom
.
offsetWidth
===
0
||
chartDom
.
offsetHeight
===
0
)
{
console
.
log
(
'容器尺寸为0,200ms后重试'
);
setTimeout
(()
=>
this
.
initChart
(),
200
);
return
;
}
if
(
this
.
myChart
)
{
this
.
myChart
.
dispose
();
}
this
.
myChart
=
echarts
.
init
(
chartDom
);
// 解析接口数据(确保折线数据格式正确)
const
{
axisRange
,
scatterData
,
targetLineData
,
crosshair
}
=
this
.
chartData
;
const
scatter
=
scatterData
.
map
(
item
=>
[
item
.
speed
,
item
.
depth
,
item
.
drillType
]);
// 折线数据必须为数组格式:[[钻速, 进尺], ...]
const
targetLine
=
targetLineData
.
map
(
item
=>
[
item
.
speed
,
item
.
depth
]);
const
drillTypes
=
[...
new
Set
(
scatterData
.
map
(
item
=>
item
.
drillType
))];
// 十字线及中心点配置
const
crosshairLines
=
[];
const
crosshairCenter
=
[];
if
(
crosshair
)
{
crosshairLines
.
push
({
name
:
'十字线'
,
type
:
'line'
,
data
:
[[
crosshair
.
x
-
10
,
crosshair
.
y
],
[
crosshair
.
x
+
10
,
crosshair
.
y
]],
lineStyle
:
{
color
:
'black'
,
width
:
1
,
type
:
'dashed'
},
symbol
:
'none'
,
tooltip
:
{
show
:
false
}
// 十字线不显示tooltip
});
crosshairLines
.
push
({
name
:
'十字线'
,
type
:
'line'
,
data
:
[[
crosshair
.
x
,
crosshair
.
y
-
500
],
[
crosshair
.
x
,
crosshair
.
y
+
500
]],
lineStyle
:
{
color
:
'black'
,
width
:
1
,
type
:
'dashed'
},
symbol
:
'none'
,
tooltip
:
{
show
:
false
}
// 十字线不显示tooltip
});
crosshairCenter
.
push
({
name
:
'十字线中心'
,
type
:
'scatter'
,
data
:
[[
crosshair
.
x
,
crosshair
.
y
]],
symbolSize
:
12
,
itemStyle
:
{
color
:
'orange'
,
borderColor
:
'#fff'
,
borderWidth
:
2
}
});
}
// 图表配置项(核心:坐标轴触发,确保折线悬浮显示)
const
option
=
{
title
:
{
text
:
'钻头钻进能效分析'
,
left
:
'center'
},
tooltip
:
{
trigger
:
'axis'
,
// 基于坐标轴触发(不依赖数据点)
axisPointer
:
{
type
:
'line'
,
// 显示轴线指示器,辅助定位折线数据点
snap
:
true
// 强制吸附到最近的折线数据点
},
formatter
:
(
params
)
=>
{
// 遍历所有系列数据,找到折线图的信息
const
lineData
=
params
.
find
(
p
=>
p
.
seriesName
===
'优化曲线'
);
const
scatterData
=
params
.
find
(
p
=>
drillTypes
.
includes
(
p
.
seriesName
));
const
centerData
=
params
.
find
(
p
=>
p
.
seriesName
===
'十字线中心'
);
let
result
=
''
;
// 折线图数据(必显)
if
(
lineData
)
{
result
+=
`优化曲线<br>钻速:
${
lineData
.
data
[
0
]}
m/h<br>进尺:
${
lineData
.
data
[
1
]}
<br>`
;
}
// 散点数据(如果鼠标在散点上)
if
(
scatterData
)
{
result
+=
`钻头类型:
${
scatterData
.
data
[
2
]}
<br>钻速:
${
scatterData
.
data
[
0
]}
m/h<br>进尺:
${
scatterData
.
data
[
1
]}
<br>`
;
}
// 中心点数据(如果鼠标在中心点上)
if
(
centerData
)
{
result
+=
`均值<br>钻速:
${
centerData
.
data
[
0
]}
m/h<br>进尺:
${
centerData
.
data
[
1
]}
<br>`
;
}
return
result
;
}
},
legend
:
{
data
:
[
'优化曲线'
,],
top
:
'10%'
,
left
:
'center'
},
xAxis
:
{
name
:
'钻速 (m/h)'
,
type
:
'value'
,
min
:
axisRange
.
xAxis
.
min
,
max
:
axisRange
.
xAxis
.
max
,
interval
:
axisRange
.
xAxis
.
interval
,
axisLabel
:
{
formatter
:
'{value} m/h'
}
},
yAxis
:
{
name
:
'进尺'
,
type
:
'value'
,
min
:
axisRange
.
yAxis
.
min
,
interval
:
axisRange
.
yAxis
.
interval
},
series
:
[
{
name
:
'优化曲线'
,
type
:
'line'
,
data
:
targetLine
,
// 确保数据正确
smooth
:
true
,
// 彻底隐藏所有点(包括悬浮时)
symbol
:
'none'
,
showSymbol
:
false
,
emphasis
:
{
showSymbol
:
false
},
lineStyle
:
{
color
:
'red'
,
width
:
2
}
},
...
crosshairLines
,
...
crosshairCenter
,
...
drillTypes
.
map
(
type
=>
({
name
:
type
,
type
:
'scatter'
,
data
:
scatter
.
filter
(
item
=>
item
[
2
]
===
type
),
symbolSize
:
10
,
itemStyle
:
{
color
:
'blue'
}
}))
]
};
this
.
myChart
.
setOption
(
option
);
this
.
resizeHandler
=
()
=>
this
.
myChart
.
resize
();
window
.
addEventListener
(
'resize'
,
this
.
resizeHandler
);
},
cleanup
()
{
if
(
this
.
myChart
)
{
this
.
myChart
.
dispose
();
this
.
myChart
=
null
;
}
if
(
this
.
resizeHandler
)
{
window
.
removeEventListener
(
'resize'
,
this
.
resizeHandler
);
this
.
resizeHandler
=
null
;
}
}
}
};
</
script
>
<
style
scoped
>
.drilling-chart-container
{
width
:
100%
;
height
:
100%
;
padding
:
20px
;
box-sizing
:
border-box
;
}
.chart
{
width
:
100%
;
height
:
calc
(
100vh
-
220px
);
min-height
:
600px
;
}
</
style
>
\ No newline at end of file
src/views/efficiencyAnalysis/djzt/detail/components/DataTable.vue
0 → 100644
View file @
3cd04a10
<!-- 钻头使用情况 -->
<
template
>
<div
class=
"app-container"
>
<!-- 搜索区域 -->
<div
class=
"search-wrapper"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
<!--
<el-form-item
label=
"区块名称"
prop=
"qk"
>
<el-select
v-model=
"queryParams.qk"
placeholder=
"请选择区块名称"
clearable
filterable
>
<el-option
v-for=
"item in filteredBlockOptions"
:key=
"item.qk"
:label=
"item.qk"
:value=
"item.qk"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"井号"
prop=
"jhs"
>
<el-input
v-model=
"queryParams.jhs"
placeholder=
"请输入井号"
clearable
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"完井日期"
prop=
"wjrq"
>
<el-date-picker
v-model=
"queryParams.wjrqks"
type=
"year"
value-format=
"yyyy"
placeholder=
"完井开始年份"
>
</el-date-picker>
-
<el-date-picker
v-model=
"queryParams.wjrqjs"
type=
"year"
value-format=
"yyyy"
placeholder=
"完井结束年份"
>
</el-date-picker>
</el-form-item>
-->
<el-form-item>
<!--
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
-->
<!--
<el-button
type=
"primary"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['system:jsha:add']"
>
新增
</el-button>
-->
<el-button
type=
"warning"
plain
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['system:jsha:export']"
>
导出
</el-button>
</el-form-item>
</el-form>
</div>
<!-- 表格容器 -->
<div
class=
"table-container"
>
<!-- 主表格区域 -->
<div
class=
"main-table-wrapper"
:class=
"
{ 'with-detail': selectedRow }">
<el-table
border
v-loading=
"loading"
:data=
"jshaList"
@
selection-change=
"handleSelectionChange"
@
row-click=
"handleRowClick"
height=
"tableHeight"
style=
"width: 100%"
>
<!--
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
-->
<el-table-column
label=
"序号"
align=
"center"
prop=
"xh"
width=
"120"
show-overflow-tooltip
fixed
/>
<el-table-column
label=
"井号"
align=
"center"
prop=
"jh"
width=
"120"
show-overflow-tooltip
fixed
/>
<el-table-column
label=
"钻头序列号"
align=
"center"
prop=
"ztxlh"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"尺寸"
align=
"center"
prop=
"cc"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"钻进井段自"
align=
"center"
prop=
"qsjs"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"钻进井段至"
align=
"center"
prop=
"zzjs"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"进尺"
align=
"center"
prop=
"jc"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"机械钻速"
align=
"center"
prop=
"jxzs"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"所钻地层"
align=
"center"
prop=
"szdc"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"厂家"
align=
"center"
prop=
"cj"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"钻头型号"
align=
"center"
prop=
"ztxh"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"IADC号"
align=
"center"
prop=
"iadc"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"下井次数"
align=
"center"
prop=
"xjcs"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"类型"
align=
"center"
prop=
"lx"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"入井新度"
align=
"center"
prop=
"rjxd"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"出井新度"
align=
"center"
prop=
"cjxd"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"喷嘴直径1号"
align=
"center"
prop=
"pz1"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"喷嘴直径2号"
align=
"center"
prop=
"pz2"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"喷嘴直径3号"
align=
"center"
prop=
"pz3"
width=
"120"
show-overflow-tooltip
/>
<!--
<el-table-column
label=
"喷嘴直径4号"
align=
"center"
prop=
"pz4"
/>
<el-table-column
label=
"喷嘴直径5号"
align=
"center"
prop=
"pz5"
/>
<el-table-column
label=
"喷嘴直径6号"
align=
"center"
prop=
"pz6"
/>
<el-table-column
label=
"喷嘴直径7号"
align=
"center"
prop=
"pz7"
/>
<el-table-column
label=
"喷嘴直径8号"
align=
"center"
prop=
"pz8"
/>
<el-table-column
label=
"喷嘴直径9号"
align=
"center"
prop=
"pz9"
/>
<el-table-column
label=
"喷嘴直径10号"
align=
"center"
prop=
"pz10"
/>
-->
<el-table-column
label=
"进尺工作时间合计"
align=
"center"
prop=
"jcsjhj"
width=
"220"
show-overflow-tooltip
/>
<el-table-column
label=
"进尺工作时间纯钻进"
align=
"center"
prop=
"jcsjczj"
width=
"220"
show-overflow-tooltip
/>
<el-table-column
label=
"进尺工作时间起下钻"
align=
"center"
prop=
"jcsjqxz"
width=
"220"
show-overflow-tooltip
/>
<el-table-column
label=
"进尺工作时间扩划眼"
align=
"center"
prop=
"jcsjkhy"
width=
"220"
show-overflow-tooltip
/>
<el-table-column
label=
"钻压"
align=
"center"
prop=
"zy"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"转速"
align=
"center"
prop=
"zs"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"缸径"
align=
"center"
prop=
"gj"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"泵速"
align=
"center"
prop=
"bs"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"排量"
align=
"center"
prop=
"pl"
width=
"120"
show-overflow-tooltip
/>
<el-table-column
label=
"立管泵压"
align=
"center"
prop=
"lgby"
width=
"120"
show-overflow-tooltip
/>
<!--
<el-table-column
label=
"钻头压降"
align=
"center"
prop=
"ztyj"
/>
-->
<!--
<el-table-column
label=
"环空压耗"
align=
"center"
prop=
"hkyh"
/>
<el-table-column
label=
"冲击力"
align=
"center"
prop=
"cjl"
/>
<el-table-column
label=
"喷射速度"
align=
"center"
prop=
"pssd"
/>
<el-table-column
label=
"钻头水功率"
align=
"center"
prop=
"ztsgl"
/>
<el-table-column
label=
"比水功率"
align=
"center"
prop=
"bsgl"
/>
<el-table-column
label=
"上返速度钻杆"
align=
"center"
prop=
"sfsdzg"
/>
<el-table-column
label=
"上返速度钻铤"
align=
"center"
prop=
"sfsdzt"
/>
<el-table-column
label=
"功率利用率"
align=
"center"
prop=
"gllyl"
/>
<el-table-column
label=
"牙齿磨损情况"
align=
"center"
prop=
"ycmsqk"
/>
<el-table-column
label=
"轴承磨损情况"
align=
"center"
prop=
"zcmsqk"
/>
<el-table-column
label=
"直径磨损情况"
align=
"center"
prop=
"zjmsqk"
/>
<el-table-column
label=
"备注"
align=
"center"
prop=
"bz"
/>
<el-table-column
label=
"内排齿"
align=
"center"
prop=
"npc"
/>
<el-table-column
label=
"外排齿"
align=
"center"
prop=
"wpc"
/>
<el-table-column
label=
"磨损特征"
align=
"center"
prop=
"mstz"
/>
<el-table-column
label=
"位置"
align=
"center"
prop=
"wz"
/>
<el-table-column
label=
"轴承/密封"
align=
"center"
prop=
"zc"
/>
<el-table-column
label=
"直径"
align=
"center"
prop=
"zj"
/>
<el-table-column
label=
"起钻原因"
align=
"center"
prop=
"qzyy"
/>
<el-table-column
label=
"其他特征"
align=
"center"
prop=
"qttz"
/>
<el-table-column
label=
"扭矩"
align=
"center"
prop=
"nj"
/>
<el-table-column
label=
"钻盘总转数"
align=
"center"
prop=
"zpzzs"
/>
<el-table-column
label=
"入井日期"
align=
"center"
prop=
"qsrq"
width=
"180"
>
<template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
qsrq
,
'{y
}
-{m
}
-{d
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"起出日期"
align
=
"center"
prop
=
"zzrq"
width
=
"180"
>
<
template
slot
-
scope
=
"scope"
>
<
span
>
{{
parseTime
(
scope
.
row
.
zzrq
,
'{y
}
-{m
}
-{d
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"喷嘴类型"
align
=
"center"
prop
=
"pzlx"
/>
<
el
-
table
-
column
label
=
"钻头价格"
align
=
"center"
prop
=
"ztjg"
/>
-->
<!--
<
el
-
table
-
column
label
=
"操作"
width
=
"120"
align
=
"center"
class
-
name
=
"small-padding fixed-width"
property
=
"operation"
fixed
=
"right"
>
<
template
slot
-
scope
=
"scope"
>
<
el
-
button
size
=
"mini"
type
=
"text"
icon
=
"el-icon-edit"
@
click
=
"handleUpdate(scope.row)"
v
-
hasPermi
=
"['system:jsha:edit']"
>
修改
<
/el-button
>
<
el
-
button
size
=
"mini"
type
=
"text"
icon
=
"el-icon-delete"
@
click
=
"handleDelete(scope.row)"
v
-
hasPermi
=
"['system:jsha:remove']"
>
删除
<
/el-button
>
<
/template
>
<
/el-table-column> --
>
<
/el-table
>
<
pagination
v
-
show
=
"total > 0"
:
total
=
"total"
:
page
.
sync
=
"queryParams.pageNum"
:
limit
.
sync
=
"queryParams.pageSize"
:
page
-
sizes
=
"[20, 40, 60, 80, 100]"
@
pagination
=
"getList"
style
=
"padding: 10px 0;"
/>
<
/div
>
<!--
详细数据表格区域
-->
<
transition
name
=
"slide-fade"
>
<
div
v
-
if
=
"selectedRow"
class
=
"detail-table-wrapper"
>
<
el
-
table
:
data
=
"[selectedRow]"
border
style
=
"width: 100%"
>
<
el
-
table
-
column
label
=
"刀翼总数"
prop
=
"tzxl01"
align
=
"center"
min
-
width
=
"10%"
/>
<
el
-
table
-
column
label
=
"布齿密度"
prop
=
"tzxl02"
align
=
"center"
min
-
width
=
"10%"
/>
<
el
-
table
-
column
label
=
"切削齿尺寸mm"
prop
=
"tzxl03"
align
=
"center"
min
-
width
=
"10%"
/>
<
el
-
table
-
column
label
=
"切削齿负前角°"
prop
=
"tzxl04"
align
=
"center"
min
-
width
=
"10%"
/>
<
el
-
table
-
column
label
=
"冠部形状"
prop
=
"tzxl05"
align
=
"center"
min
-
width
=
"10%"
/>
<
el
-
table
-
column
label
=
"保径"
prop
=
"tzxl06"
align
=
"center"
min
-
width
=
"10%"
/>
<
/el-table
>
<
/div
>
<
/transition
>
<
/div
>
<!--
添加或修改钻头数据对话框
-->
<
el
-
dialog
:
title
=
"title"
:
visible
.
sync
=
"open"
width
=
"70%"
append
-
to
-
body
>
<
el
-
form
ref
=
"form"
:
model
=
"form"
:
rules
=
"rules"
label
-
width
=
"120px"
>
<
div
v
-
loading
=
"formLoading"
>
<
div
class
=
"form-section"
>
<
div
class
=
"section-title"
>
基础信息
<
/div
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"序号"
prop
=
"xh"
>
<
el
-
input
v
-
model
=
"form.xh"
placeholder
=
"请输入序号"
@
input
=
"(val) => handleNumberInput(val, 'xh')"
maxlength
=
"3"
:
disabled
=
"isEdit"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"井号"
prop
=
"jh"
>
<
el
-
input
v
-
model
=
"form.jh"
placeholder
=
"请输入井号"
:
disabled
=
"isEdit"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"尺寸"
prop
=
"cc"
>
<
el
-
input
v
-
model
=
"form.cc"
placeholder
=
"请输入尺寸"
@
input
=
"(val) => handleDecimalInput(val, 'cc')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻进井段自"
prop
=
"qsjs"
>
<
el
-
input
v
-
model
=
"form.qsjs"
placeholder
=
"请输入钻进井段自"
@
input
=
"(val) => handleDecimalInput(val, 'qsjs')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻进井段至"
prop
=
"zzjs"
>
<
el
-
input
v
-
model
=
"form.zzjs"
placeholder
=
"请输入钻进井段至"
@
input
=
"(val) => handleDecimalInput(val, 'zzjs')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"进尺"
prop
=
"jc"
>
<
el
-
input
v
-
model
=
"form.jc"
placeholder
=
"请输入进尺"
@
input
=
"(val) => handleDecimalInput(val, 'jc')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"机械钻速"
prop
=
"jxzs"
>
<
el
-
input
v
-
model
=
"form.jxzs"
placeholder
=
"请输入机械钻速"
@
input
=
"(val) => handleDecimalInput(val, 'jxzs')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"厂家"
prop
=
"cj"
>
<
el
-
input
v
-
model
=
"form.cj"
placeholder
=
"请输入厂家"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"类型"
prop
=
"lx"
>
<
el
-
input
v
-
model
=
"form.lx"
placeholder
=
"请输入类型"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"入井新度"
prop
=
"rjxd"
>
<
el
-
input
v
-
model
=
"form.rjxd"
placeholder
=
"请输入入井新度"
@
input
=
"(val) => handleDecimalInput(val, 'rjxd')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"出井新度"
prop
=
"cjxd"
>
<
el
-
input
v
-
model
=
"form.cjxd"
placeholder
=
"请输入出井新度"
@
input
=
"(val) => handleDecimalInput(val, 'cjxd')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"喷嘴直径1号"
prop
=
"pz1"
>
<
el
-
input
v
-
model
=
"form.pz1"
placeholder
=
"请输入喷嘴直径1号"
@
input
=
"(val) => handleDecimalInput(val, 'pz1')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"喷嘴直径2号"
prop
=
"pz2"
>
<
el
-
input
v
-
model
=
"form.pz2"
placeholder
=
"请输入喷嘴直径2号"
@
input
=
"(val) => handleDecimalInput(val, 'pz2')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"喷嘴直径3号"
prop
=
"pz3"
>
<
el
-
input
v
-
model
=
"form.pz3"
placeholder
=
"请输入喷嘴直径3号"
@
input
=
"(val) => handleDecimalInput(val, 'pz3')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻头序列号"
prop
=
"ztxlh"
>
<
el
-
input
v
-
model
=
"form.ztxlh"
placeholder
=
"请输入钻头序列号"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻头型号"
prop
=
"ztxh"
>
<
el
-
input
v
-
model
=
"form.ztxh"
placeholder
=
"请输入钻头型号"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"所钻地层"
prop
=
"szdc"
>
<
el
-
input
v
-
model
=
"form.szdc"
placeholder
=
"请输入所钻地层"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"IADC号"
prop
=
"iadc"
>
<
el
-
input
v
-
model
=
"form.iadc"
placeholder
=
"请输入IADC号"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"下井次数"
prop
=
"xjcs"
>
<
el
-
input
v
-
model
=
"form.xjcs"
placeholder
=
"请输入下井次数"
@
input
=
"(val) => handleNumberInput(val, 'xjcs')"
maxlength
=
"3"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"工作时间合计"
prop
=
"jcsjhj"
>
<
el
-
input
v
-
model
=
"form.jcsjhj"
placeholder
=
"请输入工作时间合计"
@
input
=
"(val) => handleDecimalInput(val, 'jcsjhj')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"纯钻进时间"
prop
=
"jcsjczj"
>
<
el
-
input
v
-
model
=
"form.jcsjczj"
placeholder
=
"请输入纯钻进时间"
@
input
=
"(val) => handleDecimalInput(val, 'jcsjczj')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"起下钻时间"
prop
=
"jcsjqxz"
>
<
el
-
input
v
-
model
=
"form.jcsjqxz"
placeholder
=
"请输入起下钻时间"
@
input
=
"(val) => handleDecimalInput(val, 'jcsjqxz')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"扩划眼时间"
prop
=
"jcsjkhy"
>
<
el
-
input
v
-
model
=
"form.jcsjkhy"
placeholder
=
"请输入扩划眼时间"
@
input
=
"(val) => handleDecimalInput(val, 'jcsjkhy')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻压"
prop
=
"zy"
>
<
el
-
input
v
-
model
=
"form.zy"
placeholder
=
"请输入钻压"
@
input
=
"(val) => handleNumberInput(val, 'zy')"
maxlength
=
"3"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"转速"
prop
=
"zs"
>
<
el
-
input
v
-
model
=
"form.zs"
placeholder
=
"请输入转速"
@
input
=
"(val) => handleNumberInput(val, 'zs')"
maxlength
=
"3"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"缸径"
prop
=
"gj"
>
<
el
-
input
v
-
model
=
"form.gj"
placeholder
=
"请输入缸径"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"泵速"
prop
=
"bs"
>
<
el
-
input
v
-
model
=
"form.bs"
placeholder
=
"请输入泵速"
@
input
=
"(val) => handleNumberInput(val, 'bs')"
maxlength
=
"3"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"排量"
prop
=
"pl"
>
<
el
-
input
v
-
model
=
"form.pl"
placeholder
=
"请输入排量"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"立管泵压"
prop
=
"lgby"
>
<
el
-
input
v
-
model
=
"form.lgby"
placeholder
=
"请输入立管泵压"
@
input
=
"(val) => handleDecimalInput(val, 'lgby')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻头压降"
prop
=
"ztyj"
>
<
el
-
input
v
-
model
=
"form.ztyj"
placeholder
=
"请输入钻头压降"
@
input
=
"(val) => handleDecimalInput(val, 'ztyj')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"环空压耗"
prop
=
"hkyh"
>
<
el
-
input
v
-
model
=
"form.hkyh"
placeholder
=
"请输入环空压耗"
@
input
=
"(val) => handleDecimalInput(val, 'hkyh')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"冲击力"
prop
=
"cjl"
>
<
el
-
input
v
-
model
=
"form.cjl"
placeholder
=
"请输入冲击力"
@
input
=
"(val) => handleDecimalInput(val, 'cjl')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"喷射速度"
prop
=
"pssd"
>
<
el
-
input
v
-
model
=
"form.pssd"
placeholder
=
"请输入喷射速度"
@
input
=
"(val) => handleDecimalInput(val, 'pssd')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻头水功率"
prop
=
"ztsgl"
>
<
el
-
input
v
-
model
=
"form.ztsgl"
placeholder
=
"请输入钻头水功率"
@
input
=
"(val) => handleDecimalInput(val, 'ztsgl')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"比水功率"
prop
=
"bsgl"
>
<
el
-
input
v
-
model
=
"form.bsgl"
placeholder
=
"请输入比水功率"
@
input
=
"(val) => handleDecimalInput(val, 'bsgl')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"上返速度钻杆"
prop
=
"sfsdzg"
>
<
el
-
input
v
-
model
=
"form.sfsdzg"
placeholder
=
"请输入上返速度钻杆"
@
input
=
"(val) => handleDecimalInput(val, 'sfsdzg')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"上返速度钻铤"
prop
=
"sfsdzt"
>
<
el
-
input
v
-
model
=
"form.sfsdzt"
placeholder
=
"请输入上返速度钻铤"
@
input
=
"(val) => handleDecimalInput(val, 'sfsdzt')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"功率利用率"
prop
=
"gllyl"
>
<
el
-
input
v
-
model
=
"form.gllyl"
placeholder
=
"请输入功率利用率"
@
input
=
"(val) => handleDecimalInput(val, 'gllyl')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"牙齿磨损"
prop
=
"ycmsqk"
>
<
el
-
input
v
-
model
=
"form.ycmsqk"
placeholder
=
"请输入牙齿磨损"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"轴承磨损"
prop
=
"zcmsqk"
>
<
el
-
input
v
-
model
=
"form.zcmsqk"
placeholder
=
"请输入轴承磨损"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"直径磨损"
prop
=
"zjmsqk"
>
<
el
-
input
v
-
model
=
"form.zjmsqk"
placeholder
=
"请输入直径磨损"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"备注"
prop
=
"bz"
>
<
el
-
input
v
-
model
=
"form.bz"
placeholder
=
"请输入备注"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"内排齿"
prop
=
"npc"
>
<
el
-
input
v
-
model
=
"form.npc"
placeholder
=
"请输入内排齿"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"外排齿"
prop
=
"wpc"
>
<
el
-
input
v
-
model
=
"form.wpc"
placeholder
=
"请输入外排齿"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"磨损特征"
prop
=
"mstz"
>
<
el
-
input
v
-
model
=
"form.mstz"
placeholder
=
"请输入磨损特征"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"位置"
prop
=
"wz"
>
<
el
-
input
v
-
model
=
"form.wz"
placeholder
=
"请输入位置"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"轴承/密封"
prop
=
"zc"
>
<
el
-
input
v
-
model
=
"form.zc"
placeholder
=
"请输入轴承/密封"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"直径"
prop
=
"zj"
>
<
el
-
input
v
-
model
=
"form.zj"
placeholder
=
"请输入直径"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"起钻原因"
prop
=
"qzyy"
>
<
el
-
input
v
-
model
=
"form.qzyy"
placeholder
=
"请输入起钻原因"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"其他特征"
prop
=
"qttz"
>
<
el
-
input
v
-
model
=
"form.qttz"
placeholder
=
"请输入其他特征"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"扭矩"
prop
=
"nj"
>
<
el
-
input
v
-
model
=
"form.nj"
placeholder
=
"请输入扭矩"
@
input
=
"(val) => handleDecimalInput(val, 'nj')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻盘总转数"
prop
=
"zpzzs"
>
<
el
-
input
v
-
model
=
"form.zpzzs"
placeholder
=
"请输入钻盘总转数"
@
input
=
"(val) => handleDecimalInput(val, 'zpzzs')"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"入井日期"
prop
=
"qsrq"
>
<
el
-
date
-
picker
clearable
v
-
model
=
"form.qsrq"
type
=
"date"
value
-
format
=
"yyyy-MM-dd"
placeholder
=
"请选择入井日期"
style
=
"width: 100%;"
>
<
/el-date-picker
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"起出日期"
prop
=
"zzrq"
>
<
el
-
date
-
picker
clearable
v
-
model
=
"form.zzrq"
type
=
"date"
value
-
format
=
"yyyy-MM-dd"
placeholder
=
"请选择起出日期"
style
=
"width: 100%;"
>
<
/el-date-picker
>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"喷嘴类型"
prop
=
"pzlx"
>
<
el
-
input
v
-
model
=
"form.pzlx"
placeholder
=
"请输入喷嘴类型"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"钻头价格"
prop
=
"ztjg"
>
<
el
-
input
v
-
model
=
"form.ztjg"
placeholder
=
"请输入钻头价格"
@
input
=
"(val) => handleDecimalInput(val, 'ztjg')"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
/div
>
<
div
class
=
"form-section"
>
<
div
class
=
"section-title"
>
特征数据
<
/div
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"刀翼总数"
prop
=
"t01"
>
<
el
-
select
v
-
model
=
"form.t01"
placeholder
=
"请选择刀翼总数"
clearable
style
=
"width: 100%"
>
<
el
-
option
v
-
for
=
"item in t01Options"
:
key
=
"item.id"
:
label
=
"`${item.tzxl
}
(${item.tzdm
}
)`"
:
value
=
"item.id"
/>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"布齿密度"
prop
=
"t02"
>
<
el
-
select
v
-
model
=
"form.t02"
placeholder
=
"请选择布齿密度"
clearable
style
=
"width: 100%"
>
<
el
-
option
v
-
for
=
"item in t02Options"
:
key
=
"item.id"
:
label
=
"`${item.tzxl
}
(${item.tzdm
}
)`"
:
value
=
"item.id"
/>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"切削齿尺寸mm"
prop
=
"t03"
>
<
el
-
select
v
-
model
=
"form.t03"
placeholder
=
"请选择切削齿尺寸"
clearable
style
=
"width: 100%"
>
<
el
-
option
v
-
for
=
"item in t03Options"
:
key
=
"item.id"
:
label
=
"`${item.tzxl
}
(${item.tzdm
}
)`"
:
value
=
"item.id"
/>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"切削齿负前角°"
prop
=
"t04"
>
<
el
-
select
v
-
model
=
"form.t04"
placeholder
=
"请选择切削齿负前角"
clearable
style
=
"width: 100%"
>
<
el
-
option
v
-
for
=
"item in t04Options"
:
key
=
"item.id"
:
label
=
"`${item.tzxl
}
(${item.tzdm
}
)`"
:
value
=
"item.id"
/>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"冠部形状"
prop
=
"t05"
>
<
el
-
select
v
-
model
=
"form.t05"
placeholder
=
"请选择冠部形状"
clearable
style
=
"width: 100%"
>
<
el
-
option
v
-
for
=
"item in t05Options"
:
key
=
"item.id"
:
label
=
"`${item.tzxl
}
(${item.tzdm
}
)`"
:
value
=
"item.id"
/>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"8"
>
<
el
-
form
-
item
label
=
"保径"
prop
=
"t06"
>
<
el
-
select
v
-
model
=
"form.t06"
placeholder
=
"请选择保径"
clearable
style
=
"width: 100%"
>
<
el
-
option
v
-
for
=
"item in t06Options"
:
key
=
"item.id"
:
label
=
"`${item.tzxl
}
(${item.tzdm
}
)`"
:
value
=
"item.id"
/>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
/div
>
<
/div
>
<
/el-form
>
<
div
slot
=
"footer"
class
=
"dialog-footer"
>
<
el
-
button
type
=
"primary"
@
click
=
"submitForm"
>
确
定
<
/el-button
>
<
el
-
button
@
click
=
"cancel"
>
取
消
<
/el-button
>
<
/div
>
<
/el-dialog
>
<
/div
>
<
/template
>
<
script
>
import
{
listJsha
,
getJsha
,
delJsha
,
addJsha
,
updateJsha
}
from
"@/api/system/jsha"
;
import
{
getBlockName
,
getQkxl
}
from
"@/api/system/jsaa"
;
import
{
listTzsj
}
from
"@/api/system/jsha"
;
export
default
{
name
:
"Jsha"
,
props
:
{
jh
:
{
type
:
String
,
default
:
''
}
,
jhs
:
{
type
:
String
,
default
:
''
}
}
,
data
()
{
return
{
// 区块下拉选项
blockOptions
:
[],
// 遮罩层
loading
:
true
,
// 选中数组
ids
:
[],
// 非单个禁用
single
:
true
,
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 钻头数据表格数据
jshaList
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
// 是否为编辑操作
isEdit
:
false
,
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
20
,
// 修改回默认每页显示20条
qk
:
null
,
jh
:
null
,
jhs
:
null
,
wjrqks
:
null
,
wjrqjs
:
null
,
ztxlh
:
null
,
ztxh
:
null
,
iadc
:
null
,
xjcs
:
null
,
cc
:
null
,
lx
:
null
,
cj
:
null
,
rjxd
:
null
,
cjxd
:
null
,
pz1
:
null
,
pz2
:
null
,
pz3
:
null
,
pz4
:
null
,
pz5
:
null
,
pz6
:
null
,
pz7
:
null
,
pz8
:
null
,
pz9
:
null
,
pz10
:
null
,
qsjs
:
null
,
zzjs
:
null
,
szdc
:
null
,
jc
:
null
,
jxzs
:
null
,
jcsjhj
:
null
,
jcsjczj
:
null
,
jcsjqxz
:
null
,
jcsjkhy
:
null
,
zy
:
null
,
zs
:
null
,
gj
:
null
,
bs
:
null
,
pl
:
null
,
lgby
:
null
,
ztyj
:
null
,
hkyh
:
null
,
cjl
:
null
,
pssd
:
null
,
ztsgl
:
null
,
bsgl
:
null
,
sfsdzg
:
null
,
sfsdzt
:
null
,
gllyl
:
null
,
ycmsqk
:
null
,
zcmsqk
:
null
,
zjmsqk
:
null
,
bz
:
null
,
npc
:
null
,
wpc
:
null
,
mstz
:
null
,
wz
:
null
,
zc
:
null
,
zj
:
null
,
qzyy
:
null
,
qttz
:
null
,
nj
:
null
,
zpzzs
:
null
,
qsrq
:
null
,
zzrq
:
null
,
pzlx
:
null
,
ztjg
:
null
}
,
// 表单参数
form
:
{
}
,
// 表单校验
rules
:
{
jh
:
[
{
required
:
true
,
message
:
"井号不能为空"
,
trigger
:
"blur"
}
],
xh
:
[
{
required
:
true
,
message
:
"序号不能为空"
,
trigger
:
"blur"
}
],
cc
:
[
{
required
:
true
,
message
:
"尺寸不能为空"
,
trigger
:
"blur"
}
],
qsjs
:
[
{
required
:
true
,
message
:
"钻进井段自不能为空"
,
trigger
:
"blur"
}
],
zzjs
:
[
{
required
:
true
,
message
:
"钻进井段至不能为空"
,
trigger
:
"blur"
}
],
jc
:
[
{
required
:
true
,
message
:
"进尺不能为空"
,
trigger
:
"blur"
}
],
jxzs
:
[
{
required
:
true
,
message
:
"机械钻速不能为空"
,
trigger
:
"blur"
}
]
}
,
selectedRow
:
null
,
// 当前选中的行数据
tableHeight
:
null
,
// 特征数据选项
t01Options
:
[],
t02Options
:
[],
t03Options
:
[],
t04Options
:
[],
t05Options
:
[],
t06Options
:
[],
formLoading
:
false
,
// 新增表单loading
}
;
}
,
computed
:
{
filteredBlockOptions
()
{
return
this
.
blockOptions
.
filter
(
item
=>
item
&&
item
.
qk
);
}
}
,
watch
:
{
jh
:
{
handler
(
newJh
)
{
if
(
newJh
)
{
this
.
queryParams
.
jh
=
newJh
;
this
.
getList
();
}
}
,
immediate
:
true
}
,
selectedRow
:
{
handler
(
val
)
{
this
.
$nextTick
(()
=>
{
const
containerElement
=
document
.
querySelector
(
'.app-container'
);
const
searchElement
=
document
.
querySelector
(
'.search-wrapper'
);
// 检查元素是否存在
if
(
!
containerElement
||
!
searchElement
)
{
return
;
}
const
containerHeight
=
containerElement
.
offsetHeight
;
const
searchHeight
=
searchElement
.
offsetHeight
;
const
paginationHeight
=
50
;
// 分页器高度
if
(
val
)
{
// 选中行时,减去详情表格高度
this
.
tableHeight
=
containerHeight
-
searchHeight
-
paginationHeight
-
50
;
}
else
{
// 未选中行时,使用全部可用空间
this
.
tableHeight
=
containerHeight
-
searchHeight
-
paginationHeight
;
}
}
);
}
,
immediate
:
true
}
}
,
mounted
()
{
// 初始化表格高度
this
.
$nextTick
(()
=>
{
const
containerElement
=
document
.
querySelector
(
'.app-container'
);
const
searchElement
=
document
.
querySelector
(
'.search-wrapper'
);
// 检查元素是否存在
if
(
!
containerElement
||
!
searchElement
)
{
return
;
}
const
containerHeight
=
containerElement
.
offsetHeight
;
const
searchHeight
=
searchElement
.
offsetHeight
;
const
paginationHeight
=
50
;
this
.
tableHeight
=
containerHeight
-
searchHeight
-
paginationHeight
;
}
);
// 添加窗口大小改变事件监听
window
.
addEventListener
(
'resize'
,
this
.
updateTableHeight
);
}
,
beforeDestroy
()
{
// 移除事件监听
window
.
removeEventListener
(
'resize'
,
this
.
updateTableHeight
);
}
,
created
()
{
// 如果传入了jh参数,设置到查询参数中
if
(
this
.
jh
)
{
this
.
queryParams
.
jh
=
this
.
jh
;
}
// 如果传入了jhs参数,设置到查询参数中
if
(
this
.
jhs
)
{
this
.
queryParams
.
jhs
=
this
.
jhs
;
}
// 只加载选项,不自动加载数据
// this.getList();
this
.
getBlockOptions
();
this
.
getFeatureOptions
();
}
,
methods
:
{
/** 获取区块下拉选项 */
getBlockOptions
()
{
getQkxl
().
then
(
response
=>
{
this
.
blockOptions
=
response
.
data
||
[];
}
);
}
,
/** 获取特征数据选项 */
getFeatureOptions
()
{
const
featureTypes
=
[
{
type
:
"刀翼总数"
,
target
:
"t01Options"
}
,
{
type
:
"布齿密度"
,
target
:
"t02Options"
}
,
{
type
:
"切削齿尺寸mm"
,
target
:
"t03Options"
}
,
{
type
:
"切削齿负前角°"
,
target
:
"t04Options"
}
,
{
type
:
"冠部形状"
,
target
:
"t05Options"
}
,
{
type
:
"保径"
,
target
:
"t06Options"
}
];
const
promises
=
featureTypes
.
map
(
feature
=>
listTzsj
({
tzdl
:
feature
.
type
}
).
then
(
response
=>
({
target
:
feature
.
target
,
data
:
response
.
rows
}
))
);
Promise
.
all
(
promises
)
.
then
(
results
=>
{
results
.
forEach
(
result
=>
{
this
[
result
.
target
]
=
result
.
data
;
}
);
}
)
.
catch
(
error
=>
{
console
.
error
(
'获取特征数据选项失败:'
,
error
);
this
.
$modal
.
msgError
(
"获取特征数据选项失败"
);
}
);
}
,
/** 查询钻头数据列表 */
getList
()
{
this
.
loading
=
true
;
const
params
=
{
jhs
:
this
.
jhs
}
console
.
log
(
params
,
'params'
);
listJsha
(
params
).
then
(
response
=>
{
this
.
jshaList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
}
);
}
,
// 取消按钮
cancel
()
{
this
.
formLoading
=
false
;
this
.
open
=
false
;
this
.
reset
();
}
,
// 表单重置
reset
()
{
this
.
formLoading
=
false
;
this
.
form
=
{
jh
:
null
,
xh
:
null
,
ztxlh
:
null
,
ztxh
:
null
,
iadc
:
null
,
xjcs
:
null
,
cc
:
null
,
lx
:
null
,
cj
:
null
,
rjxd
:
null
,
cjxd
:
null
,
pz1
:
null
,
pz2
:
null
,
pz3
:
null
,
pz4
:
null
,
pz5
:
null
,
pz6
:
null
,
pz7
:
null
,
pz8
:
null
,
pz9
:
null
,
pz10
:
null
,
qsjs
:
null
,
zzjs
:
null
,
szdc
:
null
,
jc
:
null
,
jxzs
:
null
,
jcsjhj
:
null
,
jcsjczj
:
null
,
jcsjqxz
:
null
,
jcsjkhy
:
null
,
zy
:
null
,
zs
:
null
,
gj
:
null
,
bs
:
null
,
pl
:
null
,
lgby
:
null
,
ztyj
:
null
,
hkyh
:
null
,
cjl
:
null
,
pssd
:
null
,
ztsgl
:
null
,
bsgl
:
null
,
sfsdzg
:
null
,
sfsdzt
:
null
,
gllyl
:
null
,
ycmsqk
:
null
,
zcmsqk
:
null
,
zjmsqk
:
null
,
bz
:
null
,
npc
:
null
,
wpc
:
null
,
mstz
:
null
,
wz
:
null
,
zc
:
null
,
zj
:
null
,
qzyy
:
null
,
qttz
:
null
,
nj
:
null
,
zpzzs
:
null
,
qsrq
:
null
,
zzrq
:
null
,
pzlx
:
null
,
ztjg
:
null
}
;
this
.
resetForm
(
"form"
);
}
,
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
();
}
,
/** 重置按钮操作 */
resetQuery
()
{
this
.
queryParams
.
wjrqks
=
''
;
this
.
queryParams
.
wjrqjs
=
''
;
this
.
resetForm
(
"queryForm"
);
this
.
handleQuery
();
}
,
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
jh
)
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
}
,
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
();
this
.
isEdit
=
false
;
this
.
open
=
true
;
this
.
title
=
"添加钻头数据"
;
}
,
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
();
this
.
isEdit
=
true
;
const
query
=
{
jh
:
row
.
jh
,
xh
:
row
.
xh
}
getJsha
(
query
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"修改钻头数据"
;
}
);
}
,
/** 提交按钮 */
submitForm
()
{
this
.
formLoading
=
true
;
this
.
$refs
[
"form"
].
validate
(
valid
=>
{
if
(
valid
)
{
if
(
this
.
isEdit
)
{
updateJsha
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"修改成功"
);
this
.
open
=
false
;
this
.
getList
();
}
).
finally
(()
=>
{
this
.
formLoading
=
false
;
}
);
}
else
{
addJsha
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"新增成功"
);
this
.
open
=
false
;
this
.
getList
();
}
).
finally
(()
=>
{
this
.
formLoading
=
false
;
}
);
}
}
else
{
this
.
formLoading
=
false
;
}
}
);
}
,
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
query
=
{
jh
:
row
.
jh
,
xh
:
row
.
xh
}
;
this
.
$modal
.
confirm
(
'是否确认删除钻头数据编号为"'
+
row
.
jh
+
'"的数据项?'
).
then
(
function
()
{
return
delJsha
(
query
);
}
).
then
(()
=>
{
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"删除成功"
);
}
).
catch
(()
=>
{
}
);
}
,
/** 导出按钮操作 */
handleExport
()
{
this
.
download
(
'system/jshaPdc/export'
,
{
...
this
.
queryParams
}
,
`jsha_${new Date().getTime()
}
.xlsx`
)
}
,
/** 处理行点击 */
async
handleRowClick
(
row
,
column
)
{
// 如果点击的是操作列,不执行任何操作
if
(
column
&&
column
.
property
===
'operation'
)
{
return
;
}
try
{
const
query
=
{
jh
:
row
.
jh
,
xh
:
row
.
xh
}
const
res
=
await
getJsha
(
query
);
this
.
selectedRow
=
res
.
data
;
}
catch
(
error
)
{
console
.
error
(
'获取详细数据失败:'
,
error
);
this
.
selectedRow
=
null
;
}
}
,
updateTableHeight
()
{
this
.
$nextTick
(()
=>
{
const
containerElement
=
document
.
querySelector
(
'.app-container'
);
const
searchElement
=
document
.
querySelector
(
'.search-wrapper'
);
// 检查元素是否存在
if
(
!
containerElement
||
!
searchElement
)
{
return
;
}
const
containerHeight
=
containerElement
.
offsetHeight
;
const
searchHeight
=
searchElement
.
offsetHeight
;
const
paginationHeight
=
50
;
if
(
this
.
selectedRow
)
{
this
.
tableHeight
=
containerHeight
-
searchHeight
-
paginationHeight
-
120
;
}
else
{
this
.
tableHeight
=
containerHeight
-
searchHeight
-
paginationHeight
;
}
}
);
}
,
/** 限制只能输入三位数字 */
handleNumberInput
(
value
,
key
)
{
// 如果值为空,直接返回
if
(
value
===
''
)
{
this
.
form
[
key
]
=
''
;
return
;
}
// 移除非数字字符
value
=
value
.
toString
().
replace
(
/
[^\d]
/g
,
''
);
// 限制长度为3位
if
(
value
.
length
>
3
)
{
value
=
value
.
slice
(
0
,
3
);
}
// 更新表单数据
this
.
form
[
key
]
=
value
;
}
,
/** 限制只能输入数字且保留两位小数 */
handleDecimalInput
(
value
,
key
)
{
// 如果值为空,直接返回
if
(
value
===
''
)
{
this
.
form
[
key
]
=
''
;
return
;
}
// 只允许输入数字和小数点
value
=
value
.
toString
().
replace
(
/
[^\d
.
]
/g
,
''
);
// 保证只有一个小数点
const
parts
=
value
.
split
(
'.'
);
if
(
parts
.
length
>
2
)
{
value
=
parts
[
0
]
+
'.'
+
parts
.
slice
(
1
).
join
(
''
);
}
// 限制小数点后两位
if
(
parts
.
length
===
2
&&
parts
[
1
].
length
>
2
)
{
value
=
parts
[
0
]
+
'.'
+
parts
[
1
].
slice
(
0
,
2
);
}
// 更新表单数据
this
.
form
[
key
]
=
value
;
}
,
/**
* 外部调用:加载数据
*/
loadData
()
{
this
.
getList
();
}
}
}
;
<
/script
>
<
style
lang
=
"scss"
scoped
>
.
app
-
container
{
height
:
calc
(
100
vh
-
160
px
);
display
:
flex
;
flex
-
direction
:
column
;
padding
:
10
px
;
box
-
sizing
:
border
-
box
;
overflow
:
hidden
;
}
.
search
-
wrapper
{
flex
:
none
;
}
.
table
-
container
{
flex
:
1
;
position
:
relative
;
display
:
flex
;
flex
-
direction
:
column
;
overflow
:
hidden
;
}
.
main
-
table
-
wrapper
{
flex
:
1
;
display
:
flex
;
flex
-
direction
:
column
;
transition
:
all
0.3
s
ease
;
overflow
:
hidden
;
}
.
detail
-
table
-
wrapper
{
height
:
75
px
;
width
:
100
%
;
position
:
absolute
;
bottom
:
0
;
left
:
0
;
background
:
#
fff
;
box
-
shadow
:
0
-
2
px
4
px
rgba
(
0
,
0
,
0
,
0.1
);
transition
:
all
0.3
s
ease
;
z
-
index
:
1
;
}
.
slide
-
fade
-
enter
-
active
,
.
slide
-
fade
-
leave
-
active
{
transition
:
all
0.3
s
ease
;
}
.
slide
-
fade
-
enter
,
.
slide
-
fade
-
leave
-
to
{
transform
:
translateY
(
120
px
);
opacity
:
0
;
}
::
v
-
deep
.
el
-
table
{
flex
:
1
;
}
::
v
-
deep
.
el
-
table__body
-
wrapper
{
overflow
-
y
:
auto
;
}
::
v
-
deep
.
el
-
table__cell
>
.
cell
{
font
-
weight
:
normal
;
}
::
v
-
deep
.
el
-
table
--
medium
.
el
-
table__cell
{
padding
:
5
px
0
!
important
;
}
::
v
-
deep
.
pagination
-
container
{
padding
:
0
px
!
important
;
margin
:
0
;
}
.
form
-
section
{
margin
-
bottom
:
20
px
;
.
section
-
title
{
font
-
size
:
16
px
;
font
-
weight
:
bold
;
margin
-
bottom
:
15
px
;
padding
-
left
:
10
px
;
border
-
left
:
3
px
solid
#
409
EFF
;
}
}
::
v
-
deep
.
el
-
form
-
item
{
margin
-
bottom
:
18
px
;
padding
-
right
:
20
px
;
}
::
v
-
deep
.
el
-
form
-
item
{
margin
-
bottom
:
10
px
!
important
;
}
<
/style
>
src/views/efficiencyAnalysis/djzt/detail/components/HistogramGraph.vue
0 → 100644
View file @
3cd04a10
<
template
>
<div
class=
"chart-container"
v-loading=
"loading"
>
<div
id=
"mainzftdj"
class=
"chart"
ref=
"chartRef"
></div>
</div>
</
template
>
<
script
>
import
*
as
echarts
from
"echarts"
;
import
{
getdjZft
}
from
"@/api/optimization/initialization"
;
export
default
{
name
:
"HistogramGraph"
,
props
:
{
jh
:
{
type
:
String
,
default
:
""
,
},
jhs
:
{
type
:
String
,
default
:
''
}
},
data
()
{
return
{
mockData
:
{},
myChart
:
null
,
initRetryCount
:
0
,
maxRetryCount
:
5
,
resizeObserver
:
null
,
loading
:
false
// 新增loading状态
};
},
mounted
()
{
// this.$nextTick(() => {
// setTimeout(() => {
// this.initChart();
// this.observeParentResize();
// }, 800);
// });
// window.addEventListener("resize", this.handleResize);
},
beforeDestroy
()
{
window
.
removeEventListener
(
"resize"
,
this
.
handleResize
);
if
(
this
.
myChart
)
{
this
.
myChart
.
dispose
();
}
if
(
this
.
resizeObserver
)
{
this
.
resizeObserver
.
disconnect
();
}
},
methods
:
{
/**
* 外部调用:加载数据并渲染
*/
loadData
()
{
this
.
loading
=
true
;
this
.
$nextTick
(()
=>
{
setTimeout
(()
=>
{
this
.
initChart
();
this
.
observeParentResize
();
},
800
);
});
window
.
addEventListener
(
"resize"
,
this
.
handleResize
);
},
observeParentResize
()
{
const
parentDom
=
this
.
$refs
.
chartRef
?.
parentElement
;
if
(
parentDom
&&
window
.
ResizeObserver
)
{
this
.
resizeObserver
=
new
ResizeObserver
(()
=>
{
if
(
this
.
myChart
)
{
this
.
myChart
.
resize
();
}
});
this
.
resizeObserver
.
observe
(
parentDom
);
}
},
async
getList
()
{
try
{
const
res
=
await
getdjZft
({
jhs
:
this
.
jhs
});
this
.
mockData
=
res
?.
mockData
||
{};
return
this
.
mockData
;
}
catch
(
error
)
{
console
.
error
(
"获取数据失败:"
,
error
);
return
{};
}
},
async
initChart
()
{
this
.
loading
=
true
;
const
chartDom
=
this
.
$refs
.
chartRef
;
if
(
!
chartDom
)
{
console
.
error
(
"未找到图表容器 DOM"
);
this
.
loading
=
false
;
return
;
}
// 获取视口尺寸
const
viewportWidth
=
window
.
innerWidth
;
const
viewportHeight
=
window
.
innerHeight
;
// 计算可用空间(减去导航栏等固定元素的高度)
const
availableHeight
=
viewportHeight
-
120
;
// 减去导航栏等高度
const
availableWidth
=
viewportWidth
-
80
;
// 减去左右边距,增加边距
// 设置图表容器尺寸
chartDom
.
style
.
width
=
`
${
availableWidth
}
px`
;
chartDom
.
style
.
height
=
`
${
availableHeight
}
px`
;
// 强制重排
chartDom
.
offsetHeight
;
// 重试机制
if
((
availableWidth
<=
0
||
availableHeight
<=
0
)
&&
this
.
initRetryCount
<
this
.
maxRetryCount
)
{
this
.
initRetryCount
++
;
setTimeout
(()
=>
this
.
initChart
(),
500
);
return
;
}
this
.
initRetryCount
=
0
;
if
(
this
.
myChart
)
{
this
.
myChart
.
dispose
();
}
this
.
myChart
=
echarts
.
init
(
chartDom
);
const
mockData
=
await
this
.
getList
();
if
(
!
mockData
||
!
mockData
.
wellData
||
!
mockData
.
wellData
.
depthLine
.
length
)
{
this
.
renderEmpty
(
chartDom
);
this
.
loading
=
false
;
return
;
}
await
this
.
renderRealData
(
chartDom
,
mockData
);
this
.
loading
=
false
;
},
handleResize
()
{
this
.
debounce
(()
=>
{
if
(
this
.
myChart
)
{
// 重新计算尺寸
const
viewportHeight
=
window
.
innerHeight
;
const
viewportWidth
=
window
.
innerWidth
;
const
availableHeight
=
viewportHeight
-
120
;
const
availableWidth
=
viewportWidth
-
80
;
const
chartDom
=
this
.
$refs
.
chartRef
;
if
(
chartDom
)
{
chartDom
.
style
.
width
=
`
${
availableWidth
}
px`
;
chartDom
.
style
.
height
=
`
${
availableHeight
}
px`
;
}
this
.
myChart
.
resize
();
}
},
200
)();
},
async
renderRealData
(
chartDom
,
mockData
)
{
const
{
wellData
}
=
mockData
;
const
xAxisLabels
=
wellData
.
depthLine
.
map
((
point
)
=>
point
.
x
);
const
areaSeries
=
await
Promise
.
all
(
wellData
.
stackedAreas
.
filter
(
area
=>
area
.
svg
!==
null
)
.
map
(
async
(
area
)
=>
{
let
areaStyle
=
{
opacity
:
0.8
};
if
(
area
.
svg
)
{
try
{
const
svgImage
=
await
this
.
createSvgImage
(
area
.
svg
);
areaStyle
.
color
=
{
image
:
svgImage
,
repeat
:
"repeat"
};
}
catch
(
error
)
{
console
.
error
(
'SVG转换失败:'
,
error
);
}
}
return
{
name
:
area
.
name
,
type
:
"line"
,
xAxisIndex
:
1
,
z
:
-
1
,
stack
:
"总量"
,
symbol
:
"none"
,
showSymbol
:
false
,
areaStyle
:
areaStyle
,
lineStyle
:
{
width
:
0
},
data
:
area
.
points
.
map
((
point
)
=>
point
.
y
),
};
})
);
const
option
=
{
title
:
{
text
:
""
,
subtext
:
""
},
aria
:
{
enabled
:
false
,
},
tooltip
:
{
trigger
:
"axis"
,
axisPointer
:
{
type
:
"cross"
,
label
:
{
backgroundColor
:
"#6a7985"
}
},
},
grid
:
{
top
:
80
,
left
:
"8%"
,
right
:
"8%"
,
bottom
:
"8%"
,
containLabel
:
true
,
show
:
false
,
},
xAxis
:
[
{
type
:
"category"
,
boundaryGap
:
true
,
position
:
"top"
,
data
:
xAxisLabels
,
axisLabel
:
{
interval
:
0
,
rotate
:
90
,
margin
:
8
,
align
:
"left"
,
fontSize
:
12
},
axisTick
:
{
alignWithLabel
:
true
,
length
:
5
},
splitLine
:
{
show
:
false
},
axisLine
:
{
show
:
true
}
},
{
type
:
"category"
,
boundaryGap
:
false
,
position
:
"top"
,
show
:
false
,
data
:
xAxisLabels
},
],
yAxis
:
[
{
type
:
"value"
,
name
:
"井深(m)"
,
min
:
mockData
.
chartConfig
.
yAxis
.
min
,
max
:
mockData
.
chartConfig
.
yAxis
.
max
,
interval
:
mockData
.
chartConfig
.
yAxis
.
interval
,
inverse
:
true
,
axisLabel
:
{
formatter
:
"{value}"
,
fontSize
:
12
},
splitLine
:
{
show
:
false
},
axisLine
:
{
show
:
true
},
axisTick
:
{
show
:
false
}
},
{
type
:
"value"
,
name
:
"深度(m)"
,
min
:
mockData
.
chartConfig
.
yAxis2
.
min
,
max
:
mockData
.
chartConfig
.
yAxis2
.
max
,
interval
:
mockData
.
chartConfig
.
yAxis2
.
interval
,
position
:
"right"
,
axisLabel
:
{
formatter
:
"{value}"
,
fontSize
:
12
},
splitLine
:
{
show
:
false
},
axisLine
:
{
show
:
true
},
axisTick
:
{
show
:
false
}
},
],
series
:
[
{
name
:
"井深数据"
,
type
:
"line"
,
yAxisIndex
:
1
,
symbol
:
"circle"
,
symbolSize
:
8
,
itemStyle
:
{
color
:
"#ff0000"
},
lineStyle
:
{
color
:
"#00ff00"
},
label
:
{
show
:
true
,
position
:
"top"
,
formatter
:
"{c}"
,
fontSize
:
12
,
color
:
"#ff0000"
,
backgroundColor
:
"rgba(255,255,255,0.8)"
,
padding
:
[
2
,
4
],
borderRadius
:
2
},
data
:
wellData
.
depthLine
.
map
((
point
)
=>
point
.
y
),
},
{
name
:
"占位"
,
type
:
"bar"
,
stack
:
"total"
,
silent
:
true
,
barWidth
:
"13%"
,
itemStyle
:
{
borderColor
:
"transparent"
,
color
:
"transparent"
},
emphasis
:
{
itemStyle
:
{
borderColor
:
"transparent"
,
color
:
"transparent"
}
},
data
:
wellData
.
depthIntervals
.
map
((
item
)
=>
item
.
placeholder
),
},
{
name
:
"深度区间"
,
type
:
"bar"
,
stack
:
"total"
,
barWidth
:
"20%"
,
label
:
{
show
:
true
,
position
:
(
params
)
=>
params
.
data
<=
200
?
"top"
:
"inside"
,
color
:
"#03df6d"
,
backgroundColor
:
"rgba(255,255,255,0.8)"
,
padding
:
[
2
,
4
],
borderRadius
:
2
},
itemStyle
:
{
color
:
"#00aafe"
},
data
:
wellData
.
depthIntervals
.
map
((
item
)
=>
item
.
interval
),
},
...
areaSeries
,
],
};
this
.
myChart
.
setOption
(
option
);
// 确保图表完全渲染后再resize
this
.
$nextTick
(()
=>
{
this
.
myChart
.
resize
();
});
},
renderEmpty
(
chartDom
)
{
chartDom
.
innerHTML
=
'<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#999;">暂无数据</div>'
;
},
debounce
(
fn
,
delay
)
{
let
timer
=
null
;
return
function
()
{
if
(
timer
)
clearTimeout
(
timer
);
timer
=
setTimeout
(()
=>
fn
.
apply
(
this
,
arguments
),
delay
);
};
},
createSvgImage
(
svgString
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
svgBlob
=
new
Blob
([
svgString
],
{
type
:
'image/svg+xml;charset=utf-8'
});
const
svgUrl
=
URL
.
createObjectURL
(
svgBlob
);
const
img
=
new
Image
();
img
.
onload
=
()
=>
{
URL
.
revokeObjectURL
(
svgUrl
);
resolve
(
img
);
};
img
.
onerror
=
(
e
)
=>
{
URL
.
revokeObjectURL
(
svgUrl
);
reject
(
e
);
};
img
.
src
=
svgUrl
;
});
}
},
};
</
script
>
<
style
scoped
>
/* 确保容器占满可用空间 */
.chart-container
{
width
:
100%
;
height
:
100vh
;
padding
:
0
20px
;
margin
:
0
;
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
}
/* 图表容器样式 - 占满整个容器 */
.chart
{
flex
:
1
;
width
:
100%
;
height
:
100%
;
min-height
:
400px
;
display
:
block
;
}
</
style
>
\ No newline at end of file
src/views/efficiencyAnalysis/djzt/detail/index.vue
0 → 100644
View file @
3cd04a10
<!-- 多井能效分析方案详情 -->
<
template
>
<div
class=
"app-container"
>
<el-tabs
v-model=
"activeTab"
type=
"card"
@
tab-click=
"handleTabClick"
style=
"margin-top: -10px;"
>
<el-tab-pane
label=
"数据表格"
name=
"dataTable"
>
<DataTable
ref=
"dataTableRef"
:jh=
"queryParams.jh"
:famc=
"queryParams.famc"
:qk=
"queryParams.qk"
:jhs=
"queryParams.jhs"
/>
</el-tab-pane>
<el-tab-pane
label=
"曲线图形"
name=
"curveGraph"
>
<CurveGraph
ref=
"curveGraphRef"
:jh=
"queryParams.jh"
:famc=
"queryParams.famc"
:qk=
"queryParams.qk"
:jhs=
"queryParams.jhs"
/>
</el-tab-pane>
<el-tab-pane
label=
"直方图形"
name=
"histogramGraph"
>
<HistogramGraph
ref=
"histogramGraphRef"
:jh=
"queryParams.jh"
:famc=
"queryParams.famc"
:qk=
"queryParams.qk"
:jhs=
"queryParams.jhs"
/>
</el-tab-pane>
</el-tabs>
</div>
</
template
>
<
script
>
import
DataTable
from
'./components/DataTable.vue'
;
import
CurveGraph
from
'./components/CurveGraph.vue'
;
import
HistogramGraph
from
'./components/HistogramGraph.vue'
;
export
default
{
name
:
"DjxxDetail"
,
components
:
{
DataTable
,
CurveGraph
,
HistogramGraph
},
data
()
{
return
{
// 当前激活的tab
activeTab
:
'dataTable'
,
// 显示搜索条件
showSearch
:
true
,
// 遮罩层
loading
:
false
,
// 选中数组
ids
:
[],
// 查询参数
queryParams
:
{
jh
:
''
,
famc
:
''
,
qk
:
''
,
jhs
:
''
},
// 标记是否是第一次进入页面
isFirstLoad
:
true
};
},
created
()
{
// 获取路由参数
console
.
log
(
'详情页面created,完整路由对象:'
,
this
.
$route
);
const
{
jh
,
famc
,
qk
,
jhs
}
=
this
.
$route
.
params
;
console
.
log
(
'路由参数:'
,
{
jh
,
famc
,
qk
,
jhs
});
// 检查参数是否为空或undefined
if
(
jh
&&
jh
!==
'undefined'
&&
jh
!==
'null'
)
{
this
.
queryParams
.
jh
=
jh
;
this
.
queryParams
.
famc
=
famc
||
''
;
this
.
queryParams
.
qk
=
qk
||
''
;
this
.
queryParams
.
jhs
=
jhs
||
''
;
console
.
log
(
'设置 queryParams:'
,
this
.
queryParams
);
}
else
{
console
.
warn
(
'未获取到有效的路由参数 jh,当前参数:'
,
{
jh
,
famc
,
qk
,
jhs
});
}
// 确保第一次进入页面时不会自动初始化组件
console
.
log
(
'页面初始化完成,等待用户点击tab'
);
},
methods
:
{
/** 搜索按钮操作 */
handleQuery
()
{
this
.
loading
=
true
;
// 这里可以调用API进行数据查询
setTimeout
(()
=>
{
this
.
loading
=
false
;
},
1000
);
},
/** 移除记录按钮操作 */
handleRemove
()
{
if
(
this
.
ids
.
length
===
0
)
{
this
.
$message
.
warning
(
'请选择要移除的记录'
);
return
;
}
this
.
$modal
.
confirm
(
'是否确认移除选中的记录?'
).
then
(()
=>
{
// 这里可以调用API进行删除操作
this
.
$modal
.
msgSuccess
(
"移除成功"
);
}).
catch
(()
=>
{
});
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
id
);
},
/** tab切换事件 */
handleTabClick
(
tab
)
{
console
.
log
(
'切换到tab:'
,
tab
.
name
);
// 标记已经不是第一次加载
this
.
isFirstLoad
=
false
;
if
(
tab
.
name
===
'dataTable'
)
{
this
.
$refs
.
dataTableRef
&&
this
.
$refs
.
dataTableRef
.
loadData
&&
this
.
$refs
.
dataTableRef
.
loadData
();
}
else
if
(
tab
.
name
===
'curveGraph'
)
{
this
.
$refs
.
curveGraphRef
&&
this
.
$refs
.
curveGraphRef
.
loadData
&&
this
.
$refs
.
curveGraphRef
.
loadData
();
}
else
if
(
tab
.
name
===
'histogramGraph'
)
{
this
.
$refs
.
histogramGraphRef
&&
this
.
$refs
.
histogramGraphRef
.
loadData
&&
this
.
$refs
.
histogramGraphRef
.
loadData
();
}
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.app-container
{
padding
:
10px
;
box-sizing
:
border-box
;
}
.tab-content
{
padding
:
5px
0
;
}
.chart-container
{
height
:
calc
(
100vh
-
300px
);
display
:
flex
;
flex-direction
:
column
;
justify-content
:
center
;
align-items
:
center
;
background-color
:
#f5f5f5
;
border-radius
:
4px
;
h3
{
color
:
#666
;
margin-bottom
:
10px
;
}
p
{
color
:
#999
;
}
}
::v-deep
.el-table__cell
>
.cell
{
font-weight
:
normal
;
}
::v-deep
.el-table--medium
.el-table__cell
{
padding
:
5px
0
!important
;
}
::v-deep
.el-form-item
{
margin-bottom
:
10px
!important
;
}
::v-deep
.el-tabs__content
{
padding
:
5px
0
;
margin-top
:
-10px
;
}
</
style
>
src/views/efficiencyAnalysis/djzt/index.vue
0 → 100644
View file @
3cd04a10
<!-- 多井钻头 -->
<
template
>
<div
class=
"djzt-container"
>
<!-- 搜索区域 -->
<el-form
:inline=
"true"
:model=
"searchForm"
class=
"search-form"
>
<el-form-item
label=
"区块"
prop=
"qk"
>
<el-select
v-model=
"searchForm.qk"
placeholder=
"请选择区块"
clearable
filterable
style=
"width: 150px;"
>
<el-option
v-for=
"item in blockOptions"
:key=
"item.qk"
:label=
"item.qk"
:value=
"item.qk"
v-if=
"item && item.qk"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"钻头信息"
>
<el-input
v-model=
"searchForm.ztxx"
placeholder=
"请输入钻头信息"
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"getList"
>
搜索
</el-button>
<el-button
@
click=
"resetSearch"
>
重置
</el-button>
<el-button
type=
"success"
@
click=
"handleAdd"
>
新增
</el-button>
</el-form-item>
</el-form>
<!-- 表格区域 -->
<el-table
:data=
"tableData"
border
stripe
v-loading=
"loading"
style=
"width: 100%; height: calc(100vh - 230px)"
>
<el-table-column
prop=
"qk"
label=
"区块"
min-width=
"120"
></el-table-column>
<el-table-column
prop=
"ztxx"
label=
"钻头信息"
min-width=
"150"
></el-table-column>
<el-table-column
prop=
"dc"
label=
"地层"
min-width=
"150"
></el-table-column>
<el-table-column
prop=
"bz"
label=
"备注"
min-width=
"200"
show-overflow-tooltip
></el-table-column>
<el-table-column
label=
"操作"
width=
"150"
fixed=
"right"
>
<template
#
default=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-view"
@
click=
"handleView(scope.row)"
>
查看
</el-button>
<el-button
type=
"text"
size=
"mini"
@
click=
"handleEdit(scope.row)"
>
编辑
</el-button>
<el-button
type=
"text"
size=
"mini"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
style=
"margin-top: 10px; text-align: right;"
v-model:current-page=
"pagination.currentPage"
v-model:page-size=
"pagination.pageSize"
:page-sizes=
"[10, 20, 50, 100]"
:total=
"pagination.total"
layout=
"total, sizes, prev, pager, next, jumper"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
background
/>
<!-- 新增/编辑对话框 -->
<el-dialog
:title=
"dialogTitle"
width=
"600px"
:close-on-click-modal=
"false"
:visible
.
sync=
"dialogVisible"
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
label-width=
"100px"
>
<el-form-item
label=
"区块"
prop=
"qk"
>
<el-select
v-model=
"formData.qk"
placeholder=
"请选择区块名称"
clearable
filterable
style=
"width: 100%;"
>
<el-option
v-for=
"item in blockOptions"
:key=
"item.qk"
:label=
"item.qk"
:value=
"item.qk"
v-if=
"item && item.qk"
style=
"width: 100%;"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"钻头信息"
prop=
"ztxx"
>
<el-select
v-model=
"formData.ztxx"
multiple
filterable
allow-create
default-first-option
placeholder=
"请选择或输入钻头尺寸"
style=
"width: 100%"
>
<el-option
v-for=
"item in ztxxOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"层位"
prop=
"cw"
>
<el-input
v-if=
"!showCascader"
v-model=
"formData.cw"
readonly
style=
"width: 100%;"
>
<
template
slot=
"append"
>
<el-button
@
click=
"openCascader"
>
选择
</el-button>
</
template
>
</el-input>
<!-- 使用v-if来条件渲染el-cascader -->
<el-cascader
v-if=
"showCascader"
ref=
"cascader"
v-model=
"cascaderValue"
@
change=
"change"
@
click=
"handleCascaderClick"
:options=
"mdcOptions"
:props=
"mdc"
placeholder=
"请选择层位"
style=
"width: 200px;"
popper-class=
"cascader-popper"
>
</el-cascader>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"bz"
>
<el-input
v-model=
"formData.bz"
type=
"textarea"
:rows=
"3"
placeholder=
"请输入备注信息"
></el-input>
</el-form-item>
</el-form>
<
template
#
footer
>
<span
class=
"dialog-footer"
>
<el-button
@
click=
"dialogVisible = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmit"
:loading=
"submitLoading"
>
确定
</el-button>
</span>
</
template
>
</el-dialog>
</div>
</template>
<
script
>
import
{
getQkxl
}
from
"@/api/system/jsaa"
;
import
{
getMdcByQkid
}
from
"@/api/scientificDrill/schemeOptimization"
;
export
default
{
name
:
'DjztIndex'
,
data
()
{
return
{
mdcOptions
:
[],
oilOptions
:
[],
mdc
:
{
lazy
:
true
,
lazyLoad
:
this
.
loadTreeNode
,
checkStrictly
:
true
,
// 允许选择任意级别的节点
multiple
:
false
,
expandTrigger
:
'click'
,
// 点击展开
emitPath
:
true
,
// 返回完整路径
maxLevel
:
5
// 限制最多五级
},
cascaderValue
:
[],
// 用于绑定 el-cascader 的 v-model
showCascader
:
false
,
blockOptions
:
[],
// 搜索表单
searchForm
:
{
qk
:
''
,
ztxx
:
''
},
// 表格数据
tableData
:
[],
loading
:
false
,
// 分页
pagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
},
// 对话框
dialogVisible
:
false
,
dialogTitle
:
'新增'
,
submitLoading
:
false
,
// 表单数据
formData
:
{
id
:
null
,
qk
:
''
,
ztxx
:
[],
dc
:
[],
bz
:
''
},
// 表单验证规则
formRules
:
{
qk
:
[
{
required
:
true
,
message
:
'请输入区块'
,
trigger
:
'blur'
}
]
},
// 钻头信息选项
ztxxOptions
:
[
{
label
:
'8-1/2"'
,
value
:
'8-1/2"'
},
{
label
:
'9-5/8"'
,
value
:
'9-5/8"'
},
{
label
:
'12-1/4"'
,
value
:
'12-1/4"'
},
{
label
:
'17-1/2"'
,
value
:
'17-1/2"'
},
{
label
:
'26"'
,
value
:
'26"'
}
],
}
},
created
()
{
this
.
getBlockOptions
();
this
.
getList
();
},
mounted
()
{
this
.
getTableData
()
},
methods
:
{
/** 查看按钮操作 */
handleView
(
row
)
{
console
.
log
(
'查看按钮点击,行数据:'
,
row
);
const
params
=
{
jh
:
row
.
jh
||
''
,
famc
:
row
.
famc
||
''
,
qk
:
row
.
qk
||
''
,
jhs
:
row
.
jhs
||
''
};
console
.
log
(
'准备传递的参数:'
,
params
);
this
.
$router
.
push
({
name
:
'DjztDetail'
,
params
:
params
}).
then
(()
=>
{
console
.
log
(
'路由跳转成功'
);
}).
catch
(
err
=>
{
console
.
error
(
'路由跳转失败:'
,
err
);
});
},
/** 初始化目的层选项 */
initMdcOptions
()
{
// 加载根节点
const
params
=
{
dclevel
:
1
,
pid
:
null
,
};
getMdcByQkid
(
params
).
then
(
response
=>
{
const
options
=
response
.
data
.
map
(
item
=>
({
value
:
item
.
id
,
label
:
item
.
mc
,
leaf
:
false
,
level
:
1
// 设置根节点层级
}));
this
.
mdcOptions
=
options
;
}).
catch
(
error
=>
{
console
.
error
(
'初始化目的层选项失败:'
,
error
);
this
.
mdcOptions
=
[];
});
},
// 目的层相关方法
openCascader
()
{
this
.
showCascader
=
true
;
// 确保级联选择器正确初始化
this
.
$nextTick
(()
=>
{
if
(
this
.
$refs
.
cascader
)
{
console
.
log
(
'级联选择器已初始化'
);
// 设置初始值
if
(
this
.
formData
.
mdcid
)
{
this
.
cascaderValue
=
[
this
.
formData
.
mdcid
];
}
}
});
},
// 处理级联选择器点击
handleCascaderClick
()
{
console
.
log
(
'级联选择器被点击'
);
},
change
(
val
)
{
console
.
log
(
'选择变化:'
,
val
);
// 调试信息
if
(
val
&&
val
.
length
>
0
)
{
// 获取最后选择的节点值
const
selectedValue
=
val
[
val
.
length
-
1
];
// 设置选中层的 id 到表单中
this
.
formData
.
mdcid
=
selectedValue
;
// 直接通过级联选择器获取选中的标签
this
.
getSelectedLabel
(
val
,
selectedValue
);
// 延迟关闭级联选择器,确保值已经设置
setTimeout
(()
=>
{
this
.
showCascader
=
false
;
// 强制更新视图
this
.
$forceUpdate
();
},
100
);
}
else
{
this
.
showCascader
=
false
;
}
},
// 获取选中节点的标签
async
getSelectedLabel
(
path
,
selectedValue
)
{
console
.
log
(
'获取选中标签:'
,
path
,
selectedValue
);
// 从最后一级开始,逐级向上查找
for
(
let
i
=
path
.
length
-
1
;
i
>=
0
;
i
--
)
{
const
currentValue
=
path
[
i
];
const
level
=
i
+
1
;
try
{
const
params
=
{
dclevel
:
level
,
pid
:
i
===
0
?
null
:
path
[
i
-
1
]
};
const
response
=
await
getMdcByQkid
(
params
);
const
nodes
=
response
.
data
;
// 在当前级别中查找选中的节点
const
selectedNode
=
nodes
.
find
(
item
=>
item
.
id
===
currentValue
);
if
(
selectedNode
)
{
console
.
log
(
'找到选中节点:'
,
selectedNode
);
// 设置层位信息
this
.
formData
.
cw
=
selectedNode
.
mc
;
// 层位名称
this
.
formData
.
cwid
=
selectedNode
.
id
;
// 层位ID
// 构建地质时代名称
this
.
buildDzsdmc
(
path
,
selectedNode
);
this
.
$set
(
this
.
formData
,
'cw'
,
selectedNode
.
mc
);
this
.
$set
(
this
.
formData
,
'cwid'
,
selectedNode
.
id
);
this
.
$set
(
this
.
formData
,
'mdcid'
,
selectedValue
);
break
;
}
}
catch
(
error
)
{
console
.
error
(
'获取节点信息失败:'
,
error
);
}
}
},
// 构建地质时代名称
async
buildDzsdmc
(
path
,
selectedNode
)
{
console
.
log
(
'构建地质时代名称:'
,
path
,
selectedNode
);
if
(
path
.
length
>=
2
)
{
try
{
// 构建从盆地之后到选中节点之前的完整路径
const
eraPath
=
[];
// 从第二级开始(跳过盆地),到倒数第二级(选中节点的前一个)
for
(
let
i
=
1
;
i
<
path
.
length
-
1
;
i
++
)
{
const
currentValue
=
path
[
i
];
const
level
=
i
+
1
;
const
pid
=
i
===
1
?
path
[
0
]
:
path
[
i
-
1
];
// 父级ID
const
params
=
{
dclevel
:
level
,
pid
:
pid
};
const
response
=
await
getMdcByQkid
(
params
);
const
nodes
=
response
.
data
;
// 找到当前级别的节点
const
currentNode
=
nodes
.
find
(
item
=>
item
.
id
===
currentValue
);
if
(
currentNode
)
{
eraPath
.
push
(
currentNode
.
mc
);
}
}
// 构建地质时代名称:用/连接所有级别
const
dzsdmc
=
eraPath
.
join
(
'/'
);
console
.
log
(
'构建的地质时代名称:'
,
dzsdmc
);
this
.
formData
.
dzsdmc
=
dzsdmc
;
this
.
$set
(
this
.
formData
,
'dzsdmc'
,
dzsdmc
);
}
catch
(
error
)
{
console
.
error
(
'构建地质时代名称失败:'
,
error
);
}
}
},
loadTreeNode
(
node
,
resolve
)
{
// 检查是否已达到最大层级(5级)
if
(
node
.
level
>=
5
)
{
console
.
log
(
'已达到最大层级,不再加载子节点'
);
resolve
([]);
return
;
}
const
params
=
{
dclevel
:
node
.
level
+
1
,
pid
:
node
.
value
,
};
console
.
log
(
'加载节点参数:'
,
params
);
// 调试信息
// 发起请求获取节点数据
getMdcByQkid
(
params
).
then
(
response
=>
{
const
oilOptions
=
response
.
data
;
// 获取到的数据
console
.
log
(
'加载节点数据:'
,
oilOptions
);
// 调试信息
if
(
Array
.
isArray
(
oilOptions
)
&&
oilOptions
.
length
>
0
)
{
// 将数据转换为符合 Cascader 要求的格式
const
nodes
=
oilOptions
.
map
(
item
=>
({
value
:
item
.
id
,
label
:
item
.
mc
,
leaf
:
node
.
level
+
1
>=
5
,
// 第五级设置为叶子节点,不允许继续展开
level
:
node
.
level
+
1
// 设置节点层级
}));
console
.
log
(
'转换后的节点:'
,
nodes
);
// 调试信息
resolve
(
nodes
);
}
else
{
// 如果没有数据,返回空数组
console
.
log
(
'没有找到子节点数据'
);
resolve
([]);
}
}).
catch
(
error
=>
{
// 处理请求失败的情况
console
.
error
(
'加载节点数据失败:'
,
error
);
resolve
([]);
});
},
// 获取表格数据
async
getTableData
()
{
this
.
loading
=
true
try
{
// 模拟API调用
const
params
=
{
page
:
this
.
pagination
.
currentPage
,
pageSize
:
this
.
pagination
.
pageSize
,
...
this
.
searchForm
}
// 这里应该调用实际的API
// const res = await this.$api.getDjztList(params)
// 模拟数据
setTimeout
(()
=>
{
this
.
tableData
=
[
{
id
:
1
,
qk
:
'XX'
,
ztxx
:
[
'8-1/2"'
,
'9-5/8"'
],
dc
:
[
'第四系'
,
'新近系'
],
bz
:
'测试数据1'
},
{
id
:
2
,
qk
:
'aaaXX'
,
ztxx
:
[
'12-1/4"'
],
dc
:
[
'白垩系'
,
'侏罗系'
],
bz
:
'测试数据2'
}
]
this
.
pagination
.
total
=
2
this
.
loading
=
false
},
500
)
}
catch
(
error
)
{
this
.
loading
=
false
this
.
$message
.
error
(
'获取数据失败'
)
}
},
/** 获取区块下拉选项 */
getBlockOptions
()
{
getQkxl
().
then
(
response
=>
{
// 过滤掉无效的选项
this
.
blockOptions
=
response
.
data
.
filter
(
item
=>
item
&&
item
.
qk
);
});
},
// 搜索
getList
()
{
this
.
pagination
.
currentPage
=
1
this
.
getTableData
()
},
// 重置搜索
resetSearch
()
{
this
.
searchForm
=
{
qk
:
''
,
ztxx
:
''
}
this
.
getList
()
this
.
resetForm
(
"formData"
);
this
.
showCascader
=
false
;
this
.
cascaderValue
=
[];
// 重置 cascaderValue
},
// 新增
handleAdd
()
{
this
.
dialogTitle
=
'新增'
this
.
formData
=
{
id
:
null
,
qk
:
''
,
ztxx
:
[],
dc
:
[],
bz
:
''
}
this
.
dialogVisible
=
true
},
// 编辑
handleEdit
(
row
)
{
this
.
dialogTitle
=
'编辑'
this
.
formData
=
{
id
:
row
.
id
,
qk
:
row
.
qk
,
ztxx
:
Array
.
isArray
(
row
.
ztxx
)
?
row
.
ztxx
:
[
row
.
ztxx
],
dc
:
Array
.
isArray
(
row
.
dc
)
?
row
.
dc
:
[
row
.
dc
],
bz
:
row
.
bz
}
this
.
dialogVisible
=
true
},
// 删除
handleDelete
(
row
)
{
this
.
$confirm
(
'确认删除该记录吗?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
async
()
=>
{
try
{
// 这里应该调用实际的删除API
// await this.$api.deleteDjzt(row.id)
this
.
$message
.
success
(
'删除成功'
)
this
.
getTableData
()
}
catch
(
error
)
{
this
.
$message
.
error
(
'删除失败'
)
}
}).
catch
(()
=>
{
})
},
// 提交表单
async
handleSubmit
()
{
try
{
await
this
.
$refs
.
formRef
.
validate
()
this
.
submitLoading
=
true
// 这里应该调用实际的保存API
// const api = this.formData.id ? this.$api.updateDjzt : this.$api.addDjzt
// await api(this.formData)
setTimeout
(()
=>
{
this
.
$message
.
success
(
this
.
formData
.
id
?
'更新成功'
:
'新增成功'
)
this
.
dialogVisible
=
false
this
.
getTableData
()
this
.
submitLoading
=
false
},
500
)
}
catch
(
error
)
{
this
.
submitLoading
=
false
if
(
error
!==
false
)
{
this
.
$message
.
error
(
'操作失败'
)
}
}
},
// 分页大小改变
handleSizeChange
(
val
)
{
this
.
pagination
.
pageSize
=
val
this
.
getTableData
()
},
// 当前页改变
handleCurrentChange
(
val
)
{
this
.
pagination
.
currentPage
=
val
this
.
getTableData
()
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.djzt-container
{
padding
:
15px
;
height
:
calc
(
100vh
-
85px
);
overflow
:
hidden
;
position
:
relative
;
.search-form
{
margin-bottom
:
10px
;
}
.el-table
{
margin-top
:
10px
;
}
}
::v-deep
.el-table--medium
.el-table__cell
{
padding
:
5px
0
!important
;
}
::v-deep
.pagination-container
{
padding
:
0px
!important
;
margin
:
0
;
}
</
style
>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment