最终版本了吧0403

This commit is contained in:
Rhett霍 2026-04-03 15:39:10 +08:00
parent 2d47fbc2f1
commit af0d9a5161
60 changed files with 997 additions and 344 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1 +0,0 @@
.app-container[data-v-7c5e1a78]{padding:10px 20px}.shad[data-v-7c5e1a78]{width:100%;background:#fff;border-radius:6px;margin-top:10px;padding:15px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog .el-dialog__body[data-v-7c5e1a78]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.video-player[data-v-7c5e1a78]{width:100%}.title[data-v-7c5e1a78]{font-weight:700;color:#409eff}[data-v-7c5e1a78] .el-form-item{margin-bottom:10px}[data-v-7c5e1a78] .el-divider--horizontal{margin:10px 0}[data-v-7c5e1a78] .el-dialog__body{padding:10px 20px;height:calc(100vh - 200px);overflow-y:auto}

View File

@ -0,0 +1 @@
.app-container[data-v-a99aff3e]{padding:10px 20px}.sahd[data-v-a99aff3e]{width:100%;background:#fff;border-radius:6px;margin-top:10px;padding:15px;box-sahdow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.tittle[data-v-a99aff3e]{font-weight:700;color:#409eff}.el-divider[data-v-a99aff3e]{margin:10px 0}.el-select[data-v-a99aff3e]{width:100%}.delsarbtnbox[data-v-a99aff3e]{text-align:right}.dialog-footer button[data-v-a99aff3e]{margin:0 20px}.mb8[data-v-a99aff3e]{margin:20px 0}.el-col-12[data-v-a99aff3e]{width:50%}

Binary file not shown.

View File

@ -0,0 +1 @@
.detail[data-v-78824de6]{padding:10px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;display:-webkit-flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.tablebox .shad[data-v-78824de6]{width:100%}.shad[data-v-78824de6]{width:65%}.shad2[data-v-78824de6],.shad[data-v-78824de6]{background:#fff;border-radius:6px;margin-top:10px;padding:15px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.shad2[data-v-78824de6]{width:33%}.shad2[data-v-78824de6] .el-table--medium .el-table__cell,.shad2[data-v-78824de6] .el-table .el-table__cell{padding:0}.left[data-v-78824de6]{display:-webkit-box;display:-ms-flexbox;display:flex;display:-webkit-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.left button[data-v-78824de6]{margin:20px 40px}.el-divider--horizontal[data-v-78824de6]{margin:5px 0}.el-date-editor.el-input[data-v-78824de6],.el-date-editor.el-input__inner[data-v-78824de6],.el-input[data-v-78824de6],.el-select[data-v-78824de6]{width:100%}.el-form-item[data-v-78824de6]{margin-bottom:12px}[data-v-78824de6] .el-input--medium .el-input__inner{height:32px;line-height:32px}label[data-v-78824de6]{font-weight:100}.title[data-v-78824de6]{font-weight:700;color:#409eff}.banli .el-date-editor.el-input[data-v-78824de6],.banli .el-date-editor.el-input__inner[data-v-78824de6]{width:37%;margin:0 5px}.mb8[data-v-78824de6]{margin:20px 0}

Binary file not shown.

View File

@ -0,0 +1 @@
.card[data-v-9db57c10]{position:relative;border:1px solid rgba(14,253,255,.5);width:100%;height:100%;padding:10px;border-radius:15px;cursor:pointer}.title[data-v-9db57c10]{font-size:20px;font-weight:bolder;color:#fff1cc;margin-bottom:10px}.body[data-v-9db57c10]{position:relative;z-index:20}[data-v-585d29e6]:root{font-size:16px}.bg[data-v-585d29e6]{margin:0 auto;width:100%;min-height:100vh;background:url(../../static/img/bg2.e254323d.jpg) no-repeat;background-size:cover;padding:0 3rem;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.bg[data-v-585d29e6],.title[data-v-585d29e6]{display:-webkit-box;display:-ms-flexbox;display:flex}.title[data-v-585d29e6]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:27px;font-weight:bolder;color:#0efdff;height:75px;margin-bottom:20px}.inspector-container[data-v-585d29e6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;gap:16px;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-bottom:40px}.inspector-statistics[data-v-585d29e6]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.shu[data-v-585d29e6]{position:relative;color:#0efdff;font-size:20px;font-weight:bolder;margin-bottom:10px;font-family:dig}

Binary file not shown.

View File

@ -1 +0,0 @@
.card[data-v-2fa17ad6]{position:relative;border:1px solid rgba(14,253,255,.5);width:100%;height:100%;padding:10px;border-radius:15px}.title[data-v-2fa17ad6]{font-size:20px;font-weight:bolder;color:#fff1cc;margin-bottom:10px}.body[data-v-2fa17ad6]{position:relative;z-index:20}[data-v-3a58fa50]:root{font-size:16px}.bg[data-v-3a58fa50]{margin:0 auto;width:100%;min-height:100vh;background:url(../../static/img/bg2.e254323d.jpg) no-repeat;background-size:cover;padding:0 3rem;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.bg[data-v-3a58fa50],.title[data-v-3a58fa50]{display:-webkit-box;display:-ms-flexbox;display:flex}.title[data-v-3a58fa50]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:27px;font-weight:bolder;color:#0efdff;height:75px;margin-bottom:20px}.inspector-container[data-v-3a58fa50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;gap:16px;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-bottom:40px}.inspector-statistics[data-v-3a58fa50]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.shu[data-v-3a58fa50]{position:relative;color:#0efdff;font-size:20px;font-weight:bolder;margin-bottom:10px;font-family:dig}

View File

@ -1 +0,0 @@
.detail[data-v-c4cc8580]{padding:10px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;display:-webkit-flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.tablebox .shad[data-v-c4cc8580]{width:100%}.shad[data-v-c4cc8580]{width:65%}.shad2[data-v-c4cc8580],.shad[data-v-c4cc8580]{background:#fff;border-radius:6px;margin-top:10px;padding:15px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.shad2[data-v-c4cc8580]{width:33%}.shad2[data-v-c4cc8580] .el-table--medium .el-table__cell,.shad2[data-v-c4cc8580] .el-table .el-table__cell{padding:0}.left[data-v-c4cc8580]{display:-webkit-box;display:-ms-flexbox;display:flex;display:-webkit-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.left button[data-v-c4cc8580]{margin:20px 40px}.el-divider--horizontal[data-v-c4cc8580]{margin:5px 0}.el-date-editor.el-input[data-v-c4cc8580],.el-date-editor.el-input__inner[data-v-c4cc8580],.el-input[data-v-c4cc8580],.el-select[data-v-c4cc8580]{width:100%}.el-form-item[data-v-c4cc8580]{margin-bottom:12px}[data-v-c4cc8580] .el-input--medium .el-input__inner{height:32px;line-height:32px}label[data-v-c4cc8580]{font-weight:100}.title[data-v-c4cc8580]{font-weight:700;color:#409eff}.banli .el-date-editor.el-input[data-v-c4cc8580],.banli .el-date-editor.el-input__inner[data-v-c4cc8580]{width:37%;margin:0 5px}.mb8[data-v-c4cc8580]{margin:20px 0}

View File

@ -0,0 +1 @@
.card[data-v-9db57c10]{position:relative;border:1px solid rgba(14,253,255,.5);width:100%;height:100%;padding:10px;border-radius:15px;cursor:pointer}.title[data-v-9db57c10]{font-size:20px;font-weight:bolder;color:#fff1cc;margin-bottom:10px}.body[data-v-9db57c10]{position:relative;z-index:20}

Binary file not shown.

View File

@ -1 +0,0 @@
.card[data-v-2fa17ad6]{position:relative;border:1px solid rgba(14,253,255,.5);width:100%;height:100%;padding:10px;border-radius:15px}.title[data-v-2fa17ad6]{font-size:20px;font-weight:bolder;color:#fff1cc;margin-bottom:10px}.body[data-v-2fa17ad6]{position:relative;z-index:20}

View File

@ -0,0 +1 @@
.app-container[data-v-612ab43b]{padding:10px 20px}.shad[data-v-612ab43b]{width:100%;background:#fff;border-radius:6px;margin-top:10px;padding:15px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog .el-dialog__body[data-v-612ab43b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.video-player[data-v-612ab43b]{width:100%}.title[data-v-612ab43b]{font-weight:700;color:#409eff}[data-v-612ab43b] .el-form-item{margin-bottom:10px}[data-v-612ab43b] .el-divider--horizontal{margin:10px 0}[data-v-612ab43b] .el-dialog__body{padding:10px 20px;height:calc(100vh - 200px);overflow-y:auto}

Binary file not shown.

View File

@ -0,0 +1 @@
.app-container[data-v-7fa67c6b]{padding:10px 20px}.shad[data-v-7fa67c6b]{width:100%;background:#fff;border-radius:6px;margin-top:10px;padding:15px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog .el-dialog__body[data-v-7fa67c6b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.video-player[data-v-7fa67c6b]{width:100%}.title[data-v-7fa67c6b]{font-weight:700;color:#409eff}[data-v-7fa67c6b] .el-form-item{margin-bottom:10px}[data-v-7fa67c6b] .el-divider--horizontal{margin:10px 0}[data-v-7fa67c6b] .el-dialog__body{padding:10px 20px;height:calc(100vh - 200px);overflow-y:auto}

Binary file not shown.

View File

@ -1 +0,0 @@
.app-container[data-v-5ee19f72]{padding:10px 20px}.sahd[data-v-5ee19f72]{width:100%;background:#fff;border-radius:6px;margin-top:10px;padding:15px;box-sahdow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);-webkit-box-sizing:border-box;box-sizing:border-box}.tittle[data-v-5ee19f72]{font-weight:700;color:#409eff}.el-divider[data-v-5ee19f72]{margin:10px 0}.el-select[data-v-5ee19f72]{width:100%}.delsarbtnbox[data-v-5ee19f72]{text-align:right}.dialog-footer button[data-v-5ee19f72]{margin:0 20px}.mb8[data-v-5ee19f72]{margin:20px 0}.el-col-12[data-v-5ee19f72]{width:50%}

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-968578a0"],{"0958":function(t,i,n){"use strict";n.r(i);var s=function(){var t=this,i=t.$createElement,n=t._self._c||i;return n("div",t._b({staticClass:"card"},"div",t.$attrs,!1),[n("div",{staticClass:"title"},[t._v(" "+t._s(t.title)+" ")]),n("div",{staticClass:"body"},[t._t("default")],2)])},e=[],a={name:"Card",inheritAttrs:!1,props:{title:{type:String,default:"标题"},click:{type:Function}},methods:{handleChangeStatistics:function(){console.log(123)}}},c=a,l=(n("6221"),n("2877")),o=Object(l["a"])(c,s,e,!1,null,"9db57c10",null);i["default"]=o.exports},"377a":function(t,i,n){},6221:function(t,i,n){"use strict";n("377a")}}]);

Binary file not shown.

View File

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-ba1ba59a"],{"0958":function(t,a,e){"use strict";e.r(a);var s=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",{staticClass:"card"},[e("div",{staticClass:"title"},[t._v(" "+t._s(t.title)+" ")]),e("div",{staticClass:"body"},[t._t("default")],2)])},i=[],n={name:"Card",props:{title:{type:String,default:"标题"}}},c=n,l=(e("d0e5"),e("2877")),d=Object(l["a"])(c,s,i,!1,null,"2fa17ad6",null);a["default"]=d.exports},"257f":function(t,a,e){},d0e5:function(t,a,e){"use strict";e("257f")}}]);

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-c8be70c0"],{1547:function(e,a,t){},"7ca7":function(e,a,t){"use strict";t.d(a,"b",(function(){return n})),t.d(a,"c",(function(){return o})),t.d(a,"a",(function(){return s})),t.d(a,"d",(function(){return i}));var r=t("b775");function n(e){return Object(r["a"])({url:"/casedownload/list",method:"post",params:e})}function o(e){return Object(r["a"])({url:"/casedownload/detail/"+e,method:"get"})}function s(e,a){return Object(r["a"])({url:"/casedownload/download",method:"post",responseType:"blob",data:e,timeout:6e5,onDownloadProgress:a})}function i(e){return Object(r["a"])({url:"/videoApi/recordvideo",method:"get",params:e})}},"93ab":function(e,a,t){"use strict";t("1547")},fd79:function(e,a,t){"use strict";t.r(a);var r=function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("div",{staticClass:"app-container"},[t("div",{staticClass:"shad"},[t("el-form",{directives:[{name:"show",rawName:"v-show",value:e.showSearch,expression:"showSearch"}],ref:"queryForm",attrs:{model:e.queryParams,size:"small",inline:!0,"label-width":"100px"}},[t("el-form-item",{attrs:{label:"案件名称",prop:"caseName"}},[t("el-input",{attrs:{placeholder:"请输入案件名称",clearable:""},nativeOn:{keyup:function(a){return!a.type.indexOf("key")&&e._k(a.keyCode,"enter",13,a.key,"Enter")?null:e.handleQuery(a)}},model:{value:e.queryParams.caseName,callback:function(a){e.$set(e.queryParams,"caseName",a)},expression:"queryParams.caseName"}})],1),t("el-form-item",{attrs:{label:"部门受案号",prop:"caseCode"}},[t("el-input",{attrs:{placeholder:"请输入部门受案号",clearable:""},nativeOn:{keyup:function(a){return!a.type.indexOf("key")&&e._k(a.keyCode,"enter",13,a.key,"Enter")?null:e.handleQuery(a)}},model:{value:e.queryParams.caseCode,callback:function(a){e.$set(e.queryParams,"caseCode",a)},expression:"queryParams.caseCode"}})],1),t("el-form-item",[t("el-button",{attrs:{type:"primary",icon:"el-icon-search",size:"mini"},on:{click:e.handleQuery}},[e._v("搜索")]),t("el-button",{attrs:{icon:"el-icon-refresh",size:"mini"},on:{click:e.resetQuery}},[e._v("重置")])],1)],1)],1),t("div",{staticClass:"shad"},[[t("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{data:e.tableData,border:""}},[t("el-table-column",{attrs:{type:"index",align:"center",width:"50"}}),t("el-table-column",{attrs:{prop:"caseName","show-overflow-tooltip":"",width:"200",label:"案件名称"}}),t("el-table-column",{attrs:{prop:"caseCode","show-overflow-tooltip":"",width:"200",label:"部门受案号"}}),t("el-table-column",{attrs:{prop:"errinfo",align:"center",label:"报错信息","show-overflow-tooltip":""}})],1)]],2),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total>0"}],attrs:{total:e.total,page:e.queryParams.pageNum,limit:e.queryParams.pageSize},on:{"update:page":function(a){return e.$set(e.queryParams,"pageNum",a)},"update:limit":function(a){return e.$set(e.queryParams,"pageSize",a)},pagination:e.getList}})],1)},n=[],o=t("7ca7"),s={name:"",data:function(){return{playshow:!1,showSearch:!0,loading:!0,total:0,dateRange:null,queryParams:{pageNum:1,pageSize:10,caseName:null,caseId:null},tableData:[]}},created:function(){this.getList()},mouted:function(){},methods:{handleQuery:function(){this.queryParams.pageNum=1,this.queryParams.pageSize=10,this.getList()},resetQuery:function(){this.queryParams={},this.queryParams.pageNum=1,this.queryParams.pageSize=10,this.dateRange=null,this.getList()},getList:function(){var e=this;this.loading=!0,Object(o["b"])(this.queryParams).then((function(a){e.tableData=a.rows,e.total=a.total,e.loading=!1}))}}},i=s,l=(t("93ab"),t("2877")),u=Object(l["a"])(i,r,n,!1,null,"30b7f8e8",null);a["default"]=u.exports}}]);

Binary file not shown.

View File

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-c8be70c0"],{1547:function(e,a,t){},"7ca7":function(e,a,t){"use strict";t.d(a,"b",(function(){return n})),t.d(a,"c",(function(){return o})),t.d(a,"a",(function(){return s})),t.d(a,"d",(function(){return i}));var r=t("b775");function n(e){return Object(r["a"])({url:"/casedownload/list",method:"post",params:e})}function o(e){return Object(r["a"])({url:"/casedownload/detail/"+e,method:"get"})}function s(e){return Object(r["a"])({url:"/casedownload/download",method:"post",responseType:"blob",data:e,timeout:6e4})}function i(e){return Object(r["a"])({url:"/videoApi/recordvideo",method:"get",params:e})}},"93ab":function(e,a,t){"use strict";t("1547")},fd79:function(e,a,t){"use strict";t.r(a);var r=function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("div",{staticClass:"app-container"},[t("div",{staticClass:"shad"},[t("el-form",{directives:[{name:"show",rawName:"v-show",value:e.showSearch,expression:"showSearch"}],ref:"queryForm",attrs:{model:e.queryParams,size:"small",inline:!0,"label-width":"100px"}},[t("el-form-item",{attrs:{label:"案件名称",prop:"caseName"}},[t("el-input",{attrs:{placeholder:"请输入案件名称",clearable:""},nativeOn:{keyup:function(a){return!a.type.indexOf("key")&&e._k(a.keyCode,"enter",13,a.key,"Enter")?null:e.handleQuery(a)}},model:{value:e.queryParams.caseName,callback:function(a){e.$set(e.queryParams,"caseName",a)},expression:"queryParams.caseName"}})],1),t("el-form-item",{attrs:{label:"部门受案号",prop:"caseCode"}},[t("el-input",{attrs:{placeholder:"请输入部门受案号",clearable:""},nativeOn:{keyup:function(a){return!a.type.indexOf("key")&&e._k(a.keyCode,"enter",13,a.key,"Enter")?null:e.handleQuery(a)}},model:{value:e.queryParams.caseCode,callback:function(a){e.$set(e.queryParams,"caseCode",a)},expression:"queryParams.caseCode"}})],1),t("el-form-item",[t("el-button",{attrs:{type:"primary",icon:"el-icon-search",size:"mini"},on:{click:e.handleQuery}},[e._v("搜索")]),t("el-button",{attrs:{icon:"el-icon-refresh",size:"mini"},on:{click:e.resetQuery}},[e._v("重置")])],1)],1)],1),t("div",{staticClass:"shad"},[[t("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{data:e.tableData,border:""}},[t("el-table-column",{attrs:{type:"index",align:"center",width:"50"}}),t("el-table-column",{attrs:{prop:"caseName","show-overflow-tooltip":"",width:"200",label:"案件名称"}}),t("el-table-column",{attrs:{prop:"caseCode","show-overflow-tooltip":"",width:"200",label:"部门受案号"}}),t("el-table-column",{attrs:{prop:"errinfo",align:"center",label:"报错信息","show-overflow-tooltip":""}})],1)]],2),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total>0"}],attrs:{total:e.total,page:e.queryParams.pageNum,limit:e.queryParams.pageSize},on:{"update:page":function(a){return e.$set(e.queryParams,"pageNum",a)},"update:limit":function(a){return e.$set(e.queryParams,"pageSize",a)},pagination:e.getList}})],1)},n=[],o=t("7ca7"),s={name:"",data:function(){return{playshow:!1,showSearch:!0,loading:!0,total:0,dateRange:null,queryParams:{pageNum:1,pageSize:10,caseName:null,caseId:null},tableData:[]}},created:function(){this.getList()},mouted:function(){},methods:{handleQuery:function(){this.queryParams.pageNum=1,this.queryParams.pageSize=10,this.getList()},resetQuery:function(){this.queryParams={},this.queryParams.pageNum=1,this.queryParams.pageSize=10,this.dateRange=null,this.getList()},getList:function(){var e=this;this.loading=!0,Object(o["b"])(this.queryParams).then((function(a){e.tableData=a.rows,e.total=a.total,e.loading=!1}))}}},i=s,l=(t("93ab"),t("2877")),u=Object(l["a"])(i,r,n,!1,null,"30b7f8e8",null);a["default"]=u.exports}}]);

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -26,14 +26,15 @@ export function getcaselistdetail(caseId) {
})
}
// 下载视频
export function download(query) {
// 下载视频 - 支持进度监听
export function downloadviedo(query, onProgress) {
return request({
url: '/casedownload/download',
method: 'post',
responseType:'blob',
responseType: 'blob',
data: query,
timeout: 60000
timeout: 600000,
onDownloadProgress: onProgress
})
}
// 指定时间段云端录像播放及下载/dev-api/videoApi/recordvideo

View File

@ -1,3 +1,4 @@
// /utils/request.js
import axios from 'axios'
import { Notification, MessageBox, Message, Loading } from 'element-ui'
import store from '@/store'
@ -14,79 +15,54 @@ export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 30000
timeout: 600000 // 增加到10分钟适应大文件
})
// request拦截器
service.interceptors.request.use(config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
// 是否需要防止数据重复提交
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers['Authorization'] = 'Bearer ' + getToken()
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params);
url = url.slice(0, -1);
config.params = {};
config.url = url;
}
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
const requestObj = {
url: config.url,
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
time: new Date().getTime()
}
// const sessionObj = cache.session.getJSON('sessionObj')
// if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
// cache.session.setJSON('sessionObj', requestObj)
// } else {
// const s_url = sessionObj.url; // 请求地址
// const s_data = sessionObj.data; // 请求数据
// const s_time = sessionObj.time; // 请求时间
// const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
// if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
// const message = '数据正在处理,请勿重复提交';
// console.warn(`[${s_url}]: ` + message)
// return Promise.reject(new Error(message))
// } else {
// cache.session.setJSON('sessionObj', requestObj)
// }
// }
}
return config
}, error => {
console.log(error)
Promise.reject(error)
return Promise.reject(error)
})
// 响应拦截器
service.interceptors.response.use(res => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
// 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
return res.data
// 如果是blob类型直接返回data不进行任何处理
if (res.config.responseType === 'blob' || res.config.responseType === 'arraybuffer') {
return res // 返回完整的response对象让调用方自己处理
}
const code = res.data.code || 200;
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 401) {
if (!isRelogin.show) {
isRelogin.show = true;
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
isRelogin.show = false;
store.dispatch('LogOut').then(() => {
location.href = '/index';
})
}).catch(() => {
isRelogin.show = false;
});
}
}).catch(() => {
isRelogin.show = false;
});
}
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
} else if (code === 500) {
Message({ message: msg, type: 'error' })
@ -124,7 +100,8 @@ export function download(url, params, filename, config) {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob',
...config
}).then(async (data) => {
}).then(async (response) => {
const data = response.data
const isBlob = blobValidate(data);
if (isBlob) {
const blob = new Blob([data])
@ -143,4 +120,4 @@ export function download(url, params, filename, config) {
})
}
export default service
export default service

View File

@ -43,7 +43,6 @@
<el-upload
class="upload-demo"
ref="upload"
multiple
drag
:action="url2"
@ -57,7 +56,7 @@
:file-list="fileList">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">请上传[mp4, avi, rmvb]格式</div>
<div class="el-upload__tip" slot="tip">请上传[mp4, avi, rmvb]格式文件大小不超过4000MB</div>
</el-upload>
<!-- <span slot="footer" class="dialog-footer">
<el-button @click="dialogVisiblevideo = false"> </el-button>
@ -624,6 +623,11 @@ export default {
},
//
async foreUpload(file) {
const maxSize = 4000 * 1024 * 1024; // 4000MB
if (file.size > maxSize) {
this.$message.error('文件大小不能超过4000MB');
return false;
}
this.md5keyV = '';
this.isMd5Encrypting = true;
try {

View File

@ -0,0 +1,583 @@
<template>
<div class="app-container">
<el-dialog :title="dialogtitle"
:visible.sync="dialogTableVisible"
:close-on-click-modal="false"
width="80%"
>
<span v-if="novideo" style="display:flex;display: -webkit-flex;flex-direction: column;justify-content: center;align-items: center;">
<img src="@/assets/images/zhengli.gif" style="width:100px;" alt="">
<br>
<span>视频资料正在打包整理中...</span>
<br>
</span>
<template v-else>
<el-row :gutter="20">
<el-col :span="24">
<el-row>
<el-col :span="24">
<span class="title">案件信息</span>
<el-divider></el-divider>
<template>
<el-form :model="form" ref="form" label-width="120px" class="demo-form">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="案件名称" :show-message="false">
<el-input readonly v-model="form.caseName" ></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="统一受案号" :show-message="false">
<el-input
readonly
v-model="form.ajjbxxList[0].sah"
v-if="form.ajjbxxList && form.ajjbxxList.length > 0"
placeholder="暂无受案号"
></el-input>
<el-input
readonly
v-else
value=""
placeholder="暂无受案号"
></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="案由">
<el-input readonly v-model="form.caseReason"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="承办检察官">
<el-input readonly v-model="form.cbJCG"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="检察官助理/文员">
<el-input readonly v-model="form.cbjZL"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="使用房间">
<el-input readonly v-model="form.useRoom" ></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="办案日期">
<el-input readonly v-model="form.caseDate" ></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="同录类型">
<el-input readonly v-model="form.clerk" ></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="备注">
<el-input readonly v-model="form.remark" ></el-input>
</el-form-item>
</el-col>
</el-row>
<span class="title">嫌疑人信息</span>
<el-divider></el-divider>
<template>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="姓名" prop="sar" :show-message="false">
<el-input readonly v-model="form.sar" ></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="身份证号">
<el-input readonly v-model="form.identityCard" ></el-input>
</el-form-item>
</el-col>
</el-row>
</template>
<span class="title">办理事项</span>
<el-divider></el-divider>
<template>
<el-row :gutter="20" class="banli">
<el-col :span="6">
<el-form-item label="办理事项">
<el-input readonly v-model="form.matter" ></el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="录像时间" prop="starts" :show-message="false">
<el-date-picker readonly
v-model="form.starts"
prop="starts"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择开始日期"
>
</el-date-picker>
<el-date-picker readonly
v-model="form.ends"
type="datetime"
prop="ends"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择结束日期"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="20">
<el-form-item label="协商结果">
<el-input readonly type="textarea"
rows="3"
v-model="form.negotiationResult"></el-input>
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</template>
</el-col>
</el-row>
</el-col>
</el-row>
<el-table :data="detailData"
height="340"
ref="multipleTable"
@selection-change="handleSelectionChange"
tooltip-effect="dark">
<el-table-column type="index" width="55" align="center"></el-table-column>
<el-table-column property="fileName" show-overflow-tooltip label="文件名"></el-table-column>
<el-table-column property="filePath" show-overflow-tooltip label="地址" width="400"></el-table-column>
<el-table-column align="center" fixed="right" label="下载" width="140">
<template slot-scope="scope">
<el-button
:icon="downloadingFiles[scope.row.fileName] ? 'el-icon-loading' : downicon"
@click="download(scope.row)"
:disabled="downloadingFiles[scope.row.fileName]"
type="text"
size="small"
>
{{ downloadingFiles[scope.row.fileName] ? '下载中...' : '下载' }}
</el-button>
<!-- <el-button :icon="downicon" v-if="isVideoFile(scope.row.fileName)" @click="backplay(scope.row)" type="text" size="small">回放</el-button> -->
</template>
</el-table-column>
</el-table>
</template>
</el-dialog>
<el-dialog :visible.sync="playshow" :before-close="handleClose">
<easy-player
:video-url='easysrc'
style="width: 100%;height: 400px;"
:showEnterprise="false"
></easy-player>
</el-dialog>
<div class="shad">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="案件名称" prop="caseName">
<el-input v-model="queryParams.caseName" placeholder="请输入案件名称" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="统一受案号" prop="caseCode">
<el-input v-model="queryParams.caseCode" placeholder="请输入统一受案号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="涉案人" prop="sar">
<el-input v-model="queryParams.sar"
placeholder="请输入涉案人"
clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="同录类型" prop="clerk">
<el-select v-model="queryParams.clerk" placeholder="请选择同录类型"
@change="handleQuery"
clearable
>
<el-option
v-for="dict in dict.type.tonglu_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="承办检察官" prop="cbJCG">
<el-input v-model="queryParams.cbJCG" placeholder="请输入承办检察官" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="shad">
<template>
<el-table v-loading="loading" :data="tableData"
border style="width: 100%"
:default-sort="defaultSort"
stripe
show-overflow-tooltip
>
<el-table-column type="index" align="center" width="50"></el-table-column>
<el-table-column prop="caseName" show-overflow-tooltip label="案件名称"></el-table-column>
<el-table-column prop="ajjbxxList[0].sah" show-overflow-tooltip label="统一受案号"></el-table-column>
<el-table-column prop="cbJCG" align="center" label="承办检察官" width="100"></el-table-column>
<el-table-column prop="sar" align="center" label="涉案人"></el-table-column>
<el-table-column prop="useRoom" align="center" label="使用房间" width="100"></el-table-column>
<el-table-column prop="clerk" align="center" label="同录类型" width="100"></el-table-column>
<el-table-column label="开始时间" align="center" width="140" >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.starts,'{y}-{m}-{d} {h}:{i}') || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="ends" width="140">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ends,'{y}-{m}-{d} {h}:{i}') || '-' }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" align="center" label="录像下载" width="100">
<template slot-scope="scope">
<el-button
icon="el-icon-s-order"
@click="handleClick(scope.row)" type="text" size="small">
详细信息
</el-button>
</template>
</el-table-column>
</el-table>
</template>
</div>
<pagination v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList" />
</div>
</template>
<script>
import EasyPlayer from '@easydarwin/easyplayer'
import { getcaselist,getcaselistdetail,downloadviedo,recordvideo, selectCaseDownloadList} from "@/api/caselist/caselist";
export default {
name:"casevideodown",
dicts: ['tonglu_type'],
components: {
EasyPlayer
},
data() {
return {
form:{
},
iszijian:"",
easysrc: '',
novideo:false ,
downicon:'el-icon-download',
playshow:false,
dialogtitle:"案件下载详情", //
dialogtitle2:"", //
showpross:false, //
progresssyatus:"success", //
//
showSearch: true,
//
loading: false,
downloading:false,
dialogTableVisible:false,
//
defaultSort: {prop: 'starts', order: 'descending'},
total: 0,
playquery:{
caseId:"",
file:"m3u8",
operate:"play"
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
caseName: null, //
caseCode: null, //
},
multipleSelection:[],
//
// tableData: [],
tableData: [{
starts:"",
ends:"",
}],
//
detailData:[],
//
downloadingFiles: {},
playerOptions: {
//
playbackRates: [0.5,1.0,2,3], //
            autoplay: true, // true,
            muted: false, //
            loop: false, //
            preload: "auto", // <video>auto,
            language: "zh-CN",
            aspectRatio: "16:9", // 使 - "16:9""4:3"
            fluid: true, // trueVideo.js player
sources: [
              {
                type: "video/mp4", //
                src: '',
// src: require('http://100.100.10.216:18000/hls/stream_9_0/stream_9_0_20231220155532_20231220155922.m3u8'),
              },
            ],
            poster: "", //
            notSupportedMessage: "此视频暂无法播放,请稍后再试", // Video.js
            controlBar: {
              timeDivider: true, //
              durationDisplay: true, //
              remainingTimeDisplay: true, //
              fullscreenToggle: true, //
}
}
}
},
created() {
this.getList();
},
mounted(){
},
methods: {
// .mp4', '.avi', '.rmvb
isVideoFile(fileName) {
const videoExtensions = ['.mp4', '.avi', '.rmvb'];
const extension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();
return !this.iszijian && videoExtensions.includes(extension);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 10;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams ={}
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 10;
this.getList();
},
/** 查询案件列表 */
getList() {
const lengthToCut = 19;
this.loading = true;
getcaselist(this.queryParams).then(res => {
this.tableData = res.rows.map(item => {
return {
...item,
starts: item.starts ? item.starts.substring(0, lengthToCut) : '',
ends: item.ends ? item.ends.substring(0, lengthToCut) : ''
};
});
this.total = res.total;
this.loading = false;
}).catch((err) => {
this.loading = false;
});
},
/** 查询案件详情 */
getCaseListdetail(bmsahV) {
const data = {
bmsah: bmsahV
}
getallcasedetail(data).then(res => {
this.selfCase = res.data.selfCase
this.sarlist = res.data.sarlist
});
},
/** 查询案件列表详情 */
getListdetail(caseId) {
this.detailData = []
this.downloading = true
getcaselistdetail(caseId).then(res => {
this.detailData = res.data;
this.downloading = false
})
.catch(error => {
this.$message.error('获取失败,请检查网络');
this.downloading = false
})
},
//
backplay() {
this.playshow = true
recordvideo(this.playquery).then(res => {
// url
// const prefix = 'http://100.100.10.216:18000';
// const url1 = '\"/hls/stream_10_0/stream_10_0_20240108153937_20240108155113.m3u8\"'
// const url = url1.replace(/"/g, ""); //
// const easysrc = prefix + url;
const prefix = res.data.prefix;
const url = res.data.url.replace(/"/g, ""); //
const easysrc = prefix + url;
// http://100.100.10.216:18000/hls/stream_9_0/stream_9_0_20231220155532_20231220155922.m3u8
this.easysrc = easysrc; // this.easysrc
});
},
// -- ,
handleClick(row) {
this.playquery.caseId = row.caseId
// this.caseId = row.caseId
this.dialogtitle = row.caseName
this.dialogTableVisible = true
if(row.roomName == null || row.roomName == ''){
this.iszijian = true
this.novideo = false
this.getListdetail(row.caseId)
}else if(row.caseId == null || row.caseId == ''){
this.novideo = true
}else{
this.iszijian = false
this.novideo = false
this.getListdetail(row.caseId)
}
this.form = row
// if(row.caseId == null || row.caseId == '' ){
// this.novideo = true
// }else{
// this.novideo = false
// this.getListdetail(row.caseId)
// }
},
toggleSelection(rows) {
if (rows) {
rows.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row);
});
} else {
this.$refs.multipleTable.clearSelection();
}
},
handleSelectionChange(val) {
this.multipleSelection = val;
console.log(this.multipleSelection)
},
//
handleClose(){
this.easysrc = ''
this.playshow = false
},
//
download(value) {
// 使$set
this.$set(this.downloadingFiles, value.fileName, true);
this.$message.info('下载开始,请稍候...');
downloadviedo(value).then(res => {
if (res) {
var elink = document.createElement('a');
elink.download = value.fileName;
elink.style.display = 'none';
var blob = new Blob([res], {type: 'application/x-msdownload'});
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
URL.revokeObjectURL(elink.href); //
this.$message.success('下载已完成,请查看浏览器下载管理器');
} else {
this.$message.error('下载失败,请联系管理员');
}
}).catch(error => {
console.error('下载失败:', error);
this.$message.error('下载超时或网络错误,请稍后重试');
}).finally(() => {
// 使$set
this.$set(this.downloadingFiles, value.fileName, false);
});
},
//
onPlayerPlay(player) {
console.log("播放了", player);
},
//
onPlayerPause(player) {
console.log("暂停了", player);
},
//
onPlayerEnded($event) {
console.log("播放完了");
},
// DOMreadyState
onPlayerWaiting(player) {
let time = localStorage.getItem("cacheTime")
if(player.cache_.currentTime - Number(time) > 0.1){
this.current = Number(time)
this.playerReadied(player)
}else{
this.current = player.cache_.currentTime
}
},
//
onPlayerPlaying($event) {
// console.log(player)
},
//
onPlayerLoadeddata($event) {
// console.log(player)
},
//readyStateHAVE_FUTURE_DATA
onPlayerCanplay(player) {
// console.log('player Canplay!', player)
},
//readyStateHAVE_ENOUGH_DATA
onPlayerCanplaythrough(player) {
// console.log('player Canplaythrough!', player)
},
//
playerStateChanged(playerCurrentState) {
// console.log('player current update state', playerCurrentState)
},
//ready
playerReadied(player) {
// console.log('example player 1 readied', player);
player.currentTime(this.current)
}
},
}
</script>
<style scoped>
.app-container{padding: 10px 20px;}
.shad{
width: 100%;
background: #fff;
border-radius: 6px;
margin-top: 10px;
padding: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
box-sizing: border-box;
}
.el-dialog .el-dialog__body{display: -webkit-flex;display: flex;justify-content:center;}
.video-player{width: 100%;}
.title{font-weight: bold;color: #409eff;}
/deep/.el-form-item{
margin-bottom: 10px;
}
/deep/.el-divider--horizontal{
margin: 10px 0;
}
/deep/.el-dialog__body{
padding: 10px 20px;
height:calc(100vh - 200px);overflow-y: auto;
}
</style>

View File

@ -145,18 +145,42 @@
</el-col>
</el-row>
<el-table :data="detailData"
v-loading="downloading"
height="340"
ref="multipleTable"
@selection-change="handleSelectionChange"
tooltip-effect="dark">
<el-table-column type="index" width="55" align="center"></el-table-column>
<el-table-column property="fileName" show-overflow-tooltip label="文件名"></el-table-column>
<el-table-column property="filePath" show-overflow-tooltip label="地址" width="400"></el-table-column>
<el-table-column align="center" fixed="right" label="下载" width="140">
<el-table-column property="fileName" show-overflow-tooltip label="文件名" width="400"></el-table-column>
<el-table-column property="filePath" show-overflow-tooltip label="地址"></el-table-column>
<el-table-column align="center" fixed="right" label="下载" width="220">
<template slot-scope="scope">
<el-button :icon="downicon" @click="download(scope.row)" type="text" size="small">下载</el-button>
<el-button :icon="downicon" v-if="isVideoFile(scope.row.fileName)" @click="backplay(scope.row)" type="text" size="small">回放</el-button>
<!-- 下载中显示进度条 -->
<div v-if="downloadingFiles[scope.row.fileName]" style="display: flex; align-items: center; gap: 8px;">
<el-progress
:percentage="downloadProgress[scope.row.fileName] || 0"
:stroke-width="6"
style="width: 100px;"
:show-text="false"
></el-progress>
<span style="font-size: 12px; color: #409eff; min-width: 45px;">
{{ downloadProgress[scope.row.fileName] || 0 }}%
</span>
<el-button
@click="cancelDownload(scope.row.fileName)"
type="text"
size="small"
icon="el-icon-close"
style="color: #f56c6c;"
>取消</el-button>
</div>
<!-- 未下载显示按钮 -->
<el-button
v-else
:icon="downicon"
@click="download(scope.row)"
type="text"
size="small"
>下载</el-button>
</template>
</el-table-column>
</el-table>
@ -231,7 +255,6 @@
<span>{{ parseTime(scope.row.ends,'{y}-{m}-{d} {h}:{i}') || '-' }}</span>
</template>
</el-table-column>
<!-- <el-table-column prop="roomName" align="center" label="房间名称"></el-table-column> -->
<el-table-column fixed="right" align="center" label="录像下载" width="100">
<template slot-scope="scope">
<el-button
@ -251,308 +274,359 @@
@pagination="getList" />
</div>
</template>
<script>
import EasyPlayer from '@easydarwin/easyplayer'
import { getcaselist,getcaselistdetail,download,recordvideo, selectCaseDownloadList} from "@/api/caselist/caselist";
import { getcaselist, getcaselistdetail, downloadviedo, recordvideo } from "@/api/caselist/caselist";
import axios from 'axios'
import { getToken } from '@/utils/auth'
export default {
name:"casevideodown",
name: "casevideodown",
dicts: ['tonglu_type'],
components: {
EasyPlayer
},
data() {
return {
form:{
},
iszijian:"",
easysrc: '',
novideo:false ,
downicon:'el-icon-download',
playshow:false,
dialogtitle:"案件下载详情", //
dialogtitle2:"", //
showpross:false, //
progresssyatus:"success", //
//
showSearch: true,
//
loading: false,
downloading:false,
dialogTableVisible:false,
//
defaultSort: {prop: 'starts', order: 'descending'},
total: 0,
playquery:{
caseId:"",
file:"m3u8",
operate:"play"
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
caseName: null, //
caseCode: null, //
},
multipleSelection:[],
//
// tableData: [],
tableData: [{
starts:"",
ends:"",
return {
form: {},
iszijian: "",
easysrc: '',
novideo: false,
downicon: 'el-icon-download',
playshow: false,
dialogtitle: "案件下载详情",
dialogtitle2: "",
showpross: false,
progresssyatus: "success",
showSearch: true,
loading: false,
downloading: false,
dialogTableVisible: false,
defaultSort: { prop: 'starts', order: 'descending' },
total: 0,
playquery: {
caseId: "",
file: "m3u8",
operate: "play"
},
queryParams: {
pageNum: 1,
pageSize: 10,
caseName: null,
caseCode: null,
sar: null,
clerk: null,
cbJCG: null
},
multipleSelection: [],
tableData: [],
detailData: [],
downloadingFiles: {},
downloadProgress: {},
abortControllers: {},
playerOptions: {
playbackRates: [0.5, 1.0, 2, 3],
autoplay: true,
muted: false,
loop: false,
preload: "auto",
language: "zh-CN",
aspectRatio: "16:9",
fluid: true,
sources: [{
type: "video/mp4",
src: '',
}],
//
detailData:[],
playerOptions: {
//
playbackRates: [0.5,1.0,2,3], //
            autoplay: true, // true,
            muted: false, //
            loop: false, //
            preload: "auto", // <video>auto,
            language: "zh-CN",
            aspectRatio: "16:9", // 使 - "16:9""4:3"
            fluid: true, // trueVideo.js player
sources: [
              {
                type: "video/mp4", //
                src: '',
// src: require('http://100.100.10.216:18000/hls/stream_9_0/stream_9_0_20231220155532_20231220155922.m3u8'),
              },
            ],
            poster: "", //
            notSupportedMessage: "此视频暂无法播放,请稍后再试", // Video.js
            controlBar: {
              timeDivider: true, //
              durationDisplay: true, //
              remainingTimeDisplay: true, //
              fullscreenToggle: true, //
}
}
poster: "",
notSupportedMessage: "此视频暂无法播放,请稍后再试",
controlBar: {
timeDivider: true,
durationDisplay: true,
remainingTimeDisplay: true,
fullscreenToggle: true,
}
}
},
created() {
this.getList();
}
},
mouted(){
created() {
this.getList();
},
methods: {
// .mp4', '.avi', '.rmvb
formatFileSize(bytes) {
if (bytes === 0) return '0 B';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
},
cancelDownload(fileName) {
if (this.abortControllers[fileName]) {
this.abortControllers[fileName].abort();
this.$message.info(`已取消下载: ${fileName}`);
this.$set(this.downloadingFiles, fileName, false);
this.$set(this.downloadProgress, fileName, null);
this.$set(this.abortControllers, fileName, null);
}
},
isVideoFile(fileName) {
const videoExtensions = ['.mp4', '.avi', '.rmvb'];
const extension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();
return !this.iszijian && videoExtensions.includes(extension);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 10;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams ={}
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 10;
this.queryParams = {
pageNum: 1,
pageSize: 10,
caseName: null,
caseCode: null,
sar: null,
clerk: null,
cbJCG: null
}
this.getList();
},
/** 查询案件列表 */
getList() {
const lengthToCut = 19;
this.loading = true;
getcaselist(this.queryParams).then(res => {
this.tableData = res.rows.map(item => {
getList() {
const lengthToCut = 19;
this.loading = true;
getcaselist(this.queryParams).then(res => {
this.tableData = res.rows.map(item => {
return {
...item,
starts: item.starts ? item.starts.substring(0, lengthToCut) : '',
ends: item.ends ? item.ends.substring(0, lengthToCut) : ''
};
});
this.total = res.total;
this.loading = false;
}).catch((err) => {
this.loading = false;
this.total = res.total;
this.loading = false;
}).catch((err) => {
this.loading = false;
this.$message.error('获取案件列表失败');
});
},
/** 查询案件详情 */
getCaseListdetail(bmsahV) {
const data = {
bmsah: bmsahV
}
getallcasedetail(data).then(res => {
this.selfCase = res.data.selfCase
this.sarlist = res.data.sarlist
});
},
/** 查询案件列表详情 */
getListdetail(caseId) {
this.detailData = []
this.downloading = true
getcaselistdetail(caseId).then(res => {
this.detailData = res.data;
this.downloading = false
})
.catch(error => {
this.$message.error('获取失败,请检查网络');
this.downloading = false
})
},
//
backplay() {
this.playshow = true
recordvideo(this.playquery).then(res => {
// url
// const prefix = 'http://100.100.10.216:18000';
// const url1 = '\"/hls/stream_10_0/stream_10_0_20240108153937_20240108155113.m3u8\"'
// const url = url1.replace(/"/g, ""); //
// const easysrc = prefix + url;
const prefix = res.data.prefix;
const url = res.data.url.replace(/"/g, ""); //
const easysrc = prefix + url;
// http://100.100.10.216:18000/hls/stream_9_0/stream_9_0_20231220155532_20231220155922.m3u8
this.easysrc = easysrc; // this.easysrc
},
getListdetail(caseId) {
this.detailData = []
this.downloading = true
getcaselistdetail(caseId).then(res => {
this.detailData = res.data;
this.downloading = false
}).catch(error => {
this.$message.error('获取失败,请检查网络');
this.downloading = false
})
},
backplay() {
this.playshow = true
recordvideo(this.playquery).then(res => {
const prefix = res.data.prefix;
const url = res.data.url.replace(/"/g, "");
const easysrc = prefix + url;
this.easysrc = easysrc;
});
},
handleClick(row) {
this.playquery.caseId = row.caseId
this.dialogtitle = row.caseName
this.dialogTableVisible = true
if (row.roomName == null || row.roomName == '') {
this.iszijian = true
this.novideo = false
this.getListdetail(row.caseId)
} else if (row.caseId == null || row.caseId == '') {
this.novideo = true
} else {
this.iszijian = false
this.novideo = false
this.getListdetail(row.caseId)
}
this.form = row
},
toggleSelection(rows) {
if (rows) {
rows.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row);
});
} else {
this.$refs.multipleTable.clearSelection();
}
},
handleSelectionChange(val) {
this.multipleSelection = val;
// console.log(this.multipleSelection)
},
handleClose() {
this.easysrc = ''
this.playshow = false
},
//
download(value) {
//
this.$set(this.downloadingFiles, value.fileName, true);
this.$set(this.downloadProgress, value.fileName, 0);
//
const abortController = new AbortController();
this.$set(this.abortControllers, value.fileName, abortController);
this.$message.info(`开始下载: ${value.fileName}`);
const baseURL = process.env.VUE_APP_BASE_API || '/dev-api';
// console.log(`===== : ${value.fileName} =====`);
// console.log('URL:', `${baseURL}/casedownload/download`);
// console.log(':', {
// fileName: value.fileName,
// filePath: value.filePath
// });
// 使 axios 便
axios({
method: 'post',
url: `${baseURL}/casedownload/download`,
data: {
fileName: value.fileName,
filePath: value.filePath
},
// -- ,
handleClick(row) {
this.playquery.caseId = row.caseId
// this.caseId = row.caseId
this.dialogtitle = row.caseName
this.dialogTableVisible = true
if(row.roomName == null || row.roomName == ''){
this.iszijian = true
this.novideo = false
this.getListdetail(row.caseId)
}else if(row.caseId == null || row.caseId == ''){
this.novideo = true
}else{
this.iszijian = false
this.novideo = false
this.getListdetail(row.caseId)
responseType: 'blob',
signal: abortController.signal,
timeout: 600000,
headers: {
'Authorization': 'Bearer ' + getToken()
},
//
onDownloadProgress: (progressEvent) => {
console.log('下载进度事件:', {
loaded: progressEvent.loaded,
total: progressEvent.total,
percent: progressEvent.total ? ((progressEvent.loaded / progressEvent.total) * 100).toFixed(2) + '%' : '未知'
});
if (progressEvent.total && progressEvent.total > 0) {
const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);
this.$set(this.downloadProgress, value.fileName, percent);
} else if (progressEvent.loaded) {
// total90%
const dynamicPercent = Math.min(90, Math.floor(progressEvent.loaded / 1024 / 100));
if (dynamicPercent > this.downloadProgress[value.fileName]) {
this.$set(this.downloadProgress, value.fileName, dynamicPercent);
}
}
this.form = row
// if(row.caseId == null || row.caseId == '' ){
// this.novideo = true
// }else{
// this.novideo = false
// this.getListdetail(row.caseId)
// }
},
toggleSelection(rows) {
if (rows) {
rows.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row);
});
} else {
this.$refs.multipleTable.clearSelection();
}
},
handleSelectionChange(val) {
this.multipleSelection = val;
console.log(this.multipleSelection)
},
//
handleClose(){
this.easysrc = ''
this.playshow = false
},
}
}).then(response => {
//
console.log('===== 响应头信息 =====');
console.log('Content-Length:', response.headers['content-length']);
console.log('Content-Type:', response.headers['content-type']);
console.log('Content-Disposition:', response.headers['content-disposition']);
console.log('所有响应头:', JSON.stringify(response.headers, null, 2));
console.log('文件大小(blob.size):', response.data.size, 'bytes');
console.log('文件大小格式化:', this.formatFileSize(response.data.size));
console.log('=====================');
//
download(value) {
// this.$download.resource(value)
this.downloading = true
download(value).then(res => {
var resdata = res;
this.downloading = false
if (resdata) {
var elink = document.createElement('a');
elink.download = value.fileName;
elink.style.display = 'none';
var blob = new Blob([resdata], {type: 'application/x-msdownload'});
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
} else {
this.downloading = false
this.$message.error('下载失败,请联系管理员');
// JSON
if (response.data.size < 1024) {
const reader = new FileReader();
reader.onload = (e) => {
try {
const text = e.target.result;
// console.log('():', text);
const errorData = JSON.parse(text);
if (errorData.code && errorData.code !== 200) {
this.$message.error(errorData.msg || '下载失败');
this.$set(this.downloadingFiles, value.fileName, false);
this.$set(this.downloadProgress, value.fileName, null);
return;
}
});
},
} catch (e) {
// JSON
// console.log('');
}
};
reader.readAsText(response.data);
}
downloadall() {
if (!this.downloading) {
this.downloading = true; // true
// const downloadPromises = this.multipleSelection.map((item) => this.download(item));
// Promise.all(downloadPromises)
// .then(() => {
// this.downloading = false; // false
// })
// .catch((error) => {
// this.downloading = false; // false
// this.$modal.msgSuccess("" + error);
// });
}
},
//
onPlayerPlay(player) {
console.log("播放了", player);
},
//
onPlayerPause(player) {
console.log("暂停了", player);
},
//
this.$set(this.downloadProgress, value.fileName, 100);
const blob = new Blob([response.data], { type: 'application/octet-stream' });
const downloadUrl = URL.createObjectURL(blob);
const elink = document.createElement('a');
elink.download = value.fileName;
elink.style.display = 'none';
elink.href = downloadUrl;
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
URL.revokeObjectURL(downloadUrl);
// console.log(`===== : ${value.fileName} =====`);
this.$message.success(`下载完成: ${value.fileName}`);
}).catch(error => {
if (error.name === 'AbortError') {
// console.log(`: ${value.fileName}`);
this.$message.info(`已取消下载: ${value.fileName}`);
} else {
console.error('下载失败详情:', error);
this.$message.error(`下载失败: ${value.fileName},请检查网络后重试`);
}
}).finally(() => {
this.$set(this.downloadingFiles, value.fileName, false);
setTimeout(() => {
if (this.downloadProgress[value.fileName] === 100) {
this.$set(this.downloadProgress, value.fileName, null);
} else {
this.$set(this.downloadProgress, value.fileName, null);
}
this.$set(this.abortControllers, value.fileName, null);
}, 1000);
});
},
//
onPlayerEnded($event) {
console.log("播放完了");
},
// DOMreadyState
onPlayerWaiting(player) {
let time = localStorage.getItem("cacheTime")
if(player.cache_.currentTime - Number(time) > 0.1){
this.current = Number(time)
this.playerReadied(player)
}else{
this.current = player.cache_.currentTime
}
},
//
onPlayerPlaying($event) {
// console.log(player)
},
//
onPlayerLoadeddata($event) {
// console.log(player)
},
//readyStateHAVE_FUTURE_DATA
onPlayerCanplay(player) {
// console.log('player Canplay!', player)
},
//readyStateHAVE_ENOUGH_DATA
onPlayerCanplaythrough(player) {
// console.log('player Canplaythrough!', player)
},
//
playerStateChanged(playerCurrentState) {
// console.log('player current update state', playerCurrentState)
},
//ready
playerReadied(player) {
// console.log('example player 1 readied', player);
player.currentTime(this.current)
}
onPlayerPlay(player) {
console.log("播放了", player);
},
onPlayerPause(player) {
console.log("暂停了", player);
},
onPlayerEnded($event) {
console.log("播放完了");
},
onPlayerWaiting(player) {
let time = localStorage.getItem("cacheTime")
if (player.cache_.currentTime - Number(time) > 0.1) {
this.current = Number(time)
this.playerReadied(player)
} else {
this.current = player.cache_.currentTime
}
},
onPlayerPlaying($event) {},
onPlayerLoadeddata($event) {},
onPlayerCanplay(player) {},
onPlayerCanplaythrough(player) {},
playerStateChanged(playerCurrentState) {},
playerReadied(player) {
player.currentTime(this.current)
}
},
}
</script>
@ -560,16 +634,15 @@ export default {
.app-container{padding: 10px 20px;}
.shad{
width: 100%;
background: #fff;
border-radius: 6px;
margin-top: 10px;
padding: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
box-sizing: border-box;
background: #fff;
border-radius: 6px;
margin-top: 10px;
padding: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
box-sizing: border-box;
}
.el-dialog .el-dialog__body{display: -webkit-flex;display: flex;justify-content:center;}
.video-player{width: 100%;}
.title{font-weight: bold;color: #409eff;}
/deep/.el-form-item{
margin-bottom: 10px;
@ -579,6 +652,7 @@ export default {
}
/deep/.el-dialog__body{
padding: 10px 20px;
height:calc(100vh - 200px);overflow-y: auto;
height:calc(100vh - 200px);
overflow-y: auto;
}
</style>

View File

@ -198,7 +198,6 @@
<el-col :span="12">
<el-form-item label="证件号"
:prop="'sarlist.' + index + '.zjhm'"
>
<!-- :rules="[{ required: true, message: '请输入证件号', trigger: 'blur' }]" -->
<el-input v-model="item.zjhm" placeholder="请输入证件号" />
@ -425,6 +424,19 @@ export default {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
//
const emptyZjhmIndices = [];
this.form.sarlist.forEach((item, index) => {
if (!item.zjhm || item.zjhm.trim() === '') {
emptyZjhmIndices.push(index);
}
});
//
emptyZjhmIndices.forEach((index, i) => {
this.form.sarlist[index].zjhm = ' '.repeat(i + 1);
});
//
this.formdata.selfCase.ajmc = this.form.ajmc
this.formdata.selfCase.slrq = this.form.slrq

View File

@ -38,7 +38,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://192.168.0.3:18098`,
// target: `http://192.168.0.3:18098`,
// target: `http://192.168.3.12:18098/`, //服务器
// target: `http://192.168.3.10:8099`, //耗子
// target: `http://106.15.139.36:18090`,
@ -46,7 +46,7 @@ module.exports = {
// target: `http://120.79.202.7:443`,
// target: `http://100.100.10.216:8099`,
// target: 'http://106.15.139.36:18090',
// target: 'http://127.0.0.1:18098/', //小乌龟本地
target: 'http://172.16.1.97:18098/', //小乌龟本地
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''