|
@@ -157,6 +157,13 @@
|
|
|
@click="handleAddSai"
|
|
|
v-hasPermi="['production:sai:add']"
|
|
|
>统计至SAI检查台账</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ @click="handleAnalysis"
|
|
|
+ v-hasPermi="['production:sai:list']"
|
|
|
+ >趋势分析</el-button>
|
|
|
</el-col>
|
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
</el-row>
|
|
@@ -734,11 +741,62 @@
|
|
|
</el-carousel>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+ <!-- 趋势分析对话框 -->
|
|
|
+ <el-dialog :close-on-click-modal="false" @close="disposeChart" title="趋势分析" :visible.sync="analysisOpen" width="80%" append-to-body>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <h3 style="text-align: center; margin-bottom: 15px;">四个班组当年提交的SAI数量</h3>
|
|
|
+ <div id="chart1" style="width:100%; height: 400px; display: inline-block;"></div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <h3 style="text-align: center; margin-bottom: 15px;">个人提交数量数据分析图</h3>
|
|
|
+ <div id="chart2" style="width:100%; height: 400px; display: inline-block;"></div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12" style="padding-left: 20px; padding-right: 20px;">
|
|
|
+ <h3 style="text-align: center; margin-bottom: 15px;">各班组当年至今的提交数量</h3>
|
|
|
+ <el-table
|
|
|
+ :data="tableList1"
|
|
|
+ style="width: 100%"
|
|
|
+ border>
|
|
|
+ <el-table-column
|
|
|
+ prop="name"
|
|
|
+ label="班组">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="value"
|
|
|
+ label="提交数量">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12" style="padding-left: 20px; padding-right: 20px;">
|
|
|
+ <h3 style="text-align: center; margin-bottom: 15px;">个人提交排名前六的人名和提交数</h3>
|
|
|
+ <el-table
|
|
|
+ :data="tableList2"
|
|
|
+ style="width: 100%"
|
|
|
+ border>
|
|
|
+ <el-table-column
|
|
|
+ prop="index"
|
|
|
+ label="排名">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="name"
|
|
|
+ label="人名">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="value"
|
|
|
+ label="提交数">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { saveAndSubmitApply, submitApply, listApply, getApply, delApply, addApply, updateApply, exportApply, importTemplate} from "@/api/production/apply";
|
|
|
+import { saveAndSubmitApply, submitApply, listApply, getApply, delApply, addApply, updateApply, exportApply, importTemplate, getTeamAnalysis, getPersonalAnalysis } from "@/api/production/apply";
|
|
|
import { addSai } from "@/api/production/sai";
|
|
|
import { treeselect, listDept } from "@/api/system/dept";
|
|
|
import { getToken } from "@/utils/auth";
|
|
@@ -801,6 +859,15 @@ export default {
|
|
|
}
|
|
|
};
|
|
|
return {
|
|
|
+ // 趋势图y轴数值
|
|
|
+ valueList1: [],
|
|
|
+ valueList2: [],
|
|
|
+ // 趋势图x轴日期
|
|
|
+ dateList1: [],
|
|
|
+ dateList2: [],
|
|
|
+ // 趋势图
|
|
|
+ chart1: null,
|
|
|
+ chart2: null,
|
|
|
submitDisabled: false,
|
|
|
applyDateRange: [],
|
|
|
estimateFinishDateRange: [],
|
|
@@ -810,8 +877,10 @@ export default {
|
|
|
fileList: [],
|
|
|
// 统计至SAI检查台账的数据
|
|
|
saiList: [],
|
|
|
- // 是显示用统计至SAI检查台账对话框
|
|
|
+ // 是否显示用统计至SAI检查台账对话框
|
|
|
saiOpen: false,
|
|
|
+ // 是否显示趋势分析对话框
|
|
|
+ analysisOpen: false,
|
|
|
// 是否禁用开项编号输入框
|
|
|
recordNoDisabled: true,
|
|
|
// 当前登录员工
|
|
@@ -1015,6 +1084,8 @@ export default {
|
|
|
applicantTeamDisabled: false,
|
|
|
workAreaList: [],
|
|
|
applyStatusString: [],
|
|
|
+ tableList1: [],
|
|
|
+ tableList2: [],
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
@@ -1056,6 +1127,106 @@ export default {
|
|
|
this.getWorkAreaList();
|
|
|
},
|
|
|
methods: {
|
|
|
+ /** 绘制趋势图 */
|
|
|
+ draw() {
|
|
|
+
|
|
|
+ },
|
|
|
+ /** 销毁趋势图 */
|
|
|
+ disposeChart() {
|
|
|
+ this.echarts.dispose(this.chart1);
|
|
|
+ this.echarts.dispose(this.chart2);
|
|
|
+ },
|
|
|
+ handleAnalysis() {
|
|
|
+ this.analysisOpen = true;
|
|
|
+ let teamPieList = [];
|
|
|
+ let personalPieList = [];
|
|
|
+ this.tableList1 = [];
|
|
|
+ this.tableList2 = [];
|
|
|
+ getTeamAnalysis().then(response => {
|
|
|
+ let data = response.data;
|
|
|
+ for (let i = 0; i < data.length; i++) {
|
|
|
+ let applicantTeam = data[i].applicantTeam;
|
|
|
+ let teamCount = data[i].teamCount;
|
|
|
+ teamPieList.push({ value: teamCount, name: applicantTeam + '班'});
|
|
|
+ this.tableList1.push({ value: teamCount, name: applicantTeam + '班'});
|
|
|
+ }
|
|
|
+ this.chart1 = this.echarts.init(document.getElementById("chart1"));
|
|
|
+ let option1 = {
|
|
|
+ // title: {
|
|
|
+ // text: '四个班组当年提交的SAI数量',
|
|
|
+ // left: 'center',
|
|
|
+ // top: '10%'
|
|
|
+ // },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'item'
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ type: 'pie',
|
|
|
+ radius: '50%',
|
|
|
+ data: teamPieList,
|
|
|
+ emphasis: {
|
|
|
+ itemStyle: {
|
|
|
+ shadowBlur: 10,
|
|
|
+ shadowOffsetX: 0,
|
|
|
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ label: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ this.chart1.setOption(option1);
|
|
|
+ });
|
|
|
+ getPersonalAnalysis().then(response => {
|
|
|
+ let data = response.data;
|
|
|
+ for (let i = 0; i < data.length; i++) {
|
|
|
+ let applicantName = data[i].applicantName;
|
|
|
+ let applicantCount = data[i].applicantCount;
|
|
|
+ personalPieList.push({ value: applicantCount, name: applicantName });
|
|
|
+ if (i < 6) {
|
|
|
+ this.tableList2.push({ index: i + 1, value: applicantCount, name: applicantName });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.chart2 = this.echarts.init(document.getElementById("chart2"));
|
|
|
+ let option2 = {
|
|
|
+ // title: {
|
|
|
+ // text: '个人提交数量数据分析图',
|
|
|
+ // left: 'center',
|
|
|
+ // top: '10%'
|
|
|
+ // },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'item'
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ type: 'pie',
|
|
|
+ radius: '50%',
|
|
|
+ data: personalPieList,
|
|
|
+ emphasis: {
|
|
|
+ itemStyle: {
|
|
|
+ shadowBlur: 10,
|
|
|
+ shadowOffsetX: 0,
|
|
|
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ label: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ this.chart2.setOption(option2);
|
|
|
+ });
|
|
|
+ },
|
|
|
getWorkAreaList() {
|
|
|
selectDevice().then(response => {
|
|
|
let data = response.data;
|
|
@@ -1487,6 +1658,7 @@ export default {
|
|
|
this.saiOpen = false;
|
|
|
this.open = false;
|
|
|
this.open2 = false;
|
|
|
+ this.analysisOpen = false;
|
|
|
this.reset();
|
|
|
},
|
|
|
// 表单重置
|