lcw
This commit is contained in:
21287
package-lock.json
generated
21287
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -23,6 +23,7 @@
|
|||||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
"axios": "^0.26.0",
|
"axios": "^0.26.0",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
|
"docxtemplater": "^3.67.6",
|
||||||
"draggable-resizable-vue3": "1.0.94-beta",
|
"draggable-resizable-vue3": "1.0.94-beta",
|
||||||
"echarts": "^5.3.3",
|
"echarts": "^5.3.3",
|
||||||
"echarts-gl": "^2.0.9",
|
"echarts-gl": "^2.0.9",
|
||||||
@ -30,6 +31,7 @@
|
|||||||
"element-plus": "2.0.2",
|
"element-plus": "2.0.2",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"gifler": "^0.1.0",
|
"gifler": "^0.1.0",
|
||||||
|
"html-docx-js": "^0.3.1",
|
||||||
"image-compressor.js": "^1.1.4",
|
"image-compressor.js": "^1.1.4",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"lunar-javascript": "^1.7.5",
|
"lunar-javascript": "^1.7.5",
|
||||||
@ -37,6 +39,7 @@
|
|||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"ol": "^6.14.1",
|
"ol": "^6.14.1",
|
||||||
"pinia": "^3.0.1",
|
"pinia": "^3.0.1",
|
||||||
|
"pizzip": "^3.1.5",
|
||||||
"siriwave": "2.3.0",
|
"siriwave": "2.3.0",
|
||||||
"tesseract.js": "^6.0.1",
|
"tesseract.js": "^6.0.1",
|
||||||
"vue": "^3.2.8",
|
"vue": "^3.2.8",
|
||||||
|
|||||||
@ -129,7 +129,12 @@ v-deep .el-loading-mask {
|
|||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "仿宋_GB2312";
|
||||||
|
src: url("~@/assets/font/仿宋_GB2312.ttf");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
.bk_drawer_box {
|
.bk_drawer_box {
|
||||||
.el-drawer__header {
|
.el-drawer__header {
|
||||||
background: #fff !important;
|
background: #fff !important;
|
||||||
|
|||||||
@ -34,3 +34,13 @@ export const mjjfSelectPage = (params) => {
|
|||||||
params
|
params
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export const importantBaseSelectPage = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/important/base/selectPage",
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
49
src/api/fileapi.js
Normal file
49
src/api/fileapi.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import request from "@/utils/request";
|
||||||
|
const api = "/mosty-api/mosty-gsxt";
|
||||||
|
// 案类特点统计
|
||||||
|
export const xsasjxsajaltdtj = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/altdtj`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const xsasjxsajfbqktj = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/fbqktj`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const xsasjxsajFatdtj = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/xsajFatdtj`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const xsasjxsajxyrQkfx = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/xyrQkfx`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const xsasjxsajypbgZttj = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/ypbgZttj`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const xsasjxsajqxajqk = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/qxajqk`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -31,6 +31,12 @@ export const tbJqGetPageList = (params) => {
|
|||||||
params
|
params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export const tbJqId = (id) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/lzJcjPjdb/${id}`,
|
||||||
|
method: "get",
|
||||||
|
})
|
||||||
|
}
|
||||||
// 预警列表
|
// 预警列表
|
||||||
|
|
||||||
export const getPageAllList = (data) => {
|
export const getPageAllList = (data) => {
|
||||||
@ -217,6 +223,7 @@ export const sjzlQryp = (id) => {
|
|||||||
method: "get",
|
method: "get",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 刑事案件
|
||||||
export const xsajSelectPage = (params) => {
|
export const xsajSelectPage = (params) => {
|
||||||
return request({
|
return request({
|
||||||
url: api + `/asj/xsaj/selectPage`,
|
url: api + `/asj/xsaj/selectPage`,
|
||||||
@ -224,6 +231,29 @@ export const xsajSelectPage = (params) => {
|
|||||||
params
|
params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 行政案件
|
||||||
|
export const xzajSelectPage = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xzaj/selectPage`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const asjxzajid = (id) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xzaj/${id}`,
|
||||||
|
method: "get",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const asjxsajid = (id) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/asj/xsaj/${id}`,
|
||||||
|
method: "get",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const xsajDictSelectList = (params) => {
|
export const xsajDictSelectList = (params) => {
|
||||||
return request({
|
return request({
|
||||||
url: api + ``,
|
url: api + ``,
|
||||||
|
|||||||
@ -31,11 +31,19 @@ header {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
.hd {
|
.hd {
|
||||||
white-space: nowrap;
|
width: 150px;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
margin: 10px 10px 0 10px;
|
margin: 10px 10px 0 10px;
|
||||||
|
|
||||||
|
.name,
|
||||||
|
.work {
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-dropdown {
|
.el-dropdown {
|
||||||
|
|||||||
BIN
src/assets/font/仿宋_GB2312.ttf
Normal file
BIN
src/assets/font/仿宋_GB2312.ttf
Normal file
Binary file not shown.
@ -111,7 +111,6 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import * as rule from "@/utils/rules.js";
|
import * as rule from "@/utils/rules.js";
|
||||||
import * as MOSTY from "@/components/MyComponents/index";
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
import { ElMessage } from "element-plus";
|
|
||||||
import { defineProps, watch, ref, onMounted, nextTick } from "vue";
|
import { defineProps, watch, ref, onMounted, nextTick } from "vue";
|
||||||
import { selectUnAccreditPage, selectUserDeptPage } from "@/api/user-manage";
|
import { selectUnAccreditPage, selectUserDeptPage } from "@/api/user-manage";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<template v-for="(item, index) in options">
|
<template v-for="(item, index) in options">
|
||||||
<template v-if="values.includes(item.value)">
|
|
||||||
|
<template v-if="values.includes(item.value||item.itemValue)">
|
||||||
<span
|
<span
|
||||||
v-if="item.elTagType == 'default' || item.elTagType == '' || tag == false"
|
v-if="item.elTagType == 'default' || item.elTagType == '' || tag == false"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@ -9,7 +10,7 @@
|
|||||||
:class="item.elTagType"
|
:class="item.elTagType"
|
||||||
@click="handleItem(item)"
|
@click="handleItem(item)"
|
||||||
:style="{color: props.color}"
|
:style="{color: props.color}"
|
||||||
>{{ item.label || item.zdmc }}</span>
|
>{{ item.label || item.zdmc||item.itemName }}</span>
|
||||||
<el-tag
|
<el-tag
|
||||||
v-else
|
v-else
|
||||||
:disable-transitions="true"
|
:disable-transitions="true"
|
||||||
@ -18,7 +19,7 @@
|
|||||||
:type="item.elTagType === 'primary' ? '' : item.elTagType"
|
:type="item.elTagType === 'primary' ? '' : item.elTagType"
|
||||||
@click="handleItem(item)"
|
@click="handleItem(item)"
|
||||||
:class="item.elTagType"
|
:class="item.elTagType"
|
||||||
>{{ item.label || item.zdmc }}</el-tag
|
>{{ item.label || item.zdmc||item.itemName }}</el-tag
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-dialog v-model="modelValue" title="文件解析" width="1000px" :show-close="true" :center="true" :close-on-click-modal="false" :before-close="handleClose" >
|
<el-dialog :model-value="modelValue" title="文件解析" width="1000px" :show-close="true" :center="true" :close-on-click-modal="false" :before-close="handleClose" >
|
||||||
<div class="flex align-center">
|
<div class="flex align-center">
|
||||||
<h3>提取文件类型:</h3>
|
<h3>提取文件类型:</h3>
|
||||||
<el-radio-group v-model="active" @change="changeRadio">
|
<el-radio-group v-model="active" @change="changeRadio">
|
||||||
@ -319,19 +319,15 @@ const uploadFile = (file) =>{
|
|||||||
|
|
||||||
|
|
||||||
// 刷新js
|
// 刷新js
|
||||||
// 全局变量,用于跟踪OCR模型是否已经初始化
|
|
||||||
let ocrModelInitialized = false;
|
|
||||||
|
|
||||||
// 只初始化一次OCR模型
|
|
||||||
const frashJs = async () =>{
|
const frashJs = async () =>{
|
||||||
if(!ocrModelInitialized){
|
if(!imgIsLoad){
|
||||||
try {
|
try {
|
||||||
await ocr.init();// 模型初始化
|
await ocr.init();// 模型初始化
|
||||||
ocrModelInitialized = true;
|
imgIsLoad = true;
|
||||||
proxy.$message({ type: "success", message: "加载成功" });
|
proxy.$message({ type: "success", message: "加载成功" });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
proxy.$message({ type: "error", message: "加载失败,请刷新页面" });
|
proxy.$message({ type: "error", message: "加载失败,请刷新页面" });
|
||||||
ocrModelInitialized = false;
|
imgIsLoad = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="form-item-box" :style="{ width: width }">
|
<div class="form-item-box" :style="{ width: width }">
|
||||||
<el-checkbox-group :model-value="localValue" @change="handleCheckAllChange">
|
<el-checkbox-group :model-value="modelValue" @change="handleCheckAllChange">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-for="item in checkList"
|
v-for="item in checkList"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@ -34,21 +34,15 @@ const props = defineProps({
|
|||||||
type: String
|
type: String
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const localValue = ref(props.modelValue);
|
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.modelValue,
|
() => props.modelValue,
|
||||||
(val) => {
|
(val) => {
|
||||||
localValue.value = val;
|
|
||||||
console.log(val, "val");
|
console.log(val, "val");
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
const emits = defineEmits(["update:modelValue"]);
|
const emits = defineEmits(["update:modelValue"]);
|
||||||
const handleCheckAllChange = (e) => {
|
const handleCheckAllChange = (e) => {
|
||||||
localValue.value = e;
|
|
||||||
emits("update:modelValue", e);
|
emits("update:modelValue", e);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="form-item-box choose-icon-zj" :style="{ width: width }">
|
<div class="form-item-box choose-icon-zj" :style="{ width: width }">
|
||||||
<el-autocomplete
|
<el-autocomplete
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
v-model="modelValue"
|
:model-value="modelValue"
|
||||||
:fetch-suggestions="querySearch"
|
:fetch-suggestions="querySearch"
|
||||||
popper-class="choose-icon-zj-autocomplete"
|
popper-class="choose-icon-zj-autocomplete"
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="form-item-box zj-email-wrap" :style="{ width: width }">
|
<div class="form-item-box zj-email-wrap" :style="{ width: width }">
|
||||||
<el-autocomplete v-model="email" v-bind="$attrs" :placeholder="placeholder" :fetch-suggestions="querySearch"
|
<el-autocomplete :model-value="email" v-bind="$attrs" :placeholder="placeholder" :fetch-suggestions="querySearch"
|
||||||
:trigger-on-focus="false" class="inline-input" @select="handleSelect" @input="onInput" />
|
:trigger-on-focus="false" class="inline-input" @select="handleSelect" @input="onInput" />
|
||||||
<!-- <el-icon class="errorIcon">
|
<!-- <el-icon class="errorIcon">
|
||||||
<circle-close-filled />
|
<circle-close-filled />
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
:options="tableData"
|
:options="tableData"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
v-model="modelValue"
|
:model-value="modelValue"
|
||||||
@change="handleChange"
|
@change="handleChange"
|
||||||
:props="endProps"
|
:props="endProps"
|
||||||
:filterable="filterable"
|
:filterable="filterable"
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<el-input
|
<el-input
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
v-model="modelValue"
|
:model-value="modelValue"
|
||||||
@input="onInput"
|
@input="onInput"
|
||||||
></el-input>
|
></el-input>
|
||||||
<!-- <el-icon class="errorIcon"><circle-close-filled /></el-icon>
|
<!-- <el-icon class="errorIcon"><circle-close-filled /></el-icon>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="form-item-box" :style="{ width: width }">
|
<div class="form-item-box" :style="{ width: width }">
|
||||||
<el-input :placeholder="placeholder" v-bind="$attrs" v-model="modelValue" @input="onInput" ></el-input>
|
<el-input :placeholder="placeholder" v-bind="$attrs" :model-value="modelValue" @input="onInput" ></el-input>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="form-item-box" :style="{ width: width }">
|
<div class="form-item-box" :style="{ width: width }">
|
||||||
<el-input :placeholder="placeholder" v-bind="$attrs" v-model="modelValue" @input="onInput" ></el-input>
|
<el-input :placeholder="placeholder" v-bind="$attrs" :model-value="modelValue" @input="onInput" ></el-input>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<el-select
|
<el-select
|
||||||
:disabled="props.disabled"
|
:disabled="props.disabled"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
v-model="modelValue"
|
:model-value="modelValue"
|
||||||
@change="hanlderSelect"
|
@change="hanlderSelect"
|
||||||
:popper-class="selectOption.length > 20 ? 'nation-select' : ''"
|
:popper-class="selectOption.length > 20 ? 'nation-select' : ''"
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
@ -11,8 +11,8 @@
|
|||||||
<el-option
|
<el-option
|
||||||
v-for="item in dictEnum"
|
v-for="item in dictEnum"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:label="item.zdmc || item.label"
|
:label="item.zdmc || item.label||item.itemName"
|
||||||
:value="item.dm || item.value"
|
:value="item.dm || item.value||item.itemValue"
|
||||||
>
|
>
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div class="form-item-box" :style="{ width: width }">
|
<div class="form-item-box" :style="{ width: width }">
|
||||||
<el-select
|
<el-select
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
v-model="sex"
|
:model-value="sex"
|
||||||
placeholder="请选择性别"
|
placeholder="请选择性别"
|
||||||
@change="onChange"
|
@change="onChange"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" center width="1000px" :destroy-on-close="true" title="报告模板" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" center width="1000px" :destroy-on-close="true" title="报告模板" @close="close" :close-on-click-modal="false">
|
||||||
<div class="cntBox">
|
<div class="cntBox">
|
||||||
<!-- 工具栏 -->
|
<!-- 工具栏 -->
|
||||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
||||||
<!-- 编辑器 -->
|
<!-- 编辑器 -->
|
||||||
<Editor :style="`height: ${props.heightNumber}px; overflow-y: hidden`" v-model="textContent" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
<Editor :style="`height: ${props.heightNumber}px; overflow-y: hidden`" :model-value="textContent" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<!-- <el-button type="primary" @click="SaveReport">保存</el-button> -->
|
<!-- <el-button type="primary" @click="SaveReport">保存</el-button> -->
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
<div class="detail">
|
<div class="detail">
|
||||||
<div class="hd">
|
<div class="hd">
|
||||||
<div class="name">姓名:{{ username }}</div>
|
<div class="name">姓名:{{ username }}</div>
|
||||||
<div class="work">单位:{{ deptName }}</div>
|
<div class="work" :title="deptName" style="cursor: pointer;">单位:{{ deptName }}</div>
|
||||||
</div>
|
</div>
|
||||||
<el-dropdown :hide-on-click="false">
|
<el-dropdown :hide-on-click="false">
|
||||||
<span class="el-dropdown-link">
|
<span class="el-dropdown-link">
|
||||||
|
|||||||
@ -117,4 +117,3 @@ export function IdCard(IdCard, type) {
|
|||||||
}
|
}
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -362,6 +362,15 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/InformationReporting",
|
||||||
|
name: "InformationReporting",
|
||||||
|
component: () => import("@/views/backOfficeSystem/InformationReporting/index.vue"),
|
||||||
|
meta: {
|
||||||
|
title: "蜂群信息上报",
|
||||||
|
icon: "article"
|
||||||
|
}
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// path: "/MakeAcomment",
|
// path: "/MakeAcomment",
|
||||||
// name: "MakeAcomment",
|
// name: "MakeAcomment",
|
||||||
@ -740,14 +749,15 @@ export const publicRoutes = [
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/StatisticalAnalysis",
|
path: "/ReportStatisticalAnalysis",
|
||||||
name: "StatisticalAnalysis",
|
name: "ReportStatisticalAnalysis",
|
||||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/StatisticalAnalysis/index"),
|
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/ReportStatisticalAnalysis/index"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "情报统计分析",
|
title: "情报统计分析",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
path: "/RecordsOperations",
|
path: "/RecordsOperations",
|
||||||
name: "RecordsOperations",
|
name: "RecordsOperations",
|
||||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/RecordsOperations/index"),
|
component: () => import("@/views/backOfficeSystem/ResearchJudgment/RecordsOperations/index"),
|
||||||
@ -994,7 +1004,15 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/StatisticalAnalysis",
|
||||||
|
name: "StatisticalAnalysis",
|
||||||
|
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/StatisticalAnalysis/index"),
|
||||||
|
meta: {
|
||||||
|
title: "情报统计分析",
|
||||||
|
icon: "article"
|
||||||
|
}
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// path: "/ResearchHome",
|
// path: "/ResearchHome",
|
||||||
// name: "ResearchHome",
|
// name: "ResearchHome",
|
||||||
|
|||||||
@ -10,11 +10,11 @@ const getChildrenRoutes = (routes) => {
|
|||||||
routes.forEach((route) => {
|
routes.forEach((route) => {
|
||||||
if (route.children && route.children.length > 0) {
|
if (route.children && route.children.length > 0) {
|
||||||
if (deptBizType == '23' && roleList) {
|
if (deptBizType == '23' && roleList) {
|
||||||
|
// 在这个条件分支中也需要过滤掉/internalAuditor路由
|
||||||
result.push(...route.children);
|
result.push(...route.children);
|
||||||
} else {
|
} else {
|
||||||
// console.log(route.path);
|
|
||||||
if (route.path == '/JudgmentHome') {
|
if (route.path == '/JudgmentHome') {
|
||||||
route.children.splice(6, 1);
|
route.children.splice(route.children.findIndex(item => item.path == '/internalAuditor'), 1)
|
||||||
result.push(...route.children);
|
result.push(...route.children);
|
||||||
} else {
|
} else {
|
||||||
result.push(...route.children);
|
result.push(...route.children);
|
||||||
@ -29,15 +29,18 @@ const getChildrenRoutes = (routes) => {
|
|||||||
*处理脱离层级的路由
|
*处理脱离层级的路由
|
||||||
*/
|
*/
|
||||||
export const filterRoutes = (routes) => {
|
export const filterRoutes = (routes) => {
|
||||||
|
|
||||||
//获取到所有的子集路由
|
//获取到所有的子集路由
|
||||||
const childrenRoutes = getChildrenRoutes(routes);
|
const childrenRoutes = getChildrenRoutes(routes);
|
||||||
//根据子集路由进行查重操作
|
const data = routes.filter((route) => {
|
||||||
return routes.filter((route) => {
|
|
||||||
//根据route在childrenRoutes中进行查重,把所有重复路由表 剔除
|
//根据route在childrenRoutes中进行查重,把所有重复路由表 剔除
|
||||||
return !childrenRoutes.find((childrenRoute) => {
|
return !childrenRoutes.find((childrenRoute) => {
|
||||||
return childrenRoute.path === route.path;
|
return childrenRoute.path === route.path;
|
||||||
});
|
});
|
||||||
});
|
}).filter(item => item.path != '/internalAuditor')
|
||||||
|
console.log(childrenRoutes);
|
||||||
|
|
||||||
|
return data
|
||||||
};
|
};
|
||||||
|
|
||||||
function isNull(data) {
|
function isNull(data) {
|
||||||
@ -86,3 +89,5 @@ export function generateMenus(routes, basePath = "") {
|
|||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
171
src/utils/sse.js
Normal file
171
src/utils/sse.js
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
/**
|
||||||
|
* SSE (Server-Sent Events) 工具函数
|
||||||
|
* 用于处理服务器发送的事件流
|
||||||
|
*/
|
||||||
|
|
||||||
|
// SSE连接状态管理
|
||||||
|
const sseState = {
|
||||||
|
isStreaming: false,
|
||||||
|
controller: null
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭SSE连接
|
||||||
|
* 清理连接资源并重置状态
|
||||||
|
*/
|
||||||
|
const closeSSEConnection = () => {
|
||||||
|
if (sseState.controller) {
|
||||||
|
sseState.controller.abort();
|
||||||
|
sseState.controller = null;
|
||||||
|
}
|
||||||
|
sseState.isStreaming = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用POST方法建立SSE流式连接
|
||||||
|
* @param {string} prompt - 发送给AI的提示词
|
||||||
|
* @param {Object} options - 可选配置项
|
||||||
|
* @param {string} options.url - SSE请求的URL,默认为'/mosty-api/mosty-gsxt/ai/stream/qa'
|
||||||
|
* @param {Function} options.onChunk - 每收到一个数据块时的回调函数
|
||||||
|
* @param {Function} options.onComplete - 连接完成时的回调函数
|
||||||
|
* @param {Function} options.onError - 连接错误时的回调函数
|
||||||
|
* @returns {Promise} 返回Promise,连接成功或失败时resolve/reject
|
||||||
|
*
|
||||||
|
* 功能说明:
|
||||||
|
* 1. 关闭之前的连接(如果有)
|
||||||
|
* 2. 使用fetch API发送POST请求
|
||||||
|
* 3. 通过ReadableStream的reader逐块读取响应数据
|
||||||
|
* 4. 使用TextDecoder解码二进制数据
|
||||||
|
* 5. 按行解析JSON数据并处理
|
||||||
|
* 6. 支持[DONE]标记作为结束信号
|
||||||
|
*/
|
||||||
|
const connectSSEWithPost = (prompt, options = {}) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
// 关闭之前的连接
|
||||||
|
closeSSEConnection();
|
||||||
|
//http://localhost:3000/api/stream
|
||||||
|
// 默认配置
|
||||||
|
const {
|
||||||
|
url = '/mosty-api/mosty-gsxt/ai/stream/qa',
|
||||||
|
onChunk,
|
||||||
|
onComplete,
|
||||||
|
onError
|
||||||
|
} = options;
|
||||||
|
|
||||||
|
// 创建AbortController用于取消请求
|
||||||
|
sseState.controller = new AbortController();
|
||||||
|
const { signal } = sseState.controller;
|
||||||
|
|
||||||
|
// 发送POST请求
|
||||||
|
fetch(url, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
prompt: prompt
|
||||||
|
}),
|
||||||
|
signal
|
||||||
|
}).then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取响应体的读取器
|
||||||
|
const reader = response.body.getReader();
|
||||||
|
// 创建文本解码器,用于解码二进制数据
|
||||||
|
const decoder = new TextDecoder();
|
||||||
|
sseState.isStreaming = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取流式数据的内部函数
|
||||||
|
* 循环读取数据块,直到流结束
|
||||||
|
*/
|
||||||
|
const readStream = async () => {
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
// 读取下一个数据块
|
||||||
|
const { done, value } = await reader.read();
|
||||||
|
if (done) {
|
||||||
|
closeSSEConnection();
|
||||||
|
if (onComplete) {
|
||||||
|
onComplete();
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 解码数据块并按行分割
|
||||||
|
const chunk = decoder.decode(value, { stream: true });
|
||||||
|
const lines = chunk.split('\n');
|
||||||
|
// 逐行处理数据
|
||||||
|
for (const line of lines) {
|
||||||
|
// 跳过空行
|
||||||
|
if (line.trim() === '') continue;
|
||||||
|
// 检查结束标记
|
||||||
|
if (line.trim() === '[DONE]') {
|
||||||
|
closeSSEConnection();
|
||||||
|
if (onComplete) {
|
||||||
|
onComplete();
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let cleanLine = line;
|
||||||
|
if (line.startsWith('data:')) {
|
||||||
|
cleanLine = line.substring(5).trim(); // "data:" 长度为 5
|
||||||
|
}
|
||||||
|
// 尝试解析JSON数据
|
||||||
|
const jsonData = JSON.parse(cleanLine);
|
||||||
|
let data;
|
||||||
|
if (typeof jsonData === 'string') {
|
||||||
|
data = JSON.parse(jsonData);
|
||||||
|
} else {
|
||||||
|
data = jsonData;
|
||||||
|
}
|
||||||
|
// 提取content值
|
||||||
|
const content = data.choices && data.choices[0] && data.choices[0].delta && data.choices[0].delta.content;
|
||||||
|
if (content && onChunk) {
|
||||||
|
onChunk(content);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error('解析SSE数据失败:', e);
|
||||||
|
console.log('原始数据:', line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('流式读取错误:', error);
|
||||||
|
closeSSEConnection();
|
||||||
|
if (onError) {
|
||||||
|
onError(error);
|
||||||
|
}
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
readStream();
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('SSE请求错误:', error);
|
||||||
|
closeSSEConnection();
|
||||||
|
if (onError) {
|
||||||
|
onError(error);
|
||||||
|
}
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查当前是否正在流式传输
|
||||||
|
* @returns {boolean} 是否正在流式传输
|
||||||
|
*/
|
||||||
|
const isSSEStreaming = () => {
|
||||||
|
return sseState.isStreaming;
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
connectSSEWithPost,
|
||||||
|
closeSSEConnection,
|
||||||
|
isSSEStreaming
|
||||||
|
};
|
||||||
@ -103,6 +103,9 @@ export function timeValidate(date, type) {
|
|||||||
if (type == 'td') {
|
if (type == 'td') {
|
||||||
return `${yyyy}年${MM}月${dd}日`
|
return `${yyyy}年${MM}月${dd}日`
|
||||||
}
|
}
|
||||||
|
if (type == 'ny') {
|
||||||
|
return `${yyyy}年${MM}月`
|
||||||
|
}
|
||||||
if (type == 'yd') {
|
if (type == 'yd') {
|
||||||
return `${yyyy}`
|
return `${yyyy}`
|
||||||
}
|
}
|
||||||
@ -133,18 +136,29 @@ export function timeSlotChange(val) {
|
|||||||
switch (val) {
|
switch (val) {
|
||||||
case '天':
|
case '天':
|
||||||
case '日':
|
case '日':
|
||||||
startTime = timeValidate(new Date(), 'ymd')
|
// 设置当天的开始时间(00:00:00)
|
||||||
endTime = timeValidate(new Date(), 'ymd')
|
const startDate = new Date();
|
||||||
|
startDate.setHours(0, 0, 0, 0);
|
||||||
|
startTime = timeValidate(startDate, 'ymd');
|
||||||
|
|
||||||
|
// 设置当天的结束时间(23:59:59)
|
||||||
|
const endDate = new Date();
|
||||||
|
endDate.setHours(23, 59, 59, 999);
|
||||||
|
endTime = timeValidate(endDate, 'ymd');
|
||||||
|
console.log(startTime, endTime);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "本周":
|
case "本周":
|
||||||
case "周":
|
case "周":
|
||||||
startTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek)
|
startTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek)
|
||||||
endTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek)
|
endTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "本月":
|
case "本月":
|
||||||
case "月":
|
case "月":
|
||||||
startTime = new Date(nowYear, nowMonth, 1)
|
startTime = new Date(nowYear, nowMonth, 1)
|
||||||
endTime = new Date(nowYear, nowMonth + 1, 0)
|
endTime = new Date(nowYear, nowMonth + 1, 0)
|
||||||
|
console.log(startTime, endTime);
|
||||||
break;
|
break;
|
||||||
case "本季度":
|
case "本季度":
|
||||||
case "季度":
|
case "季度":
|
||||||
@ -378,11 +392,16 @@ export const bqYs = (val) => {
|
|||||||
/** 全息档案跳转
|
/** 全息档案跳转
|
||||||
* @param {string} szhm 身证号
|
* @param {string} szhm 身证号
|
||||||
*/
|
*/
|
||||||
export function holographicProfileJump(szhm) {
|
export function holographicProfileJump(lx, val) {
|
||||||
if (!szhm) return
|
if (!val) return
|
||||||
window.open(`https://tyyy.lz.dsj.xz/profile/people/person-manage?sfzhm=${szhm}&from=portal`)
|
if (lx == 1 || !lx) {
|
||||||
|
const sfzh = val.sfzh || val.rysfzh || val.yjRysfzh
|
||||||
|
window.open(`https://tyyy.lz.dsj.xz/profile/people/person-manage?sfzhm=${sfzh}&from=portal`)
|
||||||
|
} else {
|
||||||
|
const cph = val.cph || val.yjClcph
|
||||||
|
window.open(`https://tyyy.lz.dsj.xz/profile/car/car-manage?cphm=${cph}&from=portal`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取表单验证错误信息
|
* 获取表单验证错误信息
|
||||||
* @param fields 表单验证错误信息
|
* @param fields 表单验证错误信息
|
||||||
|
|||||||
@ -283,7 +283,8 @@ const handleZxs = () => {
|
|||||||
//删除操作
|
//删除操作
|
||||||
const deleteRow = (id) => {
|
const deleteRow = (id) => {
|
||||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||||
qcckDelete({}, "/mosty-gsxt/tbGsxtZdry/" + id).then((res) => {
|
|
||||||
|
qcckPost({id}, "/mosty-gsxt/tbGsxtZdcl/delete" ).then((res) => {
|
||||||
ElMessage.success("删除成功");
|
ElMessage.success("删除成功");
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 添加 -->
|
<!-- 添加 -->
|
||||||
<el-dialog v-model="modelValue" :title="title" width="40%" :before-close="handleClose">
|
<el-dialog :model-value="modelValue" :title="title" width="40%" :before-close="handleClose">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 添加 -->
|
<!-- 添加 -->
|
||||||
<el-dialog v-model="modelValue" :title="title" width="40%" :before-close="handleClose">
|
<el-dialog :model-value="modelValue" :title="title" width="40%" :before-close="handleClose">
|
||||||
<el-form ref="historyForm" style="max-width: 600px" :model="diaLogRuleForm" :rules="rules">
|
<el-form ref="historyForm" style="max-width: 600px" :model="diaLogRuleForm" :rules="rules">
|
||||||
<el-form-item label-width="160px" label="姓名" prop="ryXm" style="width: 100%;">
|
<el-form-item label-width="160px" label="姓名" prop="ryXm" style="width: 100%;">
|
||||||
<el-input v-model="diaLogRuleForm.ryXm" :placeholder="`请输入联系人姓名`" />
|
<el-input v-model="diaLogRuleForm.ryXm" :placeholder="`请输入联系人姓名`" />
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 添加 -->
|
<!-- 添加 -->
|
||||||
<el-dialog v-model="modelValue" :title="title" width="40%" :before-close="handleClose">
|
<el-dialog :model-value="modelValue" :title="title" width="40%" :before-close="handleClose">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
<template #zfmjXm>
|
<template #zfmjXm>
|
||||||
<el-input v-model="listQuery.zfmjXm" :placeholder="`请输入民警姓名`" readonly @click="changeShow" />
|
<el-input v-model="listQuery.zfmjXm" :placeholder="`请输入民警姓名`" readonly @click="changeShow" />
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" title="审核" width="500px" @close="handleClose">
|
<el-dialog :model-value="modelValue" title="审核" width="500px" @close="handleClose">
|
||||||
<el-form :model="listQuery" ref="formValidate" :rules="rules" label-width="120px">
|
<el-form :model="listQuery" ref="formValidate" :rules="rules" label-width="120px">
|
||||||
<el-form-item prop="bkshzt" label="审核">
|
<el-form-item prop="bkshzt" label="审核">
|
||||||
<MOSTY.Select filterable v-model="listQuery.bkshzt" :dictEnum="props.dic.D_BZ_RCSHZT" width="100%" clearable placeholder="请选择是否布控" />
|
<MOSTY.Select filterable v-model="listQuery.bkshzt" :dictEnum="props.dic.D_BZ_RCSHZT" width="100%" clearable placeholder="请选择是否布控" />
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" title="等级切换" width="500px" @close="handleClose">
|
<el-dialog :model-value="modelValue" title="等级切换" width="500px" @close="handleClose">
|
||||||
<el-form :model="listQuery" ref="formValidate" :rules="rules">
|
<el-form :model="listQuery" ref="formValidate" :rules="rules">
|
||||||
<el-form-item prop="fxDj" label="风险等级" v-if="props.type == '级别变更'">
|
<el-form-item prop="fxDj" label="风险等级" v-if="props.type == '级别变更'">
|
||||||
<MOSTY.Select filterable v-model="listQuery.fxDj" :dictEnum="props.dic.D_GS_RQFJ_FXDJ" width="100%" clearable placeholder="请选择风险等级"/>
|
<MOSTY.Select filterable v-model="listQuery.fxDj" :dictEnum="props.dic.D_GS_RQFJ_FXDJ" width="100%" clearable placeholder="请选择风险等级"/>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="modelValue"
|
:model-value="modelValue"
|
||||||
title="提交"
|
title="提交"
|
||||||
width="500px"
|
width="500px"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||||
<div style="height: 70vh;">
|
<div style="height: 70vh;">
|
||||||
|
|
||||||
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增群体" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增群体" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
|
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="人员异常数据" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="人员异常数据" @close="close" :close-on-click-modal="false">
|
||||||
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
||||||
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
<template #rysd="{ row }">
|
<template #rysd="{ row }">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!-- 文件上传导入组件 -->
|
<!-- 文件上传导入组件 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||||
|
|
||||||
<!-- 上传区域 -->
|
<!-- 上传区域 -->
|
||||||
<div class="upload-section">
|
<div class="upload-section">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="车辆异常数据" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="车辆异常数据" @close="close" :close-on-click-modal="false">
|
||||||
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
||||||
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
<template #clpp="{ row }">
|
<template #clpp="{ row }">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||||
<div style="height: 70vh;">
|
<div style="height: 70vh;">
|
||||||
|
|
||||||
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增群体" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增群体" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
|
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="人员异常数据" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="人员异常数据" @close="close" :close-on-click-modal="false">
|
||||||
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
||||||
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
<template #rysd="{ row }">
|
<template #rysd="{ row }">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!-- 文件上传导入组件 -->
|
<!-- 文件上传导入组件 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||||
|
|
||||||
<!-- 上传区域 -->
|
<!-- 上传区域 -->
|
||||||
<div class="upload-section">
|
<div class="upload-section">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="车辆异常数据" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="车辆异常数据" @close="close" :close-on-click-modal="false">
|
||||||
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
||||||
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
<template #clpp="{ row }">
|
<template #clpp="{ row }">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||||
<div style="height: 50vh; overflow: auto;">
|
<div style="height: 50vh; overflow: auto;">
|
||||||
<el-timeline style="max-width: 600px">
|
<el-timeline style="max-width: 600px">
|
||||||
<el-timeline-item :timestamp="item.czsj" placement="top" v-for="(item,index) in lcList" :key="index">
|
<el-timeline-item :timestamp="item.czsj" placement="top" v-for="(item,index) in lcList" :key="index">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||||
<div style="height: 50vh; overflow: auto;">
|
<div style="height: 50vh; overflow: auto;">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-input v-model="searchQuery" placeholder="请输入搜索内容" clearable class="search-input" />
|
<el-input v-model="searchQuery" placeholder="请输入搜索内容" clearable class="search-input" />
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||||
<div style="height: 50vh; overflow: auto;">
|
<div style="height: 50vh; overflow: auto;">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform" :rules="rules">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform" :rules="rules">
|
||||||
<template #zrSsbmdm>
|
<template #zrSsbmdm>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||||
<div style="height: 50vh; overflow: auto;">
|
<div style="height: 50vh; overflow: auto;">
|
||||||
<div class="intelligence-container" v-for="(item, index) in dataList" :key="index">
|
<div class="intelligence-container" v-for="(item, index) in dataList" :key="index">
|
||||||
<div class="info-row">
|
<div class="info-row">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||||
<div style="height: 50vh; overflow: auto;">
|
<div style="height: 50vh; overflow: auto;">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@
|
|||||||
<div class="process-info">
|
<div class="process-info">
|
||||||
<div class="info-label">处置结果:</div>
|
<div class="info-label">处置结果:</div>
|
||||||
<div class="info-value">
|
<div class="info-value">
|
||||||
<DictTag :tag="false" :value="item.czzt" :options="dict.D_BZ_QBCZZT" />
|
<DictTag :tag="false" :value="item.czzt" :options="dict.D_BZ_LCZT" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -265,6 +265,8 @@ const close = () => {
|
|||||||
const lcList = ref([])
|
const lcList = ref([])
|
||||||
const getqbcjPldb = (id) => {
|
const getqbcjPldb = (id) => {
|
||||||
xxcjSelectCzlcList({ qbid: id }).then(res => {
|
xxcjSelectCzlcList({ qbid: id }).then(res => {
|
||||||
|
console.log(res);
|
||||||
|
|
||||||
lcList.value = res || []
|
lcList.value = res || []
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!--文件导出 -->
|
<!--文件导出 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||||
<div style="height: 70vh;">
|
<div style="height: 70vh;">
|
||||||
|
|
||||||
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增群体" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增群体" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
|
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="人员异常数据" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="人员异常数据" @close="close" :close-on-click-modal="false">
|
||||||
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
||||||
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
<template #rysd="{ row }">
|
<template #rysd="{ row }">
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!-- 文件上传导入组件 -->
|
<!-- 文件上传导入组件 -->
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||||
|
|
||||||
<!-- 上传区域 -->
|
<!-- 上传区域 -->
|
||||||
<div class="upload-section">
|
<div class="upload-section">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform">
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="车辆异常数据" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="车辆异常数据" @close="close" :close-on-click-modal="false">
|
||||||
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" tableHeight="50vh"
|
||||||
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
<template #clpp="{ row }">
|
<template #clpp="{ row }">
|
||||||
|
|||||||
@ -76,36 +76,37 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
<!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
||||||
<!-- 在提交和退回得状态才能进行上报 -->
|
<!-- 在提交和退回得状态才能进行上报 -->
|
||||||
<el-link v-if="isShowBtn('上报')" size="small" type="primary" @click="appearNewspapers(row)">上报</el-link>
|
<el-link v-if="isShowBtn('上报')" size="small" type="primary" @click="appearNewspapers(row)">上报</el-link>
|
||||||
<!-- 只有上报状态才能进行采纳 -->
|
<!-- 只有上报状态才能进行采纳 -->
|
||||||
<el-link v-if="isShowBtn('采纳')" size="small" type="primary" @click="cnMsg(row)">采纳</el-link>
|
<el-link v-if="isShowBtn('采纳')" size="small" type="danger" @click="cnMsg(row)"
|
||||||
|
:disabled="butcontroll('02',row.lczt)">采纳</el-link>
|
||||||
<!-- 只有上报状态才能回退 -->
|
<!-- 只有上报状态才能回退 -->
|
||||||
<el-link v-if="isShowBtn('回退')" size="small" type="primary" @click="rollbackNewspapers(row)">回退</el-link>
|
<el-link v-if="isShowBtn('回退')" size="small" type="danger" @click="rollbackNewspapers(row)"
|
||||||
|
:disabled="butcontroll('03',row.lczt)">回退</el-link>
|
||||||
<!-- 只有采纳状态才能分组 -->
|
<!-- 只有采纳状态才能分组 -->
|
||||||
<el-link v-if="isShowBtn('分组')" size="small" type="primary" @click="opneMsg(row)">分组</el-link>
|
<el-link v-if="isShowBtn('分组')" size="small" type="primary" @click="opneMsg(row)"
|
||||||
|
:disabled="butcontroll('01',row.lczt)">分组</el-link>
|
||||||
<!-- 所有状态都能进行转线索 -->
|
|
||||||
<el-link v-if="isShowBtn('转线索')" size="small" type="primary" @click="FollowUpOnLeads(row)">转线索</el-link>
|
|
||||||
<!-- 所有状态都能进行转合成 -->
|
|
||||||
<el-link v-if="isShowBtn('转合成')" size="small" type="primary" @click="openFkDialogszl(row)">转合成</el-link>
|
|
||||||
<!-- 所有状态都能进行转会商 -->
|
|
||||||
<el-link v-if="isShowBtn('转会商')" size="small" type="primary"
|
|
||||||
@click="handleTransferMerchant(row)">转会商</el-link>
|
|
||||||
<!-- 只有领导有肯定 -->
|
<!-- 只有领导有肯定 -->
|
||||||
<el-link v-if="isShowBtn('肯定')" size="small" type="primary" @click="affirm(row)">肯定</el-link>
|
<el-link v-if="isShowBtn('肯定')" size="small" type="primary" @click="affirm(row)">肯定</el-link>
|
||||||
<el-link v-if="isShowBtn('关注部门')" size="small" type="primary" @click="FollowUpOnDept(row)">关注部门</el-link>
|
<el-link v-if="isShowBtn('删除')" size="small" type="primary" @click="delDictItem(row.id)">删除</el-link>
|
||||||
<!-- 市局能给所有数据创建标签 -->
|
|
||||||
<el-link v-if="isShowBtn('打标签')" size="small" type="primary" @click="openCustomTag(row)">打标签</el-link>
|
|
||||||
|
|
||||||
<el-link v-if="isShowBtn('删除')" size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
|
||||||
|
|
||||||
<el-link v-if="isShowBtn('修改', row)" size="small" type="primary" @click="addEdit('edit', row)">修改</el-link>
|
<el-link v-if="isShowBtn('修改', row)" size="small" type="primary" @click="addEdit('edit', row)">修改</el-link>
|
||||||
<el-link v-if="isShowBtn('续报', row)" size="small" type="primary"
|
<el-link v-if="isShowBtn('续报', row)" size="small" type="primary"
|
||||||
@click="addEdit('followUpReport', row)">续报</el-link>
|
@click="addEdit('followUpReport', row)">续报</el-link>
|
||||||
<el-link v-if="isShowBtn('详情')" size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
<el-link v-if="isShowBtn('详情')" size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||||
|
<!-- 所有状态都能进行转线索 -->
|
||||||
|
<el-link v-if="isShowBtn('转线索')" size="small" type="primary" @click="FollowUpOnLeads(row)" :disabled="butcontroll('01',row.lczt)">转线索</el-link>
|
||||||
|
<!-- 所有状态都能进行转合成 -->
|
||||||
|
<el-link v-if="isShowBtn('转合成')" size="small" type="primary" @click="openFkDialogszl(row)" :disabled="butcontroll('01',row.lczt)">转合成</el-link>
|
||||||
|
<!-- 所有状态都能进行转会商 -->
|
||||||
|
<el-link v-if="isShowBtn('转会商')" size="small" type="primary"
|
||||||
|
@click="handleTransferMerchant(row)" :disabled="butcontroll('01',row.lczt)">转会商</el-link>
|
||||||
|
|
||||||
|
<el-link v-if="isShowBtn('关注部门')" size="small" type="primary" @click="FollowUpOnDept(row)">关注部门</el-link>
|
||||||
|
<!-- 市局能给所有数据创建标签 -->
|
||||||
|
<el-link v-if="isShowBtn('打标签')" size="small" type="primary" @click="openCustomTag(row)"
|
||||||
|
:disabled="butcontroll('01',row.lczt)">打标签</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
@ -114,20 +115,7 @@
|
|||||||
}"></Pages>
|
}"></Pages>
|
||||||
</div>
|
</div>
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<AddForm ref="detailDiloag" @getList="getList" :titleData="titleData" :dict="{
|
<AddForm ref="detailDiloag" @getList="getList" :titleData="titleData" :dict="{D_BZ_LCZT}" />
|
||||||
D_BZ_SF,
|
|
||||||
D_GS_XS_LY,
|
|
||||||
D_BZ_SSZT,
|
|
||||||
D_GS_XS_LX,
|
|
||||||
D_GS_XS_QTLX,
|
|
||||||
D_GS_ZDQT_LB,
|
|
||||||
D_BZ_BMJB,
|
|
||||||
D_BZ_CLPP,
|
|
||||||
D_BZ_CLYS,
|
|
||||||
D_BZ_CLLX,
|
|
||||||
D_BZ_XZQHDM,
|
|
||||||
D_BZ_QBCZZT
|
|
||||||
}" />
|
|
||||||
</div>
|
</div>
|
||||||
<ExportFile v-model="exportFileModel" :tableColumn="tableColumn" :dict="{ D_GS_XS_LY, D_GS_XS_LX, D_GS_XS_LX }"
|
<ExportFile v-model="exportFileModel" :tableColumn="tableColumn" :dict="{ D_GS_XS_LY, D_GS_XS_LX, D_GS_XS_LX }"
|
||||||
:dataModel="pageData.tableData" />
|
:dataModel="pageData.tableData" />
|
||||||
@ -227,20 +215,14 @@ const dataList = ref()
|
|||||||
|
|
||||||
// 采纳
|
// 采纳
|
||||||
const cnMsg = (item) => {
|
const cnMsg = (item) => {
|
||||||
if ((item.lczt == '02' || item.lczt == '03') && qxkz.depBool) {
|
// if ( qxkz.depBool) {
|
||||||
proxy.$confirm("确定要采纳", "警告", { type: "warning" }).then(() => {
|
proxy.$confirm("确定要采纳", "警告", { type: "warning" }).then(() => {
|
||||||
xxcjUpdateCzlc({ id: item.id, lczt: '04' }).then(res => {
|
xxcjUpdateCzlc({ id: item.id, lczt: '04' }).then(res => {
|
||||||
proxy.$message({ type: "success", message: "采纳成功" });
|
proxy.$message({ type: "success", message: "采纳成功" });
|
||||||
getList();
|
getList();
|
||||||
})
|
})
|
||||||
}).catch(() => { });
|
}).catch(() => { });
|
||||||
} else {
|
// }
|
||||||
proxy.$message({
|
|
||||||
message: '只能采纳已上报情报',
|
|
||||||
type: 'warning',
|
|
||||||
showClose: true,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -248,31 +230,29 @@ const cnMsg = (item) => {
|
|||||||
}
|
}
|
||||||
// 回退
|
// 回退
|
||||||
const rollbackNewspapers = (item) => {
|
const rollbackNewspapers = (item) => {
|
||||||
|
// if (item.lczt == '04') {
|
||||||
|
// proxy.$message({
|
||||||
if (item.lczt == '04') {
|
// message: '已经采纳的信息无法回退',
|
||||||
proxy.$message({
|
// type: 'warning',
|
||||||
message: '已经采纳的信息无法回退',
|
// showClose: true,
|
||||||
type: 'warning',
|
// })
|
||||||
showClose: true,
|
// return
|
||||||
})
|
// }
|
||||||
return
|
// if (item.lczt == '03') {
|
||||||
}
|
// proxy.$message({
|
||||||
if (item.lczt == '03') {
|
// message: '无法回退市局上报信息',
|
||||||
proxy.$message({
|
// type: 'warning',
|
||||||
message: '无法回退市局上报信息',
|
// showClose: true,
|
||||||
type: 'warning',
|
// })
|
||||||
showClose: true,
|
// return
|
||||||
})
|
// }
|
||||||
return
|
if ( item.qbjb == '00') {
|
||||||
}
|
|
||||||
if (item.lczt == '02' && item.qbjb == '00') {
|
|
||||||
ElMessageBox.prompt('请输入回退原因', '警告', {
|
ElMessageBox.prompt('请输入回退原因', '警告', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
})
|
})
|
||||||
.then(({ value }) => {
|
.then(({ value }) => {
|
||||||
qbcjCzzt({ id: item.id, czzt: '05', czthyy: value }).then(res => {
|
xxcjUpdateCzlc({ id: item.id, lczt: '05', czthyy: value }).then(res => {
|
||||||
proxy.$message({ type: "success", message: "回退成功" });
|
proxy.$message({ type: "success", message: "回退成功" });
|
||||||
getList();
|
getList();
|
||||||
})
|
})
|
||||||
@ -312,12 +292,8 @@ const appearNewspapers = (item) => {
|
|||||||
}
|
}
|
||||||
// 分组
|
// 分组
|
||||||
const opneMsg = (item) => {
|
const opneMsg = (item) => {
|
||||||
if (item.lczt == '04' && qxkz.depBool) {
|
|
||||||
chooseRow.value = true
|
chooseRow.value = true
|
||||||
dataList.value = [item]
|
dataList.value = [item]
|
||||||
} else {
|
|
||||||
proxy.$message.warning('请选择已采纳的消息!')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 打标签
|
// 打标签
|
||||||
const customTagShow = ref(false)
|
const customTagShow = ref(false)
|
||||||
@ -328,8 +304,6 @@ const openCustomTag = (item) => {
|
|||||||
} else {
|
} else {
|
||||||
proxy.$message.warning('暂无权限')
|
proxy.$message.warning('暂无权限')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// 肯定
|
// 肯定
|
||||||
const affirm = (item) => {
|
const affirm = (item) => {
|
||||||
@ -388,7 +362,19 @@ const handleSumbit = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <!-- [04、06、07、08、09] -->打标签
|
||||||
|
// <!-- [03、05] -->采纳
|
||||||
|
// <!-- [04] -->回退
|
||||||
|
const butcontroll = (val, zt) => {
|
||||||
|
switch (val) {
|
||||||
|
case '01':
|
||||||
|
return !(['04', '06', '07', '08', '09'].includes(zt))
|
||||||
|
case '02':
|
||||||
|
return !(['03', '05'].includes(zt))
|
||||||
|
case '03':
|
||||||
|
return !(['02','03','04'].includes(zt))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 搜索
|
// 搜索
|
||||||
const onSearch = (val) => {
|
const onSearch = (val) => {
|
||||||
@ -396,7 +382,7 @@ const onSearch = (val) => {
|
|||||||
const promes = {
|
const promes = {
|
||||||
...pageData.pageConfiger,
|
...pageData.pageConfiger,
|
||||||
...val,
|
...val,
|
||||||
startTime: val.startTime ? val.startTime[0] : '',
|
startTime: val.startTime ? val.startTime[0] : '',
|
||||||
endTime: val.endTime ? val.endTime[1] : '',
|
endTime: val.endTime ? val.endTime[1] : '',
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,7 +496,7 @@ const tabHeightFn = () => {
|
|||||||
} else {
|
} else {
|
||||||
pageData.tableHeight = window.innerHeight - 250;
|
pageData.tableHeight = window.innerHeight - 250;
|
||||||
}
|
}
|
||||||
window.onresize = function() {
|
window.onresize = function () {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
115
src/views/backOfficeSystem/InformationReporting/addForm.vue
Normal file
115
src/views/backOfficeSystem/InformationReporting/addForm.vue
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 数据整理 -->
|
||||||
|
<div class="dialog" v-if="dialogForm">
|
||||||
|
<div class="head_box">
|
||||||
|
<span class="title">上报信息详情 </span>
|
||||||
|
<div><el-button size="small" @click="close">关闭</el-button></div>
|
||||||
|
</div>
|
||||||
|
<div style="padding-bottom: 40px;" class="form_cnt">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :disabled="true">
|
||||||
|
</FormMessage>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, watch, computed } from "vue";
|
||||||
|
import { dataLx } from './info'
|
||||||
|
import { qcckGet ,qcckPost} from "@/api/qcckApi.js";
|
||||||
|
const emit = defineEmits(["updateDate", "getList"]);
|
||||||
|
const props = defineProps({
|
||||||
|
dict: Object
|
||||||
|
});
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const dialogForm = ref(false); //弹窗
|
||||||
|
const formData = ref([]);
|
||||||
|
// 初始化数据
|
||||||
|
const init = ( row) => {
|
||||||
|
console.log(row);
|
||||||
|
|
||||||
|
dialogForm.value = true;
|
||||||
|
|
||||||
|
formData.value = dataLx[row.typeId]
|
||||||
|
getDetail(row.typeId,row.id)
|
||||||
|
};
|
||||||
|
const listQuery = ref({})
|
||||||
|
const loading = ref(false)
|
||||||
|
// 数据详情
|
||||||
|
const getDetail = (val, baseId) => {
|
||||||
|
let url = ''
|
||||||
|
switch (val) {
|
||||||
|
case '2001':
|
||||||
|
url = '/important/base/selectSwjfByBaseId'
|
||||||
|
break;
|
||||||
|
case '2002':
|
||||||
|
url = '/important/base/selectXsajByBaseId'
|
||||||
|
break;
|
||||||
|
case '2003':
|
||||||
|
url = '/important/base/selectJtsgByBaseId'
|
||||||
|
break;
|
||||||
|
case '2004':
|
||||||
|
url = '/important/base/selectAqscByBaseId'
|
||||||
|
break;
|
||||||
|
case '2005':
|
||||||
|
url = '/important/base/selectGgwsByBaseId'
|
||||||
|
break;
|
||||||
|
case '2006':
|
||||||
|
url = '/important/base/selectFzswByBaseId'
|
||||||
|
break;
|
||||||
|
case '2007':
|
||||||
|
url = '/important/base/selectZzrzhByBaseId'
|
||||||
|
break;
|
||||||
|
case '2008':
|
||||||
|
url = '/important/base/selectOtherByBaseId'
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
loading.value = true;
|
||||||
|
qcckGet({
|
||||||
|
baseId: baseId
|
||||||
|
}, '/mosty-gsxt' + url).then(res => {
|
||||||
|
listQuery.value = res || {}
|
||||||
|
}).finally(() => {
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 关闭
|
||||||
|
const close = () => {
|
||||||
|
listQuery.value = {};
|
||||||
|
dialogForm.value = false;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({ init });
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
::v-deep .form-item-box {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom-actions {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 50%;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 10px;
|
||||||
|
width: 100%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
padding: 10px 20px;
|
||||||
|
|
||||||
|
border-radius: 4px;
|
||||||
|
background: white;
|
||||||
|
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
// z-index: 1000;
|
||||||
|
}
|
||||||
|
.table-box {
|
||||||
|
// width: calc(100% - 2px);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
161
src/views/backOfficeSystem/InformationReporting/index.vue
Normal file
161
src/views/backOfficeSystem/InformationReporting/index.vue
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="titleBox">
|
||||||
|
<PageTitle title="蜂群信息上报"/>
|
||||||
|
</div>
|
||||||
|
<!-- 搜索 -->
|
||||||
|
<div ref="searchBox">
|
||||||
|
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||||
|
</div>
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="tabBox">
|
||||||
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
|
|
||||||
|
<template #jflx="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.jflx" :options="jflxArr" />
|
||||||
|
</template>
|
||||||
|
<!-- 操作 -->
|
||||||
|
<template #controls="{ row }">
|
||||||
|
<el-link type="primary" @click="addEdit( row)">详情</el-link>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
|
...pageData.pageConfiger,
|
||||||
|
total: pageData.total
|
||||||
|
}"></Pages>
|
||||||
|
</div>
|
||||||
|
<!-- 编辑详情 -->
|
||||||
|
<!-- <EditAddForm v-if="show" ref="detailDiloag" :dic="{ JQLB,JQLX,JQXL,JQZL,D_BZ_JQLY,D_BZ_JQFL,JQLB_DP,D_BZ_JQBQ,D_GS_SSYJ }"
|
||||||
|
@updateDate="getList" /> -->
|
||||||
|
</div>
|
||||||
|
<AddForm ref="addForm" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
// import EditAddForm from "./components/editAddForm.vue";
|
||||||
|
import { importantBaseSelectPage } from '@/api/HumanIntelligence/integralList.js'
|
||||||
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
|
import AddForm from "./addForm.vue";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
// const { D_GS_JFLX, } = proxy.$dict("D_GS_JFLX",); //获取字典数据
|
||||||
|
const { D_GS_JFLX, } = proxy.$fzdict("BD_D_SJLB",); //获取字典数据
|
||||||
|
const detailDiloag = ref();
|
||||||
|
const show = ref(false)
|
||||||
|
const jflxArr = [{ label: '优秀信息员', value: '01' }, { label: '优秀研判员', value: '02' }] // jflx
|
||||||
|
const searchConfiger = ref([
|
||||||
|
{
|
||||||
|
label: "姓名",
|
||||||
|
prop: "xm",
|
||||||
|
placeholder: "请输入姓名",
|
||||||
|
showType: "input"
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// label: "身份证号",
|
||||||
|
// prop: "sfzh",
|
||||||
|
// placeholder: "请输入身份证号",
|
||||||
|
// showType: "input"
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
label: "积分类型",
|
||||||
|
prop: "jflx",
|
||||||
|
placeholder: "请选择积分类型",
|
||||||
|
showType: "select",
|
||||||
|
options: jflxArr
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "积分来源类型",
|
||||||
|
prop: "jflylx",
|
||||||
|
placeholder: "请选择积分来源类型",
|
||||||
|
showType: "select",
|
||||||
|
// options: Object.keys(jflylxTypes).map(key => ({ label: jflylxTypes[key], value: key }))
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
const searchBox = ref(); //搜索框
|
||||||
|
const pageData = reactive({
|
||||||
|
tableData: [], //表格数据
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "null",
|
||||||
|
loading: false,
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
pageConfiger: {
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
}, //分页
|
||||||
|
controlsWidth: 160, //操作栏宽度
|
||||||
|
tableColumn: [
|
||||||
|
{ label: "编号", prop: "baseNo" },
|
||||||
|
{ label: "信息类型名称", prop: "typeName" },
|
||||||
|
{ label: "信息类别名称", prop: "categoryName" },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit" },
|
||||||
|
{ label: "上报单位名称", prop: "reportUnitName" },
|
||||||
|
{ label: "信息专报日期类型", prop: "timeTypeName" },
|
||||||
|
{ label: "标题", prop: "title" },
|
||||||
|
{ label: "状态名称", prop: "ztmc" },
|
||||||
|
]
|
||||||
|
});
|
||||||
|
onMounted(() => {
|
||||||
|
tabHeightFn();
|
||||||
|
getList()
|
||||||
|
});
|
||||||
|
const listQuery = ref({})
|
||||||
|
// 搜索
|
||||||
|
const onSearch = (val) => {
|
||||||
|
listQuery.value = { ...val };
|
||||||
|
pageData.pageConfiger.pageCurrent = 1;
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取数据
|
||||||
|
const getList = () => {
|
||||||
|
pageData.tableConfiger.loading = true;
|
||||||
|
const params = {
|
||||||
|
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||||
|
pageSize: pageData.pageConfiger.pageSize,
|
||||||
|
...listQuery.value
|
||||||
|
}
|
||||||
|
importantBaseSelectPage(params).then(res => {
|
||||||
|
pageData.tableData = res.records || [];
|
||||||
|
pageData.total = res.total;
|
||||||
|
}).finally(() => {
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 分页
|
||||||
|
const changeNo = (val) => {
|
||||||
|
pageData.pageConfiger.pageCurrent = val;
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
// 每页条数
|
||||||
|
const changeSize = (val) => {
|
||||||
|
pageData.pageConfiger.pageSize = val;
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
const addForm=ref()
|
||||||
|
// 查看详情
|
||||||
|
const addEdit = (type, row) => {
|
||||||
|
addForm.value.init(type, row,);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 表格高度计算
|
||||||
|
const tabHeightFn = () => {
|
||||||
|
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
|
window.onresize = function() {
|
||||||
|
tabHeightFn();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.el-loading-mask {
|
||||||
|
background: rgba(0, 0, 0, 0.5) !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
139
src/views/backOfficeSystem/InformationReporting/info.js
Normal file
139
src/views/backOfficeSystem/InformationReporting/info.js
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
export const dataLx = {
|
||||||
|
// 涉稳上访聚集
|
||||||
|
"2001": [
|
||||||
|
{ label: "事件类别", prop: "xm", type: 'input' },
|
||||||
|
{ label: "聚集时间", prop: "gatherTime", type: 'input' },
|
||||||
|
{ label: "散离时间", prop: "disperseTime", type: 'input' },
|
||||||
|
{ label: "群体类型", prop: "groupType", type: 'input' },
|
||||||
|
{ label: "聚集人数", prop: "gatherCount", type: 'input' },
|
||||||
|
{ label: "现场秩序", prop: "sceneOrder", type: 'input' },
|
||||||
|
{ label: "主要诉求", prop: "mainClaim", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "事发地点", prop: "incidentLocation", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 刑事案件
|
||||||
|
"2002": [
|
||||||
|
{ label: "事件类型", prop: "xm", type: 'input' },
|
||||||
|
{ label: "案发时间", prop: "caseTime", type: 'input' },
|
||||||
|
{ label: "案件类型", prop: "caseType", type: 'input' },
|
||||||
|
{ label: "受伤人数", prop: "injuredNum", type: 'input' },
|
||||||
|
{ label: "死亡人数", prop: "deathNum", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "案发地址", prop: "location", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 交通事故
|
||||||
|
"2003": [
|
||||||
|
{ label: "事件类型", prop: "xm", type: 'input' },
|
||||||
|
{ label: "事发时间", prop: "caseTime", type: 'input' },
|
||||||
|
{ label: "路段", prop: "roadSection", type: 'input' },
|
||||||
|
{ label: "受伤人数", prop: "injuredNum", type: 'input' },
|
||||||
|
{ label: "死亡人数", prop: "deathNum", type: 'input' },
|
||||||
|
{ label: "涉车数量", prop: "carNum", type: 'input' },
|
||||||
|
{ label: "事故类型", prop: "sjnr", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "事发地点", prop: "sj", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 安全生产事故
|
||||||
|
"2004": [
|
||||||
|
{ label: "事件类型", prop: "xm", type: 'input' },
|
||||||
|
{ label: "事发时间", prop: "caseTime", type: 'input' },
|
||||||
|
{ label: "涉事企业", prop: "involvedEnterprise", type: 'input' },
|
||||||
|
{ label: "受伤人数", prop: "injuredNum", type: 'input' },
|
||||||
|
{ label: "死亡人数", prop: "deathNum", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "事发地点", prop: "incidentLocation", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 公共卫生事件
|
||||||
|
"2005": [
|
||||||
|
{ label: "事件类型", prop: "xm", type: 'input' },
|
||||||
|
{ label: "事发时间", prop: "sfzh", type: 'input' },
|
||||||
|
{ label: "涉事人数", prop: "xb", type: 'input' },
|
||||||
|
{ label: "场所类型", prop: "venueType", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "事发地点", prop: "incidentLocation", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 非正常死亡事件
|
||||||
|
"2006": [
|
||||||
|
{ label: "事件类型", prop: "xm", type: 'input' },
|
||||||
|
{ label: "事发时间", prop: "caseTime", type: 'input' },
|
||||||
|
{ label: "死亡人数", prop: "deathNum", type: 'input' },
|
||||||
|
{ label: "死亡类型", prop: "deathType", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "案发地点", prop: "incidentLocation", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 重大自然灾害类
|
||||||
|
"2007": [
|
||||||
|
{ label: "事件类型", prop: "xm", type: 'input' },
|
||||||
|
{ label: "灾害类型", prop: "disasterType", type: 'input' },
|
||||||
|
{ label: "发生时间", prop: "caseTime", type: 'input' },
|
||||||
|
{ label: "死亡人数", prop: "deathNum", type: 'input' },
|
||||||
|
{ label: "受伤人数", prop: "injuredNum", type: 'input' },
|
||||||
|
{ label: "灾害级别", prop: "disasterLevel", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "事发地点", prop: "sj", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
// 其他
|
||||||
|
"2008": [
|
||||||
|
{ label: "事件类型", prop: "eventType", type: 'input' },
|
||||||
|
{ label: "时间", prop: "caseTime", type: 'input' },
|
||||||
|
{ label: "所属辖区", prop: "policeStation", type: 'input' },
|
||||||
|
{ label: "事发地点", prop: "incidentLocation", type: 'input' },
|
||||||
|
{ label: "标题", prop: "title", type: 'input', width: '100%' },
|
||||||
|
{ label: "标签", prop: "tags", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "内容", prop: "content", type: 'textarea', width: '100%' },
|
||||||
|
{ label: "接收单位", prop: "receiveUnit", type: 'input' },
|
||||||
|
{ label: "拟稿人", prop: "drafter", type: 'input' },
|
||||||
|
{ label: "联系电话", prop: "contactTel", type: 'input' },
|
||||||
|
{ label: "签发人", prop: "issuer", type: 'input' },
|
||||||
|
],
|
||||||
|
|
||||||
|
}
|
||||||
@ -76655,14 +76655,14 @@ export const bm = {
|
|||||||
export const centralPoint = [
|
export const centralPoint = [
|
||||||
{
|
{
|
||||||
name: '墨脱县',
|
name: '墨脱县',
|
||||||
ssbmdm:'540423000000',
|
ssbmdm: '540423000000',
|
||||||
point: [
|
point: [
|
||||||
95.33050808900407,
|
95.33050808900407,
|
||||||
29.322011545645807
|
29.322011545645807
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
name: '巴宜区',
|
name: '巴宜区',
|
||||||
ssbmdm:'540402000000',
|
ssbmdm: '540402000000',
|
||||||
point: [
|
point: [
|
||||||
94.36040092147607,
|
94.36040092147607,
|
||||||
29.637028970765996
|
29.637028970765996
|
||||||
@ -76670,39 +76670,45 @@ export const centralPoint = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '波密县',
|
name: '波密县',
|
||||||
ssbmdm:'540424000000',
|
ssbmdm: '540424000000',
|
||||||
point: [
|
point: [
|
||||||
95.7692249914358,
|
95.7692249914358,
|
||||||
29.85943760031867
|
29.85943760031867
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
name: '察隅县',
|
name: '察隅县',
|
||||||
ssbmdm:'540425000000',
|
ssbmdm: '540425000000',
|
||||||
point: [
|
point: [
|
||||||
97.46698612723947,
|
97.46698612723947,
|
||||||
28.661228694163327
|
28.661228694163327
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
name: '工布江达县',
|
name: '工布江达县',
|
||||||
ssbmdm:'540421000000',
|
ssbmdm: '540421000000',
|
||||||
point: [
|
point: [
|
||||||
93.24660931130188,
|
93.24660931130188,
|
||||||
29.88459424127838
|
29.88459424127838
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
name: '朗县',
|
name: '朗县',
|
||||||
ssbmdm:'540426000000',
|
ssbmdm: '540426000000',
|
||||||
point: [
|
point: [
|
||||||
93.07449497318652,
|
93.07449497318652,
|
||||||
29.045416229209337
|
29.045416229209337
|
||||||
]
|
]
|
||||||
}, {
|
}, {
|
||||||
name: '米林县',
|
name: '米林县',
|
||||||
ssbmdm:'540422000000',
|
ssbmdm: '540422000000',
|
||||||
point: [
|
point: [
|
||||||
94.21305189935441,
|
94.21305189935441,
|
||||||
29.21583429482142
|
29.21583429482142
|
||||||
]
|
]
|
||||||
},
|
}, {
|
||||||
|
name: '雅下分局',
|
||||||
|
ssbmdm: '540481450000',
|
||||||
|
point: [
|
||||||
|
94.850838,
|
||||||
|
29.504250
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :destroy-on-close="true" title="新增布控" @close="close" :close-on-click-modal="false">
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增布控" @close="close" :close-on-click-modal="false">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
<template #bqList>
|
<template #bqList>
|
||||||
<div class="marks pointer" @click="chooseMarksVisible = true">
|
<div class="marks pointer" @click="chooseMarksVisible = true">
|
||||||
|
|||||||
@ -25,7 +25,8 @@
|
|||||||
<div style="border-bottom: 1px #ccc solid;padding-bottom: 30px;">
|
<div style="border-bottom: 1px #ccc solid;padding-bottom: 30px;">
|
||||||
<h1 style="text-align: center;color: red;">{{ nd }}年度林芝市公安战术研判报告</h1>
|
<h1 style="text-align: center;color: red;">{{ nd }}年度林芝市公安战术研判报告</h1>
|
||||||
<div
|
<div
|
||||||
style="display: flex;align-items: center;justify-content: space-between; color: red;margin-top: 30px;padding: 0 30px;font-size: 18px;font-weight: 700;" class="center-subtitle">
|
style="display: flex;align-items: center;justify-content: space-between; color: red;margin-top: 30px;padding: 0 30px;font-size: 18px;font-weight: 700;"
|
||||||
|
class="center-subtitle">
|
||||||
<div>{{ deptId.name }}</div>
|
<div>{{ deptId.name }}</div>
|
||||||
<div>{{ deptId?.ord }}</div>
|
<div>{{ deptId?.ord }}</div>
|
||||||
<div>{{ deptId?.time }}</div>
|
<div>{{ deptId?.time }}</div>
|
||||||
@ -133,6 +134,8 @@ import { reactive, ref, onMounted, getCurrentInstance, nextTick, computed, watch
|
|||||||
// import { downloadDocWithStyle } from '@/utils/export.js';
|
// import { downloadDocWithStyle } from '@/utils/export.js';
|
||||||
import { downloadDocWithStyle, downloadPDF } from "@/utils/export.js"
|
import { downloadDocWithStyle, downloadPDF } from "@/utils/export.js"
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
|
import { qcckPost } from '@/api/qcckApi'
|
||||||
|
import { connectSSEWithPost, closeSSEConnection } from '@/utils/sse.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 数据
|
// 数据
|
||||||
@ -168,7 +171,7 @@ const tabHeight = ref(0)
|
|||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
tabHeight.value = window.innerHeight - 300
|
tabHeight.value = window.innerHeight - 300
|
||||||
window.onresize = function() {
|
window.onresize = function () {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -495,48 +498,58 @@ getDictItemList()
|
|||||||
const tableBox = ref(null);
|
const tableBox = ref(null);
|
||||||
const textContent = ref('');
|
const textContent = ref('');
|
||||||
const chartRefs = ref([]); // 存储所有图表组件的引用
|
const chartRefs = ref([]); // 存储所有图表组件的引用
|
||||||
// 获取p标签的所有文字内容,去除所有<>包裹的内容
|
|
||||||
const extractTextContent = () => {
|
|
||||||
loading.value = true
|
|
||||||
// 获取当前组件的HTML内容
|
|
||||||
const componentHtml = tableBox.value ? tableBox.value.innerHTML : '';
|
|
||||||
|
|
||||||
// 存储提取的文本内容
|
const extractTextContent = async () => {
|
||||||
const extractedTexts = [];
|
if (!tableBox.value) return;
|
||||||
|
|
||||||
|
// 获取当前组件的HTML内容
|
||||||
|
const htmlContent = tableBox.value.innerHTML;
|
||||||
|
|
||||||
// 提取p标签的文本内容
|
// 提取p标签的文本内容
|
||||||
const pRegex = /<p[^>]*>(.*?)<\/p>/gs;
|
const pRegex = /<p[^>]*>([\s\S]*?)<\/p>/g;
|
||||||
let pMatch;
|
let pMatch = pRegex.exec(htmlContent);
|
||||||
while ((pMatch = pRegex.exec(componentHtml)) !== null) {
|
let extractedText = '';
|
||||||
let pContent = pMatch[1];
|
|
||||||
|
|
||||||
|
while (pMatch !== null) {
|
||||||
// 去除所有<>包裹的内容
|
// 去除所有<>包裹的内容
|
||||||
pContent = pContent.replace(/<[^>]*>/g, '');
|
let cleanText = pMatch[1].replace(/<[^>]*>/g, '');
|
||||||
|
|
||||||
// 去除HTML注释
|
// 去除HTML注释
|
||||||
pContent = pContent.replace(/<!--[\s\S]*?-->/g, '');
|
cleanText = cleanText.replace(/<!--[\s\S]*?-->/g, '');
|
||||||
|
extractedText += cleanText + '\n';
|
||||||
// 清理文本,去除多余空白字符
|
pMatch = pRegex.exec(htmlContent);
|
||||||
const cleanText = pContent.replace(/\s+/g, ' ').trim();
|
|
||||||
if (cleanText) {
|
|
||||||
extractedTexts.push(cleanText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// 清理文本,去除多余空白字符
|
||||||
|
extractedText = extractedText.replace(/\s+/g, ' ').trim();
|
||||||
|
// 调用AI分析接口
|
||||||
|
// loading.value = true;
|
||||||
|
textContent.value = '';
|
||||||
|
const prompt = `你是一名资深警务人员,尤其擅长对警情、案件、线索等非结构化文本数据进行阅读理解,并总结各种对象之间的关联关系,对下面数据进行一个分析总结给出一个总结报告。${extractedText}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await connectSSEWithPost(prompt, {
|
||||||
|
onChunk: (content) => {
|
||||||
|
textContent.value += content;
|
||||||
|
},
|
||||||
|
onComplete: () => {
|
||||||
|
console.log('SSE连接完成');
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error('SSE连接错误:', error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error('分析失败:', err);
|
||||||
|
textContent.value = '分析失败,请稍后重试';
|
||||||
|
} finally {
|
||||||
|
// loading.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 合并为一个字符串
|
|
||||||
const result = extractedTexts.join(' ');
|
|
||||||
console.log('提取的文本内容:', result);
|
|
||||||
completions({
|
|
||||||
model: "deepseek-32b",
|
|
||||||
prompt: `# 角色定位\n你是一名资深警务人员,尤其擅长对警情、案件、线索等非结构化文本数据进行阅读理解,并总结各种对象之间的关联关系,对下面数据进行一个分析总结给出一个总结报告。\n${result}`,
|
|
||||||
max_tokens: 1000,
|
|
||||||
}).then(res => {
|
|
||||||
textContent.value = res?.choices?.[0]?.text
|
|
||||||
}).finally(() => {
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
// return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -547,32 +560,19 @@ const extractTextContent = () => {
|
|||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.analysis-report-box {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
p {
|
||||||
text-indent: 2em;
|
text-indent: 2em;
|
||||||
/* 首行缩进2个汉字 */
|
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
/* 段落间距 */
|
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
/* 行高 */
|
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
/* 字体大小 */
|
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
/* 两端对齐 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 特殊情况处理 */
|
|
||||||
p.no-indent {
|
p.no-indent {
|
||||||
text-indent: 0;
|
text-indent: 0;
|
||||||
/* 不需要缩进的段落 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p.first-no-indent:first-of-type {
|
p.first-no-indent:first-of-type {
|
||||||
text-indent: 0;
|
text-indent: 0;
|
||||||
/* 第一个段落不缩进 */
|
|
||||||
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -0,0 +1,134 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" :title="title" @close="close" :close-on-click-modal="true">
|
||||||
|
<div style="height: 50vh;overflow: auto;">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="150px" ref="elform">
|
||||||
|
</FormMessage>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, getCurrentInstance, watch } from 'vue'
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { asjxsajid, asjxzajid } from '@/api/yj'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { GA_D_ASJLYFLDM, GA_D_XSAJLBDM, BD_D_BJFSDM, GA_D_SACSFLDM, GA_D_DYLBDM } = proxy.$fzdict('GA_D_ASJLYFLDM', 'GA_D_XSAJLBDM', 'BD_D_BJFSDM', 'GA_D_SACSFLDM', 'GA_D_DYLBDM')
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '网上会商'
|
||||||
|
},
|
||||||
|
dataList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}, lx: {
|
||||||
|
type: String,
|
||||||
|
default: '1'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emits = defineEmits(['update:modelValue'])
|
||||||
|
const listQuery = ref({})
|
||||||
|
const xsaj = [
|
||||||
|
{ label: "案件名称", prop: "ajmc", type: "input" },
|
||||||
|
{ label: "案件编号", prop: "asjbh", type: "input" },
|
||||||
|
{ label: "案件来源", prop: "asjlydm", type: "select", options: GA_D_ASJLYFLDM },
|
||||||
|
{ label: "主要类别", prop: "ajzlbdm", type: "select", options: GA_D_XSAJLBDM },
|
||||||
|
{ label: "副类别类别", prop: "ajlbdm", type: "select", options: GA_D_XSAJLBDM },
|
||||||
|
{ label: "接警编号", prop: "jjbh", type: "input" },
|
||||||
|
{ label: "接警方式", prop: "jjfs", type: "select", options: BD_D_BJFSDM },
|
||||||
|
{ label: "接警时间", prop: "bjsj", type: "datetime" },
|
||||||
|
{ label: "发现事件时间", prop: "fxasjsj", type: "datetime" },
|
||||||
|
{ label: "开始时间", prop: "asjfssjAsjfskssj", type: "datetime" },
|
||||||
|
{ label: "结束时间", prop: "asjfssjAsjfsjssj", type: "datetime" },
|
||||||
|
{ label: "案发地点", prop: "asjfsddDzmc", type: "input", width: '90%' },
|
||||||
|
{ label: "涉案场所类别", prop: "asjfsddSacsSacslbdm", type: "select", options: GA_D_SACSFLDM },
|
||||||
|
{ label: "经度", prop: "asjfsddDqjd", type: "input" },
|
||||||
|
{ label: "纬度", prop: "asjfsddDqwd", type: "input" },
|
||||||
|
{ label: "地域类别", prop: "asjfsddDylbdm", type: "select", options: GA_D_DYLBDM },
|
||||||
|
{ label: "简要案情", prop: "jyaq", type: "textarea", width: "90%" },
|
||||||
|
{ label: "受理时间", prop: "slsj", type: "datetime" },
|
||||||
|
{ label: "受理单位", prop: "sldwGajgmc", type: "input" },
|
||||||
|
{ label: "是否涉枪", prop: "sfsqPdbz", type: "input" },
|
||||||
|
{ label: "是否涉爆", prop: "sfsbPdbz", type: "input" },
|
||||||
|
{ label: "涉外情况", prop: "swasjswqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "受伤人数", prop: "asjssryRs", type: "input" },
|
||||||
|
{ label: "损失价值(元)", prop: "ssjzrmby", type: "input" },
|
||||||
|
{ label: "作案特征情况", prop: "zatzJyqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "损失财物情况", prop: "asjsscwJyqk", type: "textarea", width: "90%" },
|
||||||
|
// { label: "管制物品情况", prop: "asjsscwJyqk", type: "textarea", width: "90%" },
|
||||||
|
]
|
||||||
|
|
||||||
|
const xzaj = [
|
||||||
|
{ label: "案件名称", prop: "ajmc", type: "input" },
|
||||||
|
{ label: "案件编号", prop: "asjbh", type: "input" },
|
||||||
|
{ label: "案件来源", prop: "asjlydm", type: "select", options: GA_D_ASJLYFLDM },
|
||||||
|
{ label: "主要类别", prop: "ajzlbdm", type: "select", options: GA_D_XSAJLBDM },
|
||||||
|
{ label: "副类别类别", prop: "ajlbdm", type: "select", options: GA_D_XSAJLBDM },
|
||||||
|
{ label: "接警编号", prop: "jjbh", type: "input" },
|
||||||
|
{ label: "接警方式", prop: "jjfs", type: "select", options: BD_D_BJFSDM },
|
||||||
|
{ label: "接警时间", prop: "bjsj", type: "datetime" },
|
||||||
|
{ label: "发现事件时间", prop: "fxasjsj", type: "datetime" },
|
||||||
|
{ label: "开始时间", prop: "asjfssjAsjfskssj", type: "datetime" },
|
||||||
|
{ label: "结束时间", prop: "asjfssjAsjfsjssj", type: "datetime" },
|
||||||
|
{ label: "案发地点", prop: "asjfsddDzmc", type: "input", width: '90%' },
|
||||||
|
{ label: "涉案场所类别", prop: "asjfsddSacsSacslbdm", type: "select", options: GA_D_SACSFLDM },
|
||||||
|
{ label: "经度", prop: "asjfsddDqjd", type: "input" },
|
||||||
|
{ label: "纬度", prop: "asjfsddDqwd", type: "input" },
|
||||||
|
{ label: "地域类别", prop: "asjfsddDylbdm", type: "select", options: GA_D_DYLBDM },
|
||||||
|
{ label: "简要案情", prop: "jyaq", type: "textarea", width: "90%" },
|
||||||
|
{ label: "受理时间", prop: "slsj", type: "datetime" },
|
||||||
|
{ label: "受理单位", prop: "sldwGajgmc", type: "input" },
|
||||||
|
{ label: "是否涉枪", prop: "sfsqPdbz", type: "input" },
|
||||||
|
{ label: "是否涉外", prop: "sfswPdbz", type: "input" },
|
||||||
|
{ label: "是否涉爆", prop: "sfsbPdbz", type: "input" },
|
||||||
|
{ label: "涉枪情况", prop: "sqqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "涉爆情况", prop: "sbqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "涉外情况", prop: "swasjswqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "受伤人数", prop: "asjssryRs", type: "input" },
|
||||||
|
{ label: "损失价值(元)", prop: "ssjzrmby", type: "input" },
|
||||||
|
{ label: "作案特征情况", prop: "zatzJyqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "损失财物情况", prop: "asjsscwJyqk", type: "textarea", width: "90%" },
|
||||||
|
{ label: "管制物品情况", prop: "asjgzwpJyqk", type: "textarea", width: "90%" },
|
||||||
|
]
|
||||||
|
|
||||||
|
const formData = ref()
|
||||||
|
const elform = ref()
|
||||||
|
watch(() => props.modelValue, (val) => {
|
||||||
|
if (val) {
|
||||||
|
if (props.lx == '1') {
|
||||||
|
tbJqIdFunc()
|
||||||
|
formData.value = xsaj
|
||||||
|
} else {
|
||||||
|
asjxzajidFunc()
|
||||||
|
formData.value = xzaj
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const tbJqIdFunc = () => {
|
||||||
|
asjxsajid(props.dataList.id).then((res) => {
|
||||||
|
listQuery.value = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const asjxzajidFunc = () => {
|
||||||
|
asjxzajid(props.dataList.id).then((res) => {
|
||||||
|
listQuery.value = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
elform.value.reset()
|
||||||
|
emits('update:modelValue', false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
@ -0,0 +1,456 @@
|
|||||||
|
<template>
|
||||||
|
<div class="report-container" ref="tableBox">
|
||||||
|
|
||||||
|
<div ref="ajReport">
|
||||||
|
<div class="main-title">林芝市{{ wdValue.date }}刑事犯罪</div>
|
||||||
|
<div class="main-title">情况分析</div>
|
||||||
|
<div class="body-text">
|
||||||
|
{{ wdValue.date }},全市共立各类刑事案件{{ wdValue.ypbgZttj.ztsl }}起,破{{ wdValue.ypbgZttj.zpsl }}起,总破案率{{
|
||||||
|
wdValue.ypbgZttj.zzpl }}%,抓获犯罪嫌疑人{{ wdValue.ypbgZttj.fzxyr }}名;涉案财物损失约{{ wdValue.ypbgZttj.cwss ?
|
||||||
|
wdValue.ypbgZttj.cwss : 0 }}万余元,挽回经济损失为{{ wdValue.ypbgZttj.whss ? wdValue.ypbgZttj.whss : 0
|
||||||
|
}}万余元;与上年同期相比各类刑事案件{{ wdValue.ypbgZttj.snztsl }}起,破{{ wdValue.ypbgZttj.snzpsl }}起,总破案率{{ wdValue.ypbgZttj.snzzpl
|
||||||
|
}}%,发案绝对数{{ wdValue.ypbgZttj.fajds }}。
|
||||||
|
</div>
|
||||||
|
<div class="body-text">对{{ wdValue.ym }}月份所立的{{ wdValue.ypbgZttj.ztsl }}起刑事案件进行分析,有以下特点:</div>
|
||||||
|
<div class="section-title">一、案类特点</div>
|
||||||
|
<div class="body-text" v-if="wdValue.aftdlxList.length > 0">
|
||||||
|
<!-- 本月,立盗窃案5起,破4起,破案率为80%;立电信网络诈骗案13起,破3起(月前积案2起),破案率为23%;立普通诈骗案5起,破7起(月前积案5起),破案率为140%;立故意伤害案3起,破4起(月前积案1起),破案率为133%;立强奸案2起,破2起,破案率为100%;立强制猥亵案1起,破1起,破案率为100%;立故意毁坏财物案1起,破1起,破案率为100%;破拒不执行判决裁定罪1起(月前积案)。 -->
|
||||||
|
<span>本月,</span><span v-for="(item, index) in wdValue.aftdlxList" :key="item.value">立{{ item.label }}{{
|
||||||
|
item.obj.las }}起,破{{ item.obj.pas }}起,破案率为{{ item.obj.pal }}%;</span>
|
||||||
|
</div>
|
||||||
|
<div class="section-title">二、刑事案件分布情况</div>
|
||||||
|
<div class="body-text" v-if="wdValue.xsajfbqkList.length > 0">
|
||||||
|
<div v-for="item in wdValue.xsajfbqkList" :key="item.value">
|
||||||
|
{{ item.label }}立{{ item.obj.qxztsl }}起,破{{ item.obj.zpsl }}起,破案率为{{ item.obj.pal }}%,占全市刑事案件总数{{
|
||||||
|
item.obj.qsbl }}%;
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-title">三、刑事案件发案特点</div>
|
||||||
|
<div class="body-text">
|
||||||
|
<!-- 盗窃案与上年同期相比发案有所下降 -->
|
||||||
|
<div v-for="item in wdValue.aftdList" :key="item.value"><span class="font-bold">{{ item.xb }}{{ item.label
|
||||||
|
}}与上年同期相比发案{{ item.obj.tqxb }}。</span>本月,立{{ item.label }}{{ item.obj.snzsl }}起,破{{ item.obj.snpa }}起,破案率为{{
|
||||||
|
item.obj.snpal }}%;与上年同期立{{ item.label }}{{ item.obj.bnzsl }}起,破{{ item.obj.bnpa }}起,破案率为{{ item.obj.bnpal
|
||||||
|
}}%相比,发案绝对数{{ item.obj.fajds }}。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-title">四、抓获犯罪嫌疑人情况分析</div>
|
||||||
|
<div class="body-text">
|
||||||
|
本月,{{ wdValue.xyrQkfx }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-title">五、侦防建议</div>
|
||||||
|
<div class="body-text">
|
||||||
|
{{ wdValue.xzjyL }}
|
||||||
|
</div>
|
||||||
|
<div class="body-text">
|
||||||
|
<div class="body-text right-align">
|
||||||
|
<div>林芝市公安局情报指挥中心</div>
|
||||||
|
<div>{{ wdValue.td }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="body-text" v-for="item in wdValue.xsajqxajqkList" :key="item.value">
|
||||||
|
<span class="font-bold">{{ item.label }} </span>
|
||||||
|
<span v-for="items in item.obj.ajqk" :key="items">立{{ items.zjlbmc }}{{items.lasl}}起,破{{items.pasl}}起; </span>
|
||||||
|
<!-- 立盗窃案{{item.obj.las}}起,破4起;立电诈案8起,破2起;立普通诈骗案1起,破1起;立招摇撞骗案1起,破1起;立敲诈勒索案1起,破1起;破拒不支付劳动报酬案1起(月前积案);破伪造公司印章案1起(月前积案)。 -->
|
||||||
|
<div>立{{ item.obj.lasl }}起,破{{ item.obj.pasl }}起。</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex;justify-content: center;align-items: center;">
|
||||||
|
<el-button type="primary" @click="downloadWithStyles">导出WORD</el-button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { xsasjxsajaltdtj, xsasjxsajfbqktj, xsasjxsajFatdtj, xsasjxsajxyrQkfx, xsasjxsajypbgZttj, xsasjxsajqxajqk } from '@/api/fileapi'
|
||||||
|
import { ref, onMounted ,watch } from 'vue'
|
||||||
|
import { connectSSEWithPost } from '@/utils/sse'
|
||||||
|
import { timeValidate } from '@/utils/tools'
|
||||||
|
import { downloadDocWithStyle, downloadPDF } from "@/utils/export.js"
|
||||||
|
import Docxtemplater from 'docxtemplater';
|
||||||
|
import PizZip from 'pizzip';
|
||||||
|
import { saveAs } from 'file-saver';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
search: {
|
||||||
|
type: Object,
|
||||||
|
default: ()=>{}
|
||||||
|
},
|
||||||
|
xzlx: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const params =ref({...props.search})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
await Promise.all([
|
||||||
|
getxsasjxsajypbgZttj(),
|
||||||
|
getxsasjxsajaltdtj(),
|
||||||
|
getxsasjxsajfbqktj(),
|
||||||
|
getxsasjxsajFatdtj(),
|
||||||
|
getxsasjxsajxyrQkfx(),
|
||||||
|
])
|
||||||
|
getconnectSSEWithPost()
|
||||||
|
getxsasjxsajqxajqk()
|
||||||
|
})
|
||||||
|
|
||||||
|
// 案类特点类型:
|
||||||
|
// 01 盗窃案 02 电信诈骗案 03 普通诈骗案 04 故意伤害案 05 强奸案 06 强制猥亵 07 毁坏财物 08 拒不执行
|
||||||
|
const aftdlx = [
|
||||||
|
{
|
||||||
|
label: '盗窃案', value: '01'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '电信诈骗案', value: '02'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '普通诈骗案', value: '03'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '故意伤害案', value: '04'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '强奸案', value: '05'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '强制猥亵', value: '06'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '毁坏财物', value: '07'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '拒不执行', value: '08'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
// 分布情况
|
||||||
|
// 所属部门代码(540402000000 巴宜区、540421000000 工布江达、540422000000 米林、540423000000 墨脱、540424000000 波密、540425000000 察隅、540426000000 朗县)
|
||||||
|
const ajfbqk = [
|
||||||
|
{
|
||||||
|
label: '巴宜区',
|
||||||
|
value: '540402000000'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '工布江达县',
|
||||||
|
value: '540421000000'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '米林市',
|
||||||
|
value: '540422000000'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '墨脱县',
|
||||||
|
value: '540423000000'
|
||||||
|
}, {
|
||||||
|
label: '波密县',
|
||||||
|
value: '540424000000'
|
||||||
|
}, {
|
||||||
|
label: '察隅县',
|
||||||
|
value: '540425000000'
|
||||||
|
}, {
|
||||||
|
label: '朗县',
|
||||||
|
value: '540426000000'
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
// 案件类型:
|
||||||
|
// 01 刑事案件 02 民事案件 03 其他案件
|
||||||
|
// 发案特点类型:01 盗窃案 02 电信诈骗案 03 普通诈骗案 04 故意伤害案 05 强奸案 06 敲诈勒索案 07 招摇撞骗案
|
||||||
|
const fatdlx = [{
|
||||||
|
label: '盗窃案', value: '01', xb: '(一)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '电信诈骗案', value: '02', xb: '(二)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '普通诈骗案', value: '03', xb: '(三)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '故意伤害案', value: '04', xb: '(四)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '强奸案', value: '05', xb: '(五)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '敲诈勒索案', value: '06', xb: '(六)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '招摇撞骗案', value: '07', xb: '(七)'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
// 值
|
||||||
|
const wdValue = ref({
|
||||||
|
date: timeValidate(new Date(), 'ny'),
|
||||||
|
ym: timeValidate(new Date(), 'ym'),
|
||||||
|
td: timeValidate(new Date(), 'td'),
|
||||||
|
ypbgZttj: {},
|
||||||
|
aftdlxList: [],
|
||||||
|
xsajfbqkList: [],
|
||||||
|
aftdList: [],
|
||||||
|
xsajqxajqkList:[],
|
||||||
|
xyrQkfx: '',
|
||||||
|
xzjyL: ''
|
||||||
|
|
||||||
|
})
|
||||||
|
// 案类特点统计
|
||||||
|
const getxsasjxsajaltdtj = () => {
|
||||||
|
const promises = aftdlx.map(item => {
|
||||||
|
return xsasjxsajaltdtj({
|
||||||
|
...params.value,
|
||||||
|
aftdlx: item.value
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return Promise.all(promises).then(results => {
|
||||||
|
wdValue.value.aftdlxList = aftdlx.map((item, index) => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
obj: results[index]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('请求失败:', error)
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 刑事案件分布情况
|
||||||
|
const getxsasjxsajfbqktj = () => {
|
||||||
|
const promises = ajfbqk.map(item => {
|
||||||
|
return xsasjxsajfbqktj({
|
||||||
|
...params.value,
|
||||||
|
ajfbqk: item.value
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return Promise.all(promises).then(results => {
|
||||||
|
wdValue.value.xsajfbqkList = ajfbqk.map((item, index) => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
obj: results[index]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('请求失败:', error)
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//刑事案件发案特点
|
||||||
|
const getxsasjxsajFatdtj = () => {
|
||||||
|
const promises = fatdlx.map(item => {
|
||||||
|
return xsasjxsajFatdtj({
|
||||||
|
...params.value,
|
||||||
|
ajfalx: item.value
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return Promise.all(promises).then(results => {
|
||||||
|
wdValue.value.aftdList = fatdlx.map((item, index) => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
obj: results[index]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('请求失败:', error)
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 抓获犯罪嫌疑人情况分析
|
||||||
|
const getxsasjxsajxyrQkfx = () => {
|
||||||
|
return xsasjxsajxyrQkfx({...params.value}).then(res => {
|
||||||
|
wdValue.value.xyrQkfx = res
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('请求失败:', error)
|
||||||
|
return ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const ajReport = ref(null)
|
||||||
|
// 获取报告所有文字内容
|
||||||
|
const getReportTextContent = () => {
|
||||||
|
if (!ajReport.value) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
// 提取元素内的所有文本内容
|
||||||
|
const textContent = ajReport.value.textContent || ''
|
||||||
|
// 处理空白字符,去除多余的换行和空格
|
||||||
|
return textContent
|
||||||
|
.replace(/\s+/g, ' ') // 将多个空白字符替换为单个空格
|
||||||
|
.trim() // 去除首尾空白
|
||||||
|
}
|
||||||
|
// 侦防建议
|
||||||
|
const getconnectSSEWithPost = () => {
|
||||||
|
const params = getReportTextContent()
|
||||||
|
connectSSEWithPost({ prompt: params }, {
|
||||||
|
onChunk: (content) => {
|
||||||
|
wdValue.value.xzjyL += content;
|
||||||
|
},
|
||||||
|
onComplete: () => {
|
||||||
|
console.log('SSE连接完成');
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error('SSE连接错误:', error);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 总体分析
|
||||||
|
const getxsasjxsajypbgZttj = () => {
|
||||||
|
return xsasjxsajypbgZttj({...params.value}).then(res => {
|
||||||
|
wdValue.value.ypbgZttj = { ...res, cwss: res.cwss ? res.cwss : 0, whss: res.whss ? res.whss : 0 }
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('请求失败:', error)
|
||||||
|
return {}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 区情分析
|
||||||
|
const getxsasjxsajqxajqk = () => {
|
||||||
|
|
||||||
|
const promises = ajfbqk.map(item => {
|
||||||
|
return xsasjxsajqxajqk({
|
||||||
|
...params.value,
|
||||||
|
ajfbqk: item.value
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return Promise.all(promises).then(results => {
|
||||||
|
wdValue.value.xsajqxajqkList = ajfbqk.map((item, index) => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
obj: results[index]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('请求失败:', error)
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
// 导出word
|
||||||
|
const tableBox = ref(null);
|
||||||
|
const downloadWithStyles = async () => {
|
||||||
|
if (!tableBox.value?.innerHTML) return;
|
||||||
|
try {
|
||||||
|
// 将类样式转换为行内样式的函数
|
||||||
|
const convertClassesToInlineStyles = (html) => {
|
||||||
|
// 创建临时DOM元素
|
||||||
|
const tempDiv = document.createElement('div');
|
||||||
|
tempDiv.innerHTML = html;
|
||||||
|
|
||||||
|
// 定义样式映射
|
||||||
|
const styleMap = {
|
||||||
|
'.report-container': {
|
||||||
|
'padding': '20px',
|
||||||
|
'color': '#000'
|
||||||
|
},
|
||||||
|
'.main-title': {
|
||||||
|
'font-size': '22pt',
|
||||||
|
'font-family': '黑体, SimHei, Microsoft YaHei',
|
||||||
|
'text-align': 'center',
|
||||||
|
'font-weight': 'bold',
|
||||||
|
'line-height': '30pt'
|
||||||
|
},
|
||||||
|
'.section-title': {
|
||||||
|
'font-size': '16pt',
|
||||||
|
'font-family': '黑体, SimHei, Microsoft YaHei',
|
||||||
|
'line-height': '30pt',
|
||||||
|
'text-indent': '2em',
|
||||||
|
'font-weight': 'bold'
|
||||||
|
},
|
||||||
|
'.body-text': {
|
||||||
|
'font-size': '16pt',
|
||||||
|
'font-family': '仿宋_GB2312',
|
||||||
|
'line-height': '30pt',
|
||||||
|
'text-indent': '2em'
|
||||||
|
},
|
||||||
|
'.font-bold': {
|
||||||
|
'font-weight': '600'
|
||||||
|
},
|
||||||
|
'.right-align': {
|
||||||
|
'text-align': 'right',
|
||||||
|
'margin-left': 'auto',
|
||||||
|
'width': 'fit-content'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 遍历所有元素,应用行内样式
|
||||||
|
const elements = tempDiv.querySelectorAll('*');
|
||||||
|
elements.forEach(element => {
|
||||||
|
// 获取元素的所有类名
|
||||||
|
const classes = element.className.split(' ').filter(c => c);
|
||||||
|
|
||||||
|
// 为每个类名应用对应的样式
|
||||||
|
classes.forEach(className => {
|
||||||
|
const styles = styleMap[`.${className}`];
|
||||||
|
if (styles) {
|
||||||
|
Object.entries(styles).forEach(([property, value]) => {
|
||||||
|
element.style[property] = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 返回转换后的HTML
|
||||||
|
return tempDiv.innerHTML;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 转换样式并构建导出内容
|
||||||
|
const inlineStyledContent = convertClassesToInlineStyles(tableBox.value.innerHTML);
|
||||||
|
const styledContent = `
|
||||||
|
<div style="padding: 20px; color: #000;">
|
||||||
|
${inlineStyledContent}
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
downloadDocWithStyle(styledContent, `刑事案件分析报告_${timeValidate(new Date(), 'ny')}`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('导出Word失败:', error);
|
||||||
|
alert('导出Word失败,请检查控制台错误信息');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.report-container {
|
||||||
|
padding: 20px;
|
||||||
|
height: 90%;
|
||||||
|
overflow: auto;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-title {
|
||||||
|
font-size: 22pt;
|
||||||
|
font-family: '黑体, SimHei, Microsoft YaHei';
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 30pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 16pt;
|
||||||
|
font-family: '黑体, SimHei, Microsoft YaHei';
|
||||||
|
line-height: 30pt;
|
||||||
|
text-indent: 2em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body-text {
|
||||||
|
font-size: 16pt;
|
||||||
|
// font-family: ', FangSong, Microsoft YaHei';
|
||||||
|
font-family: '仿宋_GB2312';
|
||||||
|
line-height: 30pt;
|
||||||
|
text-indent: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.font-bold {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-align {
|
||||||
|
text-align: right;
|
||||||
|
margin-left: auto;
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@ -0,0 +1,107 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" :title="title" @close="close" :close-on-click-modal="true">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
|
<template #chryList>
|
||||||
|
<el-input v-model="chryList" clearable placeholder="请选择参会人员" @click="isShowDialog = true"
|
||||||
|
style="width: 100%;" />
|
||||||
|
</template>
|
||||||
|
</FormMessage>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submit">
|
||||||
|
确认</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
<ChooseUser v-model="isShowDialog" @choosedUsers="userChange" :roleIds="roleIds" :Single="false" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, reactive, computed, getCurrentInstance } from 'vue'
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue"
|
||||||
|
import { wshsAdd } from "@/api/huiShangyp/tacticalApi"
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '网上会商'
|
||||||
|
},
|
||||||
|
dataList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}, lx: {
|
||||||
|
type: String,
|
||||||
|
default: '1'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emits = defineEmits(['update:modelValue'])
|
||||||
|
const rules = reactive({
|
||||||
|
hsbt: [
|
||||||
|
{ required: true, message: '请输入标题', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
hskssj: [
|
||||||
|
{ required: true, message: '请选择开始时间', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
hsjssj: [
|
||||||
|
{ required: true, message: '请选择结束时间', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
hsnr: [
|
||||||
|
{ required: true, message: '请输入内容', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const getData = computed(() => {
|
||||||
|
return {
|
||||||
|
glxsid: props.dataList.glzjjdbh || props.dataList.asjbh,
|
||||||
|
glxsmc: props.dataList.ajmc || props.dataList.bjrmc
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const listQuery = ref({})
|
||||||
|
const formData = ref([
|
||||||
|
{ label: '会商标题', prop: 'hsbt', type: 'input', width: '100%' },
|
||||||
|
{ label: '会商开始时间', prop: 'hskssj', type: 'datetime' },
|
||||||
|
{ label: '会商结束时间', prop: 'hsjssj', type: 'datetime' },
|
||||||
|
{ label: '参会人员', prop: 'chryList', type: 'slot', width: '100%' },
|
||||||
|
{ label: '会商内容', prop: 'hsnr', type: 'textarea', width: '100%' }
|
||||||
|
])
|
||||||
|
const elform = ref()
|
||||||
|
|
||||||
|
const close = () => {
|
||||||
|
elform.value.reset()
|
||||||
|
emits('update:modelValue', false)
|
||||||
|
}
|
||||||
|
const submit = () => {
|
||||||
|
elform.value.submit((val) => {
|
||||||
|
if (val) {
|
||||||
|
const promes = {
|
||||||
|
...listQuery.value,
|
||||||
|
...getData.value
|
||||||
|
}
|
||||||
|
wshsAdd(promes).then(res => {
|
||||||
|
proxy.$message({
|
||||||
|
message: '添加成功',
|
||||||
|
type: 'success'
|
||||||
|
})
|
||||||
|
emits('update:modelValue', false)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const isShowDialog = ref(false)
|
||||||
|
const roleIds = ref([])
|
||||||
|
const chryList = ref([])
|
||||||
|
const userChange = (val) => {
|
||||||
|
listQuery.value.chryList = val.map(v => v.id)
|
||||||
|
chryList.value = val.map(v => v.userName)
|
||||||
|
roleIds.value = val.map(v => v.id)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@ -1,13 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog :title="title" v-model="visible" width="80%" destroy-on-close>
|
|
||||||
<JudgmentReport :search="search"/>
|
<el-dialog :title="title" :model-value="visible" width="80%" destroy-on-close>
|
||||||
</el-dialog>
|
<div class="xsaj">
|
||||||
|
<JudgmentReport :search="search" v-if="xzlx === '02'" />
|
||||||
|
<Xsaj :search="search" v-if="xzlx === '03'" />
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
import { ref, reactive ,watch} from 'vue'
|
import { ref, reactive, watch } from 'vue'
|
||||||
import JudgmentReport from './AnalysisReport/index.vue'
|
import JudgmentReport from './AnalysisReport/index.vue'
|
||||||
|
import Xsaj from './caseFile/xsaj.vue'
|
||||||
const title = ref('详情')
|
const title = ref('详情')
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
visible: {
|
visible: {
|
||||||
@ -17,12 +22,21 @@ const props = defineProps({
|
|||||||
search: {
|
search: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: null
|
default: null
|
||||||
|
},
|
||||||
|
xzlx: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const opebg = ref(false)
|
const opebg = ref(false)
|
||||||
watch(() => props.visible, (val) => {
|
watch(() => props.visible, (val) => {
|
||||||
opebg.value = val
|
opebg.value = val
|
||||||
},{immediate:true})
|
}, { immediate: true })
|
||||||
const emit=defineEmits(['update:visible'])
|
const emit = defineEmits(['update:visible'])
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
.xsaj {
|
||||||
|
height: 70vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -0,0 +1,87 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-dialog :model-value="modelValue" :destroy-on-close="true" :title="title" @close="close" :close-on-click-modal="true">
|
||||||
|
<div style="height: 50vh;overflow: auto;">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="150px" ref="elform" >
|
||||||
|
</FormMessage> </div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, getCurrentInstance, watch } from 'vue'
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import {tbJqId} from '@/api/yj'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const {JQLB,JQLX,JQXL,JQZL,D_BZ_JQLY,D_BZ_JQBQ,D_GS_SSYJ}= proxy.$dict('D_GS_BQ_DJ',"JQLB",'JQLX','JQXL','JQZL','D_BZ_JQLY','D_BZ_JQBQ','D_GS_SSYJ')
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '网上会商'
|
||||||
|
},
|
||||||
|
dataList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emits = defineEmits(['update:modelValue'])
|
||||||
|
const listQuery = ref({})
|
||||||
|
const formData = ref([
|
||||||
|
{ label: "报警电话", prop: "bjdh", type: "input" },
|
||||||
|
{ label: "报警电话用户地址", prop: "bjdhyhdz", type: "input" },
|
||||||
|
{ label: "报警电话用户名", prop: "bjdhyhm", type: "input" },
|
||||||
|
{ label: "报警地址", prop: "bjdz", type: "input" },
|
||||||
|
{ label: "报警人名称", prop: "bjrmc", type: "input" },
|
||||||
|
{ label: "报警人证件号码", prop: "bjrzjhm", type: "input" },
|
||||||
|
{ label: "报警时间", prop: "bjsj", type: "input" },
|
||||||
|
{ label: "警情颜色", prop: "color", type: "select",options:D_GS_SSYJ },
|
||||||
|
{ label: "管辖单位名称", prop: "gxdwmc", type: "input" },
|
||||||
|
{ label: "单位名称", prop: "jcjxtjsdwmc", type: "input" },
|
||||||
|
{ label: "接警单编号", prop: "jjdbh", type: "input" },
|
||||||
|
{ label: "接警单位名称", prop: "jjdwmc", type: "input" },
|
||||||
|
{ label: "接警录音号", prop: "jjlyh", type: "input" },
|
||||||
|
{ label: "接警时间", prop: "jjsj", type: "input" },
|
||||||
|
{ label: "接警完成时间", prop: "jjwcsj", type: "input" },
|
||||||
|
{ label: "接警员编号", prop: "jjybh", type: "input" },
|
||||||
|
{ label: "接警员姓名", prop: "jjyxm", type: "input" },
|
||||||
|
{ label: "警情标签", prop: "jqbq", type: "select",options: D_BZ_JQBQ},
|
||||||
|
{ label: "警情地址", prop: "jqdz", type: "input" },
|
||||||
|
{ label: "警情类别代码", prop: "jqlbdm", type: "select", options: JQLB },
|
||||||
|
{ label: "警情类型代码", prop: "jqlxdm", type: "select",options: JQLX},
|
||||||
|
{ label: "警情来源", prop: "jqly", type: "select",options: D_BZ_JQLY},
|
||||||
|
{ label: "警情细类代码", prop: "jqxldm", type: "select" ,options: JQXL},
|
||||||
|
{ label: "警情子类代码", prop: "jqzldm", type: "select" ,options: JQZL},
|
||||||
|
{ label: "报警内容", prop: "bjnr", type: "textarea", width: "90%" },
|
||||||
|
{ label: "补充接警内容", prop: "bcjjnr", type: "textarea", width: "90%" },
|
||||||
|
{ label: "被困人员情况说明", prop: "bkryqksm", type: "textarea", width: "90%" },
|
||||||
|
])
|
||||||
|
const elform = ref()
|
||||||
|
watch(() => props.modelValue, (val) => {
|
||||||
|
if (val) {
|
||||||
|
tbJqIdFunc()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const tbJqIdFunc = () => {
|
||||||
|
console.log(props.dataList);
|
||||||
|
tbJqId(props.dataList.glzjjdbh).then((res) => {
|
||||||
|
listQuery.value = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
elform.value.reset()
|
||||||
|
emits('update:modelValue', false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
@ -34,8 +34,9 @@
|
|||||||
<div ref="searchBox">
|
<div ref="searchBox">
|
||||||
<el-form :model="searchList" ref="searchFormRef" :inline="true">
|
<el-form :model="searchList" ref="searchFormRef" :inline="true">
|
||||||
<el-form-item label="类型">
|
<el-form-item label="类型">
|
||||||
<el-cascader ref="cascaRef" v-model="searchList.lx" @change="changeCascader" collapse-tags
|
<el-cascader clearable ref="cascaRef" v-model="searchList.lx" @change="changeCascader" collapse-tags
|
||||||
:disabled="readonly_lx" :options="cascaderList" :props="{ multiple: true }" placeholder="请选择类型" />
|
:show-all-levels="false" :disabled="readonly_lx" :options="cascaderList" :props="{ multiple: true }"
|
||||||
|
placeholder="请选择类型" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item label="人员">
|
<!-- <el-form-item label="人员">
|
||||||
<el-input @change="changeRy" v-model="searchList.ry" :disabled="readonly_ry" clearable
|
<el-input @change="changeRy" v-model="searchList.ry" :disabled="readonly_ry" clearable
|
||||||
@ -53,9 +54,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
<el-form-item label="时间">
|
<el-form-item label="时间">
|
||||||
<el-date-picker v-model="searchList.datetimes" type="daterange" unlink-panels :range-separator="'至'"
|
<el-date-picker v-model="searchList.datetimes" type="daterange" unlink-panels :range-separator="'至'"
|
||||||
start-placeholder="开始日期时间" end-placeholder="结束日期时间" format="YYYY-MM-DD HH:mm:ss"
|
start-placeholder="开始日期时间" end-placeholder="结束日期时间" format="YYYY-MM-DD HH:mm:ss"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="onSearch">查询</el-button>
|
<el-button type="primary" @click="onSearch">查询</el-button>
|
||||||
@ -70,11 +71,22 @@
|
|||||||
<MyTable :tableData="it.tableList" :tableColumn="it.tableColumn" :key="idx + '' + it.keyCount"
|
<MyTable :tableData="it.tableList" :tableColumn="it.tableColumn" :key="idx + '' + it.keyCount"
|
||||||
:fixed="false" :tableHeight="pageData.tableHeight" :tabelModel="it.title"
|
:fixed="false" :tableHeight="pageData.tableHeight" :tabelModel="it.title"
|
||||||
:tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
|
<template #jjdbh="{ row }">
|
||||||
|
<span @click="jqDetail(row)">{{ row.jjdbh }}</span>
|
||||||
|
</template>
|
||||||
|
<template #asjbh="{ row }">
|
||||||
|
<span @click="caseDetail(row, row.lx)">{{ row.asjbh }}</span>
|
||||||
|
</template>
|
||||||
<template #jqlbdm="{ row }">
|
<template #jqlbdm="{ row }">
|
||||||
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
|
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #ajzlbdm="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.ajzlbdm" :options="GA_D_XSAJLBDM" />
|
||||||
|
</template>
|
||||||
|
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="primary" size="small" @click="handleHs(row)">网上会商</el-link>
|
<el-link type="primary" size="small" @click="handleHs(row, it.lylx)">网上会商</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo($event, it.title)" @changeSize="changeSize($event, it.title)"
|
<Pages @changeNo="changeNo($event, it.title)" @changeSize="changeSize($event, it.title)"
|
||||||
@ -89,38 +101,38 @@
|
|||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<!-- <DetailDialog ref="detaileRef"></DetailDialog> -->
|
<!-- <DetailDialog ref="detaileRef"></DetailDialog> -->
|
||||||
<!-- 研判报告弹窗 -->
|
<!-- 研判报告弹窗 -->
|
||||||
<JudgmentReport v-model="visible" :search="search"></JudgmentReport>
|
<JudgmentReport v-model="visible" :search="search" :xzlx="xzlx"></JudgmentReport>
|
||||||
|
<DiscussionDialog v-model="showDialog" :dataList="dataList" :lx="lx" />
|
||||||
|
<PoliceIncidentDetails v-model="showJqDetail" :dataList="dataList" title="警情详情" />
|
||||||
|
<CaseDetails v-model="showCaseDetail" :dataList="dataList" title="案件详情" :lx="ajlx" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { lzJcjPjdbSelectPage } from '@/api/semanticAnalysis.js'
|
import { lzJcjPjdbSelectPage } from '@/api/semanticAnalysis.js'
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
// import DetailDialog from './components/detailDialog.vue'
|
|
||||||
import JudgmentReport from './components/judgmentReport.vue'
|
import JudgmentReport from './components/judgmentReport.vue'
|
||||||
// import YpModel from '@/components/ypModel/index.vue'
|
|
||||||
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||||
import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue";
|
import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue";
|
||||||
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
||||||
import MyTable from "@/components/aboutTable/DarkTable.vue";
|
import MyTable from "@/components/aboutTable/DarkTable.vue";
|
||||||
import Pages from "@/components/aboutTable/Pages.vue";
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
import {tbJqGetPageList,xsajSelectPage } from '@/api/yj.js'
|
import { tbJqGetPageList, xsajSelectPage, xzajSelectPage } from '@/api/yj.js'
|
||||||
|
import DiscussionDialog from './components/discussionDialog.vue';
|
||||||
|
import PoliceIncidentDetails from './components/policeIncidentDetails.vue';
|
||||||
|
import CaseDetails from './components/caseDetails.vue';
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
import { nextTick, onMounted, reactive, getCurrentInstance, ref, watch } from 'vue';
|
import { nextTick, onMounted, reactive, getCurrentInstance, ref, watch } from 'vue';
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { JQLB } = proxy.$dict("JQLB"); //获取字典数据
|
const { JQLB } = proxy.$dict("JQLB"); //获取字典数据
|
||||||
const {GA_D_XSAJXALBDM} = proxy.$fzdict("GA_D_XSAJXALBDM"); //获取字典数据
|
const { GA_D_XSAJLBDM } = proxy.$fzdict("GA_D_XSAJLBDM"); //获取字典数据
|
||||||
const readonly_lx = ref(false)
|
const readonly_lx = ref(false)
|
||||||
const readonly_ry = ref(false)
|
const readonly_ry = ref(false)
|
||||||
const readonly_dd = ref(false)
|
const readonly_dd = ref(false)
|
||||||
const cascaRef = ref()
|
|
||||||
const showModel = ref(false);
|
|
||||||
// const detaileRef = ref();
|
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
const listBoxRef = ref();
|
const listBoxRef = ref();
|
||||||
const textContent = ref('');
|
|
||||||
// 图数据
|
// 图数据
|
||||||
const obj = reactive({
|
const obj = ref({
|
||||||
data_lxtj: {
|
data_lxtj: {
|
||||||
xData: ['网络舆情', '警情', '案件', '风险隐患'],
|
xData: ['网络舆情', '警情', '案件', '风险隐患'],
|
||||||
color: [['#0DBAC5', '#28EEBF'], ['#F06C0D', '#EEB416']],
|
color: [['#0DBAC5', '#28EEBF'], ['#F06C0D', '#EEB416']],
|
||||||
@ -148,13 +160,34 @@ let cascaderList = ref([
|
|||||||
{ value: '023', label: '交通警情', leaf: true },
|
{ value: '023', label: '交通警情', leaf: true },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{ value: '03', label: '案件', leaf: true },
|
{ value: '03', label: '刑事案件', leaf: true },
|
||||||
{ value: '04', label: '风险隐患', leaf: true },
|
{ value: '04', label: '行政案件', leaf: true },
|
||||||
|
{ value: '05', label: '风险隐患', leaf: true },
|
||||||
])
|
])
|
||||||
|
const tableColumn = ref({
|
||||||
|
xz: [
|
||||||
|
{ label: "案件编号", prop: "asjbh", showOverflowTooltip: true, showSolt: true },
|
||||||
|
{ label: "案件标题", prop: "ajmc", showOverflowTooltip: true },
|
||||||
|
{ label: "简要案情", prop: "jyaq", showOverflowTooltip: true },
|
||||||
|
{ label: "案件类型", prop: "ajzlbdm", showOverflowTooltip: true, showSolt: true },
|
||||||
|
{ label: "案件时间", prop: "asjfssjAsjfskssj", showOverflowTooltip: true },
|
||||||
|
],
|
||||||
|
xs: [
|
||||||
|
{ label: "案件编号", prop: "asjbh", showOverflowTooltip: true, showSolt: true },
|
||||||
|
{ label: "案件标题", prop: "ajmc", showOverflowTooltip: true },
|
||||||
|
{ label: "简要案情", prop: "jyaq", showOverflowTooltip: true },
|
||||||
|
{ label: "案件类型", prop: "ajzlbdm", showOverflowTooltip: true, showSolt: true },
|
||||||
|
{ label: "案件时间", prop: "asjfssjAsjfskssj", showOverflowTooltip: true },
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 每个列表对应的值
|
// 每个列表对应的值
|
||||||
const list = reactive([
|
const list = reactive([
|
||||||
{
|
{
|
||||||
title: '网络舆情', //标题
|
title: '网络舆情', //标题
|
||||||
|
lylx: '01',
|
||||||
tableList: [],
|
tableList: [],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
pageConfiger: {
|
pageConfiger: {
|
||||||
@ -172,6 +205,7 @@ const list = reactive([
|
|||||||
{
|
{
|
||||||
title: '警情', //标题
|
title: '警情', //标题
|
||||||
tableList: [],
|
tableList: [],
|
||||||
|
lylx: '02',
|
||||||
keyCount: 1,
|
keyCount: 1,
|
||||||
pageConfiger: {
|
pageConfiger: {
|
||||||
page: 1,
|
page: 1,
|
||||||
@ -179,7 +213,7 @@ const list = reactive([
|
|||||||
pageSize: 6,
|
pageSize: 6,
|
||||||
},
|
},
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "接警单编号", prop: "jjdbh", showOverflowTooltip: true },
|
{ label: "接警单编号", prop: "jjdbh", showOverflowTooltip: true, showSolt: true, },
|
||||||
{ label: "报警电话", prop: "bjdh", showOverflowTooltip: true },
|
{ label: "报警电话", prop: "bjdh", showOverflowTooltip: true },
|
||||||
{ label: "报警时间", prop: "bjsj", showOverflowTooltip: true },
|
{ label: "报警时间", prop: "bjsj", showOverflowTooltip: true },
|
||||||
{ label: "报警内容", prop: "bjnr", showOverflowTooltip: true },
|
{ label: "报警内容", prop: "bjnr", showOverflowTooltip: true },
|
||||||
@ -188,25 +222,28 @@ const list = reactive([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '案件', //标题
|
title: '案件', //标题
|
||||||
|
lylx: '03',
|
||||||
tableList: [],
|
tableList: [],
|
||||||
keyCount: 2,
|
keyCount: 2,
|
||||||
pageConfiger: {
|
pageConfiger: {
|
||||||
page: 1,
|
page: 1,
|
||||||
total: 0,
|
total: 0,
|
||||||
pageSize: 6,
|
pageSize: 10,
|
||||||
},
|
},
|
||||||
tableColumn: [
|
tableColumn: tableColumn.value.xs,
|
||||||
{ label: "案件编号", prop: "asjbh", showOverflowTooltip: true },
|
// [
|
||||||
{ label: "案件标题", prop: "ajmc", showOverflowTooltip: true },
|
// { label: "案件编号", prop: "asjbh", showOverflowTooltip: true },
|
||||||
{ label: "简要案情", prop: "jyaq", showOverflowTooltip: true },
|
// { label: "案件标题", prop: "ajmc", showOverflowTooltip: true },
|
||||||
{ label: "案件类型", prop: "ajxlbDmbcms", showOverflowTooltip: true },
|
// { label: "简要案情", prop: "jyaq", showOverflowTooltip: true },
|
||||||
{ label: "案件时间", prop: "asjfssjAsjfskssj", showOverflowTooltip: true },
|
// { label: "案件类型", prop: "ajzlbdm", showOverflowTooltip: true, showSolt: true },
|
||||||
],
|
// { label: "案件时间", prop: "asjfssjAsjfskssj", showOverflowTooltip: true },
|
||||||
|
// ],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '风险隐患', //标题
|
title: '风险隐患', //标题
|
||||||
tableList: [],
|
tableList: [],
|
||||||
keyCount: 3,
|
keyCount: 3,
|
||||||
|
lylx: '04',
|
||||||
pageConfiger: {
|
pageConfiger: {
|
||||||
page: 1,
|
page: 1,
|
||||||
total: 0,
|
total: 0,
|
||||||
@ -245,32 +282,174 @@ watch(() => JQLB.value, (val) => {
|
|||||||
deep: true, immediate: true
|
deep: true, immediate: true
|
||||||
})
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
getCount()
|
||||||
|
|
||||||
// getCount(); //获取统计数据
|
|
||||||
tabHeightFn()
|
tabHeightFn()
|
||||||
getJqList() //警情列表
|
getJqList() //警情列表
|
||||||
getAjList()//案件列表
|
getAjList()//案件列表
|
||||||
});
|
});
|
||||||
// 获取字典
|
|
||||||
const getxsajDictSelectList = () => {
|
|
||||||
xsajDictSelectList().then(res => {
|
|
||||||
console.log(res);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 选择类型
|
||||||
|
const changeCascader = (val) => {
|
||||||
|
readonly_lx.value = false;
|
||||||
|
readonly_ry.value = val ? true : false
|
||||||
|
readonly_dd.value = val ? true : false
|
||||||
|
searchList.value.ry = ''
|
||||||
|
searchList.value.ssbm = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重置
|
||||||
|
const resetForm = () => {
|
||||||
|
searchList.value = {}
|
||||||
|
searchForm.value = {}
|
||||||
|
readonly_lx.value = false
|
||||||
|
readonly_ry.value = false
|
||||||
|
readonly_dd.value = false
|
||||||
|
}
|
||||||
|
const dataSearch = ref({})
|
||||||
|
// 搜索
|
||||||
|
const xzlx = ref('02')
|
||||||
|
const onSearch = () => {
|
||||||
|
|
||||||
|
let len = []
|
||||||
|
xzlx.value = Array.isArray(searchList.value.lx) ? searchList.value.lx[0][0] : ''
|
||||||
|
const bjlbs = Array.isArray(searchList.value.lx) ? searchList.value.lx.map(item => {
|
||||||
|
len.push(item[0])
|
||||||
|
return item[item.length - 1]
|
||||||
|
}) : []
|
||||||
|
const uniqueArr = [...new Set(len)].length
|
||||||
|
if (uniqueArr > 1) {
|
||||||
|
return ElMessage.warning('只能选择一个类型')
|
||||||
|
}
|
||||||
|
dataSearch.value = {
|
||||||
|
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||||
|
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||||
|
bjlbs: bjlbs,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
switch (xzlx.value) {
|
||||||
|
case '01':
|
||||||
|
break;
|
||||||
|
case '02':
|
||||||
|
getJqList()
|
||||||
|
break;
|
||||||
|
case '03':
|
||||||
|
getAjList()
|
||||||
|
break;
|
||||||
|
case '04':
|
||||||
|
getAjList()
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
getJqList()
|
||||||
|
getAjList()
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 警情列表
|
||||||
|
const getJqList = () => {
|
||||||
|
let params = {
|
||||||
|
pageCurrent: list[1].pageConfiger.page,
|
||||||
|
pageSize: list[1].pageConfiger.pageSize,
|
||||||
|
...dataSearch.value,
|
||||||
|
bjlbs: dataSearch.value.bjlbs?.join(',') || '',
|
||||||
|
}
|
||||||
|
lzJcjPjdbSelectPage(params).then(res => {
|
||||||
|
list[1].tableList = res.records || [];
|
||||||
|
list[1].pageConfiger.total = res.total;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 案件列表
|
||||||
|
const getAjList = () => {
|
||||||
|
let params = {
|
||||||
|
pageCurrent: list[2].pageConfiger.page,
|
||||||
|
pageSize: list[2].pageConfiger.pageSize,
|
||||||
|
startTime: dataSearch.value.startTime,
|
||||||
|
endTime: dataSearch.value.endTime,
|
||||||
|
}
|
||||||
|
if (!dataSearch.value.bjlbs || dataSearch.value.bjlbs == '04') {
|
||||||
|
xzajSelectPage(params).then(res => {
|
||||||
|
list[2].tableColumn = tableColumn.value.xz
|
||||||
|
list[2].tableList = res.records.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
lx: '2'
|
||||||
|
}
|
||||||
|
}) || [];
|
||||||
|
list[2].pageConfiger.total = res.total;
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
xsajSelectPage(params).then(res => {
|
||||||
|
list[2].tableColumn = tableColumn.value.xs
|
||||||
|
list[2].tableList = res.records.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
lx: '1'
|
||||||
|
}
|
||||||
|
}) || [];
|
||||||
|
list[2].pageConfiger.total = res.total;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 网上会商
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const dataList = ref()
|
||||||
|
const lx = ref('1')
|
||||||
|
const handleHs = (val, it) => {
|
||||||
|
showDialog.value = true
|
||||||
|
dataList.value = { ...val }
|
||||||
|
lx.value = it
|
||||||
|
}
|
||||||
|
|
||||||
|
const ArrData = ref([
|
||||||
|
{
|
||||||
|
label: '警情',
|
||||||
|
value: 'jqsl'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '案件',
|
||||||
|
value: 'ajsl'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '风险隐患',
|
||||||
|
value: 'fxyh'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '网络舆情',
|
||||||
|
value: 'wlyq'
|
||||||
|
},
|
||||||
|
])
|
||||||
|
// 获取统计数据
|
||||||
const getCount = () => {
|
const getCount = () => {
|
||||||
// 获取处置状态统计
|
// 获取处置状态统计
|
||||||
qcckPost({}, '/mosty-gsxt/qbcj/getXscjTjByXslx').then(res => {
|
qcckGet({}, '/mosty-gsxt/hsyp/znypLxtj').then(res => {
|
||||||
let arr = res || [];
|
let arr = ArrData.value.map(item => {
|
||||||
obj.data_lxtj.xData = arr.map(v => v.zdmc);
|
return {
|
||||||
obj.data_lxtj.list = [{ label: '总数', val: arr.map(v => v.count) }];
|
...item,
|
||||||
|
count: res[item.value] || 0
|
||||||
|
}
|
||||||
|
}) || [];
|
||||||
|
obj.value.data_lxtj.xData = arr.map(v => v.label);
|
||||||
|
obj.value.data_lxtj.list = [{ label: '总数', val: arr.map(v => v.count) }];
|
||||||
|
|
||||||
});
|
});
|
||||||
// 会商统计
|
// 会商统计
|
||||||
qcckPost({}, '/mosty-gsxt/wshs/getWshyZttj').then(res => {
|
qcckGet({}, '/mosty-gsxt/hsyp/znypHstj').then(res => {
|
||||||
let arr = res || [];
|
let arr = ArrData.value.map(item => {
|
||||||
obj.data_hstj.xData = arr.map(v => v.zdmc);
|
return {
|
||||||
obj.data_hstj.list = [{ label: '总数', val: arr.map(v => v.count) }];
|
...item,
|
||||||
|
count: res[item.value] || 0
|
||||||
|
}
|
||||||
|
}) || [];
|
||||||
|
obj.value.data_hstj.xData = arr.map(v => v.label);
|
||||||
|
obj.value.data_hstj.list = [{ label: '总数', val: arr.map(v => v.count) }];
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -286,7 +465,7 @@ const changeNo = (e, type) => {
|
|||||||
break;
|
break;
|
||||||
case '案件':
|
case '案件':
|
||||||
list[2].pageConfiger.page = e;
|
list[2].pageConfiger.page = e;
|
||||||
getAjList()
|
getAjList()
|
||||||
break;
|
break;
|
||||||
case '风险隐患':
|
case '风险隐患':
|
||||||
list[3].pageConfiger.page = e;
|
list[3].pageConfiger.page = e;
|
||||||
@ -294,6 +473,7 @@ const changeNo = (e, type) => {
|
|||||||
}
|
}
|
||||||
// getJqList()
|
// getJqList()
|
||||||
}
|
}
|
||||||
|
// 分页大小
|
||||||
const changeSize = (e, type) => {
|
const changeSize = (e, type) => {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case '网络舆情':
|
case '网络舆情':
|
||||||
@ -313,152 +493,73 @@ const changeSize = (e, type) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
// 警情详情
|
||||||
// 警情列表
|
const showJqDetail = ref(false)
|
||||||
const getJqList = () => {
|
const jqDetail = (val) => {
|
||||||
let params = {
|
showJqDetail.value = true
|
||||||
pageCurrent: list[1].pageConfiger.page,
|
dataList.value = { ...val }
|
||||||
pageSize: list[1].pageConfiger.pageSize,
|
|
||||||
}
|
|
||||||
lzJcjPjdbSelectPage(params).then(res => {
|
|
||||||
list[1].tableList = res.records || [];
|
|
||||||
list[1].pageConfiger.total = res.total;
|
|
||||||
|
|
||||||
//模拟的统计警情接口
|
|
||||||
obj.data_lxtj.list = [{ label: '总数', val: [0, res.total, 0, 0] }];
|
|
||||||
obj.data_hstj.list = [{ label: '总数', val: [0, res.total, 0, 0] }];
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
const getAjList = () => {
|
// 案件详情
|
||||||
let params = {
|
const showCaseDetail = ref(false)
|
||||||
pageCurrent: list[2].pageConfiger.page,
|
const ajlx = ref()
|
||||||
pageSize: list[2].pageConfiger.pageSize,
|
const caseDetail = (val, lx) => {
|
||||||
}
|
ajlx.value = lx
|
||||||
console.log("执行");
|
showCaseDetail.value = true
|
||||||
|
dataList.value = { ...val }
|
||||||
xsajSelectPage(params).then(res => {
|
|
||||||
list[2].tableList = res.records || [];
|
|
||||||
list[2].pageConfiger.total = res.total;
|
|
||||||
|
|
||||||
// //模拟的统计警情接口
|
|
||||||
// obj.data_lxtj.list = [{ label: '总数', val: [0, res.total, 0, 0] }];
|
|
||||||
// obj.data_hstj.list = [{ label: '总数', val: [0, res.total, 0, 0] }];
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// xsajSelectPage(promes).then(res => {
|
|
||||||
// list[2].tableList = res.records || [];
|
|
||||||
// list[2].pageConfiger.total = res.total;
|
|
||||||
// })
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleHs = (val) => {
|
|
||||||
router.push({ path: '/MeetingRoom', query: { tsypid: val.id } })
|
|
||||||
}
|
}
|
||||||
|
// 打开研判报告
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const search = ref({})
|
const search = ref({})
|
||||||
const handleYP = () => {
|
const handleYP = () => {
|
||||||
console.log(searchList.value);
|
|
||||||
visible.value = true
|
visible.value = true
|
||||||
let data = []
|
console.log(searchList.value.lx);
|
||||||
if (searchList.value.lx) {
|
|
||||||
data = searchList.value.lx.map(item => {
|
|
||||||
return item[item.length - 1]
|
|
||||||
})
|
|
||||||
|
|
||||||
|
if (searchList.value.lx.length == 0) {
|
||||||
|
xzlx.value = '02'
|
||||||
|
return
|
||||||
}
|
}
|
||||||
search.value = {
|
switch (xzlx.value) {
|
||||||
lx: searchList.value.lx ? data : '',
|
case '01':
|
||||||
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
break;
|
||||||
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
case '02':
|
||||||
}
|
let data = []
|
||||||
|
if (searchList.value.lx) {
|
||||||
// let arr=cascaRef.value.getCheckedNodes()
|
data = searchList.value.lx.map(item => {
|
||||||
// searchForm.value.jqlbdms=arr.map((el)=>{
|
return item[item.length - 1]
|
||||||
// return el.value
|
})
|
||||||
// })
|
}
|
||||||
// let params = {
|
search.value = {
|
||||||
// hskssj: searchForm.value.kssj,
|
lx: searchList.value.lx ? data : '',
|
||||||
// hsjssj: searchForm.value.jssj,
|
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||||
// jqlbdms:searchForm.value.jqlbdms
|
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||||
// }
|
}
|
||||||
// qcckPost(params, '/mosty-gsxt/lzJcjPjdb/getJqDcypbg').then(res => {
|
break;
|
||||||
// let data = res || {};
|
case '03':
|
||||||
// let html = `<p class="html_bt">${data.bt}</p>`
|
search.value = {
|
||||||
// html += `<p>${data.head}</p>`
|
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||||
// html += `<p>${data.nr}</p>`
|
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||||
// html += `<p>${data.bc}</p>`
|
}
|
||||||
// html += `<p>${data.end}</p>`
|
break;
|
||||||
// textContent.value = html;
|
case '04':
|
||||||
// showModel.value = true;
|
break;
|
||||||
// })
|
default:
|
||||||
}
|
break;
|
||||||
|
|
||||||
// 选择类型
|
|
||||||
const changeCascader = (val) => {
|
|
||||||
console.log(val, 'val');
|
|
||||||
console.log(cascaRef.value.getCheckedNodes(), '++++++++');
|
|
||||||
|
|
||||||
readonly_lx.value = false;
|
|
||||||
readonly_ry.value = val ? true : false
|
|
||||||
readonly_dd.value = val ? true : false
|
|
||||||
searchList.value.ry = ''
|
|
||||||
searchList.value.ssbm = ''
|
|
||||||
}
|
|
||||||
|
|
||||||
// 选择人员
|
|
||||||
const changeRy = (val) => {
|
|
||||||
readonly_ry.value = false;
|
|
||||||
readonly_lx.value = val ? true : false
|
|
||||||
readonly_dd.value = val ? true : false
|
|
||||||
searchList.value.lx = ''
|
|
||||||
searchList.value.ssbm = ''
|
|
||||||
}
|
|
||||||
// 选择地点
|
|
||||||
const changeBm = (val) => {
|
|
||||||
readonly_dd.value = false;
|
|
||||||
readonly_lx.value = val ? true : false
|
|
||||||
readonly_ry.value = val ? true : false
|
|
||||||
searchList.value.lx = ''
|
|
||||||
searchList.value.ry = ''
|
|
||||||
}
|
|
||||||
// 重置
|
|
||||||
const resetForm = () => {
|
|
||||||
searchList.value = {}
|
|
||||||
searchForm.value = {}
|
|
||||||
readonly_lx.value = false
|
|
||||||
readonly_ry.value = false
|
|
||||||
readonly_dd.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
// 搜索
|
|
||||||
const onSearch = () => {
|
|
||||||
if (searchList.value.lx || searchList.value.ry || searchList.value.dd) {
|
|
||||||
const data= searchList.value.lx.map(item => {
|
|
||||||
return item[item.length - 1]
|
|
||||||
})
|
|
||||||
console.log(searchList.value);
|
|
||||||
|
|
||||||
const promes = {
|
|
||||||
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
|
||||||
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
|
||||||
bjlbs: searchList.value.lx ? data.join(',') : '',
|
|
||||||
}
|
|
||||||
console.log(promes);
|
|
||||||
|
|
||||||
tbJqGetPageList(promes).then(res => {
|
|
||||||
list[1].tableList = res.records || [];
|
|
||||||
list[1].pageConfiger.total = res.total;
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ElMessage.warning('请选择查询条件')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
pageData.boxHeight = window.innerHeight - searchBox.value.offsetHeight - 250
|
pageData.boxHeight = window.innerHeight - searchBox.value.offsetHeight - 250
|
||||||
@ -481,7 +582,7 @@ const tabHeightFn = () => {
|
|||||||
color: #000;
|
color: #000;
|
||||||
|
|
||||||
.leftbox {
|
.leftbox {
|
||||||
width: 500px;
|
width: 450px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|||||||
@ -34,6 +34,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="180" align="center">
|
<el-table-column label="操作" width="180" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
|
|
||||||
<el-button type="text" size="small" @click="updateStatus(row)" :disabled="updateDis(row)">
|
<el-button type="text" size="small" @click="updateStatus(row)" :disabled="updateDis(row)">
|
||||||
修改状态
|
修改状态
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -48,7 +49,7 @@
|
|||||||
</FormMessage>
|
</FormMessage>
|
||||||
</div>
|
</div>
|
||||||
<!-- 底部按钮 -->
|
<!-- 底部按钮 -->
|
||||||
<div class="bottom-actions" v-if="title !== '新增' && listQuery.id">
|
<div class="bottom-actions" v-if="title !== '新增' && listQuery.id && listQuery.ssbmdm == userInfo.deptCode" >
|
||||||
<el-button type="primary" size="small" @click="sendNotice" :loading="noticeLoading">下发通知</el-button>
|
<el-button type="primary" size="small" @click="sendNotice" :loading="noticeLoading">下发通知</el-button>
|
||||||
<el-button type="success" size="small" @click="confirmJudgment" :loading="confirmLoading">确认研判</el-button>
|
<el-button type="success" size="small" @click="confirmJudgment" :loading="confirmLoading">确认研判</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -102,7 +103,8 @@ import { getItem } from '@//utils/storage.js'
|
|||||||
|
|
||||||
const emit = defineEmits(["updateDate", "getList"]);
|
const emit = defineEmits(["updateDate", "getList"]);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dict: Object
|
dict: Object,
|
||||||
|
userInfo: Object
|
||||||
});
|
});
|
||||||
const imgMsg = ref([])
|
const imgMsg = ref([])
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
|
|||||||
@ -27,9 +27,9 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="primary" @click="getDataById('edit', row)">修改</el-link>
|
<el-link size="small" type="primary" @click="getDataById('edit', row)" :disabled="userInfo.deptCode!=row.ssbmdm">修改</el-link>
|
||||||
<el-link size="small" type="primary" @click="getDataById('detail', row)">详情</el-link>
|
<el-link size="small" type="primary" @click="getDataById('detail', row)">详情</el-link>
|
||||||
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
<el-link size="small" type="danger" @click="deleteFile(row)" :disabled="userInfo.deptCode!=row.ssbmdm">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
@ -38,7 +38,7 @@
|
|||||||
}"></Pages>
|
}"></Pages>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<AddForm ref="addForm" @getList="getList" :dict="{ D_BZ_YPFS, D_BZ_YPLX }" />
|
<AddForm ref="addForm" @getList="getList" :dict="{ D_BZ_YPFS, D_BZ_YPLX }" :userInfo="userInfo" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -47,6 +47,7 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
|||||||
import Pages from "@/components/aboutTable/Pages.vue";
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
import { getItem } from "@/utils/storage.js";
|
||||||
import { sjzlGetPageList, sjzldeleteEntity } from "@/api/yj.js";
|
import { sjzlGetPageList, sjzldeleteEntity } from "@/api/yj.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, watch,computed } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, watch,computed } from "vue";
|
||||||
import AddForm from "./addForm.vue";
|
import AddForm from "./addForm.vue";
|
||||||
@ -54,7 +55,10 @@ const { proxy } = getCurrentInstance();
|
|||||||
const { D_BZ_YPFS, D_BZ_YPLX } = proxy.$dict("D_BZ_YPFS", "D_BZ_YPLX")
|
const { D_BZ_YPFS, D_BZ_YPLX } = proxy.$dict("D_BZ_YPFS", "D_BZ_YPLX")
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
|
|
||||||
|
const userInfo = ref({})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
userInfo.value = getItem('deptId')?getItem('deptId')[0]:{}
|
||||||
tabHeightFn()
|
tabHeightFn()
|
||||||
if (route.query.id) {
|
if (route.query.id) {
|
||||||
detailDiloag.value.init('edit', {
|
detailDiloag.value.init('edit', {
|
||||||
@ -64,6 +68,9 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
getList()
|
getList()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** 是否市情报指挥中心 */
|
/** 是否市情报指挥中心 */
|
||||||
const isShiQingBaoZhongXin = computed(() => {
|
const isShiQingBaoZhongXin = computed(() => {
|
||||||
const Jb = deptLevel[0] == '2' ? '01' : deptLevel[0] == '3' ? '02' : '03'
|
const Jb = deptLevel[0] == '2' ? '01' : deptLevel[0] == '3' ? '02' : '03'
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" title="内部审核" width="35%" @close="closeDialog" destroy-on-close append-to-body>
|
<el-dialog :model-value="modelValue" title="内部审核" width="35%" @close="closeDialog" destroy-on-close append-to-body>
|
||||||
<div style="height: 15vh; overflow: auto;">
|
<div style="height: 15vh; overflow: auto;">
|
||||||
<el-form ref="ruleFormRef" :rules="rules" :model="form" label-width="auto" style="max-width: 600px">
|
<el-form ref="ruleFormRef" :rules="rules" :model="form" label-width="auto" style="max-width: 600px">
|
||||||
<el-form-item label="审核状态" prop="shzt">
|
<el-form-item label="审核状态" prop="shzt">
|
||||||
|
|||||||
@ -20,8 +20,12 @@
|
|||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
<template #zlzt="{ row }">
|
<template #zlzt="{ row }">
|
||||||
<DictTag :tag="true" :value="row.zlzt"
|
{{ showSign(row) }}
|
||||||
:options="[{ label: '未签收', value: '01' }, { label: '已签收', value: '02' }, { label: '已反馈', value: '03' }]" />
|
<!-- <div v-for="item in row.xfbmList" :key="item.id">
|
||||||
|
{{ showSign(item) }}
|
||||||
|
</div> -->
|
||||||
|
<!-- <DictTag v-if="" :tag="true" :value="item.zlzt" :options="[{ label: '未签收', value: '01' }, { label: '已签收', value: '02' }, { label: '已反馈', value: '03' }]" /> -->
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<template #ypfs="{ row }">
|
<template #ypfs="{ row }">
|
||||||
<DictTag :tag="false" :value="row.ypfs" :options="D_BZ_YPFS" />
|
<DictTag :tag="false" :value="row.ypfs" :options="D_BZ_YPFS" />
|
||||||
@ -31,8 +35,8 @@
|
|||||||
<el-link size="small" type="primary" @click="getDataById('edit', row)">修改</el-link>
|
<el-link size="small" type="primary" @click="getDataById('edit', row)">修改</el-link>
|
||||||
<el-link size="small" type="primary" @click="getDataById('detail', row)">详情</el-link>
|
<el-link size="small" type="primary" @click="getDataById('detail', row)">详情</el-link>
|
||||||
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
||||||
<el-link v-if="row.zlzt!=='02'" size="small" type="success" @click="sign(row)">签收</el-link>
|
<el-link v-if="showBtn(row)=='sign'" size="small" type="success" @click="sign(row)">签收</el-link>
|
||||||
<el-link v-if="row.zlzt!=='03'" size="small" type="warning" @click="feedback(row)">反馈</el-link>
|
<el-link v-if="showBtn(row)=='feedback'" size="small" type="warning" @click="feedback(row)">反馈</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
@ -55,11 +59,14 @@ import { getJudgmentCommandList, deleteJudgmentCommand, signCommand, feedbackCom
|
|||||||
import { reactive, ref, onMounted, getCurrentInstance, watch, computed } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, watch, computed } from "vue";
|
||||||
import AddForm from "./addForm.vue";
|
import AddForm from "./addForm.vue";
|
||||||
import FeedbackDialog from "./components/FeedbackDialog.vue";
|
import FeedbackDialog from "./components/FeedbackDialog.vue";
|
||||||
|
import { getItem } from '@//utils/storage.js'
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_YPFS, D_BZ_YPLX } = proxy.$dict("D_BZ_YPFS", "D_BZ_YPLX")
|
const { D_BZ_YPFS, D_BZ_YPLX } = proxy.$dict("D_BZ_YPFS", "D_BZ_YPLX")
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
|
const userInfo = ref()
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
userInfo.value = getItem('deptId')[0]
|
||||||
tabHeightFn()
|
tabHeightFn()
|
||||||
if (route.query.id) {
|
if (route.query.id) {
|
||||||
detailDiloag.value.init('edit', {
|
detailDiloag.value.init('edit', {
|
||||||
@ -138,7 +145,7 @@ const getList = () => {
|
|||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
window.onresize = function() {
|
window.onresize = function () {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -193,6 +200,29 @@ const handleFeedbackSuccess = () => {
|
|||||||
// 反馈成功后刷新列表
|
// 反馈成功后刷新列表
|
||||||
getList();
|
getList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 权限控制
|
||||||
|
// 显示签收
|
||||||
|
const showSign = (row) => {
|
||||||
|
let item = row.xfbmList.find(v => v.ssbmdm == userInfo.value.deptCode)
|
||||||
|
if (item) {
|
||||||
|
return item.zlzt == '01' ? '未签收' : item.zlzt == '02' ? '已签收' : '已反馈'
|
||||||
|
} else {
|
||||||
|
return row.zlzt == '01' ? '未签收' : row.zlzt == '02' ? '已签收' : '已反馈'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// sign--签收
|
||||||
|
// feedback--反馈
|
||||||
|
// 显示按钮
|
||||||
|
const showBtn = (row) => {
|
||||||
|
let item = row.xfbmList.find(v => v.ssbmdm == userInfo.value.deptCode)
|
||||||
|
if (item) {
|
||||||
|
return item.zlzt == '01' ? 'sign' : item.zlzt == '02' ? 'feedback' : ''
|
||||||
|
} else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||||
:mode="mode" />
|
:mode="mode" />
|
||||||
<!-- 编辑器 -->
|
<!-- 编辑器 -->
|
||||||
<Editor :style="`height: 480px; overflow-y: hidden`" v-model="textContent" :defaultConfig="editorConfig"
|
<Editor :style="`height: 480px; overflow-y: hidden`" :model-value="textContent" :defaultConfig="editorConfig"
|
||||||
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||||
:mode="mode" />
|
:mode="mode" />
|
||||||
<!-- 编辑器 -->
|
<!-- 编辑器 -->
|
||||||
<Editor :style="`height: 480px; overflow-y: hidden`" v-model="textContent" :defaultConfig="editorConfig"
|
<Editor :style="`height: 480px; overflow-y: hidden`" :model-value="textContent" :defaultConfig="editorConfig"
|
||||||
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||||
:mode="mode" />
|
:mode="mode" />
|
||||||
<!-- 编辑器 -->
|
<!-- 编辑器 -->
|
||||||
<Editor :style="`height: 480px; overflow-y: hidden`" v-model="textContent" :defaultConfig="editorConfig"
|
<Editor :style="`height: 480px; overflow-y: hidden`" :model-value="textContent" :defaultConfig="editorConfig"
|
||||||
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" title="线索下发" width="50%" @close="closeDialog" destroy-on-close append-to-body>
|
<el-dialog :model-value="modelValue" title="线索下发" width="50%" @close="closeDialog" destroy-on-close append-to-body>
|
||||||
<div style="height: 50vh; overflow: auto;">
|
<div style="height: 50vh; overflow: auto;">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
</FormMessage>
|
</FormMessage>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="title == '详情'" class="timeline-container">
|
<div v-if="title == '详情'" class="timeline-container">
|
||||||
<el-timeline class="timeline-wrapper" v-if="listQuery.czlcList.length > 0">
|
<el-timeline class="timeline-wrapper" v-if="listQuery.czlcLis&&listQuery.czlcList.length > 0">
|
||||||
<el-timeline-item placement="top" v-for="(activity, index) in listQuery.czlcList" :key="index"
|
<el-timeline-item placement="top" v-for="(activity, index) in listQuery.czlcList" :key="index"
|
||||||
:timestamp="activity.czsj" :color="activity.czlx == '01' ? '#409eff' : '#67c23a'" size="large">
|
:timestamp="activity.czsj" :color="activity.czlx == '01' ? '#409eff' : '#67c23a'" size="large">
|
||||||
<div class="timeline-content" :class="activity.czlx == '01' ? 'sign-type' : 'feedback-type'">
|
<div class="timeline-content" :class="activity.czlx == '01' ? 'sign-type' : 'feedback-type'">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" title="线索反馈" width="50%" @close="closeDialog" destroy-on-close append-to-body>
|
<el-dialog :model-value="modelValue" title="线索反馈" width="50%" @close="closeDialog" destroy-on-close append-to-body>
|
||||||
<div style="height: 15vh; overflow: auto;">
|
<div style="height: 15vh; overflow: auto;">
|
||||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -41,9 +41,9 @@
|
|||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="primary" v-if="row.sfqs == '0'" @click="signRow(row)">签收</el-link>
|
<el-link size="small" type="primary" v-if="row.sfqs == '0'" @click="signRow(row)">签收</el-link>
|
||||||
<el-link size="small" type="warning" @click="fkRow(row)">反馈</el-link>
|
<el-link size="small" type="warning" @click="fkRow(row)">反馈</el-link>
|
||||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
<el-link size="small" type="primary" @click="addEdit('edit', row)" v-if="showBtn(row)">编辑</el-link>
|
||||||
<el-link size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
<el-link size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||||
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
|
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="showBtn(row)">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages
|
<Pages
|
||||||
@ -71,6 +71,7 @@ import DetailForm from "./components/detailForm.vue";
|
|||||||
import Fk from "./components/fk.vue";
|
import Fk from "./components/fk.vue";
|
||||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
|
import { getItem } from '@/utils/storage'
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const {D_GS_XS_SJLY,D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ,D_GS_XS_CZZT} = proxy.$dict('D_GS_XS_SJLY','D_GS_XS_ZLLX','D_GS_ZDQT_FXDJ','D_GS_XS_CZZT')
|
const {D_GS_XS_SJLY,D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ,D_GS_XS_CZZT} = proxy.$dict('D_GS_XS_SJLY','D_GS_XS_ZLLX','D_GS_ZDQT_FXDJ','D_GS_XS_CZZT')
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
@ -109,8 +110,9 @@ const pageData = reactive({
|
|||||||
{ label: '是否签收', prop: 'sfqs', showSolt: true },
|
{ label: '是否签收', prop: 'sfqs', showSolt: true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
const userInfo=ref();
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
userInfo.value=getItem('deptId')[0]
|
||||||
getList()
|
getList()
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
});
|
});
|
||||||
@ -184,6 +186,17 @@ const fkRow = (row) => {
|
|||||||
dataList.value = {...row};
|
dataList.value = {...row};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
const showBtn = (row) => {
|
||||||
|
let item = row.xfbmList.find(v => v.ssbmdm == userInfo.value.deptCode)
|
||||||
|
console.log(item);
|
||||||
|
|
||||||
|
return item?true:false
|
||||||
|
// // if (item) {
|
||||||
|
// // return item.zlzt == '01' ? 'sign' : item.zlzt == '02' ? 'feedback' : ''
|
||||||
|
// // } else {
|
||||||
|
// // return ''
|
||||||
|
// // }
|
||||||
|
}
|
||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
|
|||||||
@ -0,0 +1,282 @@
|
|||||||
|
<template>
|
||||||
|
<div class="statistical-analysis">
|
||||||
|
<!-- 左侧树形菜单 -->
|
||||||
|
<div class="left-menu">
|
||||||
|
<!-- 这个部分用的是组件-后期替换 -->
|
||||||
|
<MOSTY.DepartmentTree width="310px" @change="init" placeholder="管理部门" clearable filterable :isBmId="false"
|
||||||
|
v-model="listQuery.ssbmdm" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 右侧内容区 -->
|
||||||
|
<div class="right-content">
|
||||||
|
<!-- 顶部筛选 -->
|
||||||
|
<div class="filter-section">
|
||||||
|
<el-radio-group v-model="radio" @change="changeRadio">
|
||||||
|
<el-radio v-for="(it, idx) in timeList" :key="idx" :label="it.num">{{ it.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<el-date-picker v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD" @change="handleDateChange" />
|
||||||
|
<el-button type="primary" @click="init">查询</el-button>
|
||||||
|
<el-button type="primary" @click="handleRest">重置</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 统计图表区域 -->
|
||||||
|
<div class="charts-container">
|
||||||
|
<div class="chart-item">
|
||||||
|
<div class="chart-title">
|
||||||
|
<span>信息分组统计</span>
|
||||||
|
<!-- <el-button type="primary">导出统计表</el-button> -->
|
||||||
|
</div>
|
||||||
|
<div class="chart">
|
||||||
|
<PieEcharts echartsId="pieChart" color="#333" :data="obj.xsfzList" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="chart-item">
|
||||||
|
<div class="chart-title">
|
||||||
|
<span>预警等级统计</span>
|
||||||
|
<!-- <el-button type="primary">导出统计表</el-button> -->
|
||||||
|
</div>
|
||||||
|
<div class="chart">
|
||||||
|
<!-- {{ obj.yjdjList }} -->
|
||||||
|
<DbarEcharts echartsId="bar3DChart" :data="obj.yjdjList" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="chart-item">
|
||||||
|
<div class="chart-title">
|
||||||
|
<span>线索来源统计</span>
|
||||||
|
<!-- <el-button type="primary">导出统计表</el-button> -->
|
||||||
|
</div>
|
||||||
|
<ul class="chart mt8">
|
||||||
|
<li v-for="(it, idx) in obj.xslyList" :key="idx" class="mb6">
|
||||||
|
<div style="color: #333">{{ it.label }}</div>
|
||||||
|
<el-progress :text-inside="true" :stroke-width="20" :percentage="calculatePercentage(it.value)"
|
||||||
|
status="exception">
|
||||||
|
<span><span style="color: #e37233">{{ it.value }}</span> 个</span>
|
||||||
|
</el-progress>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="chart-item">
|
||||||
|
<div class="chart-title">
|
||||||
|
<span>研判统计</span>
|
||||||
|
<!-- <el-button type="primary">导出统计表</el-button> -->
|
||||||
|
</div>
|
||||||
|
<DbarEcharts echartsId="bar3DCharts" :data="obj.ypList" />
|
||||||
|
<!-- <lineEcharts color="#333" echartsId="areaChart" :data="obj.ypList" /> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { timeValidate, timeSlotChange } from "@/utils/tools.js";
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
import lineEcharts from "@/views/home/echarts/lineEcharts.vue";
|
||||||
|
import PieEcharts from "@/views/home/echarts/pieEcharts.vue";
|
||||||
|
import DbarEcharts from "@/views/home/echarts/3DbarEcharts.vue";
|
||||||
|
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||||
|
import { reactive, ref, onMounted } from "vue";
|
||||||
|
|
||||||
|
const dateRange = ref([timeValidate(new Date(), 'ymd'), timeValidate(new Date(), 'ymd')]);// 日期范围
|
||||||
|
const radio = ref(0); //当天
|
||||||
|
const timeList = ref([
|
||||||
|
{ label: "日", num: 0 },
|
||||||
|
{ label: "月", num: 1 },
|
||||||
|
{ label: "季", num: 2 },
|
||||||
|
{ label: "年", num: 3 }
|
||||||
|
]);
|
||||||
|
const listQuery = ref({})
|
||||||
|
const obj = reactive({
|
||||||
|
xsfzList: [],// 线索采集统计
|
||||||
|
xslyList: [],// 线索专题统计
|
||||||
|
ypList: {
|
||||||
|
list: [],//线索来源统计
|
||||||
|
topColor: '#1bd6c2',
|
||||||
|
colors: ["#28EEBF", "#0DBAC5"],
|
||||||
|
},
|
||||||
|
yjdjList: {
|
||||||
|
list: [],//线索来源统计
|
||||||
|
topColor: '#1bd6c2',
|
||||||
|
colors: ["#28EEBF", "#0DBAC5"],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
init() //初始化数据
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const init = () => {
|
||||||
|
console.log(dateRange.value);
|
||||||
|
let data = {
|
||||||
|
ssbmdm: listQuery.value.ssbmdm,
|
||||||
|
startTime: dateRange.value[0]+' 00:00:00',
|
||||||
|
endTime: dateRange.value[1] + ' 23:59:59',
|
||||||
|
}
|
||||||
|
// 线索分组统计
|
||||||
|
qcckGet(data, '/mosty-gsxt/xxcj/xxfztj').then(res => {
|
||||||
|
let arr = res || [];
|
||||||
|
obj.xsfzList = arr.map(v => {
|
||||||
|
return { label: v.label, value: v.sl }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
//研判统计
|
||||||
|
qcckGet(data, '/mosty-gsxt/ypbg/sjzl/yptj').then(res => {
|
||||||
|
let arr = res || [];
|
||||||
|
obj.ypList.list = arr.map(v => {
|
||||||
|
return { label: v.label, value: v.sl }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
//线索来源统计
|
||||||
|
qcckPost(data, '/mosty-gsxt/qbcj/getXscjTjByQbly').then(res => {
|
||||||
|
let arr = res || [];
|
||||||
|
obj.xslyList = arr.map(v => {
|
||||||
|
return { label: v.zdmc, value: v.count }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
//预警等级
|
||||||
|
const yjdjList = [
|
||||||
|
{ label: '红色预警', key: '01', count: 0 },
|
||||||
|
{ label: '橙色预警', key: '02', count: 0 },
|
||||||
|
{ label: '黄色预警', key: '03', count: 0 },
|
||||||
|
{ label: '蓝色预警', key: '04', count: 0 },
|
||||||
|
]
|
||||||
|
// 预警等级统计
|
||||||
|
qcckGet({ssbmdm:data.ssbmdm,kssj:data.startTime,jssj:data.endTime}, '/mosty-gsxt/tbYjxx/getYjxxTj').then(res => {
|
||||||
|
let arr = res || [];
|
||||||
|
obj.yjdjList.list = yjdjList.map(items => {
|
||||||
|
const index= arr.findIndex(item=>item.yj_jb===items.key);
|
||||||
|
return {
|
||||||
|
label: items.label,
|
||||||
|
value:index==-1?0:arr[index].count
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const changeRadio = (val) => {
|
||||||
|
switch (val) {
|
||||||
|
case 0: //日
|
||||||
|
dateRange.value = timeSlotChange('日')
|
||||||
|
// [timeValidate(), timeValidate()]
|
||||||
|
break;
|
||||||
|
case 1: //月
|
||||||
|
dateRange.value = timeSlotChange('本月')
|
||||||
|
break;
|
||||||
|
case 2: //季度
|
||||||
|
dateRange.value = timeSlotChange('本季度')
|
||||||
|
break;
|
||||||
|
case 3: //年
|
||||||
|
dateRange.value = timeSlotChange('本年')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDateChange = (val) => {
|
||||||
|
radio.value = '';
|
||||||
|
if (val[0] == timeSlotChange('天')[0] && val[1] == timeSlotChange('天')[1]) radio.value = 0;
|
||||||
|
if (val[0] == timeSlotChange('本月')[0] && val[1] == timeSlotChange('本月')[1]) radio.value = 1;
|
||||||
|
if (val[0] == timeSlotChange('本季度')[0] && val[1] == timeSlotChange('本季度')[1]) radio.value = 2;
|
||||||
|
if (val[0] == timeSlotChange('本年')[0] && val[1] == timeSlotChange('本年')[1]) radio.value = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 重置
|
||||||
|
const handleRest = () => {
|
||||||
|
radio.value = 0;
|
||||||
|
dateRange.value = [timeValidate(), timeValidate()];
|
||||||
|
init();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 计算百分比
|
||||||
|
const calculatePercentage = (value) => {
|
||||||
|
if (!obj.xslyList || obj.xslyList.length === 0) return 0;
|
||||||
|
const total = obj.xslyList.reduce((sum, item) => sum + (item.value || 0), 0);
|
||||||
|
if (total === 0) return 0;
|
||||||
|
return Math.round((value / total) * 100);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.statistical-analysis {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.left-menu {
|
||||||
|
width: 350px;
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-right: 1px solid #e8e8e8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-content {
|
||||||
|
flex: 1;
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.filter-section {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
background: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.charts-container {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: calc(100% - 50px);
|
||||||
|
|
||||||
|
.chart-item {
|
||||||
|
width: 49.5%;
|
||||||
|
height: calc(50% - 5px);
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
|
||||||
|
.chart-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chart {
|
||||||
|
height: calc(100% - 40px);
|
||||||
|
overflow: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-radio {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-radio__inner {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-progress-bar__innerText {
|
||||||
|
color: #333;
|
||||||
|
margin: 0 -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-progress.is-exception .el-progress-bar__inner {
|
||||||
|
background: linear-gradient(90deg, #fe5d00 0%, #face35 100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -44,6 +44,7 @@
|
|||||||
<el-button type="primary">导出统计表</el-button>
|
<el-button type="primary">导出统计表</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="chart">
|
<div class="chart">
|
||||||
|
<!-- {{ obj.xslyList }} -->
|
||||||
<DbarEcharts echartsId="bar3DChart" :data="obj.xslyList" />
|
<DbarEcharts echartsId="bar3DChart" :data="obj.xslyList" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" title="合并详情" width="1500px" @close="handleClose">
|
<el-dialog :model-value="modelValue" title="合并详情" width="1500px" @close="handleClose">
|
||||||
<div style="width:100%">
|
<div style="width:100%">
|
||||||
<MyTable
|
<MyTable
|
||||||
:tableData="pageForm.tableData"
|
:tableData="pageForm.tableData"
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="modelValue" :before-close="close" width="300px" center class="analysisDialog"
|
<el-dialog :model-value="modelValue" :before-close="close" width="300px" center class="analysisDialog"
|
||||||
:append-to-body="true">
|
:append-to-body="true">
|
||||||
|
|
||||||
<template #title>
|
<template #title>
|
||||||
|
|||||||
@ -148,7 +148,7 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 300, //操作栏宽度
|
controlsWidth: 160, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "xm" },
|
{ label: "姓名", prop: "xm" },
|
||||||
{ label: "身份证号", prop: "sfzh", width: 200 },
|
{ label: "身份证号", prop: "sfzh", width: 200 },
|
||||||
@ -263,7 +263,7 @@ const bqYs = (val) => {
|
|||||||
const assessShow = ref(false)
|
const assessShow = ref(false)
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.sfzh) // 全息档案跳转
|
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||||
// assessShow.value = true;
|
// assessShow.value = true;
|
||||||
// dataList.value = val;
|
// dataList.value = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -139,17 +139,17 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
},
|
},
|
||||||
controlsWidth: 300,
|
controlsWidth: 200,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "xm" },
|
{ label: "姓名", prop: "xm" },
|
||||||
{ label: "身份证号", prop: "sfzh" },
|
{ label: "身份证号", prop: "sfzh" , width: 200 },
|
||||||
// { label: "电话", prop: "dh" },
|
// { label: "电话", prop: "dh" },
|
||||||
{ label: "预警标签", prop: "yjbqmc" },
|
{ label: "预警标签", prop: "yjbqmc" },
|
||||||
// { label: "组合大类", prop: "sfdlmc" },
|
// { label: "组合大类", prop: "sfdlmc" },
|
||||||
// { label: "组合小类", prop: "sfzlmc" },
|
// { label: "组合小类", prop: "sfzlmc" },
|
||||||
{ label: "组合次数", prop: "sfcs", showSolt: true },
|
{ label: "组合次数", prop: "sfcs", showSolt: true },
|
||||||
{ label: "标签颜色", prop: "bqys", showSolt: true },
|
{ label: "标签颜色", prop: "bqys", showSolt: true },
|
||||||
{ label: "预警时间", prop: "yjsj" },
|
{ label: "预警时间", prop: "yjsj" , width: 200 },
|
||||||
{ label: "预警分值", prop: "sffz" },
|
{ label: "预警分值", prop: "sffz" },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "所属县局", prop: "ssxgaj" },
|
{ label: "所属县局", prop: "ssxgaj" },
|
||||||
@ -251,7 +251,7 @@ const assessShow = ref(false)
|
|||||||
const selectRows = ref([])
|
const selectRows = ref([])
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.sfzh) // 全息档案跳转
|
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||||
// assessShow.value = true;
|
// assessShow.value = true;
|
||||||
// dataList.value = val;
|
// dataList.value = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,15 +109,15 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
},
|
},
|
||||||
controlsWidth: 300, //操作栏宽度
|
controlsWidth: 200, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "预警人员姓名", prop: "yjRyxm" },
|
{ label: "预警人员姓名", prop: "yjRyxm" },
|
||||||
{ label: "预警人员身份证号码", prop: "yjRysfzh" },
|
{ label: "预警人员身份证号码", prop: "yjRysfzh",width: 200 },
|
||||||
{ label: "预警标签", prop: "yjbqmc" },
|
{ label: "预警标签", prop: "yjbqmc" },
|
||||||
{ label: "今日预警次数", prop: "yjJrcs" },
|
{ label: "今日预警次数", prop: "yjJrcs" },
|
||||||
{ label: "标签颜色", prop: "yjJb", showSolt: true },
|
{ label: "标签颜色", prop: "yjJb", showSolt: true },
|
||||||
{ label: "预警内容", prop: "yjNr" },
|
{ label: "预警内容", prop: "yjNr",showOverflowTooltip: true },
|
||||||
{ label: "预警时间", prop: "yjFssj" },
|
{ label: "预警时间", prop: "yjFssj" ,width: 200},
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "所属县局", prop: "ssxgaj" },
|
{ label: "所属县局", prop: "ssxgaj" },
|
||||||
{ label: "处置单位", prop: "ssbm" },
|
{ label: "处置单位", prop: "ssbm" },
|
||||||
@ -194,7 +194,7 @@ const handleQsFk = (val, type) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.sfzh) // 全息档案跳转
|
return holographicProfileJump(val?.yjLx,val) // 全息档案跳转
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -70,7 +70,6 @@ const { proxy } = getCurrentInstance();
|
|||||||
const { D_BZ_YJJB, D_GS_ZDQT_YJLB, D_BZ_YJLX } = proxy.$dict("D_BZ_YJJB", "D_GS_ZDQT_YJLB", "D_BZ_YJLX"); //获取字典数据
|
const { D_BZ_YJJB, D_GS_ZDQT_YJLB, D_BZ_YJLX } = proxy.$dict("D_BZ_YJJB", "D_GS_ZDQT_YJLB", "D_BZ_YJLX"); //获取字典数据
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
import { holographicProfileJump } from "@/utils/tools.js"
|
import { holographicProfileJump } from "@/utils/tools.js"
|
||||||
|
|
||||||
const searchConfiger = ref(
|
const searchConfiger = ref(
|
||||||
[
|
[
|
||||||
{ label: "预警级别", prop: 'yjjbList', placeholder: "请输入姓名", showType: "select", options: D_BZ_YJJB },
|
{ label: "预警级别", prop: 'yjjbList', placeholder: "请输入姓名", showType: "select", options: D_BZ_YJJB },
|
||||||
@ -92,7 +91,7 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 300, //操作栏宽度
|
controlsWidth: 160, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "预警图片", prop: "yjtp", showSolt: true },
|
{ label: "预警图片", prop: "yjtp", showSolt: true },
|
||||||
{ label: "姓名", prop: "ryxm" },
|
{ label: "姓名", prop: "ryxm" },
|
||||||
@ -102,7 +101,7 @@ const pageData = reactive({
|
|||||||
{ label: "预警级别", prop: "yjjb", showSolt: true },
|
{ label: "预警级别", prop: "yjjb", showSolt: true },
|
||||||
{ label: "预警类别", prop: "yjlb", showSolt: true },
|
{ label: "预警类别", prop: "yjlb", showSolt: true },
|
||||||
{ label: "预警类型", prop: "yjlx", showSolt: true },
|
{ label: "预警类型", prop: "yjlx", showSolt: true },
|
||||||
{ label: "预警时间", prop: "yjsj" },
|
{ label: "预警时间", prop: "yjsj" , width: 200},
|
||||||
{ label: "所属部门", prop: "ssbm" },
|
{ label: "所属部门", prop: "ssbm" },
|
||||||
{ label: "车牌号", prop: "cph" },
|
{ label: "车牌号", prop: "cph" },
|
||||||
]
|
]
|
||||||
@ -169,9 +168,7 @@ const bqYs = (val) => {
|
|||||||
const assessShow = ref(false)
|
const assessShow = ref(false)
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.rysfzh) // 全息档案跳转
|
return holographicProfileJump(val?.yjlb,val) // 全息档案跳转
|
||||||
// assessShow.value = true;
|
|
||||||
// dataList.value = val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -137,17 +137,17 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
},
|
},
|
||||||
controlsWidth: 300, //操作栏宽度
|
controlsWidth: 200, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "xm" },
|
{ label: "姓名", prop: "xm" },
|
||||||
{ label: "身份证号", prop: "sfzh" },
|
{ label: "身份证号", prop: "sfzh" , width: 200 },
|
||||||
// { label: "电话", prop: "dh" },
|
// { label: "电话", prop: "dh" },
|
||||||
{ label: "预警标签", prop: "yjbqmc" },
|
{ label: "预警标签", prop: "yjbqmc" },
|
||||||
// { label: "组合大类", prop: "sfdlmc" },
|
// { label: "组合大类", prop: "sfdlmc" },
|
||||||
// { label: "组合小类", prop: "sfzlmc" },
|
// { label: "组合小类", prop: "sfzlmc" },
|
||||||
{ label: "组合次数", prop: "sfcs", showSolt: true },
|
{ label: "组合次数", prop: "sfcs", showSolt: true },
|
||||||
{ label: "标签颜色", prop: "bqys", showSolt: true },
|
{ label: "标签颜色", prop: "bqys", showSolt: true },
|
||||||
{ label: "预警时间", prop: "yjsj" },
|
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||||
{ label: "预警分值", prop: "sffz" },
|
{ label: "预警分值", prop: "sffz" },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "所属县局", prop: "ssxgaj" },
|
{ label: "所属县局", prop: "ssxgaj" },
|
||||||
@ -282,9 +282,7 @@ const handleQsFk = (val, type) => {
|
|||||||
const assessShow = ref(false)
|
const assessShow = ref(false)
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.sfzh) // 全息档案跳转
|
return holographicProfileJump(val.yjlb,val) // 全息档案跳转
|
||||||
// assessShow.value = true;
|
|
||||||
// dataList.value = val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送指令
|
// 发送指令
|
||||||
|
|||||||
@ -83,7 +83,6 @@ import { tbGsxtBqglSelectList } from '@/api/zdr'
|
|||||||
// import Detail from './components/detail.vue'
|
// import Detail from './components/detail.vue'
|
||||||
import { watch } from "vue";
|
import { watch } from "vue";
|
||||||
import emitter from "@/utils/eventBus.js";
|
import emitter from "@/utils/eventBus.js";
|
||||||
import { holographicProfileJump } from "@/utils/tools.js"
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
|
|||||||
@ -132,19 +132,19 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 300, //操作栏宽度
|
controlsWidth: 200, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 200 },
|
||||||
{ label: "姓名", prop: "yjRyxm" },
|
{ label: "姓名", prop: "yjRyxm" },
|
||||||
{ label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
{ label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
||||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||||
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||||
|
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ const getList = (val) => {
|
|||||||
const assessShow = ref(false)
|
const assessShow = ref(false)
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.yjRysfzh) // 全息档案跳转
|
return holographicProfileJump(val.yjLx,val) // 全息档案跳转
|
||||||
// assessShow.value = true;
|
// assessShow.value = true;
|
||||||
// dataList.value = val;
|
// dataList.value = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -133,6 +133,7 @@ const pageData = reactive({
|
|||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||||
{ label: "标题", prop: "yjBt" },
|
{ label: "标题", prop: "yjBt" },
|
||||||
|
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||||
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
||||||
|
|
||||||
|
|
||||||
@ -195,7 +196,7 @@ const getList = (val) => {
|
|||||||
const assessShow = ref(false)
|
const assessShow = ref(false)
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.yjRysfzh) // 全息档案跳转
|
return holographicProfileJump(val.yjLx,val) // 全息档案跳转
|
||||||
// assessShow.value = true;
|
// assessShow.value = true;
|
||||||
// dataList.value = val;
|
// dataList.value = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -171,6 +171,7 @@ const pageData = reactive({
|
|||||||
{ label: "布控手机号", prop: "yjRysjh", showOverflowTooltip: true },
|
{ label: "布控手机号", prop: "yjRysjh", showOverflowTooltip: true },
|
||||||
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||||
|
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
const showDc = ref(false)
|
const showDc = ref(false)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user