最终版本了吧0403
This commit is contained in:
parent
2d47fbc2f1
commit
af0d9a5161
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -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}
|
||||
Binary file not shown.
1
kunshan/static/css/chunk-0e2e6860.56d7e591.css
Normal file
1
kunshan/static/css/chunk-0e2e6860.56d7e591.css
Normal 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%}
|
||||
BIN
kunshan/static/css/chunk-0e2e6860.56d7e591.css.gz
Normal file
BIN
kunshan/static/css/chunk-0e2e6860.56d7e591.css.gz
Normal file
Binary file not shown.
1
kunshan/static/css/chunk-1be8445f.f44d5318.css
Normal file
1
kunshan/static/css/chunk-1be8445f.f44d5318.css
Normal 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}
|
||||
BIN
kunshan/static/css/chunk-1be8445f.f44d5318.css.gz
Normal file
BIN
kunshan/static/css/chunk-1be8445f.f44d5318.css.gz
Normal file
Binary file not shown.
1
kunshan/static/css/chunk-54dd5566.f50e6bf5.css
Normal file
1
kunshan/static/css/chunk-54dd5566.f50e6bf5.css
Normal 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}
|
||||
BIN
kunshan/static/css/chunk-54dd5566.f50e6bf5.css.gz
Normal file
BIN
kunshan/static/css/chunk-54dd5566.f50e6bf5.css.gz
Normal file
Binary file not shown.
@ -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}
|
||||
Binary file not shown.
@ -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}
|
||||
Binary file not shown.
1
kunshan/static/css/chunk-968578a0.ddc10c35.css
Normal file
1
kunshan/static/css/chunk-968578a0.ddc10c35.css
Normal 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}
|
||||
BIN
kunshan/static/css/chunk-968578a0.ddc10c35.css.gz
Normal file
BIN
kunshan/static/css/chunk-968578a0.ddc10c35.css.gz
Normal file
Binary file not shown.
@ -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}
|
||||
Binary file not shown.
1
kunshan/static/css/chunk-c52a0df6.867f6916.css
Normal file
1
kunshan/static/css/chunk-c52a0df6.867f6916.css
Normal 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}
|
||||
BIN
kunshan/static/css/chunk-c52a0df6.867f6916.css.gz
Normal file
BIN
kunshan/static/css/chunk-c52a0df6.867f6916.css.gz
Normal file
Binary file not shown.
1
kunshan/static/css/chunk-cc98a152.c2f61c2e.css
Normal file
1
kunshan/static/css/chunk-cc98a152.c2f61c2e.css
Normal 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}
|
||||
BIN
kunshan/static/css/chunk-cc98a152.c2f61c2e.css.gz
Normal file
BIN
kunshan/static/css/chunk-cc98a152.c2f61c2e.css.gz
Normal file
Binary file not shown.
@ -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.
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
kunshan/static/js/app.20375bd7.js.gz
Normal file
BIN
kunshan/static/js/app.20375bd7.js.gz
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
1
kunshan/static/js/chunk-0e2e6860.19c172a2.js
Normal file
1
kunshan/static/js/chunk-0e2e6860.19c172a2.js
Normal file
File diff suppressed because one or more lines are too long
BIN
kunshan/static/js/chunk-0e2e6860.19c172a2.js.gz
Normal file
BIN
kunshan/static/js/chunk-0e2e6860.19c172a2.js.gz
Normal file
Binary file not shown.
1
kunshan/static/js/chunk-1be8445f.ae43ce6c.js
Normal file
1
kunshan/static/js/chunk-1be8445f.ae43ce6c.js
Normal file
File diff suppressed because one or more lines are too long
BIN
kunshan/static/js/chunk-1be8445f.ae43ce6c.js.gz
Normal file
BIN
kunshan/static/js/chunk-1be8445f.ae43ce6c.js.gz
Normal file
Binary file not shown.
1
kunshan/static/js/chunk-54dd5566.b812d9e4.js
Normal file
1
kunshan/static/js/chunk-54dd5566.b812d9e4.js
Normal file
File diff suppressed because one or more lines are too long
BIN
kunshan/static/js/chunk-54dd5566.b812d9e4.js.gz
Normal file
BIN
kunshan/static/js/chunk-54dd5566.b812d9e4.js.gz
Normal file
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.
1
kunshan/static/js/chunk-968578a0.5deeee52.js
Normal file
1
kunshan/static/js/chunk-968578a0.5deeee52.js
Normal 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")}}]);
|
||||
BIN
kunshan/static/js/chunk-968578a0.5deeee52.js.gz
Normal file
BIN
kunshan/static/js/chunk-968578a0.5deeee52.js.gz
Normal file
Binary file not shown.
@ -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")}}]);
|
||||
Binary file not shown.
1
kunshan/static/js/chunk-c52a0df6.51d3288b.js
Normal file
1
kunshan/static/js/chunk-c52a0df6.51d3288b.js
Normal file
File diff suppressed because one or more lines are too long
BIN
kunshan/static/js/chunk-c52a0df6.51d3288b.js.gz
Normal file
BIN
kunshan/static/js/chunk-c52a0df6.51d3288b.js.gz
Normal file
Binary file not shown.
1
kunshan/static/js/chunk-c8be70c0.5d869573.js
Normal file
1
kunshan/static/js/chunk-c8be70c0.5d869573.js
Normal 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}}]);
|
||||
BIN
kunshan/static/js/chunk-c8be70c0.5d869573.js.gz
Normal file
BIN
kunshan/static/js/chunk-c8be70c0.5d869573.js.gz
Normal file
Binary file not shown.
@ -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}}]);
|
||||
Binary file not shown.
1
kunshan/static/js/chunk-cc98a152.faeff8e5.js
Normal file
1
kunshan/static/js/chunk-cc98a152.faeff8e5.js
Normal file
File diff suppressed because one or more lines are too long
BIN
kunshan/static/js/chunk-cc98a152.faeff8e5.js.gz
Normal file
BIN
kunshan/static/js/chunk-cc98a152.faeff8e5.js.gz
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -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
|
||||
|
||||
@ -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
|
||||
@ -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 {
|
||||
|
||||
583
src/views/case/casevideodown/index copy.vue
Normal file
583
src/views/case/casevideodown/index copy.vue
Normal 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, // 当true时,Video.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("播放完了");
|
||||
},
|
||||
// DOM元素上的readyState更改导致播放停止
|
||||
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)
|
||||
},
|
||||
|
||||
//媒体的readyState为HAVE_FUTURE_DATA或更高
|
||||
onPlayerCanplay(player) {
|
||||
// console.log('player Canplay!', player)
|
||||
},
|
||||
|
||||
//媒体的readyState为HAVE_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>
|
||||
@ -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, // 当true时,Video.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) {
|
||||
// 如果没有 total,显示动态进度(不超过90%)
|
||||
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("播放完了");
|
||||
},
|
||||
// DOM元素上的readyState更改导致播放停止
|
||||
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)
|
||||
},
|
||||
|
||||
//媒体的readyState为HAVE_FUTURE_DATA或更高
|
||||
onPlayerCanplay(player) {
|
||||
// console.log('player Canplay!', player)
|
||||
},
|
||||
|
||||
//媒体的readyState为HAVE_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>
|
||||
@ -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
|
||||
|
||||
@ -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]: ''
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user