From 58a8ee8eebcf13656445486333d2d3f3e02c938f Mon Sep 17 00:00:00 2001
From: Jay <csj123456>
Date: 星期二, 10 十二月 2024 15:15:36 +0800
Subject: [PATCH] 煤质管理前端代码

---
 src/api/xmcpms/coal-quality/analysis/full/index.ts                    |   48 +
 src/views/xmcpms/coal-quality/detection/quick/QuickItem.vue           |   82 ++
 src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-chart.ts |   18 
 src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesForm.vue |  315 ++++++++
 src/views/xmcpms/coal-quality/statistics/image/平均值.png                |    0 
 src/api/xmcpms/coal-quality/detection/quick/index.ts                  |   60 +
 src/api/xmcpms/coal-quality/analysis/wash-curves/index.ts             |   45 +
 src/api/xmcpms/coal-quality/analysis/wash/target.ts                   |   52 +
 src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDraw.vue |  582 +++++++++++++++
 src/views/xmcpms/coal-quality/statistics/image/平均值 (1).png            |    0 
 src/views/xmcpms/coal-quality/statistics/image/最小值.png                |    0 
 src/views/xmcpms/coal-quality/detection/quick/index.vue               |  168 ++++
 src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDet.vue  |   78 ++
 src/utils/dict.ts                                                     |    6 
 src/views/xmcpms/coal-quality/statistics/index.vue                    |  148 +++
 src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det.ts   |    8 
 src/views/xmcpms/coal-quality/detection/quick/QuickForm.vue           |  368 +++++++++
 src/views/xmcpms/coal-quality/analysis/wash-curves/index.vue          |  208 +++++
 src/views/xmcpms/coal-quality/statistics/image/最大值.png                |    0 
 src/api/xmcpms/coal-quality/analysis/full/full-det.ts                 |   37 
 20 files changed, 2,222 insertions(+), 1 deletions(-)

diff --git a/src/api/xmcpms/coal-quality/analysis/full/full-det.ts b/src/api/xmcpms/coal-quality/analysis/full/full-det.ts
new file mode 100644
index 0000000..b9919ca
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/analysis/full/full-det.ts
@@ -0,0 +1,37 @@
+import request from '@/config/axios'
+
+export interface AnalysisDetVO {
+  id: string
+  code: string,
+  mdj: string,
+  zl: string,
+  cl: string,
+  hf: string,
+  lf: string,
+  fwljcl: string,
+  fwljhf: number,
+  cwljcl: number,
+  cwljhf: number,
+}
+
+
+
+// 查询AnalysisDetVO详情
+export const getAnalysisDetVO = (id: number) => {
+  return request.get({ url: `/data/da/point/info/${id}`})
+}
+
+// 新增AnalysisDetVO
+export const createAnalysisDetVO = (data: AnalysisDetVO) => {
+  return request.post({ url: '/data/da/point/create', data })
+}
+
+// 修改AnalysisDetVO
+export const updateAnalysisDetVO = (data: AnalysisDetVO) => {
+  return request.put({ url: '/data/da/point/update', data })
+}
+
+// 删除AnalysisDetVO
+export const deleteAnalysisDetVO = (id: number) => {
+  return request.delete({ url: '/data/da/point/delete?id=' + id })
+}
diff --git a/src/api/xmcpms/coal-quality/analysis/full/index.ts b/src/api/xmcpms/coal-quality/analysis/full/index.ts
new file mode 100644
index 0000000..fe19116
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/analysis/full/index.ts
@@ -0,0 +1,48 @@
+import request from '@/config/axios'
+
+export interface AnalysisFullVO {
+  id: string
+  code: string,
+  ny: string,
+  type: string,
+  mz: string,
+  syyp: string,
+  syrq: string,
+  sybz: string,
+  syfzr: number,
+  hyy: number,
+  myzz: number,
+  myzh: number,
+  myzl: string,
+  bz: string,
+}
+
+export interface AnalysisFullPageReqVO extends PageParam {
+  ny?: string,
+}
+
+
+// 查询Analysis列表
+export const getAnalysisFullPage = (params: AnalysisFullPageReqVO) => {
+  return request.get({ url: '/coal-quality/analysis/full/page', params })
+}
+
+// 查询Analysis详情
+export const getAnalysis = (id: string) => {
+  return request.get({ url: '/coal-quality/analysis/full/get?id=' + id})
+}
+
+// 新增Analysis
+export const createAnalysis = (data: AnalysisFullVO) => {
+  return request.post({ url: '/coal-quality/analysis/full/create', data })
+}
+
+// 修改Analysis
+export const updateAnalysis = (data: AnalysisFullVO) => {
+  return request.put({ url: '/coal-quality/analysis/full/update', data })
+}
+
+// 删除Analysis
+export const deleteAnalysis = (id: number) => {
+  return request.delete({ url: '/coal-quality/analysis/full/delete?id=' + id })
+}
diff --git a/src/api/xmcpms/coal-quality/analysis/wash-curves/index.ts b/src/api/xmcpms/coal-quality/analysis/wash-curves/index.ts
new file mode 100644
index 0000000..5c276f1
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/analysis/wash-curves/index.ts
@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+export interface WashCurvesVO {
+  id: string
+  code: string,
+  ny: string,
+  mz: string,
+  mzName: string,
+  drl: string,
+  fcfa: string,
+  fcfaName: string,
+  bz: string,
+}
+
+export interface WashCurvesPageReqVO extends PageParam {
+  ny?: string,
+  pointName?: string
+}
+
+
+// 查询WashCurves列表
+export const getWashCurvesPage = (params: WashCurvesPageReqVO) => {
+  return request.get({ url: '/coal-quality/analysis/wash-curves/page', params })
+}
+
+// 查询WashCurves详情
+export const getWashCurvesInfo = (id: string) => {
+  return request.get({ url: '/coal-quality/analysis/wash-curves/get?id=' + id})
+}
+
+// 新增WashCurves
+export const createWashCurves = (data: WashCurvesVO) => {
+  return request.post({ url: '/coal-quality/analysis/wash-curves/create', data })
+}
+
+// 修改WashCurves
+export const updateWashCurves = (data: WashCurvesVO) => {
+  return request.put({ url: '/coal-quality/analysis/wash-curves/update', data })
+}
+
+// 删除WashCurves
+export const deleteWashCurves = (ids) => {
+  const data = ids
+  return request.delete({ url: '/coal-quality/analysis/wash-curves/delete', data})
+}
diff --git a/src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-chart.ts b/src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-chart.ts
new file mode 100644
index 0000000..41788d8
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-chart.ts
@@ -0,0 +1,18 @@
+import request from '@/config/axios'
+import {WashCurvesPageReqVO} from "@/api/xmcpms/coal-quality/analysis/wash-curves/index";
+
+export interface WashCurvesChartVO {
+  curvesId: '0',
+  curvesType: 0,
+  fcfa: '',
+}
+
+// 查询WashCurves详情
+export const getWashCurvesChart = (curvesId: number) => {
+  return request.get({ url: '/coal-quality/analysis/wash-curves-chart/get?curvesId=' + curvesId })
+}
+
+export const drawWashCurvesChart = (data : WashCurvesChartVO) => {
+  return request.post({ url: '/coal-quality/analysis/wash-curves-chart/draw', data})
+}
+
diff --git a/src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det.ts b/src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det.ts
new file mode 100644
index 0000000..fbaa509
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det.ts
@@ -0,0 +1,8 @@
+import request from '@/config/axios'
+
+
+// 查询WashCurves详情
+export const getWashCurvesDet = (curvesId: number) => {
+  return request.get({ url: '/coal-quality/analysis/wash-curves-det/list?curvesId=' + curvesId })
+}
+
diff --git a/src/api/xmcpms/coal-quality/analysis/wash/target.ts b/src/api/xmcpms/coal-quality/analysis/wash/target.ts
new file mode 100644
index 0000000..dbd9778
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/analysis/wash/target.ts
@@ -0,0 +1,52 @@
+import request from '@/config/axios'
+
+export interface WashTargetVO {
+  id: string
+  ny: string,
+  mz: string,
+  mzName: string,
+  ymdw: string,
+  cpl: string,
+  ymSf: number,
+  ymHf: number,
+  ymLf: number,
+  jmSf: number,
+  jmHf: string,
+  jmLf: string,
+  jmHff: string,
+  jmNj: string,
+  jmJzc: string,
+  zmHf: string,
+  zmLf: string,
+  gsHf: string,
+}
+
+export interface WashTargetPageReqVO extends PageParam {
+  ny?: string,
+}
+
+// 查询WashTarget列表
+export const getWashTargetPage = (params: WashTargetVO) => {
+  return request.get({ url: '/coal-quality/wash/target/page', params })
+}
+
+// 查询WashTarget详情
+export const getWashTarget = (id: string) => {
+  return request.get({ url: '/coal-quality/wash/target/get?id=' + id})
+}
+
+// 新增WashTarget
+export const createWashTarget = (data: WashTargetVO) => {
+  return request.post({ url: '/coal-quality/wash/target/create', data })
+}
+
+// 修改WashTarget
+export const updateWashTarget = (data: WashTargetVO) => {
+  return request.put({ url: '/coal-quality/wash/target/update', data })
+}
+
+// 删除WashTarget
+export const deleteWashTarget = (ids) => {
+  const data = ids
+  return request.delete({ url: '/coal-quality/wash/target/delete?id=' + data })
+}
diff --git a/src/api/xmcpms/coal-quality/detection/quick/index.ts b/src/api/xmcpms/coal-quality/detection/quick/index.ts
new file mode 100644
index 0000000..6ffb8fe
--- /dev/null
+++ b/src/api/xmcpms/coal-quality/detection/quick/index.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+
+export interface QualityDetectionVO {
+  id: string
+  rglid: string,
+  code: string,
+  type: string,
+  rq: string,
+  bc: string,
+  bcName: string,
+  cysj: string,
+  cyd: string,
+  cydName: number,
+  cl: number,
+  cysl: number,
+  hysj: number,
+  mz: string,
+  mzName: string,
+  hf: string,
+  sf: string,
+  lf: string,
+  hff: string,
+  nj: string,
+  jzc: string,
+  frl: string,
+  zs: string,
+  gs: string,
+  ylmnHf: string,
+  bz: string,
+}
+
+export interface QualityDetectionPageReqVO extends PageParam {
+  ny?: string,
+}
+
+
+// 查询QualityDetection列表
+export const getQualityDetectionPage = (params: QualityDetectionPageReqVO) => {
+  return request.get({ url: '/coal-quality/QualityDetection/full/page', params })
+}
+
+// 查询QualityDetection详情
+export const getQualityDetection = (id: number) => {
+  return request.get({ url: '/coal-quality/QualityDetection/full/get?id=' + id})
+}
+
+// 新增QualityDetection
+export const createQualityDetection = (data: QualityDetectionVO) => {
+  return request.post({ url: '/coal-quality/QualityDetection/full/create', data })
+}
+
+// 修改QualityDetection
+export const updateQualityDetection = (data: QualityDetectionVO) => {
+  return request.put({ url: '/coal-quality/QualityDetection/full/update', data })
+}
+
+// 删除QualityDetection
+export const deleteQualityDetection = (id: number) => {
+  return request.delete({ url: '/coal-quality/QualityDetection/full/delete?id=' + id })
+}
diff --git a/src/utils/dict.ts b/src/utils/dict.ts
index ba96952..886dd3c 100644
--- a/src/utils/dict.ts
+++ b/src/utils/dict.ts
@@ -227,5 +227,9 @@
   AI_WRITE_LENGTH = 'ai_write_length', // AI 写作长度
   AI_WRITE_FORMAT = 'ai_write_format', // AI 写作格式
   AI_WRITE_TONE = 'ai_write_tone', // AI 写作语气
-  AI_WRITE_LANGUAGE = 'ai_write_language' // AI 写作语言
+  AI_WRITE_LANGUAGE = 'ai_write_language',// AI 写作语言
+
+  YMMZ = 'ymmz',
+  FCFA = 'fcfa',
+  CURVES_TYPE = 'curves-type'
 }
diff --git a/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDet.vue b/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDet.vue
new file mode 100644
index 0000000..a57d3e0
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDet.vue
@@ -0,0 +1,78 @@
+<template>
+  <div class="mod-analysis-full-det">
+    <el-form :inline="true" :model="formData">
+      <el-form-item>
+        <span>原煤化验数据表</span><span>【{{formData.curvesCode}}】</span>
+      </el-form-item>
+      <el-form-item>
+        <el-button size="mini" @click="getDataList()">刷新</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button size="mini" type="primary" @click="drawWashCurves()">可选性曲线</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="warning" plain @click="handleImport">
+          <Icon icon="ep:upload" />导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+        ref="table"
+        v-loading="loading"
+        :data="dataList"
+        border
+        height="300"
+        >
+      <el-table-column prop="code" label="流水号" header-align="center" align="center"
+                       width="140"/>
+      <el-table-column prop="mdjName" label="密度级" header-align="center"
+                       align="center"/>
+      <el-table-column label="综合累计" header-align="center">
+        <el-table-column prop="zhljcl" label="产率(%)" header-align="center"
+                         align="center"/>
+        <el-table-column prop="zhljhf" label="灰分(%)" header-align="center"
+                         align="center"/>
+      </el-table-column>
+      <el-table-column label="浮物累计" header-align="center" >
+        <el-table-column prop="fwljcl" label="产率(%)" header-align="center"
+                         align="center"/>
+        <el-table-column prop="fwljhf" label="灰分(%)" header-align="center"
+                         align="center"/>
+      </el-table-column>
+      <el-table-column label="沉物累计" header-align="center" >
+        <el-table-column prop="cwljcl" label="产率(%)" header-align="center"
+                         align="center"/>
+        <el-table-column prop="cwljhf" label="灰分(%)" header-align="center"
+                         align="center"/>
+      </el-table-column>
+      <el-table-column prop="md" label="密度" header-align="center" align="center" />
+      <el-table-column prop="hl" label="±0.1含量" header-align="center" align="center" />
+      <el-table-column prop="lf" label="硫分(%)" header-align="center" align="center" />
+    </el-table>
+  </div>
+</template>
+<script lang="ts" setup>
+  import * as WashCurvesDetApi from '@/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det'
+
+  const message = useMessage() // 消息弹窗
+  const loading = ref(false) // 列表的加载中
+  const formDataRef = ref()
+  const formData = ref({
+    curvesId: undefined,
+    curvesCode: '',
+    fcfa: ''
+  })
+  const dataList = ref()
+  const open = async (row) => {
+    formData.value.curvesId = row.id
+    formData.value.curvesCode = row.code
+    dataList.value = await WashCurvesDetApi.getWashCurvesDet(row.id)
+  }
+  defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+  const emits = defineEmits(['drawWashCurves'])
+  const drawWashCurves = () => {
+    emits('drawWashCurves')
+  }
+
+</script>
diff --git a/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDraw.vue b/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDraw.vue
new file mode 100644
index 0000000..0b1154a
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDraw.vue
@@ -0,0 +1,582 @@
+<template>
+  <el-card shadow="never" class="aui-card--fill">
+    <div class="mod-wash-curves-draw">
+      <el-form :inline="true" :model="formData">
+        <el-form-item>
+          <span>可选性曲线 - </span><span>{{formData.curvesCode}}</span>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="getDataList()"> 刷新 </el-button>
+        </el-form-item>
+      </el-form>
+      <el-table
+        ref="table"
+        v-loading="loading"
+        :data="dataList"
+        border
+        height="300"
+      >
+        <el-table-column prop="code" label="流水号" header-align="center" align="center"
+                         width="140"/>
+        <el-table-column prop="mdjName" label="密度级" header-align="center"
+                         align="center"/>
+        <el-table-column label="综合累计" header-align="center">
+          <el-table-column prop="zhljcl" label="产率(%)" header-align="center"
+                           align="center"/>
+          <el-table-column prop="zhljhf" label="灰分(%)" header-align="center"
+                           align="center"/>
+        </el-table-column>
+        <el-table-column label="浮物累计" header-align="center" >
+          <el-table-column prop="fwljcl" label="产率(%)" header-align="center"
+                           align="center"/>
+          <el-table-column prop="fwljhf" label="灰分(%)" header-align="center"
+                           align="center"/>
+        </el-table-column>
+        <el-table-column label="沉物累计" header-align="center" >
+          <el-table-column prop="cwljcl" label="产率(%)" header-align="center"
+                           align="center"/>
+          <el-table-column prop="cwljhf" label="灰分(%)" header-align="center"
+                           align="center"/>
+        </el-table-column>
+        <el-table-column prop="md" label="密度" header-align="center" align="center" />
+        <el-table-column prop="hl" label="±0.1含量" header-align="center" align="center" />
+<!--        <el-table-column prop="lf" label="硫分(%)" header-align="center" align="center" />-->
+      </el-table>
+
+      <el-divider content-position="left">可选性曲线</el-divider>
+      <el-form :inline="true" :model="formData">
+        <el-form-item>
+          <el-select v-model="formData.curvesType" placeholder="绘图方法" style="width: 150px"
+                     clearable >
+            <el-option
+              v-for="dict in getStrDictOptions(DICT_TYPE.CURVES_TYPE)"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="drawHandle">开始绘图</el-button>
+        </el-form-item>
+      </el-form>
+      <!--可选性曲线-->
+      <div class="wash-curves">
+        <div style="width: 40%; padding-left: 20px;">
+          <div id="wash" ref="washChart"
+               v-loading="chartLoading"
+               style="width: 500px; height: 500px; text-align: center"></div>
+        </div>
+        <div style="width: 58%;">
+          <!--λ曲线-->
+          <el-form :inline="true" :model="formInline" class="demo-form-inline" label-width="100px">
+            <el-row>
+              <el-col :span="2">
+                <el-form-item>λ曲线</el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="基元灰分" prop="cellAsh">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInline.cellAsh" placeholder="请输入灰分"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryCellFloat">求浮物产率</el-button>
+                </el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="浮物产率" prop="cellFloat">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInline.cellFloat" placeholder="请输入产率"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryCellAsh">求基元灰分</el-button>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+
+          <!--β曲线-->
+          <el-form :inline="true" :model="formInlineFloat" class="demo-form-inline" label-width="100px">
+            <el-row>
+              <el-col :span="2">
+                <el-form-item>β曲线</el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="灰分">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineFloat.ash" placeholder="请输入灰分"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryFloatYield">求浮物产率</el-button>
+                </el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="浮物产率">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineFloat.float" placeholder="请输入产率"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryFloatAsh">求灰分</el-button>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+
+          <!--θ曲线-->
+          <el-form :inline="true" :model="formInlineSink" class="demo-form-inline" label-width="100px">
+            <el-row>
+              <el-col :span="2">
+                <el-form-item>θ曲线</el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="灰分">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineSink.ash" placeholder="请输入灰分"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="querySinkYield">求沉物产率</el-button>
+                </el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="沉物产率">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineSink.sink" placeholder="请输入产率"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="querySinkAsh">求灰分</el-button>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+
+          <!--δ曲线-->
+          <el-form :inline="true" :model="formInlineDensity" class="demo-form-inline" label-width="100px">
+            <el-row>
+              <el-col :span="2">
+                <el-form-item>δ曲线</el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="密度">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineDensity.density" placeholder="请输入密度"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryDensityFloat">求浮物产率</el-button>
+                </el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="浮物产率">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineDensity.float" placeholder="请输入产率"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryDensitydensity">求密度</el-button>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+
+          <!--ε曲线-->
+          <el-form :inline="true" :model="formInlineDensityScope" class="demo-form-inline" label-width="100px">
+            <el-row>
+              <el-col :span="2">
+                <el-form-item>ε曲线</el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="密度">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineDensityScope.density" placeholder="请输入密度"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-button size="mini" type="primary" @click="queryScope">求±0.1含量</el-button>
+                </el-form-item>
+              </el-col>
+              <el-col :span="11">
+                <el-form-item label="±0.1含量">
+                  <el-input-number size="mini" :controls="false" :precision="2" :min="0" :max="100"
+                                   v-model="formInlineDensityScope.scope"/>
+                </el-form-item>
+                <el-form-item>
+                  <el-checkbox size="mini" v-model="formInlineDensityScope.subsGan">扣矸(1.8)/扣低(1.5)</el-checkbox>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+        </div>
+      </div>
+
+    </div>
+  </el-card>
+</template>
+<script lang="ts" setup>
+  import * as WashCurvesDetApi from '@/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det'
+  import * as WashCurvesChartApi from '@/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-chart'
+  import * as echarts from "echarts";
+  import {DICT_TYPE, getStrDictOptions} from '@/utils/dict'
+  import * as WashCurvesApi from "@/api/xmcpms/coal-quality/analysis/wash-curves";
+
+  const route = useRoute()
+  const chartLoading = ref(false)
+  const dataList = ref()
+  const cellData = ref([])
+  const floatData = ref([])
+  const sinkData = ref([])
+  const densityData = ref([])
+  const densityScopeData = ref([])
+  const xAxisData1 = ref([])
+  const xAxisData2 = ref([])
+  const legendData = ref([])
+  const floatPointData = ref([])
+  const densityPointData = ref([])
+  const densityScopePointData = ref([])
+  const washChart = ref(null);
+  let loadChart = null;
+
+  const curvesTypeOption = [
+    {
+      value: 0,
+      label: '插值法',
+    },
+    {
+      value: 1,
+      label: '拟合法',
+    }
+  ]
+  const formData = ref({
+    curvesId: '0',
+    curvesCode: '',
+    curvesType: 0,
+    fcfa: '',
+  })
+
+  const formInline = ref({
+    cellAsh: '',
+    cellFloat: ''
+  })
+  const formInlineFloat = ref({
+    ash: '',
+    float: ''
+  })
+  const formInlineSink= ref({
+    ash: '',
+    sink: ''
+  })
+  const formInlineDensity = ref({
+    density: '',
+    float: ''
+  })
+  const formInlineDensityScope = ref({
+    density: '',
+    scope: '',
+    subsGan: false,
+  })
+
+  const getDataList = async () => {
+    dataList.value = await WashCurvesDetApi.getWashCurvesDet(formData.value.curvesId)
+  }
+
+  const getChart = async () => {
+    if (!formData.value.curvesId) {
+      formData.value.resetFields()
+      return
+    }
+    chartLoading.value = true
+    const data = await WashCurvesChartApi.getWashCurvesChart(formData.value.curvesId);
+    chartLoading.value = false
+    formData.value.curvesType = data.curvesType
+    cellData.value = JSON.parse(data.cellData)
+    floatData.value = JSON.parse(data.floatData)
+    sinkData.value = JSON.parse(data.sinkData)
+    densityData.value = JSON.parse(data.densityData)
+    densityScopeData.value = JSON.parse(data.densityScopeData)
+    xAxisData1.value = JSON.parse(data.xaxisData1)
+    xAxisData2.value = JSON.parse(data.xaxisData2)
+    floatPointData.value = JSON.parse(data.floatPointData)
+    densityPointData.value = JSON.parse(data.densityPointData)
+    densityScopePointData.value = JSON.parse(data.densityScopePointData)
+    await drawWashCurves()
+  }
+
+  const drawWashCurves = async () => {
+    let option = {
+      tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+          type: 'cross'
+        }
+      },
+      legend: {},
+      grid: {
+        top: 70,
+        bottom: 50
+      },
+      yAxis: [
+        {
+          type: "value",
+          min: 0,
+          max: 100,
+          interval: 10,
+          inverse: true //反转坐标轴
+        },
+        {
+          type: "value",
+          min: 0,
+          max: 100,
+          interval: 10
+        }
+      ],
+      xAxis: [
+        {
+          type: 'category',
+          boundaryGap: false,
+          axisTick: {
+            alignWithLabel: true
+          },
+          data: xAxisData1.value,
+          interval: 0.01,
+        },
+        {
+          type: 'category',
+          boundaryGap: false,
+          axisTick: {
+            alignWithLabel: true
+          },
+          interval: 0.01,
+          inverse: true,
+          data: xAxisData2.value,
+        }
+      ],
+
+      series: [
+        {
+          data: floatPointData.value,
+          xAxisIndex: 0,
+          yAxisIndex: 0,
+          type: 'scatter'
+        }, {
+          symbolSize: 10,
+          data: densityPointData.value,
+          xAxisIndex: 1,
+          yAxisIndex: 0,
+          type: 'scatter'
+        },
+        {
+          symbolSize: 10,
+          data: densityScopePointData.value,
+          xAxisIndex: 1,
+          yAxisIndex: 0,
+          type: 'scatter'
+        },
+        {
+          showSymbol: false,
+          name: '灰分特性曲线',
+          type: 'line',
+          xAxisIndex: 0,
+          yAxisIndex: 0,
+          smooth: true,
+          emphasis: {
+            focus: 'series'
+          },
+          data: cellData.value
+        },
+        {
+          showSymbol: false,
+          name: '密度曲线',
+          type: 'line',
+          xAxisIndex: 1,
+          yAxisIndex: 0,
+          smooth: true,
+          emphasis: {
+            focus: 'series'
+          },
+          data: densityData.value
+        },
+        {
+          showSymbol: false,
+          name: '浮物曲线',
+          type: 'line',
+          xAxisIndex: 0,
+          yAxisIndex: 0,
+          smooth: true,
+          emphasis: {
+            focus: 'series'
+          },
+          data: floatData.value
+        },
+
+        {
+          showSymbol: false,
+          name: '沉物曲线',
+          type: 'line',
+          xAxisIndex: 0,
+          yAxisIndex: 1,
+          smooth: true,
+          emphasis: {
+            focus: 'series'
+          },
+          data: sinkData.value
+        },
+        {
+          showSymbol: false,
+          name: '密度±0.1曲线',
+          type: 'line',
+          xAxisIndex: 1,
+          yAxisIndex: 0,
+          smooth: true,
+          emphasis: {
+            focus: 'series'
+          },
+          data: densityScopeData.value
+        },
+      ]
+    };
+    loadChart.setOption(option);
+  }
+
+  const drawHandle = async () => {
+    chartLoading.value = true
+    const params = formData.value as WashCurvesChartApi.WashCurvesChartVO
+    const data = await WashCurvesChartApi.drawWashCurvesChart(params);
+    chartLoading.value = false
+    formData.value.curvesType = data.curvesType
+    cellData.value = JSON.parse(data.cellData)
+    floatData.value = JSON.parse(data.floatData)
+    sinkData.value = JSON.parse(data.sinkData)
+    densityData.value = JSON.parse(data.densityData)
+    densityScopeData.value = JSON.parse(data.densityScopeData)
+    xAxisData1.value = JSON.parse(data.xaxisData1)
+    xAxisData2.value = JSON.parse(data.xaxisData2)
+    floatPointData.value = JSON.parse(data.floatPointData)
+    densityPointData.value = JSON.parse(data.densityPointData)
+    densityScopePointData.value = JSON.parse(data.densityScopePointData)
+    await drawWashCurves()
+  }
+
+  const queryCellFloat = async () => {
+    if (!formInline.value.cellAsh) {
+      console.log("请输入")
+      return
+    }
+    let floatIndex = await getClosestNumber(xAxisData1.value, formInline.value.cellAsh)
+    console.log(floatIndex)
+    let a = cellData.value[floatIndex]
+    formInline.value.cellFloat = cellData.value[floatIndex]
+  }
+
+  const getClosestNumber = async (array, target) => {
+    let result = array[0];
+    let resultIndex = 0
+    for (let i = 0; i < array.length; i++) {
+      if (Math.abs(array[i] - target) < Math.abs(result - target)) {
+        result = array[i]
+        resultIndex = i;
+      }
+    }
+    return resultIndex;
+  }
+
+  const queryCellAsh = async () => {
+    if (!formInline.value.cellFloat) {
+      console.log("请输入")
+      return
+    }
+    let ashIndex = await getClosestNumber(cellData.value, formInline.value.cellFloat)
+    console.log(formInline.value.cellFloat)
+    console.log(ashIndex)
+    formInline.value.cellAsh = xAxisData1.value[ashIndex]
+
+  }
+
+  const queryFloatAsh = async () => {
+    if (!formInlineFloat.value.float) {
+      console.log("请输入")
+      return
+    }
+    let ashIndex = await getClosestNumber(floatData.value, formInlineFloat.value.float)
+    formInlineFloat.value.ash = xAxisData1.value[ashIndex]
+  }
+
+  const queryFloatYield = async () => {
+    if (!formInlineFloat.value.ash) {
+      console.log("请输入")
+      return
+    }
+    let floatIndex = await getClosestNumber(xAxisData1.value, formInlineFloat.value.ash)
+    formInlineFloat.value.float = floatData.value[floatIndex]
+  }
+
+  const querySinkAsh = async () => {
+    if (!formInlineSink.value.sink) {
+      console.log("请输入")
+      return
+    }
+    let ashIndex = await getClosestNumber(sinkData.value, formInlineSink.value.sink)
+    console.log(ashIndex)
+    formInlineSink.value.ash = xAxisData1.value[ashIndex]
+
+  }
+
+  const querySinkYield = async () =>  {
+    if (!formInlineSink.value.ash) {
+      console.log("请输入")
+      return
+    }
+    let sinkIndex = await getClosestNumber(xAxisData1.value, formInlineSink.value.ash)
+    formInlineSink.value.sink = sinkData.value[sinkIndex]
+  }
+
+  const queryDensitydensity = async () => {
+    if (!formInlineDensity.value.float) {
+      console.log("请输入")
+      return
+    }
+    let densityIndex = await getClosestNumber(densityData.value, formInlineDensity.value.float)
+    formInlineDensity.value.density = xAxisData2.value[densityIndex]
+  }
+
+  const queryDensityFloat = async () => {
+    if (!formInlineDensity.value.density) {
+      console.log("请输入")
+      return
+    }
+    let floatIndex = await getClosestNumber(xAxisData2.value, formInlineDensity.value.density)
+    formInlineDensity.value.float = densityData.value[floatIndex]
+  }
+
+  const queryScope = async () => {
+    if (!formInlineDensityScope.value.density) {
+      console.log("请输入")
+      return
+    }
+    let scopeIndex = await getClosestNumber(xAxisData2.value, formInlineDensityScope.value.density)
+    formInlineDensityScope.value.scope = densityScopeData.value[scopeIndex]
+    if (formInlineDensityScope.value.subsGan == true) {
+      if (formInlineDensityScope.value.density >= 1.7) {
+        let kouDiIndex = await getClosestNumber(xAxisData2.value, 1.5) //扣抵1.5
+        formInlineDensityScope.value.scope = densityScopeData.value[scopeIndex] / (100 - densityData.value[kouDiIndex]) * 100
+      } else {
+        let kouGanIndex = await getClosestNumber(xAxisData2.value, 1.8) //扣矸1.8
+        formInlineDensityScope.value.scope = densityScopeData.value[scopeIndex] / (densityData.value[kouGanIndex]) * 100
+      }
+    }
+  }
+
+  onMounted(async () => {
+    formData.value.curvesId = route.query.curvesId
+    formData.value.curvesCode = route.query.code
+    formData.value.fcfa = route.query.fcfa
+    loadChart = echarts.init(washChart.value);
+    await getDataList()
+    await getChart()
+  })
+
+</script>
+<style scoped>
+  .wash-curves {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+    justify-content: center;
+    align-content: center;
+  }
+</style>
diff --git a/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesForm.vue b/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesForm.vue
new file mode 100644
index 0000000..af49711
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesForm.vue
@@ -0,0 +1,315 @@
+<template>
+  <Dialog width="60%" v-model="dialogVisible" :title="dialogTitle">
+    <el-tabs>
+      <el-tab-pane label="浮沉实验台账">
+        <el-form :model="formData" :rules="formRules" ref="formRef"  v-loading="formLoading"
+                 label-width="120px">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="code" label="流水号">
+                <el-input size="mini" disabled v-model="formData.code" placeholder="流水号"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="ny" label="年月">
+                <el-date-picker
+                    style="width: 100%"
+                    v-model="formData.ny"
+                    type="month"
+                    value-format="YYYY-MM"
+                    placeholder="年月"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="syrq" label="实验日期">
+                <el-date-picker
+                    style="width: 100%"
+                    v-model="formData.syrq"
+                    type="date"
+                    placeholder="实验日期"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="mz" label="煤种">
+                <el-select v-model="formData.mz" placeholder="煤种"
+                           clearable >
+                  <el-option
+                    v-for="dict in getStrDictOptions(DICT_TYPE.YMMZ)"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="fcfa" label="浮沉方案">
+                <el-select v-model="formData.fcfa" placeholder="浮沉方案"
+                           clearable >
+                  <el-option
+                    v-for="dict in getStrDictOptions(DICT_TYPE.FCFA)"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="drl" label="调入量">
+                <el-input-number v-model="formData.drl" placeholder="调入量" :min="0"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item prop="bz" label="备注">
+                <el-input size="mini" v-model="formData.bz" placeholder="备注" type="textarea"
+                          :rows="2"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-tab-pane>
+      <el-tab-pane label="浮沉数据">
+        <el-form :inline="true">
+          <el-form-item>
+            <el-upload
+                class="upload-demo"
+                :action="action"
+                :on-success="handleExcel"
+                :multiple="false"
+                :show-file-list="false"
+                :on-change="changeFile"
+                :file-list="fileList">
+              <el-button size="mini" type="primary">点击上传</el-button>
+            </el-upload>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="mini" type="success" @click="downloadExcel">下载模板</el-button>
+          </el-form-item>
+        </el-form>
+        <el-form :model="formData" :rules="dataRule" ref="formDataDet"
+                 label-width="120px">
+          <el-table
+              :data="formData.detList"
+              border
+              height="400"
+              style="width: 100%;">
+            <el-table-column prop="mdjName" label="密度级" header-align="center"
+                             align="center"/>
+            <el-table-column label="综合累计" header-align="center">
+              <el-table-column prop="zhljcl" label="产率(%)" header-align="center" align="center">
+                <template #default="scope">
+                  <el-input-number v-model="scope.row.zhljcl"
+                                   size="mini"
+                                   placeholder="产率(%)"
+                                   :precision="2"
+                                   :controls="false"
+                                   :min="0"
+                                   :max="100" class="curves-det-input"/>
+                </template>
+              </el-table-column>
+              <el-table-column prop="zhljhf" label="灰分(%)" header-align="center" align="center">
+                <template #default="scope">
+                  <el-input-number v-model="scope.row.zhljhf"
+                                   size="mini"
+                                   placeholder="灰分(%)"
+                                   :precision="2"
+                                   :controls="false"
+                                   :min="0"
+                                   :max="100" class="curves-det-input"/>
+                </template>
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="浮物累计" header-align="center" >
+              <el-table-column prop="fwljcl" label="产率(%)" header-align="center" align="center">
+                <template #default="scope">
+                  <el-input-number v-model="scope.row.fwljcl"
+                                   :disabled="true"
+                                   size="mini"
+                                   placeholder="产率(%)"
+                                   :precision="2"
+                                   :controls="false"
+                                   :min="0"
+                                   :max="100" class="curves-det-input"/>
+                </template>
+              </el-table-column>
+              <el-table-column prop="fwljhf" label="灰分(%)" header-align="center" align="center">
+                <template #default="scope">
+                  <el-input-number v-model="scope.row.fwljhf"
+                                   :disabled="true"
+                                   size="mini"
+                                   placeholder="灰分(%)"
+                                   :precision="2"
+                                   :controls="false"
+                                   :min="0"
+                                   :max="100" class="curves-det-input"/>
+                </template>
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="沉物累计" header-align="center" >
+              <el-table-column prop="cwljcl" label="产率(%)" header-align="center" align="center">
+                <template #default="scope">
+                  <el-input-number v-model="scope.row.cwljcl"
+                                   :disabled="true"
+                                   size="mini"
+                                   placeholder="产率(%)"
+                                   :precision="2"
+                                   :controls="false"
+                                   :min="0"
+                                   :max="100" class="curves-det-input"/>
+                </template>
+              </el-table-column>
+              <el-table-column prop="cwljhf" label="灰分(%)" header-align="center" align="center">
+                <template #default="scope">
+                  <el-input-number v-model="scope.row.cwljhf"
+                                   :disabled="true"
+                                   size="mini"
+                                   placeholder="灰分(%)"
+                                   :precision="2"
+                                   :controls="false"
+                                   :min="0"
+                                   :max="100" class="curves-det-input"/>
+                </template>
+              </el-table-column>
+            </el-table-column>
+            <el-table-column prop="md" label="密度" header-align="center" align="center" >
+              <template #default="scope">
+                <el-input-number v-model="scope.row.md"
+                                 size="mini"
+                                 placeholder="密度"
+                                 :precision="2"
+                                 :controls="false"
+                                 :min="0"
+                                 :max="100" class="curves-det-input"/>
+              </template>
+            </el-table-column>
+            <el-table-column prop="hl" label="±0.1含量" header-align="center" align="center" >
+              <template #default="scope">
+                <el-input-number v-model="scope.row.hl"
+                                 :disabled="true"
+                                 size="mini"
+                                 placeholder="±0.1含量"
+                                 :precision="2"
+                                 :controls="false"
+                                 :min="0"
+                                 :max="100" class="curves-det-input"/>
+              </template>
+            </el-table-column>
+            <el-table-column prop="lf" label="硫分(%)" header-align="center" align="center" >
+              <template #default="scope">
+                <el-input-number v-model="scope.row.lf"
+                                 size="mini"
+                                 placeholder="硫分(%)"
+                                 :precision="2"
+                                 :controls="false"
+                                 :min="0"
+                                 :max="100" class="curves-det-input"/>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-form>
+      </el-tab-pane>
+    </el-tabs>
+    <template #footer>
+      <el-button :disabled="formLoading" type="primary" @click="submitForm()">确定</el-button>
+      <el-button @click="dialogVisible = false">取消</el-button>
+    </template>
+  </Dialog>
+</template>
+
+<script lang="ts" setup>
+  import * as WashCurvesApi from '@/api/xmcpms/coal-quality/analysis/wash-curves/index'
+  import {DICT_TYPE, getStrDictOptions} from '@/utils/dict'
+
+  defineOptions({name: ' WashCurvesForm'})
+
+  const {t} = useI18n() // 国际化
+  const message = useMessage() // 消息弹窗
+  const dialogVisible = ref(false) // 弹窗的是否展示
+  const dialogTitle = ref('') // 弹窗的标题
+  const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+  const formType = ref('') // 表单的类型:create - 新增;update - 修改
+  const formRef = ref() // 表单 Ref
+  const formData = ref({
+    id: undefined,
+    code: undefined,
+    ny: undefined,
+    syrq: undefined,
+    mz: undefined,
+    drl: undefined,
+    fcfa: undefined,
+    bz: undefined,
+    detList: []
+  })
+
+  const open = async (type: string, id?: string) => {
+    dialogVisible.value = true
+    dialogTitle.value = t('action.' + type)
+    formType.value = type
+    resetForm()
+    //修改时,设置数据
+    if (id) {
+      formLoading.value = true
+      try {
+        formData.value = await WashCurvesApi.getWashCurvesInfo(id)
+      } finally {
+        formLoading.value = false
+      }
+    }
+  }
+  defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+  /** 提交表单 */
+  const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+  const submitForm = async () => {
+    // 校验表单
+    if (!formRef) return
+    const valid = await formRef.value.validate()
+    if (!valid) return
+    // 提交请求
+    formLoading.value = true
+    try {
+      const data = formData.value as WashCurvesApi.WashCurvesVO
+      if (formType.value === 'create') {
+        await WashCurvesApi.createWashCurves(data)
+        message.success(t('common.createSuccess'))
+      } else {
+        await WashCurvesApi.updateWashCurves(data)
+        message.success(t('common.updateSuccess'))
+      }
+      dialogVisible.value = false
+      // 发送操作成功的事件
+      emit('success')
+    } finally {
+      formLoading.value = false
+    }
+  }
+
+  /** 重置表单 */
+  const resetForm = () => {
+    formData.value = {
+      id: undefined,
+      code: undefined,
+      ny: undefined,
+      syrq: undefined,
+      mz: undefined,
+      drl: undefined,
+      fcfa: undefined,
+      bz: undefined,
+      detList: []
+    }
+    formRef.value?.resetFields()
+  }
+
+</script>
+<style>
+  .curves-det-input {
+    width: 100%;
+  }
+</style>
diff --git a/src/views/xmcpms/coal-quality/analysis/wash-curves/index.vue b/src/views/xmcpms/coal-quality/analysis/wash-curves/index.vue
new file mode 100644
index 0000000..7469733
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/analysis/wash-curves/index.vue
@@ -0,0 +1,208 @@
+<template>
+  <div>
+    <el-card shadow="never" class="aui-card--fill">
+      <div class="mod-wash-curves">
+        <el-form :inline="true" :model="dataForm">
+          <el-form-item>
+            <el-date-picker
+              v-model="queryParams.startTime"
+              type="date"
+              clearable
+              value-format="YYYY-MM-DD"
+              format="YYYY-MM-DD"
+              placeholder="开始时间"/>
+          </el-form-item>
+          <el-form-item>
+            <el-date-picker
+              v-model="queryParams.endTime"
+              type="date"
+              clearable
+              value-format="YYYY-MM-DD"
+              format="YYYY-MM-DD"
+              placeholder="结束时间"/>
+          </el-form-item>
+          <el-form-item>
+            <dict-select-tag style="width: 100%" v-model="queryParams.mz" :clearable="true" placeholder="煤种" dictCode="ymmz" />
+          </el-form-item>
+          <el-form-item>
+            <dict-select-tag style="width: 100%" v-model="queryParams.fcfa" :clearable="true" placeholder="浮沉方案" dictCode="analysis-fcfa" />
+          </el-form-item>
+          <el-form-item>
+            <el-button @click="handleQuery">
+              <Icon icon="ep:search" class="mr-5px" />
+              查询
+            </el-button>
+            <el-button type="primary" plain @click="openForm('create')">
+              <Icon icon="ep:plus" class="mr-5px" />
+              新增
+            </el-button>
+            <el-button type="warning" plain @click="handleImport">
+              <Icon icon="ep:upload" /> 导出
+            </el-button>
+            <el-button @click="weighted()">加权平均</el-button>
+          </el-form-item>
+        </el-form>
+        <el-table
+          ref="table"
+          v-loading="dataListLoading"
+          :data="dataList"
+          border
+          height="400"
+          highlight-current-row
+          @current-change="currentChange"
+          @selection-change="selectionChangeHandle"
+          @sort-change="dataListSortChangeHandle"
+          style="width: 100%;">
+          <el-table-column type="selection" header-align="center" align="center"
+                           width="50"/>
+          <el-table-column prop="code" label="流水号" header-align="center" align="center"
+                           width="120"/>
+          <el-table-column prop="ny" label="年月" header-align="center" align="center"
+                           width="100"/>
+          <el-table-column prop="syrq" label="实验日期" header-align="center" width="120"
+                           align="center"/>
+          <el-table-column prop="mzName" label="煤种" header-align="center"
+                           align="center"/>
+          <el-table-column prop="drl" label="调入量" header-align="center"
+                           align="center"/>
+          <el-table-column prop="fcfaName" label="浮沉方案" header-align="center"
+                           align="center"/>
+          <el-table-column prop="bz" label="备注" header-align="center" align="left"
+                           min-width="200"/>
+          <el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
+            <template #default="scope">
+              <el-button v-hasPermi="['data:ind-item:update']" link type="primary" @click="openForm('update', scope.row.id)">
+                修改
+              </el-button>
+              <el-button v-hasPermi="['data:ind-item:delete']" link type="danger" @click="handleDelete(scope.row.id)">
+                删除
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <Pagination
+          v-model:limit="queryParams.pageSize"
+          v-model:page="queryParams.pageNo"
+          :total="total"
+          @pagination="getList"
+        />
+      </div>
+    </el-card>
+    <el-card shadow="never" class="aui-card--fill">
+      <div class="mod-analysis-full-det">
+        <WashCurvesDet ref="washCurvesDetRef" @drawWashCurves="drawWashCurves"/>
+      </div>
+    </el-card>
+  </div>
+  <WashCurvesForm ref="washCurvesFormRef" @success="getList" />
+</template>
+
+<script lang="ts" setup>
+  import * as WashCurvesApi from '@/api/xmcpms/coal-quality/analysis/wash-curves/index'
+  import WashCurvesDet from './WashCurvesDet.vue'
+  import WashCurvesForm from './WashCurvesForm.vue'
+  import { useRoute, useRouter } from 'vue-router';
+
+  const router = useRouter() // 路由
+  const message = useMessage() // 消息弹窗
+  const { t } = useI18n() // 国际化
+  defineOptions({ name: 'Analysis' })
+  const dataListLoading = ref(true) // 列表的加载中
+  const total = ref(0) // 列表的总页数
+  const dataList = ref([]) // 字典表格数据
+  const queryFormRef = ref() // 搜索的表单
+  const exportLoading = ref(false) // 导出的加载中
+
+  const handleQuery = () => {
+    queryParams.pageNo = 1
+    getList()
+  }
+
+  /** 重置按钮操作 */
+  const resetQuery = () => {
+    queryFormRef.value.resetFields()
+    handleQuery()
+  }
+
+  const getList = async () => {
+    dataListLoading.value = true
+    try {
+      const data = await WashCurvesApi.getWashCurvesPage(queryParams)
+      dataList.value = data.list
+      total.value = data.total
+    } finally {
+      dataListLoading.value = false
+    }
+  }
+
+  const queryParams = reactive({
+    pageNo: 1,
+    pageSize: 10,
+    startTime: '',
+    endTime: '',
+    mz: undefined,
+    fcfa: undefined
+  })
+
+  /** 添加/修改操作 */
+  const washCurvesFormRef = ref()
+  const openForm = (type: string, id?: string) => {
+    washCurvesFormRef.value.open(type, id)
+  }
+
+  const washCurvesDetRef = ref()
+  const currentRow = ref()
+
+  const currentChange = (row) =>  {
+    currentRow.value = row
+    washCurvesDetRef.value.open(row)
+  }
+
+  const route = useRoute();
+
+  function drawWashCurves() {
+    if (!currentRow.value.id) {
+      message.error('请先选择可选性曲线台账!')
+      return
+    }
+    // 动态路由
+    router.push({
+      // name: route.name + '__' + currentRow.value.id,
+      path: '/xmcpms/coal-quality/analysis/WashCurvesDraw',
+      query: {
+        curvesId : currentRow.value.id,
+        fcfa : currentRow.value.fcfa,
+        code : currentRow.value.code,
+        title : route.title + '-' + currentRow.value.code
+      }
+    })
+  }
+
+  let dataListSelections = reactive([])
+  // 多选
+  function selectionChangeHandle (val) {
+    dataListSelections = val
+  }
+
+  /** 删除按钮操作 */
+  const handleDelete = async (id: string) => {
+    let ids = dataListSelections.map(item => {
+      return item.id
+    })
+    ids.push(id)
+    try {
+      // 删除的二次确认
+      await message.delConfirm()
+      // 发起删除
+      await WashCurvesApi.deleteWashCurves(ids)
+      message.success(t('common.delSuccess'))
+      // 刷新列表
+      await getList()
+    } catch {
+    }
+  }
+  /** 初始化 **/
+  onMounted(async () => {
+    await getList()
+  })
+</script>
diff --git a/src/views/xmcpms/coal-quality/detection/quick/QuickForm.vue b/src/views/xmcpms/coal-quality/detection/quick/QuickForm.vue
new file mode 100644
index 0000000..1f01500
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/detection/quick/QuickForm.vue
@@ -0,0 +1,368 @@
+<template>
+  <Dialog width="60%" v-model="dialogVisible" :title="dialogTitle">
+    <el-tabs>
+      <el-tab-pane label="生产运行煤样快速检查">
+        <el-form :model="formData" :rules="dataRule" ref="formData"
+                 v-loading="formLoading"
+                 label-width="120px">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item prop="datetime" label="采样时间">
+                <el-date-picker
+                  style="width: 100%"
+                  type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  size="mini"
+                  v-model="formData.datetime"
+                  placeholder="采样时间"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="mz" label="混煤煤种及比例">
+                <el-input
+                  style="width: 100%"
+                  size="mini"
+                  v-model="formData.mz"
+                  placeholder="例: 五虎山#9:五虎山#12 = 1:2"
+                  clearable
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-tab-pane>
+      <el-tab-pane label="生产运行煤样快速检查详情">
+        <el-form :inline="true">
+          <el-form-item>
+            <el-upload
+              class="upload-demo"
+              :action="action"
+              :on-success="handleExcel"
+              :multiple="false"
+              :show-file-list="false"
+              :on-change="changeFile"
+              :file-list="fileList"
+            >
+              <el-button size="mini" type="primary">点击上传</el-button>
+            </el-upload>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="mini" type="success" @click="downloadExcel"
+              >下载模板</el-button
+            >
+          </el-form-item>
+        </el-form>
+        <el-form
+          :model="formData"
+          :rules="dataRule"
+          ref="formDataDet"
+          @keyup.enter.native="formDataSubmitHandle()"
+          label-width="120px"
+        >
+          <el-table
+            :data="formData.itemList"
+            border
+            height="400"
+            style="width: 100%"
+          >
+            <el-table-column
+              prop="xm"
+              label="项目"
+              header-align="center"
+              align="center"
+              min-width="150"
+            >
+              <template slot-scope="scope">
+                <dict-select-tag
+                style="width: 100%"
+                size="mini"
+                v-model="scope.row.xm"
+                placeholder="项目"
+                dictCode="sckjxm"
+                clearable
+                />
+              </template>
+              </el-table-column>
+            <el-table-column
+              prop="yl"
+              label="压力"
+              header-align="center"
+              align="center"
+              min-width="100"
+            >
+              <template slot-scope="scope">
+                <el-input-number
+                  v-model="scope.row.yl"
+                  size="mini"
+                  placeholder="压力"
+                  :precision="2"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                  class="curves-det-input"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="md"
+              label="密度"
+              header-align="center"
+              align="center"
+              min-width="100"
+            >
+              <template slot-scope="scope">
+                <el-input-number
+                  v-model="scope.row.md"
+                  size="mini"
+                  placeholder="密度"
+                  :precision="2"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                  class="curves-det-input"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="hf"
+              label="灰分"
+              header-align="center"
+              align="center"
+              min-width="100"
+            >
+              <template slot-scope="scope">
+                <el-input-number
+                  v-model="scope.row.hf"
+                  size="mini"
+                  placeholder="灰分"
+                  :precision="2"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                  class="curves-det-input"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="lf"
+              label="硫分"
+              header-align="center"
+              align="center"
+              min-width="100"
+            >
+              <template slot-scope="scope">
+                <el-input-number
+                  v-model="scope.row.lf"
+                  size="mini"
+                  :placeholder="$t('washCurves.lf')"
+                  :precision="2"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                  class="curves-det-input"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column label="-1.4浮沉" header-align="center">
+              <el-table-column
+                prop="cl1"
+                :label="$t('washCurves.cl')"
+                header-align="center"
+                align="center"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="scope.row.cl1"
+                    size="mini"
+                    :placeholder="$t('washCurves.cl')"
+                    :precision="2"
+                    :controls="false"
+                    :min="0"
+                    :max="100"
+                    class="curves-det-input"
+                  />
+=                </template>
+              </el-table-column>
+              <el-table-column
+                prop="hf1"
+                :label="$t('washCurves.hf')"
+                header-align="center"
+                align="center"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="scope.row.hf1"
+                    size="mini"
+                    :placeholder="$t('washCurves.hf')"
+                    :precision="2"
+                    :controls="false"
+                    :min="0"
+                    :max="100"
+                    class="curves-det-input"
+                  />
+                </template>
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="1.4-1.8浮沉" header-align="center">
+              <el-table-column
+                prop="cl2"
+                :label="$t('washCurves.cl')"
+                header-align="center"
+                align="center"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="scope.row.cl2"
+                    size="mini"
+                    :placeholder="$t('washCurves.cl')"
+                    :precision="2"
+                    :controls="false"
+                    :min="0"
+                    :max="100"
+                    class="curves-det-input"
+                  />
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="hf2"
+                :label="$t('washCurves.hf')"
+                header-align="center"
+                align="center"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="scope.row.hf2"
+                    size="mini"
+                    :placeholder="$t('washCurves.hf')"
+                    :precision="2"
+                    :controls="false"
+                    :min="0"
+                    :max="100"
+                    class="curves-det-input"
+                  />
+                </template>
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="+1.8浮沉" header-align="center">
+              <el-table-column
+                prop="cl3"
+                :label="$t('washCurves.cl')"
+                header-align="center"
+                align="center"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="scope.row.cl3"
+                    size="mini"
+                    :placeholder="$t('washCurves.cl')"
+                    :precision="2"
+                    :controls="false"
+                    :min="0"
+                    :max="100"
+                    class="curves-det-input"
+                  />
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="hf3"
+                :label="$t('washCurves.hf')"
+                header-align="center"
+                align="center"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="scope.row.hf3"
+                    size="mini"
+                    :placeholder="$t('washCurves.hf')"
+                    :precision="2"
+                    :controls="false"
+                    :min="0"
+                    :max="100"
+                    class="curves-det-input"
+                  />
+                </template>
+              </el-table-column>
+            </el-table-column>
+            <el-table-column
+              prop=""
+              label="操作"
+              min-width="100"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <el-button
+                  @click.native.prevent="
+                    addExpressionRow(scope.$index, formData.itemList)
+                  "
+                  type="text"
+                  size="small"
+                >
+                  添加
+                </el-button>
+                <el-button
+                  @click.native.prevent="
+                    deleteExpressionRow(scope.$index, formData.itemList)
+                  "
+                  type="text"
+                  size="small"
+                >
+                  删除
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-form>
+      </el-tab-pane>
+    </el-tabs>
+    <template #footer>
+      <el-button size="mini" :disabled="formLoading" type="primary" @click="formDataSubmitHandle()">确定</el-button>
+      <el-button size="mini" @click="dialogVisible = false">取消</el-button>
+    </template>
+  </Dialog>
+</template>
+
+<script lang="ts" setup>
+  import * as AnalysisApi from '@/api/xmcpms/coal-quality/analysis/full/index'
+
+  defineOptions({name: 'FullForm'})
+
+  const {t} = useI18n() // 国际化
+  const message = useMessage() // 消息弹窗
+  const dialogVisible = ref(false) // 弹窗的是否展示
+  const dialogTitle = ref('') // 弹窗的标题
+  const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+  const formType = ref('') // 表单的类型:create - 新增;update - 修改
+  const formData = ref({
+    lsh:"",
+    datetime: "",
+    mz: "",
+  })
+
+  const open = async (type: string, id?: string) => {
+    dialogVisible.value = true
+    dialogTitle.value = t('action.' + type)
+    //修改时,设置数据
+    if (id) {
+      formLoading.value = true
+      try {
+        formData.value = await AnalysisApi.getAnalysis(id)
+      } finally {
+        formLoading.value = false
+      }
+    }
+  }
+  defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+</script>
+<style>
+.curves-det-input {
+  width: 100%;
+}
+</style>
diff --git a/src/views/xmcpms/coal-quality/detection/quick/QuickItem.vue b/src/views/xmcpms/coal-quality/detection/quick/QuickItem.vue
new file mode 100644
index 0000000..be6c8c4
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/detection/quick/QuickItem.vue
@@ -0,0 +1,82 @@
+<template>
+  <div class="mod-quality-quick-item">
+    <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
+          <el-form-item>
+        <span>生产运行煤样快速检查详情</span><span>【{{dataForm.lsh}}】</span>
+      </el-form-item>
+      <el-form-item>
+        <el-button size="mini" @click="getDataList()">刷新</el-button>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button size="mini" @click="exportExcel()">导出</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      ref="myTable"
+      v-loading="dataListLoading"
+      :data="dataList"
+      border
+      height="400"
+      highlight-current-row
+      style="width: 100%"
+    >
+      <el-table-column
+        prop="xmName"
+        label="项目"
+        header-align="center"
+        align="center"
+        min-width="120"
+      />
+      <el-table-column
+        prop="yl"
+        label="压力"
+        header-align="center"
+        align="center"
+        min-width="100"
+      />
+      <el-table-column
+        prop="md"
+        label="密度"
+        header-align="center"
+        align="center"
+        width="120"
+      />
+      <el-table-column
+        prop="hf"
+        label="灰分"
+        header-align="center"
+        align="center"
+        min-width="100"
+      />
+      <el-table-column
+        prop="lf"
+        label="硫分"
+        header-align="center"
+        align="center"
+        min-width="100"
+      />
+      <el-table-column label="-1.4浮沉" align="center">
+        <el-table-column prop="hf1" label="灰分" width="120" align="center"/>
+        <el-table-column prop="cl1" label="产率" width="120" align="center"/>
+      </el-table-column>
+      <el-table-column label="1.4-1.8浮沉" align="center">
+        <el-table-column prop="hf2" label="灰分" width="120" align="center"/>
+        <el-table-column prop="cl2" label="产率" width="120" align="center"/>
+      </el-table-column>
+      <el-table-column label="+1.8浮沉" align="center">
+        <el-table-column prop="hf3" label="灰分" width="120" align="center"/>
+        <el-table-column prop="cl3" label="产率" width="120" align="center"/>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script lang="ts" setup>
+
+  const dataForm = reactive({
+    fullId: 1,
+    fullCode: 10
+  })
+
+</script>
diff --git a/src/views/xmcpms/coal-quality/detection/quick/index.vue b/src/views/xmcpms/coal-quality/detection/quick/index.vue
new file mode 100644
index 0000000..adb453c
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/detection/quick/index.vue
@@ -0,0 +1,168 @@
+<template>
+  <ContentWrap>
+    <div class="mod-quality-quick">
+      <el-form :inline="true" :model="queryParams">
+        <el-form-item>
+          <el-date-picker
+            v-model="queryParams.ny"
+            type="month"
+            value-format="yyyy-MM"
+            placeholder="年月"/>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="getDataList()">{{ $t("query") }}</el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="handleQuery">
+            <Icon icon="ep:search" class="mr-5px" />
+            查询
+          </el-button>
+          <el-button type="primary" plain @click="openForm('create')">
+            <Icon icon="ep:plus" class="mr-5px" />
+            新增
+          </el-button>
+          <el-button type="warning" plain @click="handleImport">
+            <Icon icon="ep:upload" /> 导出
+          </el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button>
+            <a
+              href="/template/乌达煤炭加工有限公司生产煤样快速检查.xlsx"
+              download="乌达煤炭加工有限公司生产煤样快速检查.xlsx"
+              >下载模版</a
+            >
+          </el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-upload
+            class="upload-demo"
+            :limit="1"
+            :file-list="fileList"
+            :before-upload="beforeUpload"
+            :on-success="uploadModelSuccess"
+            :on-error="uploadModelError"
+            :action="uploadModelUrl"
+          >
+            <el-button type="primary">导入</el-button>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <el-table
+        ref="myTable"
+        v-loading="dataListLoading"
+        :data="dataList"
+        border
+        height="400"
+        highlight-current-row
+        @current-change="currentChange"
+        @selection-change="dataListSelectionChangeHandle"
+        @sort-change="dataListSortChangeHandle"
+        style="width: 100%">
+        <el-table-column
+          prop="lsh"
+          label="流水号"
+          header-align="center"
+          align="center"
+          min-width="120"
+        />
+        <el-table-column
+          prop="datetime"
+          label="采样时间"
+          header-align="center"
+          align="center"
+          min-width="120"
+        />
+        <el-table-column
+          prop="mz"
+          label="煤种"
+          header-align="center"
+          align="center"
+          min-width="120"
+        />
+        <el-table-column
+          :label="$t('handle')"
+          fixed="right"
+          header-align="center"
+          align="center"
+          min-width="100"
+        >
+          <template #default="scope">
+            <el-button v-hasPermi="['data:ind-item:update']" link type="primary" @click="openForm('update', scope.row.id)">
+              修改
+            </el-button>
+            <el-button v-hasPermi="['data:ind-item:delete']" link type="danger" @click="handleDelete(scope.row.id)">
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <Pagination
+        v-model:limit="queryParams.pageSize"
+        v-model:page="queryParams.pageNo"
+        :total="total"
+        @pagination="getList"
+      />
+    </div>
+  </ContentWrap>
+  <ContentWrap>
+    <QuickItem ref="quickItemRef"/>
+  </ContentWrap>
+  <QuickForm ref="quickFormRef" />
+</template>
+
+<script lang="ts" setup>
+  import * as AnalysisApi from '@/api/xmcpms/coal-quality/detection/quick/index'
+  import QuickForm from './QuickForm.vue'
+  import QuickItem from './QuickItem.vue'
+  import * as AnalysisFullApi from "@/api/xmcpms/coal-quality/analysis/full";
+
+  const message = useMessage() // 消息弹窗
+  const { t } = useI18n() // 国际化
+  defineOptions({ name: 'Analysis' })
+  const loading = ref(true) // 列表的加载中
+  const total = ref(0) // 列表的总页数
+  const dataList = ref([]) // 字典表格数据
+  const queryParams = reactive({
+    pageNo: 1,
+    pageSize: 10,
+    ny: undefined
+  })
+
+  const queryFormRef = ref() // 搜索的表单
+  const exportLoading = ref(false) // 导出的加载中
+
+  const getList = async () => {
+    loading.value = true
+    try {
+      const data = await AnalysisFullApi.getAnalysisFullPage(queryParams)
+      dataList.value = data.list
+      total.value = data.total
+    } finally {
+      loading.value = false
+    }
+  }
+
+  /** 搜索按钮操作 */
+  const handleQuery = () => {
+    queryParams.pageNo = 1
+    getList()
+  }
+
+  /** 重置按钮操作 */
+  const resetQuery = () => {
+    queryFormRef.value.resetFields()
+    handleQuery()
+  }
+
+  const quickItemRef = ref()
+  const currentChange = (currentRow) => {
+    quickItemRef.value.open(currentRow)
+  }
+
+  const quickFormRef = ref()
+  const openForm = (type: string) => {
+    quickFormRef.value.open(type)
+  }
+
+</script>
diff --git "a/src/views/xmcpms/coal-quality/statistics/image/\345\271\263\345\235\207\345\200\274 \0501\051.png" "b/src/views/xmcpms/coal-quality/statistics/image/\345\271\263\345\235\207\345\200\274 \0501\051.png"
new file mode 100644
index 0000000..21816a5
--- /dev/null
+++ "b/src/views/xmcpms/coal-quality/statistics/image/\345\271\263\345\235\207\345\200\274 \0501\051.png"
Binary files differ
diff --git "a/src/views/xmcpms/coal-quality/statistics/image/\345\271\263\345\235\207\345\200\274.png" "b/src/views/xmcpms/coal-quality/statistics/image/\345\271\263\345\235\207\345\200\274.png"
new file mode 100644
index 0000000..fece8c9
--- /dev/null
+++ "b/src/views/xmcpms/coal-quality/statistics/image/\345\271\263\345\235\207\345\200\274.png"
Binary files differ
diff --git "a/src/views/xmcpms/coal-quality/statistics/image/\346\234\200\345\244\247\345\200\274.png" "b/src/views/xmcpms/coal-quality/statistics/image/\346\234\200\345\244\247\345\200\274.png"
new file mode 100644
index 0000000..fd0f413
--- /dev/null
+++ "b/src/views/xmcpms/coal-quality/statistics/image/\346\234\200\345\244\247\345\200\274.png"
Binary files differ
diff --git "a/src/views/xmcpms/coal-quality/statistics/image/\346\234\200\345\260\217\345\200\274.png" "b/src/views/xmcpms/coal-quality/statistics/image/\346\234\200\345\260\217\345\200\274.png"
new file mode 100644
index 0000000..5be376f
--- /dev/null
+++ "b/src/views/xmcpms/coal-quality/statistics/image/\346\234\200\345\260\217\345\200\274.png"
Binary files differ
diff --git a/src/views/xmcpms/coal-quality/statistics/index.vue b/src/views/xmcpms/coal-quality/statistics/index.vue
new file mode 100644
index 0000000..069f4bb
--- /dev/null
+++ b/src/views/xmcpms/coal-quality/statistics/index.vue
@@ -0,0 +1,148 @@
+<template>
+  <ContentWrap>
+    <el-row :gutter="10" style="margin-top: 20px">
+      <el-col :span="12">
+        <el-card style="height: 22rem" :body-style="{ height: '100%' }">
+          <b>原煤灰分检测</b>
+          <bar-line :option="coalAdCheck"/>
+        </el-card>
+      </el-col>
+      <el-col :span="12">
+        <el-card style="height: 22rem" :body-style="{ height: '100%' }">
+          <b>原煤水分检测</b>
+          <bar-line :option="coalMtCheck"/>
+        </el-card>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10" style="margin-top: 20px">
+      <el-col :span="12">
+        <el-card style="height: 22rem" :body-style="{ height: '100%' }">
+          <b>原煤硫分检测</b>
+          <bar-line :option="coalStCheck"/>
+        </el-card>
+      </el-col>
+      <el-col :span="12">
+        <el-card style="height: 22rem" :body-style="{ height: '100%' }">
+          <b>原煤发热量检测</b>
+          <bar-line :option="coalCalCheck"/>
+        </el-card>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10" style="margin-top: 20px">
+      <el-card style="height: 40rem; width: 102.5rem" :body-style="{ height: '100%' }">
+        <b>可选性曲线</b>
+        <div class="wash-curves">
+          <div style="width: 100%">
+            <el-table
+              ref="table"
+              v-loading="dataListLoading"
+              :data="dataList"
+              border
+              highlight-current-row
+              style="width: 100%; margin-top: 20px"
+            >
+              <el-table-column prop="code" label="流水号" header-align="center" align="center" width="100"/>{{curves.code }}
+              <el-table-column prop="ny" label="年月" header-align="center" align="center" width="100"/>{{ curves.ny }}
+              <el-table-column prop="scxtName" label="生产系统" header-align="center" align="center"/>{{ curves.scxtName }}
+              <el-table-column prop="mzName" label="煤种" header-align="center" align="center"/>{{ curves.mzName }}
+              <el-table-column prop="syypName" label="实验样品" header-align="center" align="center"/>{{ curves.syypName }}
+              <el-table-column prop="fcfaName" label="浮沉方案" header-align="center" align="center"/>{{ curves.fcfaName }}
+            </el-table>
+            <el-table
+              ref="table"
+              v-loading="dataListLoading"
+              :data="detList"
+              border
+              style="width: 100%; margin-top: 20px"
+            >
+              <el-table-column prop="code" label="流水号" header-align="center" align="center" width="100"/>
+              <el-table-column prop="mdjName" label="密度级" header-align="center" align="center"/>
+              <el-table-column label="综合累计" header-align="center">
+                <el-table-column prop="zhljcl" label="产率(%)" header-align="center" align="center"/>
+                <el-table-column prop="zhljhf" label="灰分(%)" header-align="center" align="center"/>
+              </el-table-column>
+              <el-table-column label="浮物累计" header-align="center">
+                <el-table-column prop="fwljcl" label="产率(%)" header-align="center" align="center"/>
+                <el-table-column prop="fwljhf" label="灰分(%)" header-align="center" align="center"/>
+              </el-table-column>
+              <el-table-column label="沉物累计" header-align="center">
+                <el-table-column prop="cwljcl" label="产率(%)" header-align="center" align="center"/>
+                <el-table-column prop="cwljhf" label="灰分(%)" header-align="center" align="center"/>
+              </el-table-column>
+              <el-table-column prop="md" label="密度" header-align="center" align="center"/>
+              <el-table-column prop="hl" label="±0.1含量" header-align="center" align="center"/>
+              <el-table-column prop="lf" label="硫分(%)" header-align="center" align="center"/>
+            </el-table>
+          </div>
+          <div style="width: 40%; padding-left: 20px; margin-top: 20px">
+            <div
+              id="wash"
+              ref="wash"
+              v-loading="chartLoading"
+              style="width: 500px; height: 500px; text-align: center"
+            ></div>
+          </div>
+        </div>
+      </el-card>
+    </el-row>
+  </ContentWrap>
+</template>
+
+<script lang="ts" setup>
+  const curves = reactive({})
+
+</script>
+
+<style scoped>
+  .text {
+    margin-top: 10px;
+    font-size: 15px;
+    color: black;
+  }
+
+  .amountText {
+    margin-top: 20px;
+    font-size: 15px;
+    color: black;
+  }
+
+  .item {
+    padding: 10px 0;
+  }
+
+  .box-card-task-statistics {
+    height: 100px;
+    text-align: left;
+  }
+
+  .order-chart {
+    height: 160px;
+  }
+
+  .order-type-chart {
+    height: 300px;
+  }
+
+  .img {
+    height: 60px;
+    width: 60px;
+  }
+
+  .right-table {
+    width: 90px;
+    color: #99a9bf;
+  }
+
+  th,
+  td {
+    padding: 8px;
+    text-align: left;
+  }
+  .wash-curves {
+    /*display: flex;*/
+    flex-direction: row;
+    flex-wrap: wrap;
+    justify-content: center;
+    align-content: center;
+  }
+</style>

--
Gitblit v1.9.3