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