diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/assets/icons/icon-book.svg b/src/assets/icons/icon-book.svg new file mode 100644 index 0000000..18760fe --- /dev/null +++ b/src/assets/icons/icon-book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-certi.svg b/src/assets/icons/icon-certi.svg new file mode 100644 index 0000000..8615630 --- /dev/null +++ b/src/assets/icons/icon-certi.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/icon-line.svg b/src/assets/icons/icon-line.svg new file mode 100644 index 0000000..f471055 --- /dev/null +++ b/src/assets/icons/icon-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-pie.svg b/src/assets/icons/icon-pie.svg new file mode 100644 index 0000000..5ba1903 --- /dev/null +++ b/src/assets/icons/icon-pie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/styles/element-plus/index.scss b/src/assets/styles/element-plus/index.scss index 6dc95ed..da02197 100644 --- a/src/assets/styles/element-plus/index.scss +++ b/src/assets/styles/element-plus/index.scss @@ -4,9 +4,14 @@ "base": #4384ff ) ), + $fill-color:( + "lighter":#f2f6ff + ), $table:( "header-bg-color":#f2f6ff, - "header-text-color":#444c59 + "header-text-color":#444c59, + "row-hover-bg-color":#f2f6ff, + ), $menu:( "base-level-padding": 15px, diff --git a/src/components/Echart/LineChart.vue b/src/components/Echart/LineChart.vue index ce5d797..ca9df2c 100644 --- a/src/components/Echart/LineChart.vue +++ b/src/components/Echart/LineChart.vue @@ -32,7 +32,7 @@ top: 50, left: 10, right: 20, - bottom: 5, + bottom: 10, containLabel: true, // 是否包含坐标轴的刻度标签 } }, @@ -244,7 +244,7 @@ splitLine: { show: true, lineStyle: { - color: ['#7a6b74'], + color: ['#bfbfbf'], type: 'dashed', }, }, @@ -324,8 +324,11 @@ // 刷新图表 function refreshChart() { if (chart) { + console.log('渲染折线图') + const option = buildOption() chart.setOption(option as unknown as ECBasicOption, true) + chart.resize() } } diff --git a/src/components/Echart/PieChart.vue b/src/components/Echart/PieChart.vue index 4b1aa79..74d506a 100644 --- a/src/components/Echart/PieChart.vue +++ b/src/components/Echart/PieChart.vue @@ -1,6 +1,6 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/views/measure/train/planAdd.vue b/src/views/measure/train/planAdd.vue index 9d717c0..76ed102 100644 --- a/src/views/measure/train/planAdd.vue +++ b/src/views/measure/train/planAdd.vue @@ -1,5 +1,9 @@ diff --git a/src/router/modules/measure.ts b/src/router/modules/measure.ts index f8c750b..3676c67 100644 --- a/src/router/modules/measure.ts +++ b/src/router/modules/measure.ts @@ -23,6 +23,7 @@ auth: '/measure/bench', sidebar: false, breadcrumb: true, + activeMenu: '/bench', }, }, ], diff --git a/src/views/device/deviceMaintenance/maintenanceList.vue b/src/views/device/deviceMaintenance/maintenanceList.vue index 9da2abd..3c91abd 100644 --- a/src/views/device/deviceMaintenance/maintenanceList.vue +++ b/src/views/device/deviceMaintenance/maintenanceList.vue @@ -1,4 +1,4 @@ - - - - - - - - diff --git a/src/views/device/deviceMaintenance/manageCheckList.vue b/src/views/device/deviceMaintenance/manageCheckList.vue index 1df82e3..a4ace73 100644 --- a/src/views/device/deviceMaintenance/manageCheckList.vue +++ b/src/views/device/deviceMaintenance/manageCheckList.vue @@ -1,4 +1,4 @@ - - - - - - - diff --git a/src/views/device/receive/selectDeviceDialog.vue b/src/views/device/receive/selectDeviceDialog.vue index d6f28f3..68d4381 100644 --- a/src/views/device/receive/selectDeviceDialog.vue +++ b/src/views/device/receive/selectDeviceDialog.vue @@ -1,108 +1,137 @@ - - + - - - + + + + diff --git a/src/views/measure/bench/bench.vue b/src/views/measure/bench/bench.vue index 380779a..0916a59 100644 --- a/src/views/measure/bench/bench.vue +++ b/src/views/measure/bench/bench.vue @@ -9,6 +9,9 @@ import BenchCol from '@/components/benchCol/index.vue' import type { lineDataI, pieDataI } from '@/components/Echart/echart-interface' import useUserStore from '@/store/modules/user' +// 每个展示块高度 +const blockHeight = ref(300) +const blockWidth = ref(400) const { username } = useUserStore() const buttomTypes = ref([ { id: '1', text: '培训记录', url: '/train/trainLog' }, @@ -21,23 +24,23 @@ const tableData = ref([]) const meterageTableData = ref([]) const columns = ref([ - { text: '培训名称', value: 'planName', width: '110' }, + { text: '培训名称', value: 'planName' }, { text: '负责人', value: 'director', width: '120' }, - { text: '培训时间', value: 'trainTime' }, + { text: '培训时间', value: 'trainTime', width: '180' }, ]) const meterageColumns = ref([ - { text: '文件名称', value: 'fileName', width: '110' }, + { text: '文件名称', value: 'fileName' }, { text: '类别', value: 'fileTypeName', width: '110' }, - { text: '发布时间', value: 'publishTime' }, + { text: '发布时间', value: 'publishTime', width: '180' }, ]) const CertificateColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '证书名称', value: 'certificateName' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const CertificatesColumns = ref([ - { text: '证书名称', value: 'certificateName', width: '110' }, + { text: '证书名称', value: 'certificateName' }, { text: '人员名称', value: 'name', width: '110' }, - { text: '到期时间', value: 'validDate' }, + { text: '到期时间', value: 'validDate', width: '180' }, ]) const StatisticxAxis: Ref = ref([]) const StatisticData: Ref = ref([]) @@ -106,20 +109,14 @@ const yValue = res.data.map((item: planReturn) => Number(item.count)) StaffSStatisticData.value = [{ name: '人数', data: yValue }] }) - const param = { - account: username, - } - getTrainLogSStatistic(param).then((res) => { - TrainLogSList.value = [ - { name: `合格 ${res.data.qualified}--${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, - { name: `不合格 ${res.data.notQualified}-- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, - ] - TrainLogTitle.value = res.data.trainCount - }) + // 返回值 interface CertificatReturn { lastValidDate: number } + const param = { + account: username, + } getCertificateStatistic(param).then((res) => { CertificateList.value = res.data CertificateObject.value = res.data.sort((nex: CertificatReturn, max: CertificatReturn) => { @@ -127,6 +124,26 @@ })[0] }) } + +function fetchMyTrainLog() { + const param = { + account: username, + } + getTrainLogSStatistic(param).then((res) => { + TrainLogSList.value = [ + { name: `合格 ${res.data.qualified}-${(res.data.qualifiedCount / res.data.trainCount) * 100}%`, value: res.data.qualified }, + { name: `不合格 ${res.data.notQualified}- ${((res.data.notQualified / res.data.trainCount) * 100)}%`, value: res.data.notQualified }, + ] + TrainLogTitle.value = res.data.trainCount + }).catch((_) => { + // 处理异常 + TrainLogSList.value = [ + { name: '合格 0 - 50%', value: 0 }, + { name: '不合格 0 - 50%', value: 0 }, + ] + TrainLogTitle.value = 0 + }) +} const getmeterageList = () => { const params = { fileNo: '', // 编号 @@ -143,218 +160,251 @@ meterageTableData.value = res.data.rows }) } -getmeterageList() -getStatisticList() + +function calcBlockSize() { + // 计算工作台区域高度 - 顶部-面包屑-边距 + const bodyHeight = document.body.clientHeight - 60 - 50 - 20 + blockHeight.value = bodyHeight > 610 ? (bodyHeight - 10) / 2 : 300 + blockWidth.value = (document.body.clientWidth - 180 - 20 - 20) / 3 + console.log(blockHeight.value, blockWidth.value - 20) +} +window.addEventListener('resize', () => { + calcBlockSize() +}) + +onMounted(() => { + calcBlockSize() + fetchMyTrainLog() // 获取我的培训考核 + getmeterageList() + getStatisticList() +}) + + diff --git a/src/views/measure/price/list.vue b/src/views/measure/price/list.vue index 9d6d975..b6d4f2f 100644 --- a/src/views/measure/price/list.vue +++ b/src/views/measure/price/list.vue @@ -273,7 +273,7 @@ upload() } const add = () => { - buttonType.value = '' + buttonType.value = '新建' show.value = false } const exportAll = () => { diff --git a/src/views/measure/price/priceAdd.vue b/src/views/measure/price/priceAdd.vue index 2f623df..33627d7 100644 --- a/src/views/measure/price/priceAdd.vue +++ b/src/views/measure/price/priceAdd.vue @@ -1,7 +1,8 @@ diff --git a/src/views/measure/source/components/listPage.vue b/src/views/measure/source/components/listPage.vue index 70a3518..2a0169b 100644 --- a/src/views/measure/source/components/listPage.vue +++ b/src/views/measure/source/components/listPage.vue @@ -120,7 +120,7 @@ } // 点击编辑/详情 const handleEdit = (index: string, row: rowReturn, value: string) => { - buttonArray.value = ['同意', '驳回', '拒绝'] + buttonArray.value = value === '编辑' ? ['提交'] : ['同意', '驳回', '拒绝'] buttonType.value = value infoId.value = row.id show.value = false diff --git a/src/views/measure/source/components/listPageAdd.vue b/src/views/measure/source/components/listPageAdd.vue index d20c2cd..edd9de9 100644 --- a/src/views/measure/source/components/listPageAdd.vue +++ b/src/views/measure/source/components/listPageAdd.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue' import type { Ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' -import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' +import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus' import type { IformInline } from './list_interface' import { exportFile } from '@/utils/exportUtils' import { UploadFile } from '@/api/measure/file' @@ -22,7 +22,7 @@ }, }) const emit = defineEmits(['close']) -const formInline: Ref = ref({ +const formInline = ref({ businessContent: null, supplierName: null, supplierNo: null, @@ -54,6 +54,7 @@ website: null, traceSupplierPersonList: [], }) +const ruleFormRef = ref() const columns = [ { text: '人员编号', value: 'personNo' }, { text: '姓名', value: 'name' }, @@ -61,6 +62,12 @@ { text: '职务', value: 'job' }, { text: '联系方式', value: 'phone' }, ] +const rules = ref({ + supplierNo: [{ required: true, message: '溯源供方编号不能为空', trigger: 'blur' }], + supplierName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }], + businessContent: [{ required: true, message: '业务内容不能为空', trigger: 'blur' }], + taxNumber: [{ required: true, message: '税号不能为空', trigger: 'blur' }], +}) // 表单验证规则 const provinceList = ref([]) const fileList = ref([]) const cityList = ref([]) @@ -83,7 +90,7 @@ } const getInfo = () => { getSoucreListDetail({ id: props.infoId }).then((res) => { - formInline.value = res.data + // formInline.value = res.data }) } // 表格选中 @@ -157,27 +164,30 @@ }) } // 点击提交/导出按钮 -const getAddList = (type: string) => { - if (formInline.value.supplierNo === null) { - return ElMessage.error('请填写溯源供方编号') - } - else if (formInline.value.supplierName === null) { - return ElMessage.error('请填写公司名称') - } - else if (formInline.value.businessContent === null) { - return ElMessage.error('请填写业务内容') - } - else if (formInline.value.taxNumber === null) { - return ElMessage.error('请填写税号') - } - if (type === '提交' && props.buttonType !== '编辑') { - getSoucreListAdd(formInline.value).then((res) => { - if (res.code === 200) { - close() +const getAddList = async (formEl: FormInstance | undefined, type: string) => { + if (type === '提交' && props.buttonType === '编辑') { + if (!formEl) { return } + await formEl.validate((valid, fields) => { + if (valid) { + ElMessageBox.confirm( + `确认${type}吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }, + ).then(() => { + getSoucreListAdd(formInline.value).then((res) => { + if (res.code === 200) { + close() + } + }) + }) } }) } - else if (type === '提交' && props.buttonType === '编辑') { + else if (type === '提交' && props.buttonType !== '编辑') { formInline.value.id = props.infoId getSoucreLisUpdate(formInline.value).then((res) => { if (res.code === 200) { @@ -252,54 +262,74 @@ diff --git a/src/views/measure/train/planAdd.vue b/src/views/measure/train/planAdd.vue index 9d717c0..76ed102 100644 --- a/src/views/measure/train/planAdd.vue +++ b/src/views/measure/train/planAdd.vue @@ -1,5 +1,9 @@ - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
- - - -
-
- - - -
-
- - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- + + + + - - - - - - - - - - - - - 完成 - - + +