xiaoshushu vor 2 Jahren
Ursprung
Commit
ffad37649c

+ 1 - 1
com.lsw.iml

@@ -22,7 +22,7 @@
     </content>
     <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: com.jfinal:jfinal:4.9.15" level="project" />
+    <orderEntry type="library" name="Maven: com.jfinal:jfinal:5.0.0" level="project" />
     <orderEntry type="library" name="Maven: com.jfinal:jetty-server:2019.3" level="project" />
     <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-webapp:9.4.12.v20180830" level="project" />
     <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-xml:9.4.12.v20180830" level="project" />

+ 1 - 1
pom.xml

@@ -12,7 +12,7 @@
         <dependency>
             <groupId>com.jfinal</groupId>
             <artifactId>jfinal</artifactId>
-            <version>4.9.15</version>
+            <version>5.0.0</version>
         </dependency>
         <!-- jetty -->
         <dependency>

+ 1 - 1
src/main/java/com/lsw/Application.java

@@ -67,7 +67,7 @@ public class Application extends JFinalConfig {
 
     @Override
     public void configEngine(Engine me) {
-
+        me.addSharedFunction("/WEB-INF/view/common/header.html"); //头部
     }
 
 }

+ 39 - 1
src/main/java/com/lsw/controller/ReportController.java

@@ -38,6 +38,10 @@ public class ReportController extends BaseController {
             }
 
         }
+        if(op.equals("data")){
+            List<Record>prouname=Db.template("prouname").find();
+            set("prouname", JsonKit.toJson(prouname));
+        }
         set("department", JsonKit.toJson(list));
         render(op + ".html");
     }
@@ -61,7 +65,6 @@ public class ReportController extends BaseController {
     //试验类型统计
     public void type() {
         long start = System.currentTimeMillis();
-        System.out.println(getParam());
         List<Record> list = Db.template("type", getParam()).find();
         long end = System.currentTimeMillis();
         renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "s"));
@@ -73,4 +76,39 @@ public class ReportController extends BaseController {
         long end = System.currentTimeMillis();
         renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "秒"));
     }
+    //样机试验统计
+    public void model() {
+        long start = System.currentTimeMillis();
+        List<Record> list = Db.template("model", getParam()).find();
+        long end = System.currentTimeMillis();
+        renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "s"));
+    }
+    //样机试验统计列表
+    public void model_list() {
+        long start = System.currentTimeMillis();
+        List<Record> list = Db.template("model_list", getParam()).find();
+        long end = System.currentTimeMillis();
+        renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "秒"));
+    }
+    //产品线统计
+    public void product() {
+        long start = System.currentTimeMillis();
+        List<Record> list = Db.template("product", getParam()).find();
+        long end = System.currentTimeMillis();
+        renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "s"));
+    }
+    //产品线统计列表
+    public void product_list() {
+        long start = System.currentTimeMillis();
+        List<Record> list = Db.template("product_list", getParam()).find();
+        long end = System.currentTimeMillis();
+        renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "s"));
+    }
+    //数据查询与统计
+    public void data() {
+        long start = System.currentTimeMillis();
+        List<Record> list = Db.template("data", getParam()).find();
+        long end = System.currentTimeMillis();
+        renderJson(Kv.by("data", list).set("time", StringUtil.mul((end - start), (float) 0.001) + "s"));
+    }
 }

+ 88 - 1
src/main/resources/report.sql

@@ -13,6 +13,11 @@
  select ID,NAME,SUPERIOR from t_department start with ID=#para(ID) connect by prior ID=superior
 #end
 
+###产品线选择
+#sql("prouname")
+  select item_dic_prouname from tlk_dic_prou
+#end
+
 ###各流程耗时
 #sql("process")
  select round(sum((cast(PROCESSTIME as date)-cast(ACTIONTIME as date))*86400)/60) interval,FLOWNAME from T_RELATIONHIS e
@@ -40,5 +45,87 @@
  left outer join t_department on t_user.defaultdepartment=t_department.ID
  where  t_department.ID in (select  ID from t_department start with ID=#para(ID) connect by prior ID=superior)
  and created between to_date(#para(begin),'yyyy-mm-dd hh24:mi:ss') and to_date(#para(end),'yyyy-mm-dd hh24:mi:ss')
- and item_experiment_type=#para(type)
+ and item_experiment_type=#para(name)
+#end
+
+###样机试验统计
+#sql("model")
+select  #para(DOMAINID) AS DOMAINID,item_name,count(*) as item_invalue,y.item_pro from tlk_wyjcs y
+ left join tlk_dic_prou p on y.item_pro=p.item_dic_prouname where  p.item_dept like #para(ID, "like") and
+ y.created between to_date(#para(begin),'yyyy-mm-dd hh24:mi:ss') and to_date(#para(end),'yyyy-mm-dd hh24:mi:ss')  and  y.item_upbh is null
+ group by y.item_name,y.item_pro
+#end
+
+###样机试验统计列表
+#sql("model_list")
+SELECT y.item_name,y.item_pro,y.item_xl_num,w.id,w.created,w.ITEM_TITLE,w.lastmodified
+FROM tlk_wyjcs y
+	LEFT JOIN tlk_dic_prou p ON y.item_pro = p.item_dic_prouname
+	LEFT JOIN TLK_EXAMINE w ON w.item_wt_num = y.item_value
+WHERE
+	p.item_dept LIKE #para(ID, "like")
+	AND y.created BETWEEN TO_DATE(#para(begin), 'yyyy-mm-dd hh24:mi:ss' )
+	AND TO_DATE(#para(end), 'yyyy-mm-dd hh24:mi:ss' )
+	AND y.item_upbh IS NULL
+	AND y.item_name =#para(name)
+#end
+
+###产品线统计
+#sql("product")
+SELECT
+	nvl(y.item_product,'空')as item_product,
+	count( * ) AS item_invalue
+FROM
+	TLK_EXAMINE y
+	LEFT JOIN tlk_dic_prou p ON y.item_product = p.item_dic_prouname
+WHERE
+	1 = 1
+	AND y.created BETWEEN to_date(#para(begin), 'yyyy-mm-dd hh24:mi:ss' )
+	AND to_date(#para(end), 'yyyy-mm-dd hh24:mi:ss' )
+GROUP BY
+	item_product
+#end
+
+###产品线统计列表
+#sql("product_list")
+SELECT
+	y.id,y.item_wt_num,y.item_title,y.item_experiment_type,y.item_product,y.created
+FROM
+	TLK_EXAMINE y
+	LEFT JOIN tlk_dic_prou p ON y.item_product = p.item_dic_prouname
+WHERE
+	1 = 1
+	AND y.created BETWEEN to_date(#para(begin), 'yyyy-mm-dd hh24:mi:ss' )
+	AND to_date(#para(end), 'yyyy-mm-dd hh24:mi:ss' )
+	AND y.item_product =#para(name)
+#end
+
+###数据查询与统计
+#sql("data")
+SELECT
+	D.*,
+	to_char( D.lastmodified, 'yyyy-mm-dd hh24:mi:ss' ) AS item_lastmodified
+FROM
+	TLK_STRUCTURED_DATA D
+	LEFT JOIN tlk_dic_prou p ON D.item_pro_type = p.item_dic_prouname LEFT outer
+	JOIN t_user ON t_user.ID = D.author LEFT outer
+	JOIN t_department ON t_user.defaultdepartment = t_department.ID
+WHERE
+	1 = 1
+	AND (
+	t_department.ID IN ( SELECT ID FROM t_department START WITH ID =#para(ID) CONNECT BY PRIOR ID = superior )
+	OR p.item_dept LIKE #para(ID, "like"))
+
+	#if(item_pro_type)
+	and D.item_pro_type=#para(item_pro_type)
+	#end
+
+	#if(item_test_name)
+	and D.item_test_name LIKE #para(item_test_name, "like")
+	#end
+
+	#if(item_pro_num)
+	and D.item_pro_num LIKE #para(item_pro_num, "like")
+	#end
+
 #end

+ 19 - 0
src/main/webapp/WEB-INF/view/common/header.html

@@ -0,0 +1,19 @@
+#define header()
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit" /><!-- 360浏览器默认选择webkit内核 -->
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>#(title)</title>
+    <link href="#(path)/static/js/element-ui.css" rel="stylesheet"/>
+    <style>
+        body {background-color: #f1f1f4;}
+        .bar{height:570px;margin-top: 50px;}
+        .el-table thead{color: #515151!important;font-weight:bold;}
+        .el-dialog__header{font-weight: bold;}
+        a{text-decoration: none}
+        [v-cloak] {display: none;}
+    </style>
+</head>
+#end

+ 178 - 0
src/main/webapp/WEB-INF/view/report/data.html

@@ -0,0 +1,178 @@
+#set(title="数据查询与统计")
+#@header()
+<body>
+<div id="app" v-cloak>
+    <el-form :inline="true" label-width="auto">
+        <el-form-item label="实验部门" prop="state">
+            <el-cascader
+                    v-model="param.value"
+                    :options="options"
+                    :props="props"
+                    @change="handleChange"
+                    :show-all-levels="false"
+                    clearable>
+            </el-cascader>
+        </el-form-item>
+        <el-form-item label="产品线选择">
+            <el-select placeholder="请选择" v-model="param.item_pro_type">
+                <el-option v-for="(item,index) in prouname" :key="index" :value="item.ITEM_DIC_PROUNAME" :label="item.ITEM_DIC_PROUNAME"></el-option>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="实验名称">
+            <el-input placeholder="请输入实验名称" v-model="param.item_test_name" clearable />
+        </el-form-item>
+        <el-form-item label="样机型号">
+            <el-input placeholder="请输入样机型号" v-model="param.item_pro_num" clearable />
+        </el-form-item>
+        <el-form-item label="时间范围">
+            <el-date-picker
+                    v-model="param.created"
+                    style="width: 240px"
+                    value-format="yyyy-MM-dd"
+                    type="daterange"
+                    range-separator="-"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+            ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+            <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
+        </el-form-item>
+        <div style="float:right;">耗时: {{param.time}}</div>
+    </el-form>
+    <div id="echart" class="bar"></div>
+    <el-dialog title="数据查询与统计" width="87%" :visible.sync="dialogVisible" top="2%" append-to-body>
+        <el-table :data="tableData" style="width: 100%;">
+            <el-table-column prop="ITEM_WT_NUM" label="委托单号"></el-table-column>
+            <el-table-column prop="ITEM_TEST_NAME" align="center" label="试验名称"></el-table-column>
+            <el-table-column prop="ITEM_PRO_NUM" align="center" label="样机型号"></el-table-column>
+            <el-table-column prop="ITEM_PRO_TYPE" align="center" label="产品线"></el-table-column>
+            <el-table-column prop="ITEM_SJ_VALUE" align="center" label="设计参数"></el-table-column>
+            <el-table-column prop="ITEM_VALUE" align="center" label="结果值"></el-table-column>
+            <el-table-column prop="ITEM_REMARKS" align="center" label="备注"></el-table-column>
+            <el-table-column prop="CREATED" align="center" label="创建时间"></el-table-column>
+        </el-table>
+    </el-dialog>
+</div>
+</body>
+<script src="#(path)/static/js/jquery.min.js"></script>
+<script src="#(path)/static/js/layer/layer.js"></script>
+<script src="#(path)/static/js/vue.js"></script>
+<script src="#(path)/static/js/common.js"></script>
+<script src="#(path)/static/js/echarts.min.js"></script>
+<script src="#(path)/static/js/element-ui.js"></script>
+<script>
+    let myChart = null;
+    let vm = new Vue({
+        el: "#app",
+        data: {
+            dialogVisible: false,
+            tableData: [],
+            param: {
+                DOMAINID: '#(DOMAINID)',
+                ID: '#(ID)',
+                value: ['#(value)'],
+                begin: '#(begin)',
+                end: '#(end)',
+                created: ['#(begin)', '#(end)'],
+            },
+            props: {
+                value: 'ID',
+                label: 'NAME',
+                checkStrictly: true
+            },
+            prouname:#(prouname),
+            options: #(department)
+        },
+        mounted() {
+            this.getData();
+            myChart = echarts.init(document.getElementById('echart'));
+            myChart.on('click', function (params) {
+                vm.dialogVisible = true;
+            })
+        },
+        methods: {
+            handleChange(value) {
+                this.param.ID = value[value.length - 1]
+            },
+            search() {
+                this.param.begin = this.param.created[0];
+                this.param.end = this.param.created[1];
+                this.getData();
+            },
+            getData() {
+                sendAjax("#(path)/report/data", this.param, res => {
+                    cancelLoding();
+                    vm.tableData = res.data;
+                    vm.initEcharts(res.data);
+                    vm.param.time = res.time;
+                    vm.tableData = res.data;
+                })
+            },
+            initEcharts(data) {
+                let legend = [];
+                let series = [];
+                data.forEach(item => {
+                    legend.push(item.ITEM_TEST_NAME);
+                    series.push(item.ITEM_VALUE);
+                });
+                let option = {
+                    title: {
+                        text: '数据查询与统计',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'shadow'
+                        }
+                    },
+                    xAxis: {
+                        type: 'category',
+                        data: legend
+                    },
+                    yAxis: {
+                        type: 'value'
+                    },
+                    series: [
+                        {
+                            data: series,
+                            type: 'line',
+                            smooth: true,
+                            symbol: 'circle',
+                            symbolSize: 15,
+                            showSymbol: true,
+                            itemStyle: {
+                                normal: {
+                                    label: {
+                                        show: true,
+                                        position: 'top',
+                                        textStyle: {
+                                            fontSize: 16
+                                        }
+                                    }
+                                }
+                            },
+                            areaStyle: {
+                                normal: {
+                                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                                        offset: 0,
+                                        color: '#F44336'
+                                    }, {
+                                        offset: 0.8,
+                                        color: '#b14239'
+                                    }], false),
+                                    shadowColor: 'rgba(0, 0, 0, 0.1)',
+                                }
+                            },
+                        }
+                    ]
+                };
+                myChart.setOption(option);
+                window.addEventListener("resize", function () {
+                    myChart.resize();
+                });
+            }
+        }
+    })
+</script>
+</html>

+ 6 - 13
src/main/webapp/WEB-INF/view/report/finish.html

@@ -1,15 +1,5 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>实验完成率</title>
-    <link href="#(path)/static/js/element-ui.css" rel="stylesheet"/>
-    <style>
-        body {background-color: #f1f1f4;}
-        .bar{height:570px;margin-top: 50px;}
-        [v-cloak] {display: none;}
-    </style>
-</head>
+#set(title="实验完成率")
+#@header()
 <body>
 <div id="app" v-cloak>
     <el-form :inline="true" label-width="auto">
@@ -37,13 +27,14 @@
         <el-form-item>
             <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
         </el-form-item>
+        <div style="float:right;">耗时: {{param.time}}</div>
     </el-form>
     <div id="echart" class="bar"></div>
 </div>
 </body>
 <script src="#(path)/static/js/jquery.min.js"></script>
 <script src="#(path)/static/js/layer/layer.js"></script>
-<script src="#(path)/static/js/vue.min.js"></script>
+<script src="#(path)/static/js/vue.js"></script>
 <script src="#(path)/static/js/common.js"></script>
 <script src="#(path)/static/js/echarts.min.js"></script>
 <script src="#(path)/static/js/element-ui.js"></script>
@@ -95,6 +86,8 @@
                 sendAjax("#(path)/report/finish", this.param, res => {
                     cancelLoding();
                     vm.initEcharts(res.data);
+                    vm.param.time=res.time;
+                    vm.$forceUpdate();
                 })
             },
             initEcharts(data) {

+ 159 - 0
src/main/webapp/WEB-INF/view/report/model.html

@@ -0,0 +1,159 @@
+#set(title="样机试验统计")
+#@header()
+<body>
+<div id="app" v-cloak>
+    <el-form :inline="true" label-width="auto">
+        <el-form-item label="实验部门" prop="state">
+            <el-cascader
+                    v-model="param.value"
+                    :options="options"
+                    :props="props"
+                    @change="handleChange"
+                    :show-all-levels="false"
+                    clearable>
+            </el-cascader>
+        </el-form-item>
+        <el-form-item label="时间范围">
+            <el-date-picker
+                    v-model="param.created"
+                    style="width: 240px"
+                    value-format="yyyy-MM-dd"
+                    type="daterange"
+                    range-separator="-"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+            ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+            <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
+        </el-form-item>
+        <div style="float:right;">耗时: {{param.time}}</div>
+    </el-form>
+    <div id="echart" class="bar"></div>
+    <el-dialog :title="param.name" width="80%" :visible.sync="dialogVisible" top="2%" append-to-body>
+        <el-table :data="tableData" style="width: 100%;">
+            <el-table-column prop="ITEM_XL_NUM" label="出厂编号"></el-table-column>
+            <el-table-column prop="ITEM_TITLE" label="实验标题"></el-table-column>
+            <el-table-column prop="ITEM_NAME" label="样机名称"></el-table-column>
+            <el-table-column prop="ITEM_PRO" align="center" label="产品线"></el-table-column>
+            <el-table-column prop="CREATED" align="center" label="试验发起时间"></el-table-column>
+            <el-table-column prop="LASTMODIFIED" align="center" label="试验结束时间"></el-table-column>
+            <el-table-column label="操作" align="center">
+                <template slot-scope="scope">
+                    <a target="_blank"
+                       :href="'http://192.168.0.251/obpm/portal/good/html/form.html?appId=__gAPYBW4YxB3UePM3lqO&docid='+scope.row.ID+'&formId=__0FLGNncOS1lz0T9jsFn&parentId=&isRelate=undefined&opentarget=detail&_=1667359158434'"
+                       @click="detail()">查看</a>
+                </template>
+            </el-table-column>
+        </el-table>
+    </el-dialog>
+</div>
+</body>
+<script src="#(path)/static/js/jquery.min.js"></script>
+<script src="#(path)/static/js/layer/layer.js"></script>
+<script src="#(path)/static/js/vue.js"></script>
+<script src="#(path)/static/js/common.js"></script>
+<script src="#(path)/static/js/echarts.min.js"></script>
+<script src="#(path)/static/js/element-ui.js"></script>
+<script>
+    let myChart = null;
+    let vm = new Vue({
+        el: "#app",
+        data: {
+            dialogVisible: false,
+            tableData: [],
+            param: {
+                DOMAINID: '#(DOMAINID)',
+                ID: '#(ID)',
+                value: ['#(value)'],
+                begin: '#(begin)',
+                end: '#(end)',
+                created: ['#(begin)', '#(end)']
+            },
+            props: {
+                value: 'ID',
+                label: 'NAME',
+                checkStrictly: true
+            },
+            options: #(department)
+        },
+        mounted() {
+            this.getData();
+            myChart = echarts.init(document.getElementById('echart'));
+            myChart.on('click', function (params) {
+                vm.dialogVisible = true;
+                vm.param.name = params.name;
+                sendAjax("#(path)/report/model_list", vm.param, res => {
+                    cancelLoding();
+                    vm.tableData = res.data;
+                })
+            })
+        },
+        methods: {
+            handleChange(value) {
+                this.param.ID = value[value.length - 1]
+            },
+            search() {
+                this.param.begin = this.param.created[0];
+                this.param.end = this.param.created[1];
+                this.getData();
+            },
+            getData() {
+                sendAjax("#(path)/report/model", this.param, res => {
+                    cancelLoding();
+                    vm.tableData = res.data;
+                    vm.initEcharts(res.data);
+                    vm.param.time = res.time;
+                })
+            },
+            initEcharts(data) {
+                let legend = [];
+                let series = [];
+                data.forEach(item => {
+                    legend.push(item.ITEM_NAME);
+                    series.push(item.ITEM_INVALUE);
+                });
+                let option = {
+                    title: {
+                        text: '样机试验统计',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'shadow'
+                        }
+                    },
+                    xAxis: {
+                        type: 'category',
+                        data: legend
+                    },
+                    yAxis: {
+                        type: 'value'
+                    },
+                    series: [
+                        {
+                            data: series,
+                            type: 'bar',
+                            itemStyle: {
+                                normal: {
+                                    label: {
+                                        show: true,
+                                        position: 'top',
+                                        textStyle: {
+                                            fontSize: 16
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    ]
+                };
+                myChart.setOption(option);
+                window.addEventListener("resize", function () {
+                    myChart.resize();
+                });
+            }
+        }
+    })
+</script>
+</html>

+ 37 - 35
src/main/webapp/WEB-INF/view/report/process.html

@@ -1,16 +1,5 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>流程耗时</title>
-    <link href="#(path)/static/js/element-ui.css" rel="stylesheet"/>
-    <style>
-        body {background-color: #f1f1f4;}
-        .bar{height:570px;margin-top: 50px;}
-        .el-table thead{color: #515151!important;font-weight:bold;}
-        [v-cloak] {display: none;}
-    </style>
-</head>
+#set(title="流程耗时统计")
+#@header()
 <body>
 <div id="app" v-cloak>
     <el-form :inline="true" label-width="auto">
@@ -38,9 +27,10 @@
         <el-form-item>
             <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
         </el-form-item>
+        <div style="float:right;">耗时: {{param.time}}</div>
     </el-form>
     <div id="echart" class="bar"></div>
-    <el-dialog  title="流程耗时明细" :visible.sync="dialogVisible" width="50%">
+    <el-dialog title="流程耗时明细" :visible.sync="dialogVisible" width="50%">
         <el-table :data="tableData" style="width: 100%;background-color: red">
             <el-table-column prop="FLOWNAME" label="流程名称"></el-table-column>
             <el-table-column prop="INTERVAL" label="流程耗时(分钟)"></el-table-column>
@@ -50,7 +40,7 @@
 </body>
 <script src="#(path)/static/js/jquery.min.js"></script>
 <script src="#(path)/static/js/layer/layer.js"></script>
-<script src="#(path)/static/js/vue.min.js"></script>
+<script src="#(path)/static/js/vue.js"></script>
 <script src="#(path)/static/js/common.js"></script>
 <script src="#(path)/static/js/echarts.min.js"></script>
 <script src="#(path)/static/js/element-ui.js"></script>
@@ -59,14 +49,14 @@
     let vm = new Vue({
         el: "#app",
         data: {
-            dialogVisible:false,
-            tableData:[],
+            dialogVisible: false,
+            tableData: [],
             param: {
                 DOMAINID: '#(DOMAINID)',
                 ID: '#(ID)',
-                value:['#(value)'],
-                begin:'#(begin)',
-                end:'#(end)',
+                value: ['#(value)'],
+                begin: '#(begin)',
+                end: '#(end)',
                 created: ['#(begin)', '#(end)']
             },
             props: {
@@ -80,7 +70,7 @@
             this.getData();
             myChart = echarts.init(document.getElementById('echart'));
             myChart.on('click', function (params) {
-                vm.dialogVisible=true;
+                vm.dialogVisible = true;
             })
         },
         methods: {
@@ -95,8 +85,9 @@
             getData() {
                 sendAjax("#(path)/report/process", this.param, res => {
                     cancelLoding();
-                    vm.tableData=res.data;
+                    vm.tableData = res.data;
                     vm.initEcharts(res.data);
+                    vm.param.time = res.time;
                 })
             },
             initEcharts(data) {
@@ -105,20 +96,20 @@
                 data.forEach(item => {
                     legend.push(item.FLOWNAME);
                     series.push(item.INTERVAL);
-               });
-               let option = {
-                   title: {
-                       text: '各流程耗时',
+                });
+                let option = {
+                    title: {
+                        text: '流程耗时统计',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'shadow'
+                        }
                     },
-                   tooltip: {
-                       trigger: 'axis',
-                       axisPointer: {
-                           type: 'shadow'
-                       }
-                   },
                     xAxis: {
                         type: 'category',
-                        data:legend
+                        data: legend
                     },
                     yAxis: {
                         name: '分钟',
@@ -126,8 +117,19 @@
                     },
                     series: [
                         {
-                            data:series,
-                            type: 'bar'
+                            data: series,
+                            type: 'bar',
+                            itemStyle: {
+                                normal: {
+                                    label: {
+                                        show: true,
+                                        position: 'top',
+                                        textStyle: {
+                                            fontSize: 16
+                                        }
+                                    }
+                                }
+                            }
                         }
                     ]
                 };

+ 158 - 0
src/main/webapp/WEB-INF/view/report/product.html

@@ -0,0 +1,158 @@
+#set(title="产品线统计")
+#@header()
+<body>
+<div id="app" v-cloak>
+    <el-form :inline="true" label-width="auto">
+        <el-form-item label="实验部门" prop="state" style="display: none">
+            <el-cascader
+                    v-model="param.value"
+                    :options="options"
+                    :props="props"
+                    @change="handleChange"
+                    :show-all-levels="false"
+                    clearable>
+            </el-cascader>
+        </el-form-item>
+        <el-form-item label="时间范围">
+            <el-date-picker
+                    v-model="param.created"
+                    style="width: 240px"
+                    value-format="yyyy-MM-dd"
+                    type="daterange"
+                    range-separator="-"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+            ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+            <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
+        </el-form-item>
+        <div style="float:right;">耗时: {{param.time}}</div>
+    </el-form>
+    <div id="echart" class="bar"></div>
+    <el-dialog :title="param.name" width="80%" :visible.sync="dialogVisible" top="2%" append-to-body>
+        <el-table :data="tableData" style="width: 100%;">
+            <el-table-column prop="ITEM_WT_NUM" label="委托单号"></el-table-column>
+            <el-table-column prop="ITEM_TITLE" align="center" label="标题"></el-table-column>
+            <el-table-column prop="ITEM_EXPERIMENT_TYPE" align="center" label="试验类型"></el-table-column>
+            <el-table-column prop="ITEM_PRODUCT" align="center" label="产品线"></el-table-column>
+            <el-table-column prop="CREATED" align="center" label="创建时间"></el-table-column>
+            <el-table-column label="操作" align="center">
+                <template slot-scope="scope">
+                    <a target="_blank"
+                       :href="'http://192.168.0.251/obpm/portal/good/html/form.html?appId=__gAPYBW4YxB3UePM3lqO&docid='+scope.row.ID+'&formId=__0FLGNncOS1lz0T9jsFn&parentId=&isRelate=undefined&opentarget=detail&_=1667359158434'"
+                       @click="detail()">查看</a>
+                </template>
+            </el-table-column>
+        </el-table>
+    </el-dialog>
+</div>
+</body>
+<script src="#(path)/static/js/jquery.min.js"></script>
+<script src="#(path)/static/js/layer/layer.js"></script>
+<script src="#(path)/static/js/vue.js"></script>
+<script src="#(path)/static/js/common.js"></script>
+<script src="#(path)/static/js/echarts.min.js"></script>
+<script src="#(path)/static/js/element-ui.js"></script>
+<script>
+    let myChart = null;
+    let vm = new Vue({
+        el: "#app",
+        data: {
+            dialogVisible: false,
+            tableData: [],
+            param: {
+                DOMAINID: '#(DOMAINID)',
+                ID: '#(ID)',
+                value: ['#(value)'],
+                begin: '#(begin)',
+                end: '#(end)',
+                created: ['#(begin)', '#(end)']
+            },
+            props: {
+                value: 'ID',
+                label: 'NAME',
+                checkStrictly: true
+            },
+            options: #(department)
+        },
+        mounted() {
+            this.getData();
+            myChart = echarts.init(document.getElementById('echart'));
+            myChart.on('click', function (params) {
+                vm.dialogVisible = true;
+                vm.param.name = params.name;
+                sendAjax("#(path)/report/product_list", vm.param, res => {
+                    cancelLoding();
+                    vm.tableData = res.data;
+                })
+            })
+        },
+        methods: {
+            handleChange(value) {
+                this.param.ID = value[value.length - 1]
+            },
+            search() {
+                this.param.begin = this.param.created[0];
+                this.param.end = this.param.created[1];
+                this.getData();
+            },
+            getData() {
+                sendAjax("#(path)/report/product", this.param, res => {
+                    cancelLoding();
+                    vm.tableData = res.data;
+                    vm.initEcharts(res.data);
+                    vm.param.time = res.time;
+                })
+            },
+            initEcharts(data) {
+                let legend = [];
+                let series = [];
+                data.forEach(item => {
+                    legend.push(item.ITEM_PRODUCT);
+                    series.push(item.ITEM_INVALUE);
+                });
+                let option = {
+                    title: {
+                        text: '产品线统计',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'shadow'
+                        }
+                    },
+                    xAxis: {
+                        type: 'category',
+                        data: legend
+                    },
+                    yAxis: {
+                        type: 'value'
+                    },
+                    series: [
+                        {
+                            data: series,
+                            type: 'bar',
+                            itemStyle: {
+                                normal: {
+                                    label: {
+                                        show: true,
+                                        position: 'top',
+                                        textStyle: {
+                                            fontSize: 16
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    ]
+                };
+                myChart.setOption(option);
+                window.addEventListener("resize", function () {
+                    myChart.resize();
+                });
+            }
+        }
+    })
+</script>
+</html>

+ 43 - 42
src/main/webapp/WEB-INF/view/report/type.html

@@ -1,16 +1,5 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>试验类型统计</title>
-    <link href="#(path)/static/js/element-ui.css" rel="stylesheet"/>
-    <style>
-        body {background-color: #f1f1f4;}
-        .bar{height:570px;margin-top: 50px;}
-        .el-table thead{color: #515151!important;font-weight:bold;}
-        [v-cloak] {display: none;}
-    </style>
-</head>
+#set(title="试验类型统计")
+#@header()
 <body>
 <div id="app" v-cloak>
     <el-form :inline="true" label-width="auto">
@@ -38,16 +27,18 @@
         <el-form-item>
             <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
         </el-form-item>
-        <div style="float:right;">耗时: {{time}}</div>
+        <div style="float:right;">耗时: {{param.time}}</div>
     </el-form>
     <div id="echart" class="bar"></div>
-    <el-dialog  title="试验类型统计" width="80%" :visible.sync="dialogVisible" append-to-body>
+    <el-dialog :title="param.name" width="80%" :visible.sync="dialogVisible" top="2%" append-to-body>
         <el-table :data="tableData" style="width: 100%;">
             <el-table-column prop="ITEM_TITLE" label="名称"></el-table-column>
             <el-table-column prop="ITEM_EXPERIMENT_TYPE" align="center" label="类型"></el-table-column>
-            <el-table-column label="操作"  width="250">
+            <el-table-column label="操作" align="center">
                 <template slot-scope="scope">
-                    <el-button size="mini" type="primary">支付</el-button>
+                    <a target="_blank"
+                       :href="'http://192.168.0.251/obpm/portal/good/html/form.html?appId=__gAPYBW4YxB3UePM3lqO&docid='+scope.row.ID+'&formId=__0FLGNncOS1lz0T9jsFn&parentId=&isRelate=undefined&opentarget=detail&_=1667359158434'"
+                       @click="detail()">查看</a>
                 </template>
             </el-table-column>
         </el-table>
@@ -56,7 +47,7 @@
 </body>
 <script src="#(path)/static/js/jquery.min.js"></script>
 <script src="#(path)/static/js/layer/layer.js"></script>
-<script src="#(path)/static/js/vue.min.js"></script>
+<script src="#(path)/static/js/vue.js"></script>
 <script src="#(path)/static/js/common.js"></script>
 <script src="#(path)/static/js/echarts.min.js"></script>
 <script src="#(path)/static/js/element-ui.js"></script>
@@ -65,15 +56,14 @@
     let vm = new Vue({
         el: "#app",
         data: {
-            time:'',
-            dialogVisible:false,
-            tableData:[],
+            dialogVisible: false,
+            tableData: [],
             param: {
                 DOMAINID: '#(DOMAINID)',
                 ID: '#(ID)',
-                value:['#(value)'],
-                begin:'#(begin)',
-                end:'#(end)',
+                value: ['#(value)'],
+                begin: '#(begin)',
+                end: '#(end)',
                 created: ['#(begin)', '#(end)']
             },
             props: {
@@ -87,11 +77,11 @@
             this.getData();
             myChart = echarts.init(document.getElementById('echart'));
             myChart.on('click', function (params) {
-                vm.dialogVisible=true;
-                vm.param.type=params.name;
+                vm.dialogVisible = true;
+                vm.param.name = params.name;
                 sendAjax("#(path)/report/type_list", vm.param, res => {
                     cancelLoding();
-                    vm.tableData=res.data;
+                    vm.tableData = res.data;
                 })
             })
         },
@@ -107,9 +97,9 @@
             getData() {
                 sendAjax("#(path)/report/type", this.param, res => {
                     cancelLoding();
-                    vm.tableData=res.data;
+                    vm.tableData = res.data;
                     vm.initEcharts(res.data);
-                    vm.time=res.time;
+                    vm.param.time = res.time;
                 })
             },
             initEcharts(data) {
@@ -118,20 +108,20 @@
                 data.forEach(item => {
                     legend.push(item.ITEM_EXPERIMENT_TYPE);
                     series.push(item.ITEM_INVALUE);
-               });
-               let option = {
-                   title: {
-                       text: '试验类型统计',
+                });
+                let option = {
+                    title: {
+                        text: '试验类型统计',
+                    },
+                    tooltip: {
+                        trigger: 'axis',
+                        axisPointer: {
+                            type: 'shadow'
+                        }
                     },
-                   tooltip: {
-                       trigger: 'axis',
-                       axisPointer: {
-                           type: 'shadow'
-                       }
-                   },
                     xAxis: {
                         type: 'category',
-                        data:legend
+                        data: legend
                     },
                     yAxis: {
                         name: '分钟',
@@ -139,8 +129,19 @@
                     },
                     series: [
                         {
-                            data:series,
-                            type: 'bar'
+                            data: series,
+                            type: 'bar',
+                            itemStyle: {
+                                normal: {
+                                    label: {
+                                        show: true,
+                                        position: 'top',
+                                        textStyle: {
+                                            fontSize: 16
+                                        }
+                                    }
+                                }
+                            }
                         }
                     ]
                 };

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 5
src/main/webapp/static/js/vue.min.js


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.