浏览代码

no message

Jianghan 3 年之前
父节点
当前提交
086e2e1e7f

+ 1 - 0
src/front/front.go

@@ -93,6 +93,7 @@ type Front struct {
 	checkData   xweb.Mapper `xweb:"/front/user/check/data"`
 	checkDetail xweb.Mapper `xweb:"/front/user/check/detail"`
 	checkSave   xweb.Mapper `xweb:"/front/user/check/save"`
+	checkResult xweb.Mapper `xweb:"/front/user/check/result"`
 }
 
 func (f *Front) Index() {

+ 12 - 0
src/front/group.go

@@ -74,9 +74,21 @@ func (f *Front) GroupTaskListByAdmin() {
 		status := f.GetString("s_status")
 		searchStr := f.GetString("search[value]")
 		search := strings.TrimSpace(searchStr)
+		starttime := f.GetString("starttime")
+		endtime := f.GetString("endtime")
 		query := map[string]interface{}{
 			"s_stype": "group", //检索用户组任务
 		}
+		timeQ := make(map[string]interface{})
+		if starttime != "" {
+			timeQ["$gte"], _ = strconv.Atoi(starttime)
+		}
+		if endtime != "" {
+			timeQ["$lte"], _ = strconv.Atoi(endtime)
+		}
+		if len(timeQ) > 0 {
+			query["i_createtime"] = timeQ
+		}
 		if status != "-1" { //任务状态
 			query["s_status"] = status
 		}

+ 1 - 3
src/front/mark.go

@@ -102,6 +102,7 @@ func (f *Front) JyMarkList() {
 // JyUserDataMark 剑鱼管理人员数据标注
 func (f *Front) JyUserDataMark() {
 	defer qu.Catch()
+	qu.Debug("jy save...")
 	success := false
 	msg := ""
 	user := f.GetSession("user").(map[string]interface{})
@@ -652,9 +653,6 @@ func MarkPackage(content []interface{}, tagSet, baseSet, baseUnset map[string]in
 	} else {
 		qu.Debug("Package Tag Error")
 	}
-	qu.Debug("tagSet===", tagSet)
-	qu.Debug("baseSet===", baseSet)
-	qu.Debug("baseUnset===", baseUnset)
 }
 
 //标注中标候选人信息

+ 0 - 1
src/front/project.go

@@ -270,7 +270,6 @@ func (f *Front) ProjectQualityAssessment() {
 func (f *Front) ProjectGroupTaskList() {
 	defer qu.Catch()
 	projectid := f.GetString("pid") //项目id
-	qu.Debug("Project Id:", projectid)
 	if f.Method() == "POST" {
 		status := f.GetString("s_status") //任务状态
 		searchStr := f.GetString("search[value]")

+ 155 - 15
src/front/remark.go

@@ -3,6 +3,7 @@ package front
 import (
 	"encoding/json"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"go.mongodb.org/mongo-driver/bson"
 	"math"
 	mgo "mongodb"
@@ -588,16 +589,15 @@ func (f *Front) CheckData() {
 	pid := f.GetString("pid")
 	tid := f.GetString("tid")
 	sourceinfo := f.GetString("s_sourceinfo")
-
 	if f.Method() == "POST" {
 		start, _ := f.GetInteger("start")
 		limit, _ := f.GetInteger("length")
 		draw, _ := f.GetInteger("draw")
 		searchStr := f.GetString("search[value]")
 		search := strings.TrimSpace(searchStr)
-		query := map[string]interface{}{
-			"s_grouptaskid": tid,
-			"b_istag":       true,
+		query := map[string]interface{}{"b_istag": true}
+		if tid != "" {
+			query["s_grouptaskid"] = tid
 		}
 		if search != "" {
 			query["$or"] = []interface{}{
@@ -616,15 +616,23 @@ func (f *Front) CheckData() {
 			"recordsTotal":    count,
 		})
 	} else {
-
-		task, _ := util.Mgo.FindById(util.TASKCOLLNAME, tid, map[string]interface{}{"i_givenum": 1})
-		tagCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_istag": true})
-		checkCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_check": true})
+		if tid == "" {
+			project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, pid, map[string]interface{}{"i_importnum": 1})
+			f.T["taskNum"] = (*project)["i_importnum"]
+			tagCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istag": true})
+			checkCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_check": true})
+			f.T["taskTagNum"] = tagCount
+			f.T["taskCheckNum"] = checkCount
+		} else {
+			task, _ := util.Mgo.FindById(util.TASKCOLLNAME, tid, map[string]interface{}{"i_givenum": 1})
+			f.T["taskNum"] = (*task)["i_givenum"]
+			tagCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_istag": true})
+			checkCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_check": true})
+			f.T["taskTagNum"] = tagCount
+			f.T["taskCheckNum"] = checkCount
+		}
 		f.T["pid"] = pid
 		f.T["tid"] = tid
-		f.T["taskNum"] = (*task)["i_givenum"]
-		f.T["taskTagNum"] = tagCount
-		f.T["taskCheckNum"] = checkCount
 		f.T["sourceinfo"] = sourceinfo
 		_ = f.Render("project/check_data_list.html", &f.T)
 	}
@@ -777,22 +785,23 @@ func (f *Front) CheckSave() {
 
 	// 质检时,标注标记变成质检标记
 	checkFields, _ := (*project)["v_fields"].(map[string]interface{})
-	tagSet = map[string]interface{}{}
+	checkSet := make(map[string]interface{})
 	for k := range checkFields {
-		tagSet[k] = true
+		checkSet[k] = tagSet[k]
 	}
 
-	if len(tagSet) > 0 || baseInfo["purchasinglist_alltag"] != nil { //purchasinglist_alltag特殊处理
+	if len(checkSet) > 0 || baseInfo["purchasinglist_alltag"] != nil { //purchasinglist_alltag特殊处理
 		//1、更新数据源信息
 		setResult := map[string]interface{}{ //更新字段集
 			"i_updatetime": time.Now().Unix(),
 			"b_check":      true,
 			"s_checkid":    userId,
+			"b_istag":      true,
 		}
 		//for field, val := range tagSet { //更新质检字段
 		//	setResult["v_taginfo."+field] = val
 		//}
-		setResult["v_checkinfo"] = tagSet
+		setResult["v_checkinfo"] = checkSet
 		for field, val := range baseSet { //更新基本字段
 			setResult["v_baseinfo."+field] = val
 		}
@@ -821,3 +830,134 @@ func (f *Front) CheckSave() {
 	qu.Debug("Save Log:", b)
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
 }
+
+func (f *Front) CheckResult() {
+	qu.Catch()
+	pid := f.GetString("pid")
+	tid := f.GetString("tid")
+	sourceinfo := f.GetString("s_sourceinfo")
+	qu.Debug("----------", tid, pid)
+	task, _ := util.Mgo.FindById(util.TASKCOLLNAME, tid, map[string]interface{}{"i_givenum": 1})
+	projcet, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, pid, map[string]interface{}{"v_fields": 1})
+	//tagCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_istag": true})
+	//checkCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_check": true})
+	allNum := (*task)["i_givenum"]          //任务数据量
+	markNum, checkNum, checkNumR := 0, 0, 0 // 标注数量,	审核数据量,	审核数据完全正确的数据量
+	cmaps := make(map[string]int)           // 标注字段整体准确率
+	umaps := make(map[string]interface{})   // 按人员 字段准确率
+	for k := range (*projcet)["v_fields"].(map[string]interface{}) {
+		cmaps[k] = 0
+	}
+	sess := util.Mgo.GetMgoConn()
+	defer util.Mgo.DestoryMongoConn(sess)
+	query := map[string]interface{}{"s_grouptaskid": tid, "b_istag": true}
+	result := sess.DB(util.Mgo.DbName).C(sourceinfo).Find(query).Iter()
+	for tmp := make(map[string]interface{}); result.Next(&tmp); markNum++ {
+		user := qu.ObjToString(tmp["s_login"])
+		var up map[string]int
+		if umaps[user] == nil {
+			up = make(map[string]int)
+		} else {
+			up = umaps[user].(map[string]int)
+		}
+		up["ck_count"] += 1
+		umaps[user] = up
+		if tmp["b_check"].(bool) {
+			checkNum++
+			if f, ok := tmp["v_checkinfo"].(map[string]interface{}); ok {
+				flag := true // 数据整体准确率
+				// 按人员统计字段准备率
+				var up map[string]int
+				if umaps[user] == nil {
+					up = make(map[string]int)
+				} else {
+					up = umaps[user].(map[string]int)
+				}
+				for k1 := range cmaps {
+					if qu.IntAll(f[k1]) == 1 {
+						cmaps[k1] += 1 // 字段整体正确率
+						up[k1] += 1
+					} else {
+						flag = false
+					}
+				}
+				up["re_count"] += 1
+				umaps[user] = up
+				if flag {
+					checkNumR++
+					up["re_rg_count"] += 1
+				}
+			}
+		}
+	}
+	if checkNum == 0 {
+		f.ServeJson(map[string]interface{}{"rep": false, "msg": "无质检审核数据!"})
+		return
+	}
+	qu.Debug(cmaps)
+	qu.Debug(umaps)
+	// 前台页面数据
+	dataSource := make(map[string]interface{})
+	var userSelect []string
+	var dataSelect []map[string]interface{}
+	userSelect = append(userSelect, "全部")
+	tmp := make(map[string]interface{})
+	tmp["name"] = "全部"
+	tmp["num1"] = allNum
+	tmp["num2"] = checkNum
+	tmp["num3"] = checkNumR
+	tmp["num4"] = CountPr(checkNumR, checkNum)
+	dataSelect = append(dataSelect, tmp)
+	for k := range (*projcet)["v_fields"].(map[string]interface{}) {
+		tmp1 := make(map[string]interface{})
+		tmp1["name"] = k
+		tmp1["num1"] = markNum
+		tmp1["num2"] = checkNum
+		tmp1["num3"] = cmaps[k]
+		tmp1["num4"] = CountPr(cmaps[k], checkNum)
+		dataSelect = append(dataSelect, tmp1)
+	}
+	dataSource["全部"] = dataSelect
+	for k1, v1 := range umaps {
+		if v2, o := v1.(map[string]int); o {
+			userSelect = append(userSelect, k1)
+			var dataSelect1 []map[string]interface{}
+			tmp2 := make(map[string]interface{})
+			tmp2["name"] = "全部"
+			tmp2["num1"] = v2["ck_count"]
+			tmp2["num2"] = v2["re_count"]
+			tmp2["num3"] = v2["re_rg_count"]
+			tmp2["num4"] = CountPr(v2["re_rg_count"], v2["re_count"])
+			dataSelect1 = append(dataSelect1, tmp2)
+			for k := range (*projcet)["v_fields"].(map[string]interface{}) {
+				tmp1 := make(map[string]interface{})
+				tmp1["name"] = k
+				tmp1["num1"] = v2["ck_count"]
+				tmp1["num2"] = v2["re_count"]
+				tmp1["num3"] = v2[k]
+				tmp1["num4"] = CountPr(v2[k], v2["re_count"])
+				dataSelect1 = append(dataSelect1, tmp1)
+			}
+			dataSource[k1] = dataSelect1
+		}
+	}
+	f.T["pid"] = pid
+	f.T["tid"] = tid
+	f.T["taskNum"] = allNum
+	f.T["taskTagNum"] = markNum
+	f.T["taskCheckNum"] = checkNum
+	f.T["taskCheckRight"] = checkNumR
+	f.T["tableData"] = dataSource
+	f.T["userSelect"] = userSelect
+	_ = f.Render("project/check_result.html", &f.T)
+}
+
+// CountPr 计算百分比
+func CountPr(c1, c2 int) string {
+	decimal.DivisionPrecision = 2
+	if c1 == 0 || c2 == 0 {
+		return "0"
+	}
+	d := decimal.NewFromInt32(int32(c1)).Div(decimal.NewFromInt32(int32(c2))).Mul(decimal.NewFromInt32(100))
+	return d.String() + "%"
+}

+ 3 - 1
src/web/templates/com/inc.html

@@ -40,4 +40,6 @@
 	<script src="/js/com.js"></script>
 	<script src="/js/bootstrap3-typeahead.js"></script>
 </head>
-<body class="hold-transition skin-blue sidebar-mini sidebar-collapse">
+<body class="hold-transition skin-blue sidebar-mini sidebar-collapse">
+
+<div class="wrapper"></div>

+ 22 - 0
src/web/templates/project/check_data_list.html

@@ -19,6 +19,20 @@
             <div class="col-xs-12">
                 <div class="box">
                     <div class="box-body">
+
+                        <div class="box-body">
+                            <h4><i class="glyphicon glyphicon-exclamation-sign" style="margin-right: 6px"></i>数据情况</h4>
+                            <div class="form-group" style="margin-left: 10px;margin-top: 10px">
+                                <div class="col-xs-5" style="width: auto">
+                                    <label class="form-inline">已标数据/数据总量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.taskTagNum}} / {{ .T.taskNum }}"></label>
+                                    <label class="form-inline">已检数据/已标总量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.taskCheckNum}} / {{ .T.taskTagNum }}"></label>
+                                </div>
+                                <input type="button" class="btn btn-primary" onclick="checkResult()" value="质检结果">
+                            </div>
+                        </div>
+
                         <div id="status-div" class="col-xs-1" style="width: auto;float:right;">
                             <label for="statusSelect">状态:
                                 <select class="form-control selectpicker" id="statusSelect">
@@ -101,4 +115,12 @@
         })
     });
 
+    function checkResult() {
+        let num = {{ .T.taskCheckNum }}
+        if (num > 0) {
+            window.location.href = "/front/user/check/result?pid={{.T.pid}}&tid={{.T.tid}}&s_sourceinfo={{.T.sourceinfo}}"
+        }else {
+            showTip("没有审核数据")
+        }
+    }
 </script>

+ 103 - 0
src/web/templates/project/check_result.html

@@ -0,0 +1,103 @@
+{{include "com/inc.html"}}
+<!-- Main Header -->
+{{include "com/header.html"}}
+<!-- Left side column. 权限菜单 -->
+{{include "com/menu.html"}}
+<div class="content-wrapper">
+    <section class="content-header">
+        <h1>
+            <small></small>
+        </h1>
+        <ol class="breadcrumb">
+            <li><a href="/front/user/check/list?"><i class="fa fa-dashboard"></i> 质检任务列表</a></li>
+            <li><a href="#"><i class="fa fa-dashboard"></i> 质检列表</a></li>
+        </ol>
+    </section>
+    <!-- Main content -->
+    <section class="content">
+        <div class="row">
+            <div class="col-xs-12">
+                <div class="box">
+                    <div class="box-body">
+
+                        <div class="box-body">
+                            <h4><i class="glyphicon glyphicon-exclamation-sign" style="margin-right: 6px"></i>数据情况</h4>
+                            <div class="form-group" style="margin-left: 10px;margin-top: 10px">
+                                <div class="col-xs-5" style="width: auto">
+                                    <label class="form-inline">已标数据/数据总量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.taskTagNum}} / {{ .T.taskNum }}"></label>
+                                    <label class="form-inline">已检数据/已标总量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.taskCheckNum}} / {{ .T.taskTagNum }}"></label>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div id="status-div" class="col-xs-5 form-inline" style="width: auto;float:right;">
+                            <label for="statusSelect">状态:
+                                <select class="form-control selectpicker" id="statusSelect"></select></label>
+                        </div>
+                        <table id="dataTable" class="table table-bordered table-hover">
+                            <thead>
+                            <tr>
+                                <th>名称</th>
+                                <th>标注数量</th>
+                                <th>抽查数量</th>
+                                <th>抽查正确数量</th>
+                                <th>正确占比</th>
+                            </tr>
+                            </thead>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </section>
+</div>
+
+{{include "com/footer.html"}}
+<script>
+    menuActive("/front/user/task/list");
+
+    let dataResult = {{ .T.tableData }}
+    let userSelect = {{ .T.userSelect }}
+
+    $(function () {
+        ttable = $('#dataTable').dataTable({
+            "paging": false,
+            "lengthChange": false,
+            "searching": false,
+            "ordering": false,
+            "info": true,
+            "autoWidth": false,
+            "serverSide": false,
+            "language": {
+                "url": "/dist/js/dataTables.chinese.lang"
+            },
+            "columns": [
+                {"data": "name"},
+                {"data": "num1"},
+                {"data": "num2"},
+                {"data": "num3"},
+                {"data": "num4"}
+            ],
+            "initComplete": function () {
+                $("#dataTable_filter").append($('#status-div'))
+            },
+        });
+
+        ttable.fnClearTable();
+        ttable.fnAddData(dataResult["全部"]);
+        console.log(dataResult)
+        console.log(dataResult)
+        for(i in userSelect){
+            $("#statusSelect").append("<option value='"+userSelect[i]+"'>"+userSelect[i]+"</option>")
+        }
+        $('#statusSelect').on('changed.bs.select', function () {
+            var name = $("#statusSelect option:selected").val()
+            console.log(name)
+            ttable.fnClearTable();
+            ttable.fnAddData(dataResult[name]);
+        })
+    });
+
+</script>

+ 1 - 1
src/web/templates/project/check_task_list.html

@@ -53,7 +53,7 @@
 
 {{include "com/footer.html"}}
 <script>
-    menuActive("/front/user/task/list");
+    menuActive("/front/user/check/list");
 
     $(function () {
         ttable = $('#dataTable').dataTable({

+ 46 - 20
src/web/templates/project/project_clear.html

@@ -39,8 +39,8 @@
                                         <label class="form-inline">&nbsp;操作:
                                             <a type="button" class="btn btn-sm btn-primary" href="/front/user/jymark/list?pid={{.T.s_projectid}}&stype=all">标注</a>
                                             <input type="button" class="btn btn-sm btn-primary" onclick="dispatchTask('all')" value="分发">
-                                            <input type="button" class="btn btn-sm btn-primary" value="质检">
-                                            <input type="button" class="btn btn-sm btn-primary" value="质检结果">
+                                            <input type="button" class="btn btn-sm btn-primary" onclick="checkMethod('all')" value="质检">
+<!--                                            <input type="button" class="btn btn-sm btn-primary" value="质检结果">-->
                                         </label>
                                     </div>
                                 </div>
@@ -59,8 +59,8 @@
                                         <label class="form-inline">操作:
                                             <a type="button" class="btn btn-sm btn-primary" href="/front/user/jymark/list?pid={{.T.s_projectid}}&stype=notag">标注</a>
                                             <input type="button" class="btn btn-sm btn-primary" onclick="dispatchTask('notag')" value="分发">
-                                            <input type="button" class="btn btn-sm btn-primary" value="质检">
-                                            <input type="button" class="btn btn-sm btn-primary" value="质检结果">
+                                            <input type="button" class="btn btn-sm btn-primary" onclick="checkMethod('notag')" value="质检">
+<!--                                            <input type="button" class="btn btn-sm btn-primary" value="质检结果">-->
                                         </label>
                                     </div>
                                 </div>
@@ -79,8 +79,8 @@
                                         <label class="form-inline">操作:
                                             <a type="button" class="btn btn-sm btn-primary" href="/front/user/jymark/list?pid={{.T.s_projectid}}&stype=tag">标注</a>
                                             <input type="button" class="btn btn-sm btn-primary" onclick="dispatchTask('tag')" value="分发">
-                                            <input type="button" class="btn btn-sm btn-primary" value="质检">
-                                            <input type="button" class="btn btn-sm btn-primary" value="质检结果">
+                                            <input type="button" class="btn btn-sm btn-primary" onclick="checkMethod('tag')" value="质检">
+<!--                                            <input type="button" class="btn btn-sm btn-primary" value="质检结果">-->
                                         </label>
                                     </div>
                                 </div>
@@ -240,7 +240,7 @@
                         tmp = '<div>' +
                             '<a class="btn btn-sm btn-primary" href="/front/group/user/task/list?pid='+projectid+'&grouptaskid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">查看</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="retrieveTask(\''+val+'\',\''+row.s_sourceinfo+'\',\''+row.s_status+'\')">收回</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-primary">质检</a>&nbsp;&nbsp;' +
+                            // '<a class="btn btn-sm btn-primary" href=href="/front/user/check/data?pid='+row.s_projectid+'&tid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">质检</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="repulseTask(\''+val+'\',\''+row.s_sourceinfo+'\',\''+row.s_status+'\')">打回</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">关闭</a>&nbsp;&nbsp;' +
                             '</div>';
@@ -381,7 +381,7 @@
                     if (r.success) {
                         location.reload()
                     } else {
-                        showTip(r.msg);
+                        showTip(r.msg, 3000);
                     }
                 }
             })
@@ -391,30 +391,32 @@
 
     // 收回
     function retrieveTask(id, sourceinfo, status,givenum) {
-        showConfirm("确认要收回当前任务吗?", function () {
-            if (status === "未开始" || status === "进行中") {
+        if (status === "未开始" || status === "进行中") {
+            showConfirm("确认要收回当前任务吗?", function () {
                 $.ajax({
                     url: "/front/project/task/retrieve",
                     type: 'POST',
                     data: { "s_sourceinfo": sourceinfo, "taskid": id, "s_status": status,"i_givenum" :givenum},
                     success: function (r) {
                         if (r.success) {
+                            showTip(r.msg);
                             location.reload()
                         } else {
                             showTip(r.msg);
                         }
                     }
                 })
-            }else {
-                showTip("操作不允许")
-            }
-        })
+            })
+        }else {
+            showTip("操作不允许")
+        }
     }
 
     // 打回
     function repulseTask(id, sourceinfo,status) {
-        showConfirm("确认要打回当前任务吗?", function () {
-            if (status === "已完成") {
+        if (status === "已完成") {
+            showConfirm("确认要打回当前任务吗?", function () {
+
                 $.ajax({
                     url: "/front/project/task/repulse",
                     type: 'POST',
@@ -427,10 +429,11 @@
                         }
                     }
                 })
-            }else {
-                showTip("操作不允许")
-            }
-        })
+            })
+        }else {
+            showTip("操作不允许")
+        }
+
     }
 
     function closeTask(id, sourceinfo,status) {
@@ -454,4 +457,27 @@
         }
     }
 
+    function checkMethod(stype) {
+        let num1 = {{ .T.allIsTagDataNum }}
+        let num2 = {{ .T.okIsTagDataNum }}
+        let num3 = {{ .T.IsNotOkIsTagDataNum }}
+        if (stype === "all") {
+            if (num1 <= 0) {
+                showTip("没有标注数据")
+                return;
+            }
+        }else if (stype === "notag") {
+            if (num2 <= 0) {
+                showTip("没有标注数据")
+                return;
+            }
+        }else if (stype === "tag") {
+            if (num3 <= 0) {
+                showTip("没有标注数据")
+                return;
+            }
+        }
+        window.location.href = "/front/user/check/data?pid=" + projectid + "&s_sourceinfo={{.T.s_sourceinfo}}"
+    }
+
 </script>

+ 25 - 15
src/web/templates/project/project_list.html

@@ -299,8 +299,8 @@
                         tmp = '<div>' +
                             '<a class="btn btn-sm btn-primary" onclick="editPro(\'' + pos.row + '\')">编辑</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="clearPro(\''+ pos.row +'\')">清洗</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-primary" onclick="">质检</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-primary" href="">质检结果</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" onclick="checkMethod(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">质检</a>&nbsp;&nbsp;' +
+                            // '<a class="btn btn-sm btn-primary" href="">质检结果</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="completePro(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">完成</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
@@ -420,7 +420,7 @@
                     contentType: false,
                     success: function (r) {
                         if (r.rep) {
-                            showTip(r.msg);
+                            showTip(r.msg, 3000);
                             $("#modal-create-project").modal('hide')
                             ttable.api().ajax.reload();
                         } else {
@@ -516,20 +516,30 @@
 
     function completePro(pid, sourceinfo, status) {
         if (status === "进行中") {
-            $.ajax({
-                url: "/front/project/complete",
-                type: 'POST',
-                data: {"s_projectid": pid, "s_sourceinfo": sourceinfo, "s_status": status},
-                success: function (r) {
-                    if (r.rep) {
-                        ttable.api().ajax.reload();
-                    } else {
-                        showMsg(r.msg);
-                    }
-                }
-            })
+           showConfirm("确认已经完成该项目任务?", function () {
+               $.ajax({
+                   url: "/front/project/complete",
+                   type: 'POST',
+                   data: {"s_projectid": pid, "s_sourceinfo": sourceinfo, "s_status": status},
+                   success: function (r) {
+                       if (r.rep) {
+                           ttable.api().ajax.reload();
+                       } else {
+                           showMsg(r.msg);
+                       }
+                   }
+               })
+           })
         }else {
             showTip("操作不允许")
         }
     }
+
+    function checkMethod(pid, sourceinfo, status) {
+        if (status === "进行中") {
+            window.location.href = "/front/user/check/data?pid=" + pid + "&s_sourceinfo" + sourceinfo
+        }else {
+            showTip("项目未分发任务")
+        }
+    }
 </script>

+ 41 - 21
src/web/templates/project/remark_detail.html

@@ -918,7 +918,7 @@
                         if (nextid === "") {
                             showMsg("数据已经全部标注完")
                         } else {
-                            window.location.href = "/front/user/remark/list?pid="+pid+"&tid="+tid+"&s_sourceinfo="+coll
+                            window.location.href = "/front/user/remark/detail/?pid="+pid+"&tid="+tid+"&did="+nextid+"&s_sourceinfo="+coll
                         }
                     }
                 },
@@ -1263,7 +1263,6 @@
                 },
                 //保存事件
                 upChange: function (stype) {
-                    console.log(this.editData)
                     var noTagKey = [];
                     console.log(allCheckFields)
                     this.editData.filter(function (one) {
@@ -1377,31 +1376,52 @@
                         return
                     }
                     var d = JSON.stringify(this.editData);
-                    console.log(d)
                     var _this = this
                     if (JSON.stringify(this.originData) === d) {
                         this.$alert("未做任何修改");
                         return;
                     }
-                    $.ajax({
-                        url: "/front/data/user/mark",
-                        method: "post",
-                        data: {"data": d, "s_infoid": _id, "s_usertaskid": tid},
-                        success: function (res) {
-                            if (res) {
-                                _this.$message({
-                                    message: '保存成功',
-                                    type: 'success',
-                                    duration: 1000,
-                                    offset: 300
-                                });
-                                issave = true//保存成功
+                    if (tid === "") {
+                        $.ajax({
+                            url: "/front/data/jyuser/mark",
+                            method: "post",
+                            data: {"data": d, "s_infoid": _id, "pid": pid, "s_sourceinfo": coll},
+                            success: function (res) {
+                                if (res) {
+                                    _this.$message({
+                                        message: '保存成功',
+                                        type: 'success',
+                                        duration: 1000,
+                                        offset: 300
+                                    });
+                                    issave = true//保存成功
+                                }
+                            },
+                            error: function (err) {
+                                alert(err);
                             }
-                        },
-                        error: function (err) {
-                            alert(err);
-                        }
-                    });
+                        });
+                    }else {
+                        $.ajax({
+                            url: "/front/data/user/mark",
+                            method: "post",
+                            data: {"data": d, "s_infoid": _id, "s_usertaskid": tid},
+                            success: function (res) {
+                                if (res) {
+                                    _this.$message({
+                                        message: '保存成功',
+                                        type: 'success',
+                                        duration: 1000,
+                                        offset: 300
+                                    });
+                                    issave = true//保存成功
+                                }
+                            },
+                            error: function (err) {
+                                alert(err);
+                            }
+                        });
+                    }
                 }
                 //保存提示
                 // open:function(one, type) {

+ 3 - 3
src/web/templates/project/task_group_list.html

@@ -115,8 +115,8 @@
                         tmp = '<div>' +
                             '<a class="btn btn-sm btn-primary" href="/front/group/user/task/list?grouptaskid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">查看</a>&nbsp;&nbsp;' +
                             // '<a class="btn btn-sm btn-warning">分发</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-primary">质检</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-primary">质检结果</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" href="/front/user/check/data?pid='+row.s_projectid+'&tid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">质检</a>&nbsp;&nbsp;' +
+                            // '<a class="btn btn-sm btn-primary">质检结果</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="deliverTask(\'' + val + '\',\'' + row.s_status + '\')">交付</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
@@ -137,7 +137,7 @@
 
     function deliverTask(id, status) {
         if (status === "进行中") {
-            showConfirm("", function () {
+            showConfirm("确认交付任务?", function () {
                 $.ajax({
                     url: "/front/group/task/deliver",
                     type: 'POST',

+ 32 - 17
src/web/templates/project/task_list.html

@@ -139,9 +139,9 @@
                     "data": "_id", width: "11%", render: function (val, a, row, pos) {
                         tmp = '<div>' +
                             '<a class="btn btn-sm btn-primary" href="/front/group/user/task/list?grouptaskid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">查看</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-warning" onclick="retrieveTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">收回</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-info">质检</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-info" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">关闭</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" onclick="retrieveTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">收回</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" href="/front/user/check/data?pid='+row.s_projectid+'&tid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">质检</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">关闭</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
                     }
@@ -152,7 +152,18 @@
             },
             "fnServerParams": function (e) {
                 e.s_status = $("#statusSelect option:selected").val()
-
+                let st = $('#starttime').datepicker('getDate')
+                let et = $('#endtime').datepicker('getDate')
+                if (st != null) {
+                    let s = st.toLocaleDateString()
+                    let sc = Date.parse(new Date(s).toString())/1000
+                    e.starttime = sc
+                }
+                if (et != null) {
+                    let es = et.toLocaleDateString()
+                    let etc = Date.parse(new Date(es).toString())/1000
+                    e.endtime = etc
+                }
             }
         });
 
@@ -165,10 +176,11 @@
         });
         $('#starttime').datepicker().on('changeDate', function (e) {
             $('#endtime').datepicker('setStartDate', e.dates[0])
+            ttable.api().ajax.reload();
+        })
+        $('#endtime').datepicker().on('changeDate', function () {
+            ttable.api().ajax.reload();
         })
-        // $('#endtime').datepicker().on('changeDate', function (e) {
-        //     console.log(e.timeStamp)
-        // })
         $('#statusSelect').on('changed.bs.select', function () {
             ttable.api().ajax.reload();
         })
@@ -217,19 +229,22 @@
     function exportTask() {
 
         let search = $("[type=search]").val();
+        let status = $("#statusSelect option:selected").val()
         let st = $('#starttime').datepicker('getDate')
         let et = $('#endtime').datepicker('getDate')
-        if (st === null) {
-            
-            return
+        if (st != null) {
+            st = st.toLocaleDateString()
+            st = Date.parse(new Date(st).toString())/1000
+        }else {
+            st = 0
+        }
+        if (et != null) {
+            et = et.toLocaleDateString()
+            et = Date.parse(new Date(et).toString())/1000
+        }else {
+            st = 0
         }
-        let s = $('#starttime').datepicker('getDate').toLocaleDateString()
-        let sc = Date.parse(new Date(s).toString())/1000
-        console.log(s, sc)
-        let e = $('#endtime').datepicker('getDate').toLocaleDateString()
-        let ec = Date.parse(new Date(e).toString())/1000
-        console.log(e, ec)
-        window.open("/front/group/task/export?"+"i_starttime="+sc+"&i_completetime="+ec+"&s_search="+search+"&s_status="+"-1")
+        window.location.href = "/front/group/task/export?"+"i_starttime="+st+"&i_completetime="+et+"&s_search="+search+"&s_status="+status
     }
 
 </script>

+ 9 - 1
src/web/templates/project/task_user_list.html

@@ -111,7 +111,7 @@
                 {
                     "data": "_id", width: "11%", render: function (val, a, row, pos) {
                         tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/front/user/remark/list?pid='+row.s_projectid+'&tid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">标注</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" onclick="markMethod(\'' + val + '\',\''+row.s_projectid+'\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">标注</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="deliverTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">交付</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
@@ -148,4 +148,12 @@
             showTip("操作不允许")
         }
     }
+
+    function markMethod(tid, pid, sourceinfo, status) {
+        if (status !== "已关闭") {
+            window.location.href ="/front/user/remark/list?pid="+pid+"&tid="+tid+"&s_sourceinfo="+sourceinfo
+        }else {
+            showTip("操作不允许")
+        }
+    }
 </script>