feat: 增加菜单【转会商列表】,【补充/续报列表】,【积分列表】

This commit is contained in:
2025-12-18 15:10:13 +08:00
parent 2bcab2abd6
commit 1b8655d2ee
8 changed files with 639 additions and 0 deletions

View File

@ -0,0 +1,36 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-gsxt";
/**
* 岗哨系统-信息采集积分(分页)
* @param {Object} params - 查询参数
* @param {string} [params.xm] - 姓名
* @param {string} [params.sfzh] - 身份证号
* @param {string} [params.jflx] - 积分类型01-优秀信息员、02-优秀研判员
* @param {string} [params.jflylx] - 积分来源类型01-信息采集、02-肯定、03-转会商、04-转合成、05-转线索、06-建模型、07-战术研判、08-战略研判
* @param {number} [params.pageCurrent] - 当前页码
* @param {number} [params.pageSize] - 每页条数
* @returns {Promise<Object>} 返回分页数据对象
* @returns {Array} returns.records - 数据记录数组,每个记录包含以下字段:
* @returns {string} [returns.records[].bz] - 备注
* @returns {string} [returns.records[].hdsj] - 积分获得时间(日期时间格式)
* @returns {string} [returns.records[].id] - 主键ID
* @returns {number} [returns.records[].jf] - 积分(整数)
* @returns {string} [returns.records[].jflx] - 积分类型01-优秀信息员、02-优秀研判员
* @returns {string} [returns.records[].jflylx] - 积分来源类型04-采纳、05-退回、06-打标签、07-转合成、08-转线索、09-转会商
* @returns {string} [returns.records[].sfzh] - 身份证号
* @returns {string} [returns.records[].ssbm] - 所属部门
* @returns {string} [returns.records[].ssbmdm] - 所属部门代码
* @returns {string} [returns.records[].sssgaj] - 所属市公安局
* @returns {string} [returns.records[].sssgajdm] - 所属市公安局代码
* @returns {string} [returns.records[].ssxgaj] - 所属县公安局
* @returns {string} [returns.records[].ssxgajdm] - 所属县公安局代码
* @returns {string} [returns.records[].xm] - 姓名
* @returns {number} returns.total - 总记录数
*/
export const mjjfSelectPage = (params) => {
return request({
url: api + "/xxcj/mjjf/selectPage",
method: "get",
params
});
};

View File

@ -0,0 +1,28 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-gsxt";
/**
* 补充/续报列表查询接口
* @param {Object} params - 查询参数
* @param {string} [params.bcrxm] - 补充人姓名(可选)
* @param {string} [params.czlx] - 操作类型01-续报、02-补充(可选)
* @param {number} [params.pageCurrent] - 当前页码
* @param {number} [params.pageSize] - 每页条数
* @returns {Promise<Object>} 返回分页数据对象
* @returns {Array} returns.records - 数据记录数组,每个记录包含以下字段:
* @returns {string} [returns.records[].bcnr] - 补充内容
* @returns {string} [returns.records[].bcrsfzh] - 补充人身份证号
* @returns {string} [returns.records[].bcrxm] - 补充人姓名
* @returns {string} [returns.records[].bcsj] - 补充时间(日期时间格式)
* @returns {string} [returns.records[].czlx] - 操作类型01-续报、02-补充
* @returns {string} [returns.records[].id] - 主键ID
* @returns {string} [returns.records[].qbid] - 线索情报ID
* @returns {string} [returns.records[].ysnr] - 原始内容
* @returns {number} returns.total - 总记录数
*/
export const zhsSelectPage = (params) => {
return request({
url: api + "/xxcj/bc/selectPage",
method: "get",
params
});
};

View File

@ -0,0 +1,35 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-gsxt";
/**
* 转会商列表查询接口
* @param {Object} params - 查询参数
* @param {string} [params.xsBh] - 信息编号
* @param {string} [params.qbmc] - 情报名称
* @param {string} [params.qbly] - 情报来源,参考字典 D_GS_XS_LY
* @param {number} [params.pageCurrent] - 当前页码
* @param {number} [params.pageSize] - 每页条数
* @returns {Promise<Object>} 返回分页数据对象
* @returns {Array} returns.records - 数据记录数组,每个记录包含以下字段:
* @returns {string} [returns.records[].bz] - 备注
* @returns {string} [returns.records[].hsid] - 会商ID
* @returns {string} [returns.records[].id] - 主键ID
* @returns {string} [returns.records[].qbid] - 线索情报ID
* @returns {string} [returns.records[].qbly] - 情报来源,参考字典 D_GS_XS_LY
* @returns {string} [returns.records[].qbmc] - 情报名称
* @returns {string} [returns.records[].qbnr] - 情报内容
* @returns {string} [returns.records[].ssbm] - 所属部门
* @returns {string} [returns.records[].ssbmdm] - 所属部门代码
* @returns {string} [returns.records[].sssgaj] - 所属市公安局
* @returns {string} [returns.records[].sssgajdm] - 所属市公安局代码
* @returns {string} [returns.records[].ssxgaj] - 所属县公安局
* @returns {string} [returns.records[].ssxgajdm] - 所属县公安局代码
* @returns {string} [returns.records[].xsBh] - 信息编号
* @returns {number} returns.total - 总记录数
*/
export const zhsSelectPage = (params) => {
return request({
url: api + "/xxcj/zhs/selectPage",
method: "get",
params
});
};

View File

@ -480,6 +480,33 @@ export const publicRoutes = [
icon: "article" icon: "article"
} }
}, },
{
path: "/transferConsultationList",
name: "transferConsultationList",
component: () => import("@/views/backOfficeSystem/transferConsultationList/index.vue"),
meta: {
title: "转会商列表",
icon: "article"
}
},
{
path: "/supplementReportList",
name: "supplementReportList",
component: () => import("@/views/backOfficeSystem/supplementReportList/index.vue"),
meta: {
title: "补充/续报列表",
icon: "article"
}
},
{
path: "/integralList",
name: "integralList",
component: () => import("@/views/backOfficeSystem/integralList/index.vue"),
meta: {
title: "积分列表",
icon: "article"
}
},
// { // {
// path: "/MakeAcomment", // path: "/MakeAcomment",
// name: "MakeAcomment", // name: "MakeAcomment",

View File

@ -0,0 +1,12 @@
/** 积分类型 */
export const jflylxTypes = {
'01': '信息采集',
'02': '肯定',
'03': '转会商',
'04': '转合成',
'05': '转线索',
'06': '建模型',
'07': '战术研判',
'08': '战略研判'
};

View File

@ -0,0 +1,177 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="积分列表">
<!-- <el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button> -->
</PageTitle>
</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 #jflylx="{ row }">
<span>{{ jflylxTypes[row.jflylx] }}</span>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', 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>
</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 { mjjfSelectPage } from '@/api/HumanIntelligence/integralList.js'
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { jflylxTypes } from "./dict.js"
const { proxy } = getCurrentInstance();
// const { D_GS_JFLX, } = proxy.$dict("D_GS_JFLX",); //获取字典数据
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: {
haveControls: false, //不显示【操作列】
rowHieght: 61,
showSelectType: "null",
loading: false,
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 160, //操作栏宽度
tableColumn: [
{ label: "姓名", prop: "xm" },
// { label: "身份证号", prop: "sfzh" },
{ label: "积分类型", prop: "jflx", showSolt: true },
{ label: "积分来源类型", prop: "jflylx", showSolt: true },
{ label: "积分", prop: "jf" },
{ label: "积分获得时间", prop: "hdsj" },
{ label: "所属部门", prop: "ssbm" },
{ label: "所属市公安局", prop: "sssgaj" },
{ label: "所属县公安局", prop: "ssxgaj" },
{ label: "备注", prop: "bz", showOverflowTooltip: true },
]
});
onMounted(() => {
tabHeightFn();
getList()
});
const listQuery = ref({})
// 搜索
const onSearch = (val) => {
listQuery.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList()
}
const getList = () => {
pageData.tableConfiger.loading = true;
const params = {
pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize,
...listQuery.value
}
mjjfSelectPage(params).then(res => {
console.log(res);
pageData.tableData = res.records || [];
pageData.total = res.total;
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
// 新增
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
detailDiloag.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>

View File

@ -0,0 +1,160 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="补充/续报列表">
<!-- <el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button> -->
</PageTitle>
</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 #jjlx="{ row }">
<DictTag :tag="false" :value="row.jjlx" :options="D_BZ_JQBQ" />
</template> -->
<template #czlx="{ row }">
<DictTag :tag="false" :value="row.czlx" :options="operationArr" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', 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>
</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 { zhsSelectPage } from '@/api/HumanIntelligence/supplementReportList.js'
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
// const { D_BZ_CZLX, } = proxy.$dict("D_BZ_CZLX",); //获取字典数据
const detailDiloag = ref();
const show = ref(false)
const operationArr = [{ label: '续报', value: '01' }, { label: '补充', value: '02' }]
const searchConfiger = ref([
{
label: "补充人姓名",
prop: "bcrxm",
placeholder: "请输入补充人姓名",
showType: "input"
},
{
label: "操作类型",
prop: "czlx",
placeholder: "请选择操作类型",
showType: "select", // 01 续报、02 补充
options: operationArr
},
]);
const searchBox = ref(); //搜索框
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
haveControls: false, //不显示【操作列】
rowHieght: 61,
showSelectType: "null",
loading: false,
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 160, //操作栏宽度
tableColumn: [
// { label: "线索情报ID", prop: "qbid" },
{ label: "操作类型", prop: "czlx", showSolt: true },
{ label: "补充人姓名", prop: "bcrxm" },
// { label: "补充人身份证号", prop: "bcrsfzh" },
{ label: "补充时间", prop: "bcsj" },
{ label: "原始内容", prop: "ysnr", showOverflowTooltip: true },
{ label: "补充内容", prop: "bcnr", showOverflowTooltip: true },
]
});
onMounted(() => {
tabHeightFn();
getList()
});
const listQuery = ref({})
// 搜索
const onSearch = (val) => {
listQuery.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList()
}
const getList = () => {
pageData.tableConfiger.loading = true;
const params = {
pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize,
...listQuery.value
}
zhsSelectPage(params).then(res => {
console.log(res);
pageData.tableData = res.records || [];
pageData.total = res.total;
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
// 新增
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
detailDiloag.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>

View File

@ -0,0 +1,164 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="转会商列表">
<!-- <el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button> -->
</PageTitle>
</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 #jjlx="{ row }">
<DictTag :tag="false" :value="row.jjlx" :options="D_BZ_JQBQ" />
</template> -->
<template #qbly="{ row }">
<DictTag :tag="false" :value="row.qbly" :options="D_GS_XS_LY" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', 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>
</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 { zhsSelectPage } from '@/api/HumanIntelligence/transferConsultationList.js'
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_XS_LY, } = proxy.$dict("D_GS_XS_LY",); //获取字典数据
const detailDiloag = ref();
const show = ref(false)
const searchConfiger = ref([
{
label: "信息编号",
prop: "xsBh",
placeholder: "请输入信息编号",
showType: "input"
},
{
label: "情报名称",
prop: "qbmc",
placeholder: "请输入情报名称",
showType: "input"
},
{
label: "情报来源",
prop: "qbly",
placeholder: "请选择情报来源",
showType: "select",
options: D_GS_XS_LY
},
]);
const searchBox = ref(); //搜索框
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
haveControls: false, //不显示【操作列】
rowHieght: 61,
showSelectType: "null",
loading: false,
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 160, //操作栏宽度
tableColumn: [
{ label: "信息编号", prop: "xsBh" },
{ label: "情报名称", prop: "qbmc", showOverflowTooltip: true },
{ label: "情报来源", prop: "qbly", showSolt: true },
{ label: "情报内容", prop: "qbnr", showOverflowTooltip: true },
{ label: "所属部门", prop: "ssbm" },
{ label: "所属市公安局", prop: "sssgaj" },
{ label: "所属县公安局", prop: "ssxgaj" },
{ label: "备注", prop: "bz", showOverflowTooltip: true },
]
});
onMounted(() => {
tabHeightFn();
getList()
});
const listQuery = ref({})
// 搜索
const onSearch = (val) => {
listQuery.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList()
}
const getList = () => {
pageData.tableConfiger.loading = true;
const params = {
pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize,
...listQuery.value
}
zhsSelectPage(params).then(res => {
console.log(res);
pageData.tableData = res.records || [];
pageData.total = res.total;
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
// 新增
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
detailDiloag.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>