| | |
| | | </BasicTable> |
| | | <!-- 表ååºå --> |
| | | <DryOrderModal @register="registerModal" @success="handleSuccess" /> |
| | | <TrendModal @register="registerTrendModal" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" name="dry-dryOrder" setup> |
| | | import { ref } from 'vue' |
| | | import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryOrder.api' |
| | | import DryOrderModal from './components/DryOrderModal.vue' |
| | | import DryOrderModal from './components/dryOrder/DryOrderModal.vue' |
| | | import TrendModal from './components/dryOrder/TrendModal.vue' |
| | | import { columns, searchFormSchema } from './dataDefine/DryOrder.data' |
| | | import { useModal } from '/@/components/Modal' |
| | | import { BasicTable, TableAction } from '/@/components/Table' |
| | |
| | | const checkedKeys = ref<Array<string | number>>([]) |
| | | //注åmodel |
| | | const [registerModal, { openModal }] = useModal() |
| | | const [registerTrendModal, { openModal:openTrendModal }] = useModal() |
| | | //注åtableæ°æ® |
| | | const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ |
| | | tableProps: { |
| | |
| | | */ |
| | | function getTableAction(record) { |
| | | return [ |
| | | { |
| | | label: 'æä½è®°å½', |
| | | onClick: openReport.bind(null, record), |
| | | }, |
| | | |
| | | { |
| | | label: 'è¿ç¨è¶å¿', |
| | | onClick: openProcessTendency.bind(null, record), |
| | |
| | | */ |
| | | function getDropDownAction(record) { |
| | | return [ |
| | | { |
| | | label: 'æä½è®°å½', |
| | | onClick: openReport.bind(null, record), |
| | | }, |
| | | { |
| | | label: 'ç¼è¾', |
| | | onClick: handleEdit.bind(null, record), |
| | |
| | | /** æå¼è¿ç¨è¶å¿èµ°å¿å¾çªå£ */ |
| | | function openProcessTendency(record: Recordable) { |
| | | console.log(`output->record`, record) |
| | | openTrendModal(true, { |
| | | record, |
| | | isUpdate: true, |
| | | showFooter: false, |
| | | }) |
| | | } |
| | | </script> |
| | | |
| | |
| | | <script lang="ts" name="dry-dryOrderTrend" setup> |
| | | import { ref } from 'vue' |
| | | import { batchDelete, deleteOne, getExportUrl, getImportUrl, list } from './api/DryOrderTrend.api' |
| | | import DryOrderTrendModal from './components/DryOrderTrendModal.vue' |
| | | import DryOrderTrendModal from './components/dryOrder/DryOrderTrendModal.vue' |
| | | import { columns, searchFormSchema } from './dataDefine/DryOrderTrend.data' |
| | | import { useModal } from '/@/components/Modal' |
| | | import { BasicTable, TableAction } from '/@/components/Table' |
| | |
| | | enum Api { |
| | | list = '/dry/dryOrder/list', |
| | | queryByEqp = 'dry/dry/queryByEqp', |
| | | queryOrderTrendById = '/dry/dryOrder/queryOrderTrendById', |
| | | save = '/dry/dryOrder/add', |
| | | edit = '/dry/dryOrder/edit', |
| | | deleteOne = '/dry/dryOrder/delete', |
| | |
| | | const url = isUpdate ? Api.edit : Api.save |
| | | return defHttp.post({ url: url, params }) |
| | | } |
| | | |
| | | |
| | | export const queryOrderTrendById = (params) => defHttp.get({url: Api.queryOrderTrendById, params}) |
| | |
| | | /**å¹²ç¥è¿åº¦ãèµ°å¿ä¸é¶æ®µæçåé¶æ®µæ¶è */ |
| | | if (res && res.detailList) { |
| | | var progressSeries = [] |
| | | var ganZaoXiaoLv = [] |
| | | |
| | | var zhengQiXiaoHao = [] |
| | | var dianNengXiaoHao = [] |
| | | var totalTime = 1 |
| | | var ganZaoXiaoLv = [] |
| | | var totalTime = 0 |
| | | var beforeWeight = 0 |
| | | res.moisList = [] |
| | | beforeWeight = res.originWeight |
| | |
| | | //console.log(`output->bef`, beforeWeight) |
| | | //console.log(`output->cur`, item.weight) |
| | | res.moisList.push([item.totalTime, item.moisture]) |
| | | //console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime) |
| | | // console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime) |
| | | var curDryTime = item.totalTime - totalTime |
| | | |
| | | if (curDryTime > 0) { |
| | |
| | | } |
| | | |
| | | res.totalTime = totalTime + res.remain |
| | | console.log("efficAvg::",res.efficAvg); |
| | | /**å¹²ç¥æçãæ¶è */ |
| | | if (efficiencyLineChart) { |
| | | //console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv) |
| | |
| | | data: [ |
| | | { |
| | | name: 'é¢å®', |
| | | yAxis: res.efficAvg|eqp.value.dryEfficiency, |
| | | yAxis: res.efficAvg|0, |
| | | }, |
| | | ], |
| | | label: { |
ÎļþÃû´Ó src/views/dry/components/DryOrderForm.vue ÐÞ¸Ä |
| | |
| | | |
| | | <script lang="ts"> |
| | | import { computed, defineComponent } from 'vue' |
| | | import { saveOrUpdate } from '../api/DryOrder.api' |
| | | import { getBpmFormSchema } from '../dataDefine/DryOrder.data' |
| | | import { saveOrUpdate } from '../../api/DryOrder.api' |
| | | import { getBpmFormSchema } from '../../dataDefine/DryOrder.data' |
| | | import { BasicForm, useForm } from '/@/components/Form/index' |
| | | import { defHttp } from '/@/utils/http/axios' |
| | | import { propTypes } from '/@/utils/propTypes' |
ÎļþÃû´Ó src/views/dry/components/DryOrderModal.vue ÐÞ¸Ä |
| | |
| | | |
| | | <script lang="ts" setup> |
| | | import { computed, ref, unref } from 'vue' |
| | | import { saveOrUpdate } from '../api/DryOrder.api' |
| | | import { formSchema } from '../dataDefine/DryOrder.data' |
| | | import { saveOrUpdate } from '../../api/DryOrder.api' |
| | | import { formSchema } from '../../dataDefine/DryOrder.data' |
| | | import { BasicForm, useForm } from '/@/components/Form/index' |
| | | import { BasicModal, useModalInner } from '/@/components/Modal' |
| | | // Emits声æ |
ÎļþÃû´Ó src/views/dry/components/DryOrderTrendForm.vue ÐÞ¸Ä |
| | |
| | | |
| | | <script lang="ts"> |
| | | import { computed, defineComponent } from 'vue'; |
| | | import { saveOrUpdate } from '../api/DryOrderTrend.api'; |
| | | import { getBpmFormSchema } from '../dataDefine/DryOrderTrend.data'; |
| | | import { saveOrUpdate } from '../../api/DryOrderTrend.api'; |
| | | import { getBpmFormSchema } from '../../dataDefine/DryOrderTrend.data'; |
| | | import { BasicForm, useForm } from '/@/components/Form/index'; |
| | | import { defHttp } from '/@/utils/http/axios'; |
| | | import { propTypes } from '/@/utils/propTypes'; |
ÎļþÃû´Ó src/views/dry/components/DryOrderTrendModal.vue ÐÞ¸Ä |
| | |
| | | |
| | | <script lang="ts" setup> |
| | | import { computed, ref, unref } from 'vue'; |
| | | import { saveOrUpdate } from '../api/DryOrderTrend.api'; |
| | | import { formSchema } from '../dataDefine/DryOrderTrend.data'; |
| | | import { saveOrUpdate } from '../../api/DryOrderTrend.api'; |
| | | import { formSchema } from '../../dataDefine/DryOrderTrend.data'; |
| | | import { BasicForm, useForm } from '/@/components/Form/index'; |
| | | import { BasicModal, useModalInner } from '/@/components/Modal'; |
| | | // Emits声æ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <BasicModal v-bind="$attrs" destroyOnClose @register="register" title="å·¥åè¿ç¨è¶å¿" width="1200px"> |
| | | <template v-if="loading"> |
| | | <div class="empty-tips"> å è½½ä¸ï¼è¯·ç¨çâ¦â¦ </div> |
| | | </template> |
| | | <template v-if="!loading"> |
| | | <div id="chart" style="width: 1200px; height: 500px"></div> |
| | | </template> |
| | | </BasicModal> |
| | | </template> |
| | | <script lang="ts"> |
| | | import { defineComponent, ref, watch } from 'vue'; |
| | | import * as echarts from 'echarts' |
| | | import { BasicModal, useModalInner } from '/@/components/Modal'; |
| | | import { defHttp } from '/@/utils/http/axios' |
| | | import { getTenantId, getToken } from '/@/utils/auth' |
| | | |
| | | export default defineComponent({ |
| | | components: { BasicModal }, |
| | | setup() { |
| | | var chart: echarts.ECharts |
| | | const loading = ref(true); |
| | | const lines = ref(10); |
| | | const orderData = ref(); |
| | | const [register, { setModalProps, redoModalHeight }] = useModalInner((data)=>{ |
| | | data && onDataReceive(data); |
| | | }); |
| | | |
| | | watch( |
| | | () => lines.value, |
| | | () => { |
| | | redoModalHeight(); |
| | | } |
| | | ); |
| | | |
| | | function onDataReceive(data) { |
| | | // console.log('Data Received', data); |
| | | orderData.value = data.record; |
| | | handleShow(true); |
| | | } |
| | | function initCharts() { |
| | | let domId = 'chart' |
| | | let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement |
| | | chart = echarts.init(chartDom) |
| | | const option = { |
| | | color: ['green', 'red', '#1890ff'], |
| | | title: { |
| | | text: '嫿°´ç/温度/æçè¶å¿', |
| | | textStyle: { |
| | | color: '#000', |
| | | fontSize: 15, |
| | | }, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | }, |
| | | grid: { |
| | | left: 70, |
| | | right: 90, |
| | | top: 60, |
| | | bottom: 30, |
| | | }, |
| | | legend: { |
| | | right: 60, |
| | | textStyle: { |
| | | color: '#000', |
| | | }, |
| | | }, |
| | | // toolbox: { |
| | | // show: true, |
| | | // feature: { |
| | | // dataZoom: { |
| | | // yAxisIndex: 'none', |
| | | // }, |
| | | // dataView: { readOnly: false }, |
| | | // magicType: { type: ['line', 'bar'] }, |
| | | // restore: {}, |
| | | // saveAsImage: {}, |
| | | // }, |
| | | // }, |
| | | xAxis: { |
| | | type: 'value', |
| | | axisLabel: { |
| | | color: '#000', |
| | | }, |
| | | //boundaryGap: false, |
| | | // data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], |
| | | min: 0, |
| | | max: function (value) { |
| | | if (value.max < 50) { |
| | | return 50 |
| | | } else { |
| | | return value.max |
| | | } |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: ['#2b2b2b'], |
| | | }, |
| | | }, |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | boundaryGap: ['10%', '10%'], |
| | | axisLabel: { |
| | | color: '#000', |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: ['#2b2b2b'], |
| | | }, |
| | | }, |
| | | // min: 0, |
| | | // max: function (value) { |
| | | // if (value.max < 100) { |
| | | // return 100 |
| | | // } else { |
| | | // return value.max |
| | | // } |
| | | // }, |
| | | }, |
| | | // yAxis: { |
| | | // type: 'value', |
| | | // axisLabel: { |
| | | // formatter: '{value} °C', |
| | | // }, |
| | | // }, |
| | | series: [ |
| | | { |
| | | name: '嫿°´ç', |
| | | type: 'line', |
| | | smooth: true, |
| | | // symbol: 'none', |
| | | data: [ |
| | | |
| | | ], |
| | | lineStyle: { |
| | | width: 1, |
| | | }, |
| | | markLine: { |
| | | data: [{ type: 'average', name: 'Avg' }], |
| | | }, |
| | | areaStyle: { |
| | | opacity: 0.2, |
| | | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ |
| | | { |
| | | offset: 0, |
| | | color: 'rgb(128, 255, 165)', |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: 'rgb(1, 191, 236)', |
| | | }, |
| | | ]), |
| | | }, |
| | | }, |
| | | { |
| | | name: '温度', |
| | | type: 'line', |
| | | smooth: true, |
| | | symbol: 'none', |
| | | data: [ |
| | | |
| | | ], |
| | | lineStyle: { |
| | | width: 1, |
| | | }, |
| | | areaStyle: { |
| | | opacity: 0.2, |
| | | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ |
| | | { |
| | | offset: 0, |
| | | color: 'rgb(255, 0, 135)', |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: 'rgb(135, 0, 157)', |
| | | }, |
| | | ]), |
| | | }, |
| | | // markLine: { |
| | | // data: [ |
| | | // { type: 'average', name: 'Avg' }, |
| | | // [ |
| | | // { |
| | | // symbol: 'none', |
| | | // x: '90%', |
| | | // yAxis: 'max', |
| | | // }, |
| | | // { |
| | | // symbol: 'circle', |
| | | // label: { |
| | | // position: 'start', |
| | | // formatter: 'Max', |
| | | // }, |
| | | // type: 'max', |
| | | // name: 'æé«ç¹', |
| | | // }, |
| | | // ], |
| | | // ], |
| | | // }, |
| | | }, |
| | | { |
| | | name: 'å¹²ç¥æç', |
| | | data: [], |
| | | type: 'line', |
| | | markPoint: { |
| | | data: [ |
| | | { type: 'max', name: 'Max' }, |
| | | { type: 'min', name: 'Min' }, |
| | | ], |
| | | }, |
| | | markLine: { |
| | | symbol: 'none', |
| | | data: [ |
| | | { |
| | | name: 'é¢å®', |
| | | yAxis: 100, |
| | | }, |
| | | ], |
| | | label: { |
| | | formatter: '{b}\n{c}', |
| | | color: '#fff', |
| | | }, |
| | | }, |
| | | }, |
| | | ], |
| | | } |
| | | option && chart.setOption(option) |
| | | } |
| | | function handleShow(visible: boolean) { |
| | | console.log("handleShow"); |
| | | if (visible) { |
| | | loading.value = true; |
| | | setModalProps({ loading: true, confirmLoading: true }); |
| | | // let tenantId = 1000 |
| | | // let eqpCode ='GM002' |
| | | // let queryRealTimeUrl = '/dry/real/getRealTimeData' |
| | | const queryOrderTrendById = '/dry/dryOrder/queryOrderTrendById' |
| | | // defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => { |
| | | defHttp.get({ url: queryOrderTrendById, params: { id: orderData.value.id } }).then((res) => { |
| | | |
| | | //console.log("rrreeesss:::",res) |
| | | loading.value = false; |
| | | setModalProps({ loading: false, confirmLoading: false }); |
| | | //console.log("dfdfdf",orderData.value.temps) |
| | | var tempjson = eval('('+orderData.value.temps+')') |
| | | Array.from(Object.entries(tempjson)) |
| | | |
| | | var arr = Object.keys(tempjson) |
| | | var temArr = [] |
| | | arr.forEach((item) => { |
| | | temArr.push([item * 1, tempjson[item]]) |
| | | }) |
| | | // console.log(temArr); |
| | | var ganZaoXiaoLv = [] |
| | | var totalTime = 0 |
| | | var beforeWeight = 0 |
| | | var moisList = [] |
| | | beforeWeight = res.originWeight |
| | | //console.log(`output->res`, res) |
| | | res.detailList.forEach((item) => { |
| | | //console.log(`output->bef`, beforeWeight) |
| | | //console.log(`output->cur`, item.weight) |
| | | moisList.push([item.totalTime, item.moisture]) |
| | | // console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime) |
| | | var curDryTime = item.totalTime - totalTime |
| | | |
| | | if (curDryTime > 0) { |
| | | ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)]) |
| | | |
| | | totalTime = item.totalTime |
| | | } |
| | | beforeWeight = item.weight |
| | | }) |
| | | |
| | | setTimeout(()=>{ |
| | | initCharts(); |
| | | chart.setOption({ |
| | | series: [ |
| | | { |
| | | data: moisList, |
| | | markLine: { |
| | | symbol: 'none', |
| | | data: [ |
| | | { |
| | | name: 'ç®æ ', |
| | | yAxis: orderData.value.target, |
| | | }, |
| | | ], |
| | | label: { |
| | | formatter: '{b}\n{c}%', |
| | | color: '#000', |
| | | }, |
| | | }, |
| | | }, |
| | | { |
| | | data: temArr, |
| | | }, |
| | | { |
| | | data: ganZaoXiaoLv, |
| | | markLine: { |
| | | symbol: 'none', |
| | | data: [ |
| | | { |
| | | name: 'é¢å®', |
| | | yAxis: res.efficAvg|100, |
| | | }, |
| | | ], |
| | | label: { |
| | | formatter: '{b}\n{c}', |
| | | color: '#fff', |
| | | }, |
| | | }, |
| | | }, |
| | | ], |
| | | }) |
| | | },100) |
| | | |
| | | |
| | | |
| | | }) |
| | | |
| | | } |
| | | } |
| | | |
| | | function setLines() { |
| | | lines.value = Math.round(Math.random() * 20 + 10); |
| | | } |
| | | return { register, loading, handleShow, lines, setLines }; |
| | | }, |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | .empty-tips { |
| | | height: 500px; |
| | | line-height: 500px; |
| | | text-align: center; |
| | | } |
| | | </style> |