This commit is contained in:
Rhett霍 2024-12-30 09:21:10 +08:00
parent 94053a0990
commit c608d2d56a
2 changed files with 242 additions and 461 deletions

View File

@ -1,249 +0,0 @@
<template>
<div class="app-container">
<!-- 表单区域 -->
<el-form ref="queryParamsRef" :inline="true" :model="queryParams">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="相关领域">
<el-select v-model="queryParams.casetype" style="width: 15vw;" @change="getLists" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="来访类别">
<el-select v-model="queryParams.casetype" style="width: 15vw;" @change="getLists" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="级别">
<el-select v-model="queryParams.casetype" style="width: 15vw;" @change="getLists" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" @click="getLists">
<el-icon class="me-1">
<Search />
</el-icon>
查询
</el-button>
</el-form-item>
<el-form-item>
<el-button @click="handleRest(queryParamsRef)">
<el-icon class="me-1">
<Refresh />
</el-icon>
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider class="mt-0" />
<el-row class="mb-3" :gutter="10">
<el-col :span="1.5">
<el-space>
<el-button plain type="primary" @click="AddEditRegistVisitRef.showAddCase()">
<el-icon class="me-2">
<Plus />
</el-icon>
新增
</el-button>
</el-space>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="uploadRef.showupload()">导入</el-button>
<Upload ref="uploadRef" @getList="getLists" />
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col>
</el-row>
<!-- 表格区域 -->
<el-table
ref="CaseTableRef"
v-loading="loading"
:data="CaseTables"
@row-dblclick="handleRowDblClick"
show-overflow-tooltip
>
<el-table-column label="日期" prop="name" />
<el-table-column label="上访人" prop="name" />
<el-table-column label="电话" prop="casetype" />
<el-table-column label="身份证号码" prop="unitname" />
<el-table-column label="反映事项" prop="state">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="是否重点对象" prop="state">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="级别" prop="state" width="80">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="处理情况" prop="depname"/>
<el-table-column fixed="right" align="center" label="操作" width="240">
<template #default="scope">
<!-- <el-button link size="small" type="warning">
<el-icon class="me-1">
<UserFilled />
</el-icon>
上访人管理
</el-button> -->
<el-button link size="small" type="primary" @click="AddEditRegistVisitRef.showEditCase(scope.row)">
<el-icon class="me-1">
<Edit />
</el-icon>
编辑
</el-button>
<el-button link size="small" type="warning" @click="AddEditRegistVisitRef.showEditCase(scope.row)">
<el-icon class="me-1">
<Edit />
</el-icon>
详情
</el-button>
<el-button link size="small" type="danger" @click="deleteCase(scope.row)">
<el-icon class="me-1">
<Delete />
</el-icon>
取消
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
v-model:page="paging.pageNum"
v-model:limit="paging.pageSize"
@pagination="getLists"
/>
<AddEditRegistVisit ref="AddEditRegistVisitRef" @getList="getLists" />
</div>
</template>
<script setup>
import { ElMessageBox } from "element-plus";
import AddEditRegistVisit from "./components/AddEditRegistVisit.vue";
import Upload from "./components/upload.vue"; //
import { getCurrentInstance } from "vue";
import PageEnum from "@/enum/PageEnum.js";
const { proxy } = getCurrentInstance();
const { nj_anjian_type, nj_anjian_status } = proxy.useDict("nj_anjian_type", "nj_anjian_status");
const isShow = ref(true);
const queryParamsRef = ref();
const deleteStatus = ref(true);
const AddEditRegistVisitRef = ref();
const uploadRef = ref();
const upload = ref({});
const loading = ref(false);
const paging = ref({
pageNum: 1,
pageSize: PageEnum.SIZE,
});
const queryParams = ref({
name: "",
casecode: "",
brief: "",
state: "1,2",
});
const total = ref(0);
const CaseTables = ref([
{
name: "1",
},
{
name: "2",
},
]);
onMounted(() => {
getLists();
});
//
const getLists = async () => {
// loading.value = true
// await getCaseInfoList(queryParams.value, paging.value).then(res => {
// CaseTables.value = res.rows
// total.value = res.total
// loading.value = false
// })
};
//
const handleRowDblClick = (row) => {
console.log("双击的行数据:", row);
AddEditRegistVisitRef.value.showAddCase(row)
//
};
const deleteCase = async (row) => {
ElMessageBox.confirm("确定删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
// deleteCaseInfo(row.caseCaseinfoId).then((res) => {
// getLists();
// });
})
.catch(() => {});
};
/** 导出按钮操作 */
function handleExport() {
// proxy.download("system/user/export", {
// ...queryParams.value,
// }, `user_${new Date().getTime()}.xlsx`);
}
//
const handleRest = (formEl) => {
queryParams.value = {
name: "",
casecode: "",
brief: "",
state: "1,2",
};
getLists();
};
</script>
<style lang="scss" scoped></style>

View File

@ -1,219 +1,249 @@
<template>
<div>
<!-- 回放界面 -->
<div id="operate" class="operate">
<div class="module">
<div class="item">
<span class="label">监控点编号</span>
<input v-model="cameraIndexCode" type="text" />
</div>
<div class="item">
<span class="label">回放开始时间</span>
<input v-model="startTime" type="text" placeholder="yyyy-MM-dd hh:mm:ss格式" />
</div>
<div class="item">
<span class="label">回放结束时间</span>
<input v-model="endTime" type="text" placeholder="yyyy-MM-dd hh:mm:ss格式" />
</div>
<div class="item" style="margin-top: 20px;margin-left: -20px;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button
style="width: 90px;padding: 0;margin: 0;"
@click="startPlayback"
class="btn"
<div class="app-container">
<!-- 表单区域 -->
<el-form ref="queryParamsRef" :inline="true" :model="queryParams">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="相关领域">
<el-select v-model="queryParams.casetype" style="width: 15vw;" @change="getLists" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="来访类别">
<el-select v-model="queryParams.casetype" style="width: 15vw;" @change="getLists" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="级别">
<el-select v-model="queryParams.casetype" style="width: 15vw;" @change="getLists" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" @click="getLists">
<el-icon class="me-1">
<Search />
</el-icon>
查询
</el-button>
</el-form-item>
<el-form-item>
<el-button @click="handleRest(queryParamsRef)">
<el-icon class="me-1">
<Refresh />
</el-icon>
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider class="mt-0" />
<el-row class="mb-3" :gutter="10">
<el-col :span="1.5">
<el-space>
<el-button plain type="primary" @click="AddEditRegistVisitRef.showAddCase()">
<el-icon class="me-2">
<Plus />
</el-icon>
新增
</el-button>
</el-space>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="uploadRef.showupload()">导入</el-button>
<Upload ref="uploadRef" @getList="getLists" />
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col>
</el-row>
<!-- 表格区域 -->
<el-table
ref="CaseTableRef"
v-loading="loading"
:data="CaseTables"
@row-dblclick="handleRowDblClick"
show-overflow-tooltip
>
回放
</button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button
style="width: 90px;padding: 0;margin: 0;"
@click="stopAllPlayback"
class="btn"
>
停止全部回放
</button>
</div>
</div>
<el-table-column label="日期" prop="name" />
<el-table-column label="上访人" prop="name" />
<el-table-column label="电话" prop="casetype" />
<el-table-column label="身份证号码" prop="unitname" />
<el-table-column label="反映事项" prop="state">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="是否重点对象" prop="state">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="级别" prop="state" width="80">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="处理情况" prop="depname"/>
<el-table-column fixed="right" align="center" label="操作" width="240">
<template #default="scope">
<!-- <el-button link size="small" type="warning">
<el-icon class="me-1">
<UserFilled />
</el-icon>
上访人管理
</el-button> -->
<el-button link size="small" type="primary" @click="AddEditRegistVisitRef.showEditCase(scope.row)">
<el-icon class="me-1">
<Edit />
</el-icon>
编辑
</el-button>
<el-button link size="small" type="warning" @click="AddEditRegistVisitRef.showEditCase(scope.row)">
<el-icon class="me-1">
<Edit />
</el-icon>
详情
</el-button>
<el-button link size="small" type="danger" @click="deleteCase(scope.row)">
<el-icon class="me-1">
<Delete />
</el-icon>
取消
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
v-model:page="paging.pageNum"
v-model:limit="paging.pageSize"
@pagination="getLists"
/>
<AddEditRegistVisit ref="AddEditRegistVisitRef" @getList="getLists" />
</div>
</template>
<div style="margin-left: 15px;">
注意 开始回放前请打开该文件的源代码 appkey录像存储位置等信息修改为实际项目中的信息
</div>
<script setup>
import { ElMessageBox } from "element-plus";
import AddEditRegistVisit from "./components/AddEditRegistVisit.vue";
import Upload from "./components/upload.vue"; //
import { getCurrentInstance } from "vue";
<!-- 视频窗口展示 -->
<div id="playWnd" class="playWnd" style="left: 109px; top: 133px;"></div>
</div>
</template>
import PageEnum from "@/enum/PageEnum.js";
<script setup>
import { onMounted, ref } from "vue";
const { proxy } = getCurrentInstance();
const { nj_anjian_type, nj_anjian_status } = proxy.useDict("nj_anjian_type", "nj_anjian_status");
//
const cameraIndexCode = ref("");
const startTime = ref(formatDate(new Date(), "yyyy-MM-dd 00:00:00"));
const endTime = ref(formatDate(new Date(), "yyyy-MM-dd 23:59:59"));
const isShow = ref(true);
const queryParamsRef = ref();
const deleteStatus = ref(true);
const AddEditRegistVisitRef = ref();
const uploadRef = ref();
const upload = ref({});
let oWebControl = null;
let pubKey = "";
const loading = ref(false);
//
onMounted(() => {
initPlugin();
});
//
function initPlugin() {
oWebControl = new WebControl({
szPluginContainer: "playWnd", // id
iServicePortStart: 15900, // 使
iServicePortEnd: 15900,
cbConnectSuccess: () => {
//
oWebControl.JS_StartService("window", {
dllPath: "./VideoPluginConnect.dll",
}).then(() => {
oWebControl.JS_SetWindowControlCallback({
cbIntegrationCallBack: cbIntegrationCallBack,
});
oWebControl.JS_CreateWnd("playWnd", 1000, 600).then(() => {
console.log("JS_CreateWnd success");
init(); //
const paging = ref({
pageNum: 1,
pageSize: PageEnum.SIZE,
});
const queryParams = ref({
name: "",
casecode: "",
brief: "",
state: "1,2",
});
const total = ref(0);
const CaseTables = ref([
{
name: "1",
},
cbConnectError: () => {
console.log("cbConnectError");
handlePluginError();
},
cbConnectClose: () => {
console.log("cbConnectClose");
handlePluginError();
{
name: "2",
},
]);
onMounted(() => {
getLists();
});
}
//
function handlePluginError() {
oWebControl = null;
$("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
WebControl.JS_WakeUp("VideoWebPlugin://");
}
//
function init() {
getPubKey(() => {
const appkey = "28730366";
const secret = setEncrypt("HSZkCJpSJ7gSUYrO6wVi");
const ip = "10.19.132.75";
const playMode = 1;
const port = 443;
const snapDir = "D:\\SnapDir";
const videoDir = "D:\\VideoDir";
const layout = "1x1";
const enableHTTPS = 1;
const encryptedFields = "secret";
const showToolbar = 1;
const showSmart = 1;
const buttonIDs = "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769";
oWebControl.JS_RequestInterface({
funcName: "init",
argument: JSON.stringify({
appkey,
secret,
ip,
playMode,
port,
snapDir,
videoDir,
layout,
enableHTTPS,
encryptedFields,
showToolbar,
showSmart,
buttonIDs,
}),
}).then(() => {
oWebControl.JS_Resize(1000, 600); //
});
});
}
//
function getPubKey(callback) {
oWebControl.JS_RequestInterface({
funcName: "getRSAPubKey",
argument: JSON.stringify({
keyLength: 1024,
}),
}).then((oData) => {
if (oData.responseMsg.data) {
pubKey = oData.responseMsg.data;
callback();
}
});
}
// RSA
function setEncrypt(value) {
const encrypt = new JSEncrypt();
encrypt.setPublicKey(pubKey);
return encrypt.encrypt(value);
}
//
function startPlayback() {
const cameraIndexCodeVal = cameraIndexCode.value;
const startTimeStamp = new Date(startTime.value.replace("-", "/").replace("-", "/")).getTime();
const endTimeStamp = new Date(endTime.value.replace("-", "/").replace("-", "/")).getTime();
const recordLocation = 0;
const transMode = 1;
const gpuMode = 0;
const wndId = -1;
oWebControl.JS_RequestInterface({
funcName: "startPlayback",
argument: JSON.stringify({
cameraIndexCode: cameraIndexCodeVal,
startTimeStamp: Math.floor(startTimeStamp / 1000).toString(),
endTimeStamp: Math.floor(endTimeStamp / 1000).toString(),
recordLocation,
transMode,
gpuMode,
wndId,
}),
});
}
//
function stopAllPlayback() {
oWebControl.JS_RequestInterface({
funcName: "stopAllPlayback",
});
}
//
function formatDate(date, fmt) {
const o = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds(),
"S": date.getMilliseconds(),
//
const getLists = async () => {
// loading.value = true
// await getCaseInfoList(queryParams.value, paging.value).then(res => {
// CaseTables.value = res.rows
// total.value = res.total
// loading.value = false
// })
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1 ? o[k] : (`00${o[k]}`).substr(`${o[k]}`.length)));
}
}
return fmt;
}
</script>
<style scoped>
/* Your styles remain the same as in your original HTML */
</style>
//
const handleRowDblClick = (row) => {
console.log("双击的行数据:", row);
AddEditRegistVisitRef.value.showAddCase(row)
//
};
const deleteCase = async (row) => {
ElMessageBox.confirm("确定删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
// deleteCaseInfo(row.caseCaseinfoId).then((res) => {
// getLists();
// });
})
.catch(() => {});
};
/** 导出按钮操作 */
function handleExport() {
// proxy.download("system/user/export", {
// ...queryParams.value,
// }, `user_${new Date().getTime()}.xlsx`);
}
//
const handleRest = (formEl) => {
queryParams.value = {
name: "",
casecode: "",
brief: "",
state: "1,2",
};
getLists();
};
</script>
<style lang="scss" scoped></style>