Compare commits

..

2 Commits

Author SHA1 Message Date
lcw
596c9f99e4 Merge branch 'main' of http://61.139.16.27:26684/zy_oyj/sgxt_web 2025-12-26 09:39:28 +08:00
lcw
e59b401828 lcw 2025-12-26 09:39:22 +08:00
23 changed files with 1586 additions and 150 deletions

43
src/api/sjxsgl.js Normal file
View File

@ -0,0 +1,43 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-gsxt";
// 新增系数
export const sjxsglAddEntity = (data) => {
return request({
url: api + "/sjxsgl/addEntity",
method: "POST",
data
});
};
// 删除系数
export const sjxsglDeleteEntity = (data) => {
return request({
url: api + "/sjxsgl/deleteEntity",
method: "DELETE",
data
});
};
// 修改系数
export const sjxsglEditEntity = (data) => {
return request({
url: api + "/sjxsgl/editEntity",
method: "PUT",
data
});
};
// 分页查询
export const sjxsglGetPageList = (params) => {
return request({
url: api + "/sjxsgl/getPageList",
method: "GET",
params
});
};
export const sjxsgId = (id) => {
return request({
url: api + `/sjxsgl/${id}`,
method: "GET",
});
}

View File

@ -78,6 +78,13 @@ export const tbGsxtBqzhSelectList = (params) => {
params
})
}
// 组合标签详情
export const tbGsxtBqzhId = (id) => {
return request({
url: api + `/tbGsxtBqzh/${id}`,
method: "get",
})
}
// 身份标签
export const yjzxSfyjSelectList = (params) => {
return request({

View File

@ -0,0 +1,241 @@
<template>
<el-dialog :title="titleValue" width="1400px" :model-value="modelValue" append-to-body @close="closed">
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="系数名称">
<el-input placeholder="请输入系数名称" v-model="listQuery.mc" clearable></el-input>
</el-form-item>
<el-form-item label="计算规则">
<el-input placeholder="请输入计算规则" v-model="listQuery.jsgz" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table ref="multipleUserRef" @selection-change="handleSelectionChange" :data="tableData" border
:row-key="keyid" style="width: 100%" height="450">
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column prop="mc" align="center" label="系数名称" />
<el-table-column prop="sjbl" align="center" label="衰减比例" />
<el-table-column prop="jsgz" align="center" label="计算规则" />
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination class="pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="listQuery.current" :page-sizes="[10, 20, 50, 100]" :page-size="listQuery.size"
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import * as rule from "@/utils/rules.js";
import * as MOSTY from "@/components/MyComponents/index";
import { ElMessage } from "element-plus";
import { defineProps, watch, ref, onMounted, nextTick } from "vue";
import { selectUnAccreditPage, selectUserDeptPage } from "@/api/user-manage";
import { sjxsglGetPageList } from "@/api/sjxsgl.js";
import { qcckPost } from "@/api/qcckApi.js";
const props = defineProps({
modelValue: {
type: Boolean,
required: true
},
titleValue: {
type: String,
default: "选择配置"
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: true
},
roleIds: {
type: Array,
default: []
}, url: {
type: String,
default: ""
}, bh: {
type: String,
default: ""
},
chooseJfBh: {
type: String,
default: ""
}
});
const total = ref(0);
const listQuery = ref({
current: 1,
size: 20
});
const form = ref({});
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosedUsers"]);
onMounted(() => {
});
watch(() => props.modelValue, (val) => {
if (val) {
nextTick(() => {
getListData();
});
}
}, {
immediate: true
});
// 监听 roleIds 变化,实时更新选择状态
watch(() => props.roleIds, (newVal, oldVal) => {
console.log('roleIds变化:', newVal, oldVal);
// 只要roleIds有变化就尝试回显不需要等待modelValue为true
// 因为可能是在对话框打开后roleIds才变化
nextTick(() => {
multipleUser();
});
}, { deep: true });
const closed = () => {
// 清空新选择的内容
multipleSelectionUser.value = [];
// 取消表格中所有行的选择状态
if (multipleUserRef.value && tableData.value && tableData.value.length > 0) {
tableData.value.forEach(item => {
multipleUserRef.value.toggleRowSelection(item, false);
});
}
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = {
current: 1,
size: 20,
loginName: "",
phone: ""
};
getListData();
};
const keyid = (row) => {
return row.id;
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
console.log(userList);
let promes = {
list: userList.map(item => {
return {
xsid: item.id,
mc: item.mc,
sjbl: item.sjbl,
}
}),
id: props.chooseJfBh
}
qcckPost(promes, `/mosty-gsxt${props.url}`).then(res => {
ElMessage.success('操作成功');
})
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.size = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.current = currentPage;
getListData();
};
const getListData = () => {
const params = listQuery.value;
sjxsglGetPageList(params).then((res) => {
tableData.value = res?.records;
total.value = Number(res.total);
// 使用 nextTick 确保表格已经渲染完成后再执行回显
nextTick(() => {
multipleUser();
});
});
};
// 列表回显
function multipleUser() {
// 确保表格引用和数据都存在
if (!multipleUserRef.value || !tableData.value || tableData.value.length === 0) {
console.log('表格引用或数据不存在,无法回显');
return;
}
// 先清空之前的选择,确保选择状态的准确性
tableData.value.forEach(item => {
multipleUserRef.value.toggleRowSelection(item, false);
});
console.log('开始回显roleIds:', props.roleIds);
console.log('表格数据:', tableData.value);
// 根据 roleIds 进行回显,确保类型一致
tableData.value.forEach((item) => {
const itemId = String(item.id);
if (props.roleIds.some((id) => String(id) === itemId)) {
console.log('回显选择:', item);
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.current = 1;
getListData();
};
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -9,7 +9,7 @@
<!-- 数值 inputNumber-->
<el-input type="number" v-model="listQuery[item.prop]" v-else-if="item.type == 'inputNumber'" :placeholder="`请输入${item.label}`" :disabled="item.disabled" @blur="inputBlur($event,item)"/>
<!-- 数值 number-->
<el-input-number v-model="listQuery[item.prop]" v-else-if="item.type == 'number'" style="width: 100%" :min="item.min || 0" :max="item.max || 1000" :disabled="item.disabled" />
<el-input-number v-model="listQuery[item.prop]" v-else-if="item.type == 'number'" :step="item.step || 1" style="width: 100%" :min="item.min || 0" :max="item.max || 1000" :disabled="item.disabled" />
<!--选择 select-->
<MOSTY.Select v-else-if="item.type == 'select'" filterable :multiple="item.multiple" v-model="listQuery[item.prop]" :dictEnum="item.options" width="100%" clearable :placeholder="`请选择${item.label}`" :disabled="item.disabled" />

View File

@ -623,6 +623,19 @@ export const publicRoutes = [
name: "dataApplication",
meta: { title: "数据应用", icon: "article" },
children: [
{
path: "/IntegralCoefficient",
name: "IntegralCoefficient",
component: () =>
import(
"@/views/backOfficeSystem/fourColorManage/IntegralCoefficient/index"
),
meta: {
title: "积分系数配置",
icon: "article"
}
},
{
path: "/IdentityManage",
name: "IdentityManage",

View File

@ -93,6 +93,7 @@ export function timeValidate(date, type) {
const hh = time.getHours().toString().padStart(2, '0')
const mm = time.getMinutes().toString().padStart(2, '0')
const ss = time.getSeconds().toString().padStart(2, '0')
if (type == 'ymd') {
return `${yyyy}-${MM}-${dd}`;
}

View File

@ -1,7 +1,7 @@
// let url = "ws://89.40.9.89:2109/mosty-api/mosty-websocket/socket/"; //线上
let url = "ws://155.240.22.30:2109/mosty-api/mosty-websocket/socket/"; //线上
if(process.env.NODE_ENV === 'development') {
if (process.env.NODE_ENV === 'development') {
url = "ws://47.108.232.77:9537/mosty-api/mosty-websocket/socket/"; //本地
}
import {

View File

@ -0,0 +1,118 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">积分系数规则{{ title }} </span>
<div>
<el-button type="primary" size="small" :loading="loading" @click="submit" >保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
</FormMessage>
</div>
</div>
</template>
<script setup>
import DialogList from '@/views/backOfficeSystem/fourColorManage/components/dialogList.vue'
import FormMessage from '@/components/aboutTable/FormMessage.vue'
import {sjxsglAddEntity ,sjxsglEditEntity,sjxsgId} from '@/api/sjxsgl.js'
import { ref,defineProps, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance } from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
type:String,
dic:Object,
});
const showDialog = ref(false); //弹窗
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const title = ref("");
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const formData = reactive([
{ label: "系数名称", prop: "mc", type: "input" },
{ label: "衰减比列", prop: "sjbl", type: "number", max: 100,step:0.1 },
{ label: "计算规则", prop: "jsgz", type: "textarea" ,width:'100%'},
]);
const rules = reactive({
mc: [{ required: true, message: "请输入系数名称", trigger: "blur" }],
sjbl: [{ required: true, message: "请输入衰减比列", trigger: "blur" }],
jsgz: [{ required: true, message: "请输入计算规则", trigger: ['blur','change'] }],
});
// 初始化数据
const init = (type, row,) => {
title.value = type == 'add' ? "新增" : "编辑";
dialogForm.value = true;
if (row) getDataById(row.id);
};
// 根据id查询详情
const getDataById = (id) => {
sjxsgId(id).then((res) => {
listQuery.value = res;
});
};
// 提交
const submit = () => {
console.log("xxxxxxxx");
elform.value.submit((data) => {
const promes = {
...data
}
console.log(promes);
if ( title.value == "新增" ) {
sjxsglAddEntity(promes).then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
loading.value = false;
close();
}).catch(() => {loading.value = false;});
} else {
sjxsglEditEntity(promes).then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
loading.value = false;
close();
}).catch(() => {loading.value = false;});
}
// let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update';
// let params = { ...data, bqLb:props.dic.D_GS_BQ_LB.find((it)=>it.zdmc == props.type).dm }
// params.bqLx = '01';
// loading.value = true;
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value + "成功" });
// emit("updateDate");
// loading.value = false;
// close();
// }).catch(() => {loading.value = false;});
});
};
// 选择的数据
const chooseDate = (val) => {
listQuery.value.bqDlId = val[0].id;
listQuery.value.bqDlMc = val[0].bqMc;
}
// 关闭
const close = () => {
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
if(props.type == '标签细类') formData.pop()
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
</style>

View File

@ -0,0 +1,149 @@
<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" :style="{height:pageData.tableHeight+20+'px'}">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" @click="delDictItem(row.id)" type="danger">删除</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" :type="type" :dic="{D_GS_BQ_LX,D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB}" @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 {sjxsglDeleteEntity ,sjxsglGetPageList} from '@/api/sjxsgl.js'
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB,D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ","D_GS_SSYJ","D_GS_BQ_LB","D_GS_BQ_LX"); //获取字典数据
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const type = ref('标签大类')
const show = ref(false)
const searchConfiger = ref([
{ label: "计算规则",prop:'jsgz',placeholder: "请输入计算规则", showType: "input"},
{ label: "系数名称",prop:'mc' ,placeholder: "请输入系数名称", showType: "input"},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 150, //操作栏宽度
tableColumn: [
{ label: "系数名称", prop: "mc" },
{ label: "衰减比列", prop: "sjbl" },
{ label: "计算规则", prop: "jsgz"},
]
});
onMounted(() => {
getList()
tabHeightFn();
});
// 搜索
const onSearch = (val) =>{
queryFrom.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;
let data = { ...pageData.pageConfiger,...queryFrom.value };
data.bqLb = type.value == '标签大类'? '01':'02'
sjxsglGetPageList(data).then(res=>{
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
sjxsglDeleteEntity({ids:[id]}).then(()=>{
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
}
// 新增
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

@ -12,7 +12,9 @@
<span style="vertical-align: middle">导入</span>
</el-button> -->
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
@ -23,14 +25,8 @@
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #bqYs="{ row }">
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
</template>
@ -39,22 +35,21 @@
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
}"></Pages>
</div>
<!-- 编辑详情 -->
<EditAddForm v-if="show" ref="detailDiloag" :dic="{D_GS_BQ_LX,D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB}" @updateDate="getList" />
<EditAddForm v-if="show" ref="detailDiloag" :dic="{ D_GS_BQ_LX, D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB }"
@updateDate="getList" />
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
:chooseJfBh="chooseJfBh" url="/tbGsxtBqzh/sjxspz" :roleIds="roleIds"/>
</div>
</template>
@ -64,19 +59,21 @@ 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 ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { tbGsxtBqzhId } from "@/api/yj.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB,D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ","D_GS_SSYJ","D_GS_BQ_LB","D_GS_BQ_LX"); //获取字典数据
const { D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB, D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ", "D_GS_SSYJ", "D_GS_BQ_LB", "D_GS_BQ_LX"); //获取字典数据
const detailDiloag = ref();
const show = ref(false)
const searchBox = ref(); //搜索框
const searchConfiger = ref(
[
{ label: "组合标签名称", prop: 'bqMc', placeholder: "请输入组合标签名称", showType: "input"},
{ label: "组合标签名称", prop: 'bqMc', placeholder: "请输入组合标签名称", showType: "input" },
// { label: "组合标签标签等级", prop: 'bqDj', placeholder: "请选择组合标签标签等级", showType: "select",options: D_GS_BQ_DJ },
{ label: "组合标签颜色", prop: 'bqYs', placeholder: "请选择组合标签标签颜色", showType: "select",options: D_GS_SSYJ },
]);
{ label: "组合标签颜色", prop: 'bqYs', placeholder: "请选择组合标签标签颜色", showType: "select", options: D_GS_SSYJ },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [], //表格数据
@ -96,9 +93,9 @@ const pageData = reactive({
{ label: "组合标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" },
// { label: "组合标签等级", prop: "bqDj",showSolt:true },
{ label: "组合标签颜色", prop: "bqYs",showSolt:true },
{ label: "组合标签分值", prop: "bqFz"},
{ label: "组合标签说明", prop: "bqSm",showOverflowTooltip:true },
{ label: "组合标签颜色", prop: "bqYs", showSolt: true },
{ label: "组合标签分值", prop: "bqFz" },
{ label: "组合标签说明", prop: "bqSm", showOverflowTooltip: true },
]
});
onMounted(() => {
@ -108,51 +105,61 @@ onMounted(() => {
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
const onSearch = (val) => {
queryFrom.value = { ...val }
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList()
}
const changeSize = (val) =>{
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList()
}
const getList = () =>{
const getList = () => {
pageData.tableConfiger.loading = true;
qcckGet(queryFrom.value,'/mosty-gsxt/tbGsxtBqzh/selectPage').then((res)=>{
qcckGet(queryFrom.value, '/mosty-gsxt/tbGsxtBqzh/selectPage').then((res) => {
pageData.tableData = res.records;
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(()=>{
}).catch(() => {
pageData.tableConfiger.loading = false;
})
}
// 删除
const delDictItem = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckDelete({},'/mosty-gsxt/tbGsxtBqzh/'+id).then(()=>{
const delDictItem = (id) => {
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckDelete({}, '/mosty-gsxt/tbGsxtBqzh/' + id).then(() => {
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
}).catch(() => { });
}
// 新增
const addEdit = (type, row) => {
show.value = true;
nextTick(()=>{
nextTick(() => {
detailDiloag.value.init(type, row,);
})
};
// 选择系数
const chooseJfShow = ref(false)
const chooseJfBh = ref()
const roleIds=ref()
const chooseJfFun = (val) => {
chooseJfBh.value=val.id
tbGsxtBqzhId(val.id).then(res => {
roleIds.value=res.sjxspzList.map(item => item.xsid)
chooseJfShow.value = true
})
}
// 表格高度计算
const tabHeightFn = () => {

View File

@ -47,6 +47,7 @@
<template #controls="{ row }">
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs ">签收</el-link>
@ -74,7 +75,8 @@
<!-- 处置建议 -->
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
:chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz" :roleIds="roleIds"/>
</template>
<script setup>
@ -87,6 +89,8 @@ import Searchs from "@/components/aboutTable/Search.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Items from "./item/items.vue";
import {yjzxXwyjSelectList } from "@/api/yj.js";
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
import { tbGsxtBqglSelectList } from '@/api/zdr'
@ -323,6 +327,19 @@ const openSearch = () => {
tabHeightFn()
})
}
// 选择系数
const chooseJfShow = ref(false)
const chooseJfBh = ref()
const roleIds=ref()
const chooseJfFun = (val) => {
chooseJfBh.value=val.id
yjzxXwyjSelectList(val.id).then(res => {
roleIds.value=res.sjxspzList.map(item => item.xsid)
chooseJfShow.value = true
})
}
// 表格高度计算
const tabHeightFn = () => {
if (search.value) {

View File

@ -40,13 +40,14 @@
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
</template>
<template #expand="{ props }">
<div class="expand-content" style="max-width: 100%">
<div class="expand-content" style="max-width: 100%; max-height: 400px; overflow-y: auto; padding: 10px;">
<Items :row="props || {}" :dict="dict" />
</div>
</template>
<template #controls="{ row }">
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
@ -71,6 +72,9 @@
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
<!-- 处置建议 -->
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
:chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz" :roleIds="roleIds"/>
</template>
<script setup>
@ -81,7 +85,8 @@ import Searchs from "@/components/aboutTable/Search.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Items from "./item/items.vue";
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList } from '@/api/yj.js'
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList,yjzxZhyjSelectList } from '@/api/yj.js'
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
import Information from "@/views/home/model/information.vue";
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
@ -300,6 +305,20 @@ const openAddModel = (row) => {
addModelRef.value.init(row)
}
// 选择系数
const chooseJfShow = ref(false)
const chooseJfBh = ref()
const roleIds=ref()
const chooseJfFun = (val) => {
chooseJfBh.value=val.id
yjzxZhyjSelectList(val.id).then(res => {
roleIds.value=res.sjxspzList.map(item => item.xsid)
chooseJfShow.value = true
})
}
// 搜索栏
const search = ref(false)
const openSearch = () => {
@ -359,3 +378,4 @@ const exportExl = () => {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -75,7 +75,6 @@ const searchConfiger = ref(
[
{ label: "预警级别", prop: 'yjjbList', placeholder: "请输入姓名", showType: "select", options: D_BZ_YJJB },
{ label: "预警类型", prop: 'yjlxList', placeholder: "请输入身份证号码", showType: "select", options: D_GS_ZDQT_YJLB },
]);
const queryFrom = ref({});

View File

@ -47,6 +47,7 @@
<template #controls="{ row }">
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
<el-link type="danger" @click="handleQsFk(row)">转会商</el-link> -->
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
@ -72,6 +73,9 @@
<!-- 处置建议 -->
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
:chooseJfBh="chooseJfBh" url="/yjzxSfyj/sjxspz" :roleIds="roleIds"/>
</template>
<script setup>
@ -85,10 +89,11 @@ import HolographicArchive from '@/views/home/components/holographicArchive.vue'
import Information from "@/views/home/model/information.vue";
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
import AddFrom from "./components/addFrom.vue";
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { yjzxSfyjSelectList } from "@/api/yj.js";
import { yjzxSfyjSelectList,yjzxyjzxSfyjSelectList } from "@/api/yj.js";
import { tbGsxtBqglSelectList } from '@/api/zdr'
import Detail from './components/detail.vue'
import { watch } from "vue";
@ -320,6 +325,18 @@ const addModelRef = ref(null)
const openAddFrom = (row) => {
addModelRef.value.init('add', row)
}
// 选择系数
const chooseJfShow = ref(false)
const chooseJfBh = ref()
const roleIds=ref()
const chooseJfFun = (val) => {
chooseJfBh.value=val.id
yjzxyjzxSfyjSelectList(val.id).then(res => {
roleIds.value=res.sjxspzList.map(item => item.xsid)
chooseJfShow.value = true
})
}
// 搜索栏
const search = ref(false)
const openSearch = () => {

View File

@ -7,21 +7,23 @@
<el-input v-model="formData.ypyt" placeholder="请输入研判议题" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item label="研判时间" prop="wcsj" class="mt10">
<el-date-picker v-model="formData.wcsj" type="datetime" placeholder="请选择研判时间" style="width: 100%;" />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="12">
<el-form-item label="报告类型" prop="bglx" class="mt10">
<el-radio-group v-model="formData.bglx">
<el-radio v-for="value in D_BZ_YPLX" :key="value.value" :label="value.value" :value="value.value" >{{value.label}}</el-radio>
<el-radio v-for="value in D_BZ_YPLX" :key="value.value" :label="value.value" :value="value.value">{{
value.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参与研判部门" prop="deptIds" class="mt10">
<MOSTY.Department clearable v-model="formData.ypbmdm" multiple style="width: 100%;" />
<el-form-item label="参与研判部门" prop="bmdm" class="mt10">
<MOSTY.Department clearable v-model="formData.bmdm" multiple style="width: 100%;"
@getDepValue="getdep($event)" />
</el-form-item>
</el-col>
<el-col :span="24">
@ -43,40 +45,61 @@
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import { ElMessage } from 'element-plus';
import { qcckPost } from '@/api/qcckApi'
import { ref,getCurrentInstance } from 'vue'
const emit = defineEmits(['change']);
const { proxy } = getCurrentInstance();
const { D_BZ_YPLX,D_BZ_YPFS } = proxy.$dict('D_BZ_YPLX','D_BZ_YPFS')
const visible = ref(true)
const loading = ref(false)
const formRef = ref()
const formData = ref({})
import * as MOSTY from "@/components/MyComponents/index";
import { ElMessage } from 'element-plus';
import { qcckPost } from '@/api/qcckApi'
import { ref, getCurrentInstance } from 'vue'
const emit = defineEmits(['change']);
const { proxy } = getCurrentInstance();
const { D_BZ_YPLX, D_BZ_YPFS } = proxy.$dict('D_BZ_YPLX', 'D_BZ_YPFS')
const visible = ref(false)
const loading = ref(false)
const formRef = ref()
const formData = ref({})
const rules = ref({
const rules = ref({
ypyt: [{ required: true, message: '请输入研判议题', trigger: 'blur' }],
wcsj: [{ required: true, message: '请选择研判时间', trigger: 'change' }],
// wcsj: [{ required: true, message: '请选择研判时间', trigger: 'change' }],
bglx: [{ required: true, message: '请选择报告类型', trigger: 'change' }],
ypfs: [{ required: true, message: '请选择研判方式', trigger: 'change' }],
deptIds: [{ required: true, message: '请选择参与研判部门', trigger: 'change' }],
ypyq: [{ required: true, message: '请输入研判内容', trigger: 'blur' }],
})
const init = (row) => {
})
const init = (row) => {
visible.value = true;
formData.value = Object.assign({}, formData.value, row || {})
formData.value = {
sjly: '03',
sjlyid: row.jjdbh,
}
const close = () => {
}
const close = () => {
visible.value = false;
formRef.value.resetFields();
}
const deptIds = ref([])
const getdep = (e) => {
if (Array.isArray(e)) {
deptIds.value = e
} else {
deptIds.value = [e]
}
const submitForm = () => {
}
const submitForm = () => {
formRef.value.validate((valid) => {
if (!valid) return;
let data = { ...formData.value, yplx:'01' }
loading.value = true;
qcckPost(data,'/mosty-gsxt/lzJcjPjdb/sdyp').then(res => {
const promes = {
...formData.value,
cyypList: deptIds.value.map((item) => {
return {
ypbmmc: item.orgName,
ypbmdm: item.orgCode
}
}
),
}
qcckPost(promes, '/mosty-gsxt/lzJcjPjdb/sdyp').then(res => {
loading.value = false;
ElMessage.success('研判成功');
emit('change');
@ -86,8 +109,8 @@
ElMessage.error('研判失败');
})
})
}
defineExpose({
}
defineExpose({
init,
})
})
</script>

View File

@ -25,16 +25,17 @@
<template #jqlbdm="{ row }">
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
</template>
<template #ypzt="{ row }">
{{ row.ypzt === '01' ? '已研判' : '未研判' }}
</template>
<!-- <template #jqdjdm="{ row }">
<DictTag :tag="false" :value="row.jqdjdm" :options="D_BZ_JQDJ" />
</template> -->
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="warning" @click="addEdit('edit', row)">研判</el-link>
<el-link type="danger" @click="addEdit('edit', row)">深度研判</el-link>
<el-link type="primary" @click="addEdit('edit', row)">详情</el-link>
<el-link type="primary" @click="handleYP('研判', row)">研判</el-link>
<el-link type="primary" @click="handleYP('深度研判', row)">深度研判</el-link>
<el-link type="warning" @click="handleYP('研判', row)">研判</el-link>
<el-link type="danger" @click="handleYP('深度研判', row)">深度研判</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@ -48,7 +49,7 @@
<!-- 研判弹窗 -->
<YpDialog ref="ypDialog" @change="getList" />
<!-- <DeepYpDialog ref="deepYpDialog" @change="getList" /> -->
<DeepYpDialog ref="deepYpDialog" @change="getList" />
</div>
</template>
@ -122,7 +123,7 @@ const pageData = reactive({
{ label: "警情类型", prop: "jqlbdm",showSolt:true },
{ label: "警情地址", prop: "jqdz" },
{ label: "补充接警内容", prop: "bcjjnr", showOverflowTooltip: true },
{ label: "研判状态", prop: "ypzt",showSolt:true },
]
});

View File

@ -0,0 +1,163 @@
<template>
<el-dialog v-model="modelValue" title="重点群体" width="70%" @close="closeDialog" destroy-on-close append-to-body>
<div style="height: 60vh; overflow: auto;">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData" fixed="right">
<template #qtLb="{ row }">
<DictTag :tag="false" :value="row.qtLb" :options="D_GS_ZDQT_LB" />
</template>
<template #qtFxdj="{ row }">
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ" />
</template>
<template #bqList="{ row }">
<ul>
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{
item.bqFz || 0 }} ) </li>
</ul>
</template>
<template #zdryList="{ row }">
<span style="color: #0072ff">{{ row.zdryList ? row.zdryList.length : 0 }}</span>
</template>
<template #qtZt="{ row }">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT" />
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="closeDialog">确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Search from "@/components/aboutTable/Search.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { ref, reactive, getCurrentInstance, watch } from "vue";
import { useRoute, useRouter } from 'vue-router'
import {timeValidate} from '@/utils/tools.js'
const route = useRoute()
const router = useRouter()
const { proxy } = getCurrentInstance()
const { D_GS_ZDR_CZZT, D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT", "D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => ({})
}
})
const searchConfiger = ref([
{
label: "群体名称",
prop: "qtMc",
placeholder: "请输入群体名称",
showType: "input"
},
{
label: "群体风险等级",
prop: "qtFxdj",
placeholder: "请选择群体风险等级",
showType: "select",
options: D_GS_ZDQT_FXDJ
},
{
label: "群体类别",
prop: "qtLb",
placeholder: "请选择群体类别",
showType: "select",
options: D_GS_ZDQT_LB
},
{
label: "所属部门",
prop: "ssbmdm",
placeholder: "请输入所属部门",
showType: "department",
},
]);
const emit = defineEmits(['update:modelValue'])
const closeDialog = () => {
emit('update:modelValue', false)
}
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
loading: false,
rowHieght: 40,
haveControls: false,
},
controlsWidth: 160, //操作栏宽度
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
tableColumn: [
{ label: "群体名称", prop: "qtMc", width: 150 },
{ label: "群体类别", prop: "qtLb", showSolt: true, width: 150 },
{ label: "风险等级", prop: "qtFxdj", showSolt: true, width: 150 },
{ label: "背景资料", prop: "qtBjzl", width: 150 },
{ label: "背景信息", prop: "bgxx", showSolt: true, width: 150 },
{ label: "管辖单位", prop: "gxSsdwmc", width: 150 },
{ label: "列控原因", prop: "zdrLkyy", width: 150 },
{ label: "开始时间", prop: "zdrRkkssj", width: 150 },
{ label: "截至时间", prop: "zdrRkjssj", width: 150 },
{ label: "稳控人数", prop: "zdryList", showSolt: true, width: 150 },
{ label: "状态", prop: "qtZt", showSolt: true, width: 150 },
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true, width: 400 },
{ label: "创建单位", prop: "xtCjbmmc", width: 150 },
{ label: "创建时间", prop: "xtCjsj", width: 150 },
],
tableHeight: "42vh",
});
const parameter = ref()
const onSearch = (val) => {
parameter.value = { ...val }
pageData.pageConfiger.pageCurrent = 1;
changePage()
}
watch(() => props.modelValue, (val) => {
if (val) {
changePage()
}
})
const changePage = () => {
pageData.tableConfiger.loading = true;
let data = {...pageData.pageConfiger, ...parameter.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdqt/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
changePage()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
changePage()
}
</script>
<style scoped></style>

View File

@ -0,0 +1,209 @@
<template>
<el-dialog v-model="modelValue" title="重点人总数" width="70%" @close="closeDialog" destroy-on-close append-to-body>
<div style="height: 60vh; overflow: auto;">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<template #bqList="{ row }">
<ul>
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{
item.bqFz || 0 }} ) </li>
</ul>
</template>
<template #ryXb="{ row }">
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
</template>
<template #ryJg="{ row }">
<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
</template>
<template #ryMz="{ row }">
<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
</template>
<template #hjdQh="{ row }">
<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
</template>
<template #zdrRyjb="{ row }">
<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
</template>
<template #zdrBkZt="{ row }">
<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
</template>
<template #zdrCzzt="{ row }">
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
</template>
<template #zdrZt="{ row }">
<DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" />
</template>
<template #xtSjzt="{ row }">
<div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="success" @click="handleremove(row.id)">移除</el-link>
<el-link size="small" type="success" v-if="row.zdrZt == '01' || row.zdrZt == '03'"
@click="handleSend(row.id)">送审</el-link>
<el-link size="small" type="primary" v-if="row.zdrZt == '01' || row.zdrZt == '03'"
@click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="closeDialog">确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Search from "@/components/aboutTable/Search.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { ref, reactive, getCurrentInstance, watch } from "vue";
import { useRoute, useRouter } from 'vue-router'
import {timeValidate} from '@/utils/tools.js'
const route = useRoute()
const router = useRouter()
const { proxy } = getCurrentInstance()
const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
proxy.$dict("D_GS_ZDQT_ZT", "D_GS_ZDR_RYJB", "D_BZ_XB", "D_BZ_MZ", "D_BZ_XZQHDM", "D_GS_ZDR_BK_ZT", "D_GS_ZDR_CZZT", "D_GS_BQ_ZL", "D_GS_BQ_LB", "D_GS_BQ_LX", "D_GS_ZDR_YJDJ", "D_GS_BK_SSJZ", "D_GS_BK_SQLX", "D_BZ_SF", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX");
const obj = ref({});
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => ({})
}
})
const searchConfiger = ref([
{
label: "姓名",
prop: "ryXm",
placeholder: "请输入姓名",
showType: "input"
},
{
label: "身份证",
prop: "rySfzh",
placeholder: "请输入身份证",
showType: "input"
},
{
label: "户籍地",
prop: "hjdXz",
placeholder: "请输入户籍地",
showType: "input"
},
{
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "所属部门",
prop: "gxSsbmdm",
placeholder: "请输入所属部门",
showType: "department",
},
]);
const emit = defineEmits(['update:modelValue'])
const closeDialog = () => {
emit('update:modelValue', false)
}
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
loading: false,
rowHieght: 40,
haveControls: false,
},
controlsWidth: 160, //操作栏宽度
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
tableColumn: [
{ label: "姓名", prop: "ryXm", width: 150 },
{ label: "性别", prop: "ryXb", showSolt: true, width: 100 },
{ label: "籍贯", prop: "ryJg", showSolt: true, width: 100 },
{ label: "身份证", prop: "rySfzh", width: 200 },
{ label: "民族", prop: "ryMz", showSolt: true, width: 100 },
{ label: "户籍地区划", prop: "hjdQh", showSolt: true, width: 150 },
{ label: "户籍派出所", prop: "hjdPcsmc", width: 200 },
{ label: "户籍地详址", prop: "hjdXz", width: 200 },
{ label: "标签", prop: "bqList", showSolt: true, width: 400, showOverflowTooltip: true },
{ label: "管辖单位", prop: "gxSsbmmc", width: 200 },
{ label: "人员级别", prop: "zdrRyjb", showSolt: true, width: 130 },
{ label: "管控原因", prop: "zdrLkyy", width: 200, showOverflowTooltip: true },
{ label: "管控状态", prop: "zdrBkZt", width: 200, showOverflowTooltip: true },
{ label: "处置状态", prop: "zdrCzzt", showSolt: true },
{ label: "审核状态", prop: "zdrZt", showSolt: true },
{ label: "状态", prop: "xtSjzt", showSolt: true },
],
tableHeight: "42vh",
});
const parameter = ref()
const onSearch = (val) => {
parameter.value = { ...val }
pageData.pageConfiger.pageCurrent = 1;
changePage()
}
watch(() => props.modelValue, (val) => {
if (val) {
changePage()
}
})
const changePage = () => {
pageData.tableConfiger.loading = true;
let data = {...pageData.pageConfiger, ...parameter.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
}
// 查看详情
const showDetail = (item) => {
router.push({
path: '/CollectCrculate',
query: {
id: item.id
}
})
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
changePage()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
changePage()
}
</script>
<style scoped></style>

View File

@ -0,0 +1,191 @@
<template>
<el-dialog v-model="modelValue" title="预警总数" width="70%" @close="closeDialog" destroy-on-close append-to-body>
<div style="height: 60vh; overflow: auto;">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #yjtp="{ row }">
<div v-if="!row.yjtp || row.yjtp.includes('baidu')">
<img src="@/assets/images/car.png" width="65" height="70" v-if="row.yjlb == 2" />
<img src="@/assets/images/default_male.png" width="65" height="70" v-else />
</div>
<el-image preview-teleported v-else @click.stop style="width: 65px; height: 70px" :src="row.yjtp"
:preview-src-list="[row.yjtp]" show-progress>
<template #error>
<div class="image-slot error">
<img src="@/assets/images/car.png" width="65" height="70" v-if="row.yjlb == 2" />
<img src="@/assets/images/default_male.png" width="65" height="70" v-else />
</div>
</template>
</el-image>
</template>
<template #yjjb="{ row }">
<DictTag :value="row.yjjb" :tag="false" :color="bqYs(row.yjjb)" :options="D_BZ_YJJB" />
</template>
<template #yjlx="{ row }">
<DictTag :value="row.yjlx" :tag="false" :options="D_GS_ZDQT_YJLB" />
</template>
<template #yjlb="{ row }">
<DictTag :value="row.yjlb" :options="D_BZ_YJLX" />
</template>
<template #controls="{ row }">
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
<!-- <el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</el-link>
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02'">反馈</el-link>
<el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
<!-- <el-link type="primary" @click="openAddModel(row)">详情</el-link> -->
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="closeDialog">确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Search from "@/components/aboutTable/Search.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { ref, reactive, getCurrentInstance, watch } from "vue";
import {timeValidate} from '@/utils/tools.js'
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 props = defineProps({
modelValue: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => ({})
}
})
const searchConfiger = ref([
{ label: "预警级别", prop: 'yjjbList', placeholder: "请输入姓名", showType: "select", options: D_BZ_YJJB },
{ label: "预警类型", prop: 'yjlxList', placeholder: "请输入身份证号码", showType: "select", options: D_GS_ZDQT_YJLB },
{
label: "上报时间",
prop: "startTime",
placeholder: "请选择时间",
showType: "datetimerange"
}, {
label: "所属部门",
prop: "ssbmdm",
placeholder: "请输入所属部门",
showType: "department",
},
]);
const emit = defineEmits(['update:modelValue'])
const closeDialog = () => {
emit('update:modelValue', false)
}
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
loading: false,
rowHieght: 40,
haveControls: false,
},
controlsWidth: 160, //操作栏宽度
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
tableColumn: [
{ label: "预警图片", prop: "yjtp", showSolt: true },
{ label: "姓名", prop: "ryxm" },
{ label: "身份证号", prop: "rysfzh", width: 200 },
{ label: "预警标签", prop: "yjbq", width: 150 },
{ label: "预警地址", prop: "yjdz" },
{ label: "预警级别", prop: "yjjb", showSolt: true },
{ label: "预警类别", prop: "yjlb", showSolt: true },
{ label: "预警类型", prop: "yjlx", showSolt: true },
{ label: "预警时间", prop: "yjsj" },
{ label: "所属部门", prop: "ssbm" },
{ label: "车牌号", prop: "cph" },
],
tableHeight: "47vh",
});
const parameter = ref()
const onSearch = (val) => {
const promes = {
startTime: val.startTime && val.startTime.length > 0 ? val.startTime[0] : '',
endTime: val.startTime && val.startTime.length > 0 ? val.startTime[1] : '',
}
parameter.value = { ...val, ...promes }
pageData.pageConfiger.pageCurrent = 1;
changePage()
}
watch(() => props.modelValue, (val) => {
if (val) {
// 获取今天的开始时间和结束时间
let today = new Date();
let startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate());
let endOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59, 999);
parameter.value = {startTime:timeValidate(startOfDay), endTime:timeValidate(endOfDay)}
changePage()
}
})
const ORDIMG = 'https://89.40.7.122:38496/image'
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
const changePage = () => {
pageData.tableConfiger.loading = true;
const promes = {
...parameter.value,
yjjbList:parameter.value.yjjbList? [parameter.value.yjjbList] : [],
yjlxList: parameter.value.yjlxList? [parameter.value.yjlxList] : [],
pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize
}
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageAllList').then((res) => {
pageData.total = res.total || 0;
pageData.tableConfiger.loading = false;
pageData.tableData = res.records.map(item => {
return {
...item,
yjtp: item.yjlx == '01' ? item.yjtp.replace(ORDIMG, IMGYM) : item.yjtp
}
}) || [];
}).catch(() => {
pageData.tableConfiger.loading = false;
})
}
const bqYs = (val) => {
if (val == '01') {
return '#ff0202'
} else if (val == '02') {
return '#ff8c00'
} else if (val == '03') {
return '#ffd325'
} else if (val == '04') {
return '#0000ff'
}
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
changePage()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
changePage()
}
</script>
<style scoped></style>

View File

@ -0,0 +1,185 @@
<template>
<el-dialog v-model="modelValue" title="警情总数" width="70%" @close="closeDialog" destroy-on-close append-to-body>
<div style="height: 60vh; overflow: auto;">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
<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 #jqdjdm="{ row }">
<DictTag :tag="false" :value="row.jqdjdm" :options="D_GS_BQ_DJ" />
</template>
<template #jqlbdm="{ row }">
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
</template>
<template #ypzt="{ row }">
{{ row.ypzt === '01' ? '已研判' : '未研判' }}
</template>
<!-- <template #jqdjdm="{ row }">
<DictTag :tag="false" :value="row.jqdjdm" :options="D_BZ_JQDJ" />
</template> -->
<!-- 操作 -->
<!-- <template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', row)">详情</el-link>
<el-link type="warning" @click="handleYP('研判', row)">研判</el-link>
<el-link type="danger" @click="handleYP('深度研判', row)">深度研判</el-link>
</template> -->
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="closeDialog">确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Search from "@/components/aboutTable/Search.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import { lzJcjPjdbSelectPage } from '@/api/semanticAnalysis.js'
import { ref, reactive, getCurrentInstance, watch } from "vue";
import { useRoute, useRouter } from 'vue-router'
import {timeValidate} from '@/utils/tools.js'
const route = useRoute()
const router = useRouter()
const { proxy } = getCurrentInstance()
const { D_GS_BQ_DJ,JQLB,JQLX,JQXL,JQZL,D_BZ_JQLY,D_BZ_JQFL,JQLB_DP,D_BZ_JQBQ,D_GS_SSYJ } = proxy.$dict('D_GS_BQ_DJ',"JQLB",'JQLX','JQXL','JQZL','D_BZ_JQLY','D_BZ_JQFL','JQLB_DP','D_BZ_JQBQ','D_GS_SSYJ'); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => ({})
}
})
const searchConfiger = ref([
{
label: "接警员姓名",
prop: "jjyxm",
placeholder: "请输入接警员姓名",
showType: "input"
},
{
label: "报警内容",
prop: "bjnr",
placeholder: "请输入报警内容",
showType: "input"
},
{
label: "接警单编号",
prop: "jjdbh",
placeholder: "请输入接警单编号",
showType: "input"
},
{
label: "警情级别",
prop: "jqdjdm",
placeholder: "请选择警情级别",
showType: "select",
options: D_GS_BQ_DJ
}, {
label: "上报时间",
prop: "startTime",
placeholder: "请选择时间",
showType: "daterange"
},
]);
const emit = defineEmits(['update:modelValue'])
const closeDialog = () => {
emit('update:modelValue', false)
}
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
loading: false,
rowHieght: 40,
haveControls: false,
},
controlsWidth: 160, //操作栏宽度
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
tableColumn: [
{ label: "接警单编号", prop: "jjdbh" },
{ label: "报警电话", prop: "bjdh" },
{ label: "报警时间", prop: "bjsj" },
{ label: "报警内容", prop: "bjnr", showOverflowTooltip: true },
{ label: "接警员姓名", prop: "jjyxm" },
{ label: "警情级别", prop: "jqdjdm",showSolt:true },
// { label: "警情标签", prop: "jjlx", showSolt: true },
{ label: "警情类型", prop: "jqlbdm",showSolt:true },
{ label: "警情地址", prop: "jqdz" },
{ label: "补充接警内容", prop: "bcjjnr", showOverflowTooltip: true },
{ label: "研判状态", prop: "ypzt",showSolt:true },
],
tableHeight: "43vh",
});
const parameter = ref()
const onSearch = (val) => {
const promes = {
startTime: val.startTime && val.startTime.length > 0 ? val.startTime[0] : '',
endTime: val.startTime && val.startTime.length > 0 ? val.startTime[1] : '',
}
parameter.value = { ...val, ...promes }
pageData.pageConfiger.pageCurrent = 1;
changePage()
}
watch(() => props.modelValue, (val) => {
if (val) {
parameter.value = {startTime:timeValidate(new Date(),'ymd'),endTime:timeValidate(new Date(),'ymd')}
changePage()
}
})
const changePage = () => {
pageData.tableConfiger.loading = true;
const params = {
pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize,
...parameter.value
}
lzJcjPjdbSelectPage(params).then(res => {
console.log(res);
pageData.tableData = res.records || [];
pageData.total = res.total;
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
// 查看详情
const showDetail = (item) => {
router.push({
path: '/CollectCrculate',
query: {
id: item.id
}
})
}
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
changePage()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
changePage()
}
</script>
<style scoped></style>

View File

@ -327,7 +327,7 @@ onMounted(() => {
getTbYjxxGetList()
// 初始化音频播放器
initAudioPlayer()
// webSoket.connect()
webSoket.connect()
// 监听音频播放事件获取WebSocket消息数据
emitter.on("openYp", (newsDate) => {
// 使用工具类播放音频,自动处理静音切换

View File

@ -1,5 +1,5 @@
<template>
<el-dialog :model-value="modelValue" @update:model-value="emit('update:modelValue', $event)" title="重点人员列表" width="70%" @close="closeDialog" destroy-on-close>
<el-dialog :model-value="modelValue" @update:model-value="emit('update:modelValue', $event)" title="重点人员列表" width="70%" @close="closeDialog" destroy-on-close append-to-body>
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
<MyTable customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"

View File

@ -1,6 +1,6 @@
<template>
<div class="ww100 h80 flex just-between align-center pl10 pr10">
<div class="flex align-center" v-for="(item, idx) in contentItem" :key="idx">
<div class="flex align-center" v-for="(item, idx) in contentItem" :key="idx" @click="openTc(item.type)">
<div class="mr10"><img :src="item.icon" alt=""></div>
<div class="vountItem">
<div style="color:#ffffff" class="f16 lh20">{{ item.label }}</div>
@ -8,11 +8,20 @@
</div>
</div>
</div>
<PoliceReports v-model="openJqzs"/>
<NumberWarnings v-model="openYjzs"/>
<keyPerson v-model="openZdry"/>
<keyGroups v-model="openZdqt"/>
</template>
<script setup>
import { qcckPost } from "@/api/qcckApi.js";
import { ref, onMounted } from "vue";
import PoliceReports from '@/views/home/components/policeReports.vue'
import NumberWarnings from '@/views/home/components/numberWarnings.vue'
import keyPerson from "@/views/home/components/keyPerson.vue";
import keyGroups from "@/views/home/components/keyGroups.vue";
const contentItem = ref([
{ type:"jqzs", label: "警情总数", value: "0" ,icon:require('@/assets/images/top-1.png')},
{ type:"yjzs", label: "预警总数", value: "0",icon:require('@/assets/images/top-2.png') },
@ -32,6 +41,29 @@ const getCount = () =>{
}
})
}
// 打开警情总数
const openJqzs = ref(false)
const openYjzs = ref(false)
const openZdry = ref(false)
const openZdqt = ref(false)
const openTc = (val) => {
switch (val) {
case 'jqzs':
openJqzs.value = true
break;
case 'yjzs':
openYjzs.value = true
break;
case 'zdry':
openZdry.value = true
break;
case 'zdqt':
openZdqt.value = true
break;
}
}
</script>
<style lang="scss" scoped>