选煤厂生产管理平台前端代码
Jay
2024-12-10 58a8ee8eebcf13656445486333d2d3f3e02c938f
煤质管理前端代码
已修改1个文件
已添加19个文件
2223 ■■■■■ 文件已修改
src/api/xmcpms/coal-quality/analysis/full/full-det.ts 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/xmcpms/coal-quality/analysis/full/index.ts 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/xmcpms/coal-quality/analysis/wash-curves/index.ts 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-chart.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/xmcpms/coal-quality/analysis/wash-curves/wash-curves-det.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/xmcpms/coal-quality/analysis/wash/target.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/xmcpms/coal-quality/detection/quick/index.ts 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/dict.ts 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDet.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesDraw.vue 582 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/analysis/wash-curves/WashCurvesForm.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/analysis/wash-curves/index.vue 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/detection/quick/QuickForm.vue 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/detection/quick/QuickItem.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/detection/quick/index.vue 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/statistics/image/平均值 (1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/statistics/image/平均值.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/statistics/image/最大值.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/statistics/image/最小值.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xmcpms/coal-quality/statistics/index.vue 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 })
}
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 })
}
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})
}
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})
}
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 })
}
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 })
}
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 })
}
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'
}
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>
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>
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>
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>
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>
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>
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>
src/views/xmcpms/coal-quality/statistics/image/平均值 (1).png
src/views/xmcpms/coal-quality/statistics/image/平均值.png
src/views/xmcpms/coal-quality/statistics/image/最大值.png
src/views/xmcpms/coal-quality/statistics/image/最小值.png
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>