lcw
This commit is contained in:
@ -25,7 +25,8 @@
|
||||
<div style="border-bottom: 1px #ccc solid;padding-bottom: 30px;">
|
||||
<h1 style="text-align: center;color: red;">{{ nd }}年度林芝市公安战术研判报告</h1>
|
||||
<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?.ord }}</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, downloadPDF } from "@/utils/export.js"
|
||||
import { ElMessage } from "element-plus";
|
||||
import { qcckPost } from '@/api/qcckApi'
|
||||
import { connectSSEWithPost, closeSSEConnection } from '@/utils/sse.js'
|
||||
|
||||
const props = defineProps({
|
||||
// 数据
|
||||
@ -168,7 +171,7 @@ const tabHeight = ref(0)
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
tabHeight.value = window.innerHeight - 300
|
||||
window.onresize = function() {
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
@ -495,48 +498,58 @@ getDictItemList()
|
||||
const tableBox = ref(null);
|
||||
const textContent = ref('');
|
||||
const chartRefs = ref([]); // 存储所有图表组件的引用
|
||||
// 获取p标签的所有文字内容,去除所有<>包裹的内容
|
||||
const extractTextContent = () => {
|
||||
loading.value = true
|
||||
// 获取当前组件的HTML内容
|
||||
const componentHtml = tableBox.value ? tableBox.value.innerHTML : '';
|
||||
|
||||
// 存储提取的文本内容
|
||||
const extractedTexts = [];
|
||||
const extractTextContent = async () => {
|
||||
if (!tableBox.value) return;
|
||||
|
||||
// 获取当前组件的HTML内容
|
||||
const htmlContent = tableBox.value.innerHTML;
|
||||
|
||||
// 提取p标签的文本内容
|
||||
const pRegex = /<p[^>]*>(.*?)<\/p>/gs;
|
||||
let pMatch;
|
||||
while ((pMatch = pRegex.exec(componentHtml)) !== null) {
|
||||
let pContent = pMatch[1];
|
||||
const pRegex = /<p[^>]*>([\s\S]*?)<\/p>/g;
|
||||
let pMatch = pRegex.exec(htmlContent);
|
||||
let extractedText = '';
|
||||
|
||||
while (pMatch !== null) {
|
||||
// 去除所有<>包裹的内容
|
||||
pContent = pContent.replace(/<[^>]*>/g, '');
|
||||
|
||||
let cleanText = pMatch[1].replace(/<[^>]*>/g, '');
|
||||
// 去除HTML注释
|
||||
pContent = pContent.replace(/<!--[\s\S]*?-->/g, '');
|
||||
|
||||
// 清理文本,去除多余空白字符
|
||||
const cleanText = pContent.replace(/\s+/g, ' ').trim();
|
||||
if (cleanText) {
|
||||
extractedTexts.push(cleanText);
|
||||
}
|
||||
cleanText = cleanText.replace(/<!--[\s\S]*?-->/g, '');
|
||||
extractedText += cleanText + '\n';
|
||||
pMatch = pRegex.exec(htmlContent);
|
||||
}
|
||||
// 清理文本,去除多余空白字符
|
||||
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>
|
||||
@ -547,32 +560,19 @@ const extractTextContent = () => {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.analysis-report-box {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
p {
|
||||
text-indent: 2em;
|
||||
/* 首行缩进2个汉字 */
|
||||
margin: 1em 0;
|
||||
/* 段落间距 */
|
||||
line-height: 1.6;
|
||||
/* 行高 */
|
||||
font-size: 16px;
|
||||
/* 字体大小 */
|
||||
text-align: justify;
|
||||
/* 两端对齐 */
|
||||
}
|
||||
|
||||
/* 特殊情况处理 */
|
||||
p.no-indent {
|
||||
text-indent: 0;
|
||||
/* 不需要缩进的段落 */
|
||||
}
|
||||
|
||||
p.first-no-indent:first-of-type {
|
||||
text-indent: 0;
|
||||
/* 第一个段落不缩进 */
|
||||
|
||||
}
|
||||
</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>
|
||||
<el-dialog :title="title" v-model="visible" width="80%" destroy-on-close>
|
||||
<JudgmentReport :search="search"/>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="title" :model-value="visible" width="80%" destroy-on-close>
|
||||
<div class="xsaj">
|
||||
<JudgmentReport :search="search" v-if="xzlx === '02'" />
|
||||
<Xsaj :search="search" v-if="xzlx === '03'" />
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
import { ref, reactive ,watch} from 'vue'
|
||||
import { ref, reactive, watch } from 'vue'
|
||||
import JudgmentReport from './AnalysisReport/index.vue'
|
||||
import Xsaj from './caseFile/xsaj.vue'
|
||||
const title = ref('详情')
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
@ -17,12 +22,21 @@ const props = defineProps({
|
||||
search: {
|
||||
type: Object,
|
||||
default: null
|
||||
},
|
||||
xzlx: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
})
|
||||
|
||||
const opebg = ref(false)
|
||||
watch(() => props.visible, (val) => {
|
||||
opebg.value = val
|
||||
},{immediate:true})
|
||||
const emit=defineEmits(['update:visible'])
|
||||
}, { immediate: true })
|
||||
const emit = defineEmits(['update:visible'])
|
||||
</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">
|
||||
<el-form :model="searchList" ref="searchFormRef" :inline="true">
|
||||
<el-form-item label="类型">
|
||||
<el-cascader ref="cascaRef" v-model="searchList.lx" @change="changeCascader" collapse-tags
|
||||
:disabled="readonly_lx" :options="cascaderList" :props="{ multiple: true }" placeholder="请选择类型" />
|
||||
<el-cascader clearable ref="cascaRef" v-model="searchList.lx" @change="changeCascader" collapse-tags
|
||||
:show-all-levels="false" :disabled="readonly_lx" :options="cascaderList" :props="{ multiple: true }"
|
||||
placeholder="请选择类型" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="人员">
|
||||
<el-input @change="changeRy" v-model="searchList.ry" :disabled="readonly_ry" clearable
|
||||
@ -53,9 +54,9 @@
|
||||
</div>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="时间">
|
||||
<el-date-picker v-model="searchList.datetimes" type="daterange" unlink-panels :range-separator="'至'"
|
||||
start-placeholder="开始日期时间" end-placeholder="结束日期时间" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<el-date-picker v-model="searchList.datetimes" type="daterange" unlink-panels :range-separator="'至'"
|
||||
start-placeholder="开始日期时间" end-placeholder="结束日期时间" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSearch">查询</el-button>
|
||||
@ -70,11 +71,22 @@
|
||||
<MyTable :tableData="it.tableList" :tableColumn="it.tableColumn" :key="idx + '' + it.keyCount"
|
||||
:fixed="false" :tableHeight="pageData.tableHeight" :tabelModel="it.title"
|
||||
: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 }">
|
||||
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
|
||||
</template>
|
||||
|
||||
<template #ajzlbdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.ajzlbdm" :options="GA_D_XSAJLBDM" />
|
||||
</template>
|
||||
|
||||
<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>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo($event, it.title)" @changeSize="changeSize($event, it.title)"
|
||||
@ -89,38 +101,38 @@
|
||||
<!-- 弹窗 -->
|
||||
<!-- <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>
|
||||
|
||||
<script setup>
|
||||
import { lzJcjPjdbSelectPage } from '@/api/semanticAnalysis.js'
|
||||
import { ElMessage } from "element-plus";
|
||||
// import DetailDialog from './components/detailDialog.vue'
|
||||
import JudgmentReport from './components/judgmentReport.vue'
|
||||
// import YpModel from '@/components/ypModel/index.vue'
|
||||
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||
import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue";
|
||||
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
||||
import MyTable from "@/components/aboutTable/DarkTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
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();
|
||||
import { nextTick, onMounted, reactive, getCurrentInstance, ref, watch } from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
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_ry = ref(false)
|
||||
const readonly_dd = ref(false)
|
||||
const cascaRef = ref()
|
||||
const showModel = ref(false);
|
||||
// const detaileRef = ref();
|
||||
const searchBox = ref();
|
||||
const listBoxRef = ref();
|
||||
const textContent = ref('');
|
||||
// 图数据
|
||||
const obj = reactive({
|
||||
const obj = ref({
|
||||
data_lxtj: {
|
||||
xData: ['网络舆情', '警情', '案件', '风险隐患'],
|
||||
color: [['#0DBAC5', '#28EEBF'], ['#F06C0D', '#EEB416']],
|
||||
@ -148,13 +160,34 @@ let cascaderList = ref([
|
||||
{ value: '023', label: '交通警情', leaf: true },
|
||||
]
|
||||
},
|
||||
{ value: '03', label: '案件', leaf: true },
|
||||
{ value: '04', label: '风险隐患', leaf: true },
|
||||
{ value: '03', 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([
|
||||
{
|
||||
title: '网络舆情', //标题
|
||||
lylx: '01',
|
||||
tableList: [],
|
||||
keyCount: 0,
|
||||
pageConfiger: {
|
||||
@ -172,6 +205,7 @@ const list = reactive([
|
||||
{
|
||||
title: '警情', //标题
|
||||
tableList: [],
|
||||
lylx: '02',
|
||||
keyCount: 1,
|
||||
pageConfiger: {
|
||||
page: 1,
|
||||
@ -179,7 +213,7 @@ const list = reactive([
|
||||
pageSize: 6,
|
||||
},
|
||||
tableColumn: [
|
||||
{ label: "接警单编号", prop: "jjdbh", showOverflowTooltip: true },
|
||||
{ label: "接警单编号", prop: "jjdbh", showOverflowTooltip: true, showSolt: true, },
|
||||
{ label: "报警电话", prop: "bjdh", showOverflowTooltip: true },
|
||||
{ label: "报警时间", prop: "bjsj", showOverflowTooltip: true },
|
||||
{ label: "报警内容", prop: "bjnr", showOverflowTooltip: true },
|
||||
@ -188,25 +222,28 @@ const list = reactive([
|
||||
},
|
||||
{
|
||||
title: '案件', //标题
|
||||
lylx: '03',
|
||||
tableList: [],
|
||||
keyCount: 2,
|
||||
pageConfiger: {
|
||||
page: 1,
|
||||
total: 0,
|
||||
pageSize: 6,
|
||||
pageSize: 10,
|
||||
},
|
||||
tableColumn: [
|
||||
{ label: "案件编号", prop: "asjbh", showOverflowTooltip: true },
|
||||
{ label: "案件标题", prop: "ajmc", showOverflowTooltip: true },
|
||||
{ label: "简要案情", prop: "jyaq", showOverflowTooltip: true },
|
||||
{ label: "案件类型", prop: "ajxlbDmbcms", showOverflowTooltip: true },
|
||||
{ label: "案件时间", prop: "asjfssjAsjfskssj", showOverflowTooltip: true },
|
||||
],
|
||||
tableColumn: tableColumn.value.xs,
|
||||
// [
|
||||
// { label: "案件编号", prop: "asjbh", showOverflowTooltip: true },
|
||||
// { label: "案件标题", prop: "ajmc", showOverflowTooltip: true },
|
||||
// { label: "简要案情", prop: "jyaq", showOverflowTooltip: true },
|
||||
// { label: "案件类型", prop: "ajzlbdm", showOverflowTooltip: true, showSolt: true },
|
||||
// { label: "案件时间", prop: "asjfssjAsjfskssj", showOverflowTooltip: true },
|
||||
// ],
|
||||
},
|
||||
{
|
||||
title: '风险隐患', //标题
|
||||
tableList: [],
|
||||
keyCount: 3,
|
||||
lylx: '04',
|
||||
pageConfiger: {
|
||||
page: 1,
|
||||
total: 0,
|
||||
@ -245,32 +282,174 @@ watch(() => JQLB.value, (val) => {
|
||||
deep: true, immediate: true
|
||||
})
|
||||
onMounted(() => {
|
||||
|
||||
|
||||
// getCount(); //获取统计数据
|
||||
getCount()
|
||||
tabHeightFn()
|
||||
getJqList() //警情列表
|
||||
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 = () => {
|
||||
// 获取处置状态统计
|
||||
qcckPost({}, '/mosty-gsxt/qbcj/getXscjTjByXslx').then(res => {
|
||||
let arr = res || [];
|
||||
obj.data_lxtj.xData = arr.map(v => v.zdmc);
|
||||
obj.data_lxtj.list = [{ label: '总数', val: arr.map(v => v.count) }];
|
||||
qcckGet({}, '/mosty-gsxt/hsyp/znypLxtj').then(res => {
|
||||
let arr = ArrData.value.map(item => {
|
||||
return {
|
||||
...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 => {
|
||||
let arr = res || [];
|
||||
obj.data_hstj.xData = arr.map(v => v.zdmc);
|
||||
obj.data_hstj.list = [{ label: '总数', val: arr.map(v => v.count) }];
|
||||
qcckGet({}, '/mosty-gsxt/hsyp/znypHstj').then(res => {
|
||||
let arr = ArrData.value.map(item => {
|
||||
return {
|
||||
...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;
|
||||
case '案件':
|
||||
list[2].pageConfiger.page = e;
|
||||
getAjList()
|
||||
getAjList()
|
||||
break;
|
||||
case '风险隐患':
|
||||
list[3].pageConfiger.page = e;
|
||||
@ -294,6 +473,7 @@ const changeNo = (e, type) => {
|
||||
}
|
||||
// getJqList()
|
||||
}
|
||||
// 分页大小
|
||||
const changeSize = (e, type) => {
|
||||
switch (type) {
|
||||
case '网络舆情':
|
||||
@ -313,152 +493,73 @@ const changeSize = (e, type) => {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 警情列表
|
||||
const getJqList = () => {
|
||||
let params = {
|
||||
pageCurrent: list[1].pageConfiger.page,
|
||||
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 showJqDetail = ref(false)
|
||||
const jqDetail = (val) => {
|
||||
showJqDetail.value = true
|
||||
dataList.value = { ...val }
|
||||
}
|
||||
const getAjList = () => {
|
||||
let params = {
|
||||
pageCurrent: list[2].pageConfiger.page,
|
||||
pageSize: list[2].pageConfiger.pageSize,
|
||||
}
|
||||
console.log("执行");
|
||||
|
||||
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 showCaseDetail = ref(false)
|
||||
const ajlx = ref()
|
||||
const caseDetail = (val, lx) => {
|
||||
ajlx.value = lx
|
||||
showCaseDetail.value = true
|
||||
dataList.value = { ...val }
|
||||
}
|
||||
// 打开研判报告
|
||||
const visible = ref(false)
|
||||
const search = ref({})
|
||||
const handleYP = () => {
|
||||
console.log(searchList.value);
|
||||
visible.value = true
|
||||
let data = []
|
||||
if (searchList.value.lx) {
|
||||
data = searchList.value.lx.map(item => {
|
||||
return item[item.length - 1]
|
||||
})
|
||||
console.log(searchList.value.lx);
|
||||
|
||||
if (searchList.value.lx.length == 0) {
|
||||
xzlx.value = '02'
|
||||
return
|
||||
}
|
||||
search.value = {
|
||||
lx: searchList.value.lx ? data : '',
|
||||
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||
}
|
||||
|
||||
// let arr=cascaRef.value.getCheckedNodes()
|
||||
// searchForm.value.jqlbdms=arr.map((el)=>{
|
||||
// return el.value
|
||||
// })
|
||||
// let params = {
|
||||
// hskssj: searchForm.value.kssj,
|
||||
// hsjssj: searchForm.value.jssj,
|
||||
// jqlbdms:searchForm.value.jqlbdms
|
||||
// }
|
||||
// qcckPost(params, '/mosty-gsxt/lzJcjPjdb/getJqDcypbg').then(res => {
|
||||
// let data = res || {};
|
||||
// let html = `<p class="html_bt">${data.bt}</p>`
|
||||
// html += `<p>${data.head}</p>`
|
||||
// html += `<p>${data.nr}</p>`
|
||||
// html += `<p>${data.bc}</p>`
|
||||
// html += `<p>${data.end}</p>`
|
||||
// textContent.value = html;
|
||||
// showModel.value = true;
|
||||
// })
|
||||
}
|
||||
|
||||
// 选择类型
|
||||
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('请选择查询条件')
|
||||
switch (xzlx.value) {
|
||||
case '01':
|
||||
break;
|
||||
case '02':
|
||||
let data = []
|
||||
if (searchList.value.lx) {
|
||||
data = searchList.value.lx.map(item => {
|
||||
return item[item.length - 1]
|
||||
})
|
||||
}
|
||||
search.value = {
|
||||
lx: searchList.value.lx ? data : '',
|
||||
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||
}
|
||||
break;
|
||||
case '03':
|
||||
search.value = {
|
||||
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||
}
|
||||
break;
|
||||
case '04':
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.boxHeight = window.innerHeight - searchBox.value.offsetHeight - 250
|
||||
@ -481,7 +582,7 @@ const tabHeightFn = () => {
|
||||
color: #000;
|
||||
|
||||
.leftbox {
|
||||
width: 500px;
|
||||
width: 450px;
|
||||
height: 100%;
|
||||
margin-right: 10px;
|
||||
background: #fff;
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180" align="center">
|
||||
<template #default="{ row }">
|
||||
|
||||
<el-button type="text" size="small" @click="updateStatus(row)" :disabled="updateDis(row)">
|
||||
修改状态
|
||||
</el-button>
|
||||
@ -48,7 +49,7 @@
|
||||
</FormMessage>
|
||||
</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="success" size="small" @click="confirmJudgment" :loading="confirmLoading">确认研判</el-button>
|
||||
</div>
|
||||
@ -102,7 +103,8 @@ import { getItem } from '@//utils/storage.js'
|
||||
|
||||
const emit = defineEmits(["updateDate", "getList"]);
|
||||
const props = defineProps({
|
||||
dict: Object
|
||||
dict: Object,
|
||||
userInfo: Object
|
||||
});
|
||||
const imgMsg = ref([])
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
@ -27,9 +27,9 @@
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<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="danger" @click="deleteFile(row)">删除</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)" :disabled="userInfo.deptCode!=row.ssbmdm">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -38,7 +38,7 @@
|
||||
}"></Pages>
|
||||
</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>
|
||||
|
||||
<script setup>
|
||||
@ -47,6 +47,7 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { useRoute } from 'vue-router'
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
import { sjzlGetPageList, sjzldeleteEntity } from "@/api/yj.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, watch,computed } from "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 detailDiloag = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
|
||||
const userInfo = ref({})
|
||||
onMounted(() => {
|
||||
userInfo.value = getItem('deptId')?getItem('deptId')[0]:{}
|
||||
tabHeightFn()
|
||||
if (route.query.id) {
|
||||
detailDiloag.value.init('edit', {
|
||||
@ -64,6 +68,9 @@ onMounted(() => {
|
||||
}
|
||||
getList()
|
||||
});
|
||||
|
||||
|
||||
|
||||
/** 是否市情报指挥中心 */
|
||||
const isShiQingBaoZhongXin = computed(() => {
|
||||
const Jb = deptLevel[0] == '2' ? '01' : deptLevel[0] == '3' ? '02' : '03'
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<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;">
|
||||
<el-form ref="ruleFormRef" :rules="rules" :model="form" label-width="auto" style="max-width: 600px">
|
||||
<el-form-item label="审核状态" prop="shzt">
|
||||
|
||||
@ -20,8 +20,12 @@
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #zlzt="{ row }">
|
||||
<DictTag :tag="true" :value="row.zlzt"
|
||||
:options="[{ label: '未签收', value: '01' }, { label: '已签收', value: '02' }, { label: '已反馈', value: '03' }]" />
|
||||
{{ showSign(row) }}
|
||||
<!-- <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 #ypfs="{ row }">
|
||||
<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('detail', 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="row.zlzt!=='03'" size="small" type="warning" @click="feedback(row)">反馈</el-link>
|
||||
<el-link v-if="showBtn(row)=='sign'" size="small" type="success" @click="sign(row)">签收</el-link>
|
||||
<el-link v-if="showBtn(row)=='feedback'" size="small" type="warning" @click="feedback(row)">反馈</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<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 AddForm from "./addForm.vue";
|
||||
import FeedbackDialog from "./components/FeedbackDialog.vue";
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YPFS, D_BZ_YPLX } = proxy.$dict("D_BZ_YPFS", "D_BZ_YPLX")
|
||||
const detailDiloag = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
const userInfo = ref()
|
||||
onMounted(() => {
|
||||
userInfo.value = getItem('deptId')[0]
|
||||
tabHeightFn()
|
||||
if (route.query.id) {
|
||||
detailDiloag.value.init('edit', {
|
||||
@ -138,7 +145,7 @@ const getList = () => {
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
window.onresize = function() {
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
@ -193,6 +200,29 @@ const handleFeedbackSuccess = () => {
|
||||
// 反馈成功后刷新列表
|
||||
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>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||
: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" />
|
||||
|
||||
</div>
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||
: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" />
|
||||
|
||||
</div>
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||
: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" />
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user