lcw
This commit is contained in:
@ -42,7 +42,7 @@ const btns = ref(['重点人','重点群体'])
|
||||
const active = ref('重点人');
|
||||
const keywords = ref(''); // 搜索关键字
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDQT_ZT,D_BZ_RYBQ,D_GS_ZDQT_FXDJ } = proxy.$dict('D_GS_ZDQT_ZT','D_BZ_RYBQ','D_GS_ZDQT_FXDJ') //获取字典数据
|
||||
const { D_GS_ZDQT_ZT,/* D_BZ_RYBQ, */D_GS_ZDQT_FXDJ } = proxy.$dict('D_GS_ZDQT_ZT',/* 'D_BZ_RYBQ', */'D_GS_ZDQT_FXDJ') //获取字典数据
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
|
||||
@ -49,8 +49,16 @@ import { onMounted, getCurrentInstance, ref, reactive } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { setAddress } from '@/utils/tools'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
|
||||
proxy.$dict("D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
|
||||
const {
|
||||
// D_BZ_SF,
|
||||
D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX,
|
||||
// D_GS_XS_QTLX
|
||||
} =
|
||||
proxy.$dict(
|
||||
// "D_BZ_SF",
|
||||
"D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX"
|
||||
// , "D_GS_XS_QTLX"
|
||||
); //获取字典数据
|
||||
|
||||
// 基础信息
|
||||
const basicInformation = ref(
|
||||
|
||||
@ -86,7 +86,22 @@ import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB,BD_BK_CLYJBQ, 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_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX","BD_BK_CLYJBQ","D_GS_ZDR_YJDJ");
|
||||
const {
|
||||
D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, BD_BK_CLYJBQ, 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_BK_SSJZ"
|
||||
// ,"D_GS_BK_SQLX"
|
||||
// ,"D_BZ_SF"
|
||||
// ,"D_GS_XS_LY"
|
||||
// ,"D_BZ_SSZT"
|
||||
// ,"D_GS_XS_LX"
|
||||
// ,"D_GS_XS_QTLX"
|
||||
,"BD_BK_CLYJBQ","D_GS_ZDR_YJDJ");
|
||||
const obj = ref({});
|
||||
const showzxs = ref(false);
|
||||
const zxsDilof = ref();
|
||||
|
||||
@ -65,7 +65,26 @@ import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
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 {
|
||||
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 showzxs = ref(false);
|
||||
const queryFrom = ref({});
|
||||
const ids = ref([]);
|
||||
|
||||
@ -74,8 +74,23 @@ import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
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 {
|
||||
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 show = ref(false);
|
||||
const addFormDiloag = ref();
|
||||
|
||||
@ -19,7 +19,7 @@ import { generateRandom10Digits } from '@/utils/tools'
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_ZFNR_MBLX } = proxy.$dict("D_ZFNR_MBLX")
|
||||
// const { D_ZFNR_MBLX } = proxy.$dict("D_ZFNR_MBLX") // 未使用,已注释
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
|
||||
@ -20,8 +20,8 @@
|
||||
:class="activeSection === 'character-section' ? 'active' : ''">背景信息</li>
|
||||
<li @click="scrollToSection('controlInfo-section')"
|
||||
:class="activeSection === 'controlInfo-section' ? 'active' : ''" v-if="!butShow">管控信息</li>
|
||||
<li @click="scrollToSection('featinfo-section')"
|
||||
:class="activeSection === 'featinfo-section' ? 'active' : ''" v-if="!butShow">全要素布控</li>
|
||||
<li @click="scrollToSection('featinfo-section')" :class="activeSection === 'featinfo-section' ? 'active' : ''"
|
||||
v-if="!butShow">全要素布控</li>
|
||||
<li @click="scrollToSection('demandsInfo-section')"
|
||||
:class="activeSection === 'demandsInfo-section' ? 'active' : ''" v-if="!butShow">密切联系人</li>
|
||||
<li @click="scrollToSection('requestInfo-section')"
|
||||
@ -69,13 +69,13 @@
|
||||
<div id="judgmentRecord-section" v-if="!butShow">
|
||||
<VisitRecord ref="visitRecord" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||
</div>
|
||||
<div id="historyAssembly-section" v-if="!butShow" >
|
||||
<div id="historyAssembly-section" v-if="!butShow">
|
||||
<CaseInfo ref="caseInfo" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||
</div>
|
||||
<div id="joblogging-section" v-if="!butShow">
|
||||
<ActualPerformance ref="actualPerformance" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||
</div>
|
||||
<div id="joblogging-joblog" v-if="!butShow" >
|
||||
<div id="joblogging-joblog" v-if="!butShow">
|
||||
<CzModel ref="czModel" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||
</div>
|
||||
</div>
|
||||
@ -114,7 +114,7 @@ const showBut = ref(false)
|
||||
const listQuery = ref({});
|
||||
const butShow = ref(false)
|
||||
const title = ref('新增')
|
||||
const showData=ref(false)
|
||||
const showData = ref(false)
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
@ -207,7 +207,7 @@ const submit = async () => {
|
||||
info.value.throwData()
|
||||
// personnelTags.value.throwData(),
|
||||
]);
|
||||
tbGsxtZdrySave({...infoData,rylx:'03'}).then(res => {
|
||||
tbGsxtZdrySave({ ...infoData, rylx: '03' }).then(res => {
|
||||
proxy.$message({
|
||||
message: '新增成功',
|
||||
type: 'success',
|
||||
@ -221,7 +221,7 @@ const submit = async () => {
|
||||
|
||||
// 关闭
|
||||
const close = () => {
|
||||
if (route.query.id) {
|
||||
if (route.query.id) {
|
||||
const query = { ...route.query };
|
||||
delete query.id;
|
||||
router.replace({ query });
|
||||
|
||||
@ -69,7 +69,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList"
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList" rylx="03"
|
||||
:dic="{ 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 }" />
|
||||
<!-- 选择用户 -->
|
||||
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" />
|
||||
@ -87,15 +87,17 @@ import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "./components/addForm.vue";
|
||||
// import AddForm from "./components/addForm.vue";
|
||||
import AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/components/addForm.vue";
|
||||
// src\views\backOfficeSystem\DeploymentDisposal\mpvPeo\components\addForm.vue
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_ZDRGK_GKZT, 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_ZDRGK_GKZT', "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 { D_ZDRGK_GKZT, 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_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
|
||||
proxy.$dict('D_ZDRGK_GKZT', "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_BZ_SF", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX");
|
||||
const obj = ref({});
|
||||
const showzxs = ref(false);
|
||||
const zxsDilof = ref();
|
||||
@ -160,7 +162,7 @@ const pageData = reactive({
|
||||
{ label: "管控状态", prop: "zdrBkZt", showOverflowTooltip: true, slotName: "zdrBkZt", width: 100 },
|
||||
{ label: "审核状态", prop: "zdrZt", slotName: "zdrZt", width: 100 },
|
||||
{ label: "入库时间", prop: "zdrRkkssj", },
|
||||
{ label: "操作", prop: "controls", slotName: "controls", width: 280 },
|
||||
{ label: "操作", prop: "controls", slotName: "controls", width: 300 },
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ import { ref, getCurrentInstance, onMounted } from 'vue'
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_ZJLX } = proxy.$dict("D_BZ_ZJLX")
|
||||
// const { D_BZ_ZJLX } = proxy.$dict("D_BZ_ZJLX") // 未使用,已注释
|
||||
|
||||
// 搜索表单
|
||||
const searchForm = ref({
|
||||
|
||||
@ -25,7 +25,7 @@ import CaseLodig from "../component/caseLodig.vue";
|
||||
import { tbGsxtZdryAjxxSaveOrUpdateAjxx, tbGsxtZdryAjxx, tbGsxtZdryAjxxselectAjxx } from '@/api/zdr.js'
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
||||
// const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); // 未使用,已注释
|
||||
const chooseMarksVisible = ref(false)
|
||||
const props = defineProps({
|
||||
dataList: {
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { reactive, ref,getCurrentInstance } from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 获取字典数据
|
||||
// const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 未使用,已注释
|
||||
const elform = ref()
|
||||
const showDialog = ref(false)
|
||||
const emit = defineEmits(['change'])
|
||||
|
||||
@ -70,7 +70,7 @@ import { ElMessage } from "element-plus";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
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 { 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 showzxs = ref(false);
|
||||
const queryFrom = ref({});
|
||||
const ids = ref([]);
|
||||
|
||||
@ -185,7 +185,7 @@ const {
|
||||
D_GS_BQ_LX,
|
||||
D_GS_ZDR_YJDJ,
|
||||
D_GS_BK_SSJZ,
|
||||
D_GS_BK_SQLX,
|
||||
/* D_GS_BK_SQLX, */
|
||||
D_BZ_SF,
|
||||
D_GS_XS_LY,
|
||||
D_BZ_SSZT,
|
||||
@ -205,7 +205,7 @@ const {
|
||||
"D_GS_BQ_LX",
|
||||
"D_GS_ZDR_YJDJ",
|
||||
"D_GS_BK_SSJZ",
|
||||
"D_GS_BK_SQLX",
|
||||
/* "D_GS_BK_SQLX", */
|
||||
"D_BZ_SF",
|
||||
"D_GS_XS_LY",
|
||||
"D_BZ_SSZT",
|
||||
|
||||
@ -65,7 +65,7 @@ import { IdCard } from "@/utils/validate.js";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
|
||||
import { ref, reactive, onMounted, getCurrentInstance, watch } from "vue";
|
||||
import { ref, reactive, onMounted, getCurrentInstance, watch, computed } from "vue";
|
||||
import { tbGsxtZdryUpdate } from "@/api/zdr.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {
|
||||
@ -136,7 +136,7 @@ const rules = reactive({
|
||||
const listQuery = ref({}); //表单
|
||||
const chooseMarksVisible = ref(false); // 控制标签选择弹窗显示
|
||||
const roleIds = ref([]); // 已选择的标签ID
|
||||
const formData = ref([
|
||||
const formData = computed(() => [
|
||||
{ label: "人员照片", prop: "ryzp", type: "slot", width: "100%" },
|
||||
{ label: "姓名", prop: "ryXm", type: "input", width: "30%" },
|
||||
{ label: "身份证号", prop: "rySfzh", type: "input", width: "30%" },
|
||||
@ -144,7 +144,7 @@ const formData = ref([
|
||||
label: "性别",
|
||||
prop: "ryXb",
|
||||
type: "select",
|
||||
options: D_BZ_XB,
|
||||
options: D_BZ_XB.value,
|
||||
width: "30%"
|
||||
},
|
||||
{ label: "出生日期", prop: "ryCsrq", type: "date", width: "30%" },
|
||||
@ -152,7 +152,7 @@ const formData = ref([
|
||||
label: "民族",
|
||||
prop: "ryMz",
|
||||
type: "select",
|
||||
options: D_BZ_MZ,
|
||||
options: D_BZ_MZ.value,
|
||||
width: "30%"
|
||||
},
|
||||
{
|
||||
@ -166,7 +166,7 @@ const formData = ref([
|
||||
label: "预警等级",
|
||||
prop: "zdrYjdj",
|
||||
type: "select",
|
||||
options: D_GS_ZDR_YJDJ,
|
||||
options: D_GS_ZDR_YJDJ.value,
|
||||
width: "30%"
|
||||
},
|
||||
{ label: "管控民警", prop: "gkMjXm", type: "slot", width: "30%" },
|
||||
@ -180,14 +180,14 @@ const formData = ref([
|
||||
label: "文化程度",
|
||||
prop: "whcdBm",
|
||||
type: "select",
|
||||
options: D_BZ_WHCD,
|
||||
options: D_BZ_WHCD.value,
|
||||
width: "30%"
|
||||
},
|
||||
{
|
||||
label: "政治面貌",
|
||||
prop: "zzmm",
|
||||
type: "select",
|
||||
options: D_BZ_ZZMM,
|
||||
options: D_BZ_ZZMM.value,
|
||||
width: "30%"
|
||||
},
|
||||
{ label: "职业", prop: "zyBm", type: "input", width: "30%" },
|
||||
@ -195,7 +195,7 @@ const formData = ref([
|
||||
label: "人员级别",
|
||||
prop: "zdrRyjb",
|
||||
type: "select",
|
||||
options: D_GS_ZDR_RYJB,
|
||||
options: D_GS_ZDR_RYJB.value,
|
||||
width: "30%"
|
||||
},
|
||||
{ label: "户籍地区划", prop: "hjdQh", type: "input", width: "30%" },
|
||||
@ -218,14 +218,14 @@ const formData = ref([
|
||||
label: "所属警种",
|
||||
prop: "zdrSsjz",
|
||||
type: "select",
|
||||
options: D_GS_BK_SSJZ,
|
||||
options: D_GS_BK_SSJZ.value,
|
||||
width: "30%"
|
||||
},
|
||||
{
|
||||
label: "涉及警种",
|
||||
prop: "zdrSjjz",
|
||||
type: "select",
|
||||
options: D_GS_BK_SSJZ,
|
||||
options: D_GS_BK_SSJZ.value,
|
||||
multiple: true,
|
||||
width: "30%"
|
||||
},
|
||||
@ -233,21 +233,21 @@ const formData = ref([
|
||||
label: "婚姻状态",
|
||||
prop: "hyzk",
|
||||
type: "select",
|
||||
options: D_BZ_HYZK,
|
||||
options: D_BZ_HYZK.value,
|
||||
width: "30%"
|
||||
},
|
||||
{
|
||||
label: "处置状态",
|
||||
prop: "zdrCzzt",
|
||||
type: "select",
|
||||
options: D_GS_ZDR_CZZT,
|
||||
options: D_GS_ZDR_CZZT.value,
|
||||
width: "30%"
|
||||
},
|
||||
{
|
||||
label: "布控状态",
|
||||
prop: "zdrBkZt",
|
||||
type: "select",
|
||||
options: D_BZ_RCBKZT,
|
||||
options: D_BZ_RCBKZT.value,
|
||||
width: "30%"
|
||||
},
|
||||
// { label: "人员类型", prop: "rylx", type: "select", options: D_ZDRY_RYLX },
|
||||
|
||||
@ -73,12 +73,16 @@ import Details from './details.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_RCSHZT, D_GS_RQFJ_LX, D_GS_RQFJ_FXDJ, D_BZ_SF, D_GS_RQFJ_FXLB } =
|
||||
const { D_BZ_RCSHZT,
|
||||
// D_GS_RQFJ_LX,
|
||||
D_GS_RQFJ_FXDJ,
|
||||
// D_BZ_SF,
|
||||
D_GS_RQFJ_FXLB } =
|
||||
proxy.$dict(
|
||||
"D_BZ_RCSHZT",
|
||||
"D_GS_RQFJ_LX",
|
||||
// "D_GS_RQFJ_LX",
|
||||
"D_GS_RQFJ_FXDJ",
|
||||
"D_BZ_SF",
|
||||
// "D_BZ_SF",
|
||||
"D_GS_RQFJ_FXLB"
|
||||
);
|
||||
|
||||
|
||||
@ -22,7 +22,8 @@
|
||||
<script setup>
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { reactive, watch,getCurrentInstance } from "vue";
|
||||
import { saveAs } from 'file-saver';
|
||||
import { reactive, watch, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
isImg: {
|
||||
@ -66,10 +67,10 @@ const pageData = reactive({
|
||||
});
|
||||
watch(() => listQuery.img, (newVal, oldVal) => {
|
||||
pageData.tableData = newVal.map(item => {
|
||||
return {
|
||||
wjmc: item.name,
|
||||
wjdx:parseFloat((item.id.fileSize/1024/1024).toFixed(2)),
|
||||
url: item.id.url
|
||||
return {
|
||||
wjmc: item.name,
|
||||
wjdx: parseFloat((item.id.fileSize / 1024 / 1024).toFixed(2)),
|
||||
url: item.id.url
|
||||
}
|
||||
})
|
||||
emit("changeData", pageData.tableData);
|
||||
@ -77,26 +78,25 @@ watch(() => listQuery.img, (newVal, oldVal) => {
|
||||
watch(() => props.imgMsg, (newVal, oldVal) => {
|
||||
pageData.tableData = newVal.map(item => {
|
||||
return {
|
||||
...item,
|
||||
...item,
|
||||
}
|
||||
})
|
||||
},{deep:true,immediate:true})
|
||||
}, { deep: true, immediate: true })
|
||||
const deleteFile = (row) => {
|
||||
pageData.tableData = pageData.tableData.filter(item => item.url !== row.url)
|
||||
const data=pageData.tableData.map(item => {
|
||||
return {
|
||||
wjmc: item.wjmc,
|
||||
wjdx: parseFloat(item.wjdx),
|
||||
url: item.url
|
||||
const data = pageData.tableData.map(item => {
|
||||
return {
|
||||
wjmc: item.wjmc,
|
||||
wjdx: parseFloat(item.wjdx),
|
||||
url: item.url
|
||||
}
|
||||
})
|
||||
|
||||
emit("changeData",data);
|
||||
emit("changeData", data);
|
||||
}
|
||||
const downloadFile = async (item) => {
|
||||
console.log(item);
|
||||
try {
|
||||
const dataList =[item]
|
||||
const dataList = [item]
|
||||
if (dataList.length === 0) {
|
||||
proxy.$message.warning('没有文件可下载');
|
||||
return;
|
||||
@ -108,39 +108,15 @@ const downloadFile = async (item) => {
|
||||
|
||||
proxy.$message.info(`开始下载${downloadCount}个文件...`);
|
||||
|
||||
// 并行下载所有文件
|
||||
const downloadPromises = dataList.map(async (fileData, index) => {
|
||||
|
||||
try {
|
||||
// 使用fetch获取文件内容
|
||||
const response = await fetch(fileData.url);
|
||||
if (!response.ok) {
|
||||
throw new Error('文件下载失败');
|
||||
}
|
||||
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
|
||||
// 设置下载文件的名称,避免冲突
|
||||
const fileName = dataList.length > 1
|
||||
? `${item.wjmc}_${index + 1}`
|
||||
: item.wjmc;
|
||||
downloadLink.download = fileName;
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
|
||||
// 清理
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
}, 100);
|
||||
|
||||
const fileName = dataList.length > 1 ? `${item.wjmc}_${index + 1}` : item.wjmc;
|
||||
saveAs(blob, fileName);
|
||||
successCount++;
|
||||
} catch (error) {
|
||||
console.error(`文件${index + 1}下载失败:`, error);
|
||||
@ -148,10 +124,8 @@ const downloadFile = async (item) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 等待所有下载完成
|
||||
await Promise.all(downloadPromises);
|
||||
|
||||
// 显示下载结果
|
||||
if (failCount === 0) {
|
||||
proxy.$message.success(`成功下载${successCount}个文件`);
|
||||
} else if (successCount === 0) {
|
||||
|
||||
@ -57,9 +57,11 @@ import { useRoute } from 'vue-router'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue";
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import { deleteWjZzzAddEntity, getWjZzzAddEntity, selectDxzjList } from '@//api/qbcj.js'
|
||||
import { saveAs } from 'file-saver';
|
||||
import AddForm from "@/views/backOfficeSystem/HumanIntelligence/fileTransfer/components/addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
// const { D_BZ_CJLX, D_GS_XS_LX } = proxy.$dict("D_BZ_CJLX", "D_GS_XS_LX"); //获取字典数据
|
||||
// 未使用: D_GS_XS_LX
|
||||
const detailDiloag = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
const ids = ref([])
|
||||
@ -188,27 +190,12 @@ const downloadFile = async (item) => {
|
||||
proxy.$message.info(`开始下载${downloadCount}个文件...`);
|
||||
const downloadPromises = dataList.map(async (fileData, index) => {
|
||||
try {
|
||||
// fileData.url = "http://47.108.232.77:9000/image/2025-01-06/081102a5418e4146beea277d18018e07.jpeg";
|
||||
// 使用fetch获取文件内容
|
||||
const downloadUrl = fileData.url.replace(/^https?:\/\/[^/]+/, '/zyminio');
|
||||
const response = await fetch(downloadUrl);
|
||||
if (!response.ok) throw new Error('文件下载失败');
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
// 设置下载文件的名称,避免冲突
|
||||
const fileName = dataList.length > 1 ? `${item.wjmc}_${index + 1}` : item.wjmc;
|
||||
downloadLink.download = fileName;
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
// 清理
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
}, 100);
|
||||
saveAs(blob, fileName);
|
||||
successCount++;
|
||||
} catch (error) {
|
||||
console.error(`文件${index + 1}下载失败:`, error);
|
||||
@ -216,9 +203,7 @@ const downloadFile = async (item) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 等待所有下载完成
|
||||
await Promise.all(downloadPromises);
|
||||
// 显示下载结果
|
||||
if (failCount === 0) {
|
||||
proxy.$message.success(`成功下载${successCount}个文件`);
|
||||
} else if (successCount === 0) {
|
||||
|
||||
@ -8,10 +8,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
<template #wjdz>
|
||||
<FileUploadList @changeData="changeData" :imgMsg="imgMsg"/>
|
||||
<FileUploadList @changeData="changeData" :imgMsg="imgMsg" />
|
||||
<!-- <div style="width: 100%;">
|
||||
<UploadFile v-model="imgMsg" :limit="1" :isImg="false" :isAll="false" />
|
||||
</div> -->
|
||||
@ -33,7 +32,7 @@ import UploadFile from "@/components/MyComponents/Upload/index.vue";
|
||||
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue"
|
||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, watch } from "vue";
|
||||
import { postWjZzzAddEntity, putWjZzzAddEntity, deleteWjZzzAddEntity, getWjZzzAddEntity, getWjZzzAddEntityById } from '@//api/qbcj.js'
|
||||
const emit = defineEmits(["updateDate","getList"]);
|
||||
const emit = defineEmits(["updateDate", "getList"]);
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
@ -63,7 +62,7 @@ const listQuery = ref({}); //表单
|
||||
// }
|
||||
// }, { deep: true })
|
||||
watch(() => listQuery.value.wjlb, (newVal, oldVal) => {
|
||||
listQuery.value.wjlb = newVal
|
||||
listQuery.value.wjlb = newVal
|
||||
if (newVal == '02') {
|
||||
formData.value = [
|
||||
// {
|
||||
@ -76,14 +75,14 @@ watch(() => listQuery.value.wjlb, (newVal, oldVal) => {
|
||||
// }]
|
||||
// },
|
||||
{ label: "文件", prop: "wjdz", type: "slot", width: "100%" },
|
||||
{ label: "文件大小", prop: "wjdx", type: "input", width: "30%", placeholder: "单位:MB",disabled: true },
|
||||
{ label: "文件大小", prop: "wjdx", type: "input", width: "30%", placeholder: "单位:MB", disabled: true },
|
||||
{ label: "文件名称", prop: "wjmc", type: "input", width: "30%" },
|
||||
// { label: "文件文件类型", prop: "wjlx", type: "input", width: "30%" },
|
||||
{ label: "接收人", prop: "jsrxm", type: "slot", width: "100%" },
|
||||
{ label: "接收部门", prop: "jsbmdm", type: "department", depMc: "jsbmmc", multiple: true },
|
||||
{ label: "文件描述", prop: "wjms", type: "textarea", width: "100%" },]
|
||||
} else {
|
||||
formData.value = [
|
||||
formData.value = [
|
||||
// {
|
||||
// label: "文件类型", prop: "wjlb", type: "radio", options: [{
|
||||
// label: "普通文件",
|
||||
@ -112,7 +111,7 @@ const rules = reactive({
|
||||
});
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row,wjlb) => {
|
||||
const init = (type, row, wjlb) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type == "add" ? "新增" : type == "edit" ? "编辑" : "详情";
|
||||
if (row) { getDataById(row.id) } else {
|
||||
@ -123,31 +122,31 @@ const init = (type, row,wjlb) => {
|
||||
const getDataById = (id) => {
|
||||
getWjZzzAddEntityById(id).then((res) => {
|
||||
listQuery.value = res;
|
||||
imgMsg.value =JSON.parse(res.wjdz)
|
||||
imgMsg.value = JSON.parse(res.wjdz)
|
||||
listQuery.value.jsbmdm = res.jsdxList.filter(item => item.jsbmdm).map(item => item.jsbmdm)
|
||||
listQuery.value.jsbmmc=res.jsdxList.filter(item => item.jsbmdm).map(item => item.jsbmmc)
|
||||
listQuery.value.jsbmmc = res.jsdxList.filter(item => item.jsbmdm).map(item => item.jsbmmc)
|
||||
userList.value = res.jsdxList.filter(item => {
|
||||
if ( item.jsrsfzh) {
|
||||
return item
|
||||
if (item.jsrsfzh) {
|
||||
return item
|
||||
}
|
||||
}).map(item => {
|
||||
return { idEntityCard: item.jsrsfzh, userName: item.jsrxm }
|
||||
})
|
||||
|
||||
|
||||
listQuery.value.jsrxm=userList.value.map(item => item.userName).join(',')
|
||||
listQuery.value.jsrxm = userList.value.map(item => item.userName).join(',')
|
||||
});
|
||||
};
|
||||
const wjList=ref({})
|
||||
const wjList = ref({})
|
||||
const changeData = (val) => {
|
||||
console.log(val);
|
||||
let wjsize=0
|
||||
let wjsize = 0
|
||||
for (let i = 0; i < val.length; i++) {
|
||||
console.log(val[i].wjdx);
|
||||
wjsize+= val[i].wjdx
|
||||
wjsize += val[i].wjdx
|
||||
}
|
||||
listQuery.value.wjdx = wjsize
|
||||
wjList.value.wjdz =val
|
||||
wjList.value.wjdz = val
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
@ -158,14 +157,14 @@ const submit = () => {
|
||||
jsrxm: item.userName,
|
||||
}
|
||||
}) : []
|
||||
console.log(ryList);
|
||||
console.log(ryList);
|
||||
|
||||
const bmList =listQuery.value.jsbmdm&&listQuery.value.jsbmdm.length>0? listQuery.value.jsbmdm.map((item, index) => ({
|
||||
const bmList = listQuery.value.jsbmdm && listQuery.value.jsbmdm.length > 0 ? listQuery.value.jsbmdm.map((item, index) => ({
|
||||
jsbmdm: item,
|
||||
jsbmmc: listQuery.value.jsbmmc[index],
|
||||
})):[]
|
||||
})) : []
|
||||
const list = [...ryList, ...bmList]
|
||||
let params = { ...listQuery.value, jsdxList: list,...wjList.value,wjdz:JSON.stringify(wjList.value.wjdz) };
|
||||
let params = { ...listQuery.value, jsdxList: list, ...wjList.value, wjdz: JSON.stringify(wjList.value.wjdz) };
|
||||
try {
|
||||
loading.value = true;
|
||||
let res
|
||||
@ -174,7 +173,7 @@ const submit = () => {
|
||||
} else {
|
||||
res = await putWjZzzAddEntity(params)
|
||||
}
|
||||
if (res&&res >0) {
|
||||
if (res && res > 0) {
|
||||
loading.value = false;
|
||||
imgMsg.value = []
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
|
||||
@ -59,6 +59,7 @@ import { useRoute } from 'vue-router'
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import { deleteWjZzzAddEntity, getWjZzzAddEntity } from '@//api/qbcj.js'
|
||||
import { saveAs } from 'file-saver';
|
||||
import AddForm from "./components/addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const detailDiloag = ref();
|
||||
@ -180,30 +181,14 @@ const downloadFile = async (item) => {
|
||||
let successCount = 0;
|
||||
let failCount = 0;
|
||||
proxy.$message.info(`开始下载${downloadCount}个文件...`);
|
||||
// 并行下载所有文件
|
||||
const downloadPromises = dataList.map(async (fileData, index) => {
|
||||
try {
|
||||
// fileData.url = "http://47.108.232.77:9000/image/2025-01-06/081102a5418e4146beea277d18018e07.jpeg";
|
||||
// 使用fetch获取文件内容
|
||||
const downloadUrl = fileData.url.replace(/^https?:\/\/[^/]+/, '/zyminio');
|
||||
const response = await fetch(downloadUrl);
|
||||
if (!response.ok) throw new Error('文件下载失败');
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
// 设置下载文件的名称,避免冲突
|
||||
const fileName = dataList.length > 1 ? `${item.wjmc}_${index + 1}` : item.wjmc;
|
||||
downloadLink.download = fileName;
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
// 清理
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
}, 100);
|
||||
saveAs(blob, fileName);
|
||||
successCount++;
|
||||
} catch (error) {
|
||||
console.error(`文件${index + 1}下载失败:`, error);
|
||||
@ -211,10 +196,8 @@ const downloadFile = async (item) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 等待所有下载完成
|
||||
await Promise.all(downloadPromises);
|
||||
|
||||
// 显示下载结果
|
||||
if (failCount === 0) {
|
||||
proxy.$message.success(`成功下载${successCount}个文件`);
|
||||
} else if (successCount === 0) {
|
||||
|
||||
@ -24,6 +24,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</template> -->
|
||||
<template #scfj>
|
||||
<div style="width: 100%;padding-left: 50px;">
|
||||
<div>上传附件:<span class="f12">(可附电子表格、Word文档、图像、音视频文件)</span> </div>
|
||||
<MOSTY.Upload :showBtn="true" :isAll="true" :isImg="false" :limit="10" v-model="fjdz" />
|
||||
</div>
|
||||
</template>
|
||||
<template #shzt>
|
||||
<div v-if="disabled">
|
||||
<h3 class="tags-title">审核状态</h3>
|
||||
@ -186,7 +192,7 @@ watch(() => dialogForm.value, (val) => {
|
||||
formData.value = [
|
||||
{ label: "情报标题", prop: "qbmc", type: "input", width: '45%' },
|
||||
{ label: "情报内容", prop: "qbnr", type: "textarea", width: '100%', rows: 100 },
|
||||
{ label: "附件上传", prop: "fjdz", type: "upload", width: '100%', isImg: false },
|
||||
{ prop: "scfj", type: "slot", width: '100%' },
|
||||
{ label: "", prop: "jbxx", type: "slot", width: '100%',},
|
||||
{ label: "", prop: "shzt", type: "slot", width: '100%' },
|
||||
]
|
||||
@ -242,7 +248,14 @@ const getDataById = (id) => {
|
||||
|
||||
lcList.value = res.czlcList || []
|
||||
listQuery.value = res;
|
||||
listQuery.value.fjdz = res.fjdz ? res.fjdz?.split(",") : []
|
||||
// 解析附件:兼容JSON字符串和逗号分隔两种格式
|
||||
try {
|
||||
const parsed = res.fjdz ? JSON.parse(res.fjdz) : []
|
||||
listQuery.value.fjdz = Array.isArray(parsed) ? parsed : []
|
||||
} catch (e) {
|
||||
listQuery.value.fjdz = res.fjdz ? res.fjdz.split(",") : []
|
||||
}
|
||||
fjdz.value = listQuery.value.fjdz
|
||||
});
|
||||
};
|
||||
|
||||
@ -252,11 +265,18 @@ const submitForm = () => {
|
||||
elform.value.submit(valid => {
|
||||
if (valid) {
|
||||
loading.value = true
|
||||
// 将附件转为JSON字符串
|
||||
let fjdzList = []
|
||||
fjdz.value.forEach(item => {
|
||||
if (Object.prototype.toString.call(item) === '[object Object]') {
|
||||
fjdzList.push({ id: item.id, name: item.name })
|
||||
} else {
|
||||
fjdzList.push({ id: item })
|
||||
}
|
||||
})
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
fjdz: listQuery.value.fjdz && listQuery.value.fjdz.length > 0 ? listQuery.value.fjdz.map(item => {
|
||||
return item.id
|
||||
}).join(',') : '',
|
||||
fjdz: fjdzList.length > 0 ? JSON.stringify(fjdzList) : '',
|
||||
qbly: 0,
|
||||
}
|
||||
if (title.value == '新增') {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<!--文件导出 -->
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" :width="width" top="5vh" @close="close" append-to-body>
|
||||
<div style="height: 70vh;">
|
||||
<div ref="tableContainer" class="table-container">
|
||||
|
||||
<MyTable ref="tableData" :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn"
|
||||
:tableHeight="pageForm.tableHeight" :key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger"
|
||||
@ -26,7 +26,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import * as XLSX from 'xlsx'
|
||||
import { onMounted, reactive, watch, ref } from 'vue'
|
||||
import { onMounted, reactive, watch, ref, nextTick, onUnmounted } from 'vue'
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { template } from 'lodash';
|
||||
const props = defineProps({
|
||||
@ -52,12 +52,26 @@ const props = defineProps({
|
||||
default: () => ([])
|
||||
}
|
||||
})
|
||||
const tableContainer = ref(null)
|
||||
const tableData = ref(null)
|
||||
|
||||
onMounted(() => {
|
||||
{ { props.dict } }
|
||||
})
|
||||
|
||||
// 计算表格高度
|
||||
const calcTableHeight = () => {
|
||||
nextTick(() => {
|
||||
if (tableContainer.value) {
|
||||
pageForm.tableHeight = tableContainer.value.offsetHeight - 20
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
watch(() => props.modelValue, (newVal, oldVal) => {
|
||||
if(newVal){
|
||||
pageForm.tableData = props.dataModel
|
||||
calcTableHeight()
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
@ -94,7 +108,6 @@ watch(() => props.modelValue, (newVal) => {
|
||||
const close = () => {
|
||||
emit('update:modelValue', false)
|
||||
}
|
||||
const tableData = ref(null)
|
||||
// 导出当前表格的数据
|
||||
const exportCurrentTable = () => {
|
||||
try {
|
||||
@ -157,3 +170,9 @@ const exportCurrentTable = () => {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.table-container {
|
||||
height: 70vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,599 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
|
||||
<el-button type="primary" @click="addEdit('add')" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span class="vertical-middle">新增</span>
|
||||
</el-button>
|
||||
<el-button type="primary" @click="exportFileModel = true;" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span class="vertical-middle">导出</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="handleSumbit(ids)" v-if="qxkz.deptLevel != '01'"
|
||||
size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span class="vertical-middle">上报</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="provDepar(ids)" v-if="qxkz.deptLevel == '01'"
|
||||
size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span class="vertical-middle">上报区厅</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="delDictItem(ids)" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span class="vertical-middle">删除</span>
|
||||
</el-button>
|
||||
<!-- <el-button type="primary" size="small" @click="handleReport">
|
||||
<el-icon class="vertical-middle"><Edit /></el-icon>
|
||||
<span class="vertical-middle">情报信息报告</span>
|
||||
</el-button> -->
|
||||
</Searchs>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="margTop">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData" @handleCellClick="openXxqk">
|
||||
<template #qblx="{ row }">
|
||||
<DictTag :tag="false" :value="row.qblx" :options="D_GS_XS_LX" />
|
||||
</template>
|
||||
<template #qbly="{ row }">
|
||||
<DictTag :tag="false" :value="row.qbly" :options="D_BZ_CJLX" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.czzt" :options="D_BZ_QBCZZT" />
|
||||
</template>
|
||||
<template #lczt="{ row }">
|
||||
<DictTag :tag="false" :value="row.lczt" :options="D_BZ_LCZT" />
|
||||
</template>
|
||||
<template #glbqList="{ row }">
|
||||
<div>
|
||||
<el-tag v-for="(item, idx) in row.glbqList" :key="idx">{{ item.bqmc }}</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
<template #cyqk="{ row }">
|
||||
<el-link v-if="isShowBtn('采纳')" size="small" type="danger" @click="cnMsg(row)"
|
||||
:disabled="butcontroll('04', row.lczt)">采纳</el-link>
|
||||
<!-- 只有上报状态才能回退 -->
|
||||
<el-link v-if="isShowBtn('回退')" size="small" type="danger" @click="rollbackNewspapers(row)"
|
||||
:disabled="butcontroll('04', row.lczt)">回退</el-link>
|
||||
</template>
|
||||
<!-- 所有按钮采纳前不能操作,回退后也不能操作 -->
|
||||
<!-- 操作 -->
|
||||
<!-- "市情指挥人员": ["采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门", "送审"], -->
|
||||
<!-- "县情指人员": ["上报", "回退", "修改", "详情", "送审"], -->
|
||||
<template #controls="{ row }">
|
||||
<el-link @click="handleSbqt(row)" size="small" type="primary" v-if="qxkz.deptLevel == '01'"
|
||||
:disabled="row.lczt == '10'">上报区厅</el-link>
|
||||
<el-link v-if="isShowBtn('送审', row) && qxkz.deptLevel == '01' && row.lczt == '04'"
|
||||
:disabled="!(row.lczt == '04') || row.sldshzt != '00'" size="small" type="primary"
|
||||
@click="postXxcjXxcjTjsh(row)">送审</el-link>
|
||||
|
||||
<!-- <el-link
|
||||
v-if="isShowBtn('送审', row) && qxkz.deptLevel == '02'"
|
||||
:disabled="row.xldshzt != '00' "
|
||||
size="small" type="primary"
|
||||
@click="postXxcjXxcjTjsh(row)">
|
||||
送审
|
||||
</el-link> -->
|
||||
|
||||
<!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
||||
<el-link v-if="isShowBtn('上报') && qxkz.deptLevel == '03'" size="small" type="primary"
|
||||
@click="appearNewspapers(row)" :disabled="row.lczt != '01'">上报</el-link>
|
||||
<el-link v-else-if="isShowBtn('上报')" size="small" type="primary" @click="appearNewspapers(row)"
|
||||
:disabled="!(row.lczt == '02')">上报</el-link>
|
||||
<!-- && row.lczt != '02' -->
|
||||
<el-link v-if="isShowBtn('分组') && (row.lczt == '04' || row.lczt == '08' || row.lczt == '10')" size="small"
|
||||
type="primary" @click="opneMsg(row)">分组</el-link>
|
||||
<!-- 只有领导有肯定 -->
|
||||
<!-- <el-link v-if="isShowBtn('肯定')" size="small" type="primary" @click="affirm(row)">肯定</el-link> -->
|
||||
<el-link v-if="isShowBtn('删除')" size="small" type="primary" @clic.stopk="delDictItem(row.id)">删除</el-link>
|
||||
<el-link v-if="isShowBtn('修改', row)" size="small" type="primary" @click="addEdit('edit', row)">修改</el-link>
|
||||
<el-link v-if="isShowBtn('续报', row) && row.lczt == '04'" size="small" type="primary"
|
||||
@click="addEdit('followUpReport', row)">续报</el-link>
|
||||
|
||||
<el-link v-if="isShowBtn('详情')" size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
<!-- 所有状态都能进行转线索 -->
|
||||
<el-link v-if="isShowBtn('转线索') && (row.lczt == '04' || row.lczt == '06')" size="small" type="primary"
|
||||
@click="FollowUpOnLeads(row)" :disabled="row.lczt == '08'">转线索</el-link>
|
||||
<!-- 所有状态都能进行转合成 -->
|
||||
<!-- <el-link v-if="isShowBtn('转合成')" size="small" type="primary" @click="openFkDialogszl(row)" :disabled="butcontroll('01', row.lczt)">转合成</el-link> -->
|
||||
<!-- 所有状态都能进行转会商 -->
|
||||
<!-- <el-link v-if="isShowBtn('转会商')" size="small" type="primary" @click="handleTransferMerchant(row)" :disabled="butcontroll('01', row.lczt)">转会商</el-link> -->
|
||||
|
||||
<el-link v-if="isShowBtn('关注部门') && row.qbjb == '01' && row.lczt == '04'" :disabled="row.sldshzt != '02'"
|
||||
size="small" type="primary" @click="FollowUpOnDept(row)">定向关注</el-link>
|
||||
<!-- 市局能给所有数据创建标签 -->
|
||||
<el-link
|
||||
v-if="isShowBtn('打标签') && (row.lczt == '04' || row.lczt == '06' || row.lczt == '07' || row.lczt == '08' || row.lczt == '09' || row.lczt == '10') && qxkz.deptLevel == '01'"
|
||||
size="small" type="primary" @click="openCustomTag(row)" :disabled="row.sldshzt != '02'">打标签</el-link>
|
||||
<el-link size="small" type="primary" @click="handleAttention(row)">{{ row.sfgz == '1'
|
||||
? '取消关注' : '关注' }}</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<AddForm ref="detailDiloag" @getList="getList" :titleData="titleData" :dict="{ D_BZ_LCZT, D_BZ_SSSHZT }" />
|
||||
</div>
|
||||
|
||||
<ExportFile v-model="exportFileModel" :tableColumn="tableColumn" :dict="{ D_GS_XS_LY, D_GS_XS_LX, D_GS_XS_LX }"
|
||||
:dataModel="pageData.tableData" />
|
||||
|
||||
<MakeTag v-model="chooseRow" :dataList="dataList" :dict="{ D_BZ_CJLX, D_BZ_QBCZZT, D_GS_XS_LX, D_BZ_BQJB }"
|
||||
@getList="getList" />
|
||||
|
||||
<Fszl v-model="fszlShow" path="/xxcj/sendFqzl" :itemData="dataList" />
|
||||
|
||||
<CustomTag v-model="customTagShow" :dataList="dataList" @getList="getList" :dict="{ D_XXCJ_BQLX }" />
|
||||
<Configuration v-model="configurationShow" :dataList="dataList" @getList="getList" />
|
||||
|
||||
<!-- 转会商 -->
|
||||
<transferMerchant v-if="isShowTransferMerchantTc" :row="currRow" title="转会商" @close="isShowTransferMerchantTc = false"
|
||||
@ok="getList" />
|
||||
|
||||
<!-- 情报信息报告 -->
|
||||
<InforReport v-if="inforReportShow" v-model="inforReportShow" :data="tableList" />
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import InforReport from './components/inforReport.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "./components/addForm.vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { qbcjSelectQbsbPage, qbcjDeletes, qbcjCzzt, qbcjPlsb } from "@/api/Intelligence.js";
|
||||
import { xxcjSelectXxsbPage, xxcjDeletes, xxcjXxzsx, xxcjUpdateCzlc, xxcjXxqd, xxcjXxcjTjsh, xxcjCare, xxcjReportGat, xxcjPlsb } from '@/api/xxcj.js'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import MakeTag from '../components/maketag.vue'
|
||||
import ExportFile from './components/exportFile.vue'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import Fszl from '@/views/backOfficeSystem/HumanIntelligence/components/fszl.vue'
|
||||
import CustomTag from '../components/customTag.vue'
|
||||
import Configuration from '../components/configuration.vue'
|
||||
import transferMerchant from "./components/transferMerchant.vue";
|
||||
import { Edit } from "@element-plus/icons";
|
||||
import { useInfoCollectionPermission, FlowStatus } from './useInfoCollectionPermission.ts'
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF, D_GS_XS_LY, /* D_BZ_SSSHZT, */ D_GS_XS_LX, D_BZ_BQJB, D_BZ_QBCZZT, D_BZ_CJLX, D_BZ_LCZT, D_XXCJ_BQLX } = proxy.$dict("D_BZ_SF", "D_GS_XS_LY" /*, 'D_BZ_SSSHZT' */, "D_GS_XS_LX", "D_BZ_QBCZZT", "D_BZ_CJLX", "D_BZ_BQJB", "D_BZ_LCZT", "D_XXCJ_BQLX"); //获取字典数据
|
||||
const route = useRoute()
|
||||
const titleData = ref()
|
||||
const exportFileModel = ref(false)
|
||||
|
||||
// 使用权限管理模块
|
||||
const permission = useInfoCollectionPermission()
|
||||
const { state: qxkz, isCityLevel, canShowBtn, butcontroll, canSubmitAudit, canReport, canTag, canFollowDept, canTransferClue, canFollowUpReport } = permission
|
||||
|
||||
const fszlShow = ref(false)// 发送指令
|
||||
const detailDiloag = ref();
|
||||
const inforReportShow = ref(false) //情报信息报告
|
||||
const customTagShow = ref(false)// 打标签
|
||||
const configurationShow = ref(false)// 配置关注部门
|
||||
const searchBox = ref(); //搜索框
|
||||
const ids = ref([])
|
||||
const tableList = ref([]);
|
||||
const currRow = ref({})
|
||||
const isShowTransferMerchantTc = ref(false)
|
||||
const isShow = ref(false)
|
||||
const searchConfiger = ref([
|
||||
{ label: "录入人", prop: 'xssbr', placeholder: "请输入录入人", showType: "input" },
|
||||
{ label: "录入单位", prop: "ssbmdm", placeholder: "请选择录入单位", showType: "department" },
|
||||
{ label: "编号", prop: 'xsBh', placeholder: "请输入编号", showType: "input" },
|
||||
{ label: "时间", prop: "startTime", placeholder: "请选择时间", showType: "daterange" },
|
||||
{ label: "情报标题", prop: 'qbmc', placeholder: "请输入情报标题", showType: "input" },
|
||||
{ label: "标签内容", prop: 'bqdmList', placeholder: "请选择标签内容", showType: "select", options: D_XXCJ_BQLX, multiple: true },
|
||||
{ label: "标签级别", prop: 'qbjb', placeholder: "请选择标签级别", showType: "select", options: D_BZ_BQJB },
|
||||
{ label: "情报处置状态", prop: 'lczt', placeholder: "请选择处置状态", showType: "select", options: D_BZ_LCZT },
|
||||
{ label: "关键字", prop: 'keyword', placeholder: "请输入关键字", showType: "input" },
|
||||
{ label: "是否上报区厅", prop: 'sfsbqt', placeholder: "请选择是否上报区厅", showType: "select", options: D_BZ_SF },
|
||||
{ label: "是否关注", prop: 'sfgz', placeholder: "请选择是否关注", showType: "select", options: D_BZ_SF },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 300,
|
||||
tableColumn: [
|
||||
{ label: "情报上报时间", prop: "sxsbsj" },
|
||||
{ label: "情报编号", prop: "xsBh" },
|
||||
{ label: "情报标题", prop: "qbmc" },
|
||||
{ label: "情报来源", prop: "qbly", showSolt: true },
|
||||
{ label: "上报人", prop: "xssbr" },
|
||||
{ label: "上报单位", prop: "ssbm" },
|
||||
{ label: "流程状态", prop: "lczt", showSolt: true },
|
||||
{ label: "采用情况", prop: "cyqk", showSolt: true },
|
||||
{ label: "关联标签", prop: "glbqList", showSolt: true },
|
||||
]
|
||||
});
|
||||
// 导出数据
|
||||
const tableColumn = reactive([
|
||||
{ label: "上报人姓名", prop: "xssbr" },
|
||||
{ label: "情报上报时间", prop: "sxsbsj" },
|
||||
{ label: "情报编号", prop: "xsBh" },
|
||||
{ label: "情报标题", prop: "qbmc" },
|
||||
{ label: "情报来源", prop: "qbly", showSolt: true, zd: 'D_BZ_CJLX' },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const chooseRow = ref(false)
|
||||
const dataList = ref()
|
||||
|
||||
const chooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
tableList.value = val
|
||||
}
|
||||
|
||||
// 采纳
|
||||
const cnMsg = (item) => {
|
||||
proxy.$confirm("确定要采纳", "警告", { type: "warning" }).then(() => {
|
||||
xxcjUpdateCzlc({ id: item.id, lczt: '04' }).then(res => {
|
||||
proxy.$message({ type: "success", message: "采纳成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
const handleReport = () => {
|
||||
if (tableList.value.length == 0) return proxy.$message({ type: "warning", message: "请选择情报信息" });
|
||||
inforReportShow.value = true
|
||||
}
|
||||
|
||||
// 关注
|
||||
const handleAttention = (val) => {
|
||||
let data = { id: val.id, sfgz: val.sfgz == '1' ? '0' : '1' }
|
||||
xxcjCare(data).then(res => {
|
||||
let text = data.sfgz == '1' ? '关注成功' : '已取消'
|
||||
proxy.$message({ type: "success", message: text });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
let text = data.sfgz == '1' ? '关注失败' : '取消失败'
|
||||
proxy.$message({ type: "error", message: text });
|
||||
})
|
||||
|
||||
}
|
||||
// 回退
|
||||
const rollbackNewspapers = (item) => {
|
||||
// if (item.lczt == '04') {
|
||||
// proxy.$message({
|
||||
// message: '已经采纳的信息无法回退',
|
||||
// type: 'warning',
|
||||
// showClose: true,
|
||||
// })
|
||||
// return
|
||||
// }
|
||||
// if (item.lczt == '03') {
|
||||
// proxy.$message({
|
||||
// message: '无法回退市局上报信息',
|
||||
// type: 'warning',
|
||||
// showClose: true,
|
||||
// })
|
||||
// return
|
||||
// }
|
||||
if (item.qbjb == '00') {
|
||||
ElMessageBox.prompt('请输入回退原因', '警告', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
})
|
||||
.then(({ value }) => {
|
||||
xxcjUpdateCzlc({ id: item.id, lczt: '05', czthyy: value }).then(res => {
|
||||
proxy.$message({ type: "success", message: "回退成功" });
|
||||
getList();
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
})
|
||||
} else {
|
||||
proxy.$message({
|
||||
message: '只能回退已上报的情报',
|
||||
type: 'warning',
|
||||
showClose: true,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
// 上报
|
||||
const appearNewspapers = (item) => {
|
||||
console.log(item);
|
||||
|
||||
if ((item.lczt == '01' || item.lczt == '05' || item.lczt == '02') && item.qbjb == '00' && qxkz.deptLevel != '01') {
|
||||
proxy.$confirm("确定要上报", "警告", { type: "warning" }).then(() => {
|
||||
let promes = { id: item.id }
|
||||
promes.lczt = qxkz.deptLevel == '02' ? '03' : '02';
|
||||
xxcjUpdateCzlc(promes).then(res => {
|
||||
proxy.$message({ type: "success", message: "上报成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { });
|
||||
} else {
|
||||
proxy.$message({ type: "warning", message: "市局无法进行上报" });
|
||||
}
|
||||
}
|
||||
// 分组
|
||||
const opneMsg = (item) => {
|
||||
chooseRow.value = true
|
||||
dataList.value = [item]
|
||||
}
|
||||
|
||||
const openCustomTag = (item) => {
|
||||
if (qxkz.depBool) {
|
||||
customTagShow.value = true
|
||||
dataList.value = item
|
||||
} else {
|
||||
proxy.$message.warning('暂无权限')
|
||||
}
|
||||
}
|
||||
// 肯定
|
||||
const affirm = (item) => {
|
||||
proxy.$confirm("确定要肯定吗?", "警告", { type: "warning" }).then(() => {
|
||||
xxcjXxqd({ ids: item.id }).then(res => {
|
||||
proxy.$message({ type: "success", message: "肯定成功" });
|
||||
getList();
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const FollowUpOnDept = (item) => {
|
||||
if (qxkz.depBool) {
|
||||
configurationShow.value = true
|
||||
dataList.value = item
|
||||
} else {
|
||||
proxy.$message.warning('暂无权限')
|
||||
}
|
||||
}
|
||||
|
||||
// 批量分组
|
||||
// const batchMark = () => {
|
||||
// const listDb = tableList.value.filter(item => item.lczt != '04')
|
||||
// if (listDb.length == 0) {
|
||||
// chooseRow.value = true
|
||||
// dataList.value = tableList.value
|
||||
// } else {
|
||||
// proxy.$message({
|
||||
// message: '还有情报未采纳',
|
||||
// type: 'warning',
|
||||
// showClose: true,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
|
||||
const handleSumbit = () => {
|
||||
const listDb = tableList.value.filter(item => item.czzt != '01' && item.czzt != '04')
|
||||
if (listDb.length == 0) {
|
||||
proxy.$confirm("确定要上报", "警告", { type: "warning" }).then(() => {
|
||||
const lczt = qxkz.deptLevel == '02' ? '03' : '02';
|
||||
xxcjPlsb({ ids: ids.value, lczt: lczt }).then(res => {
|
||||
proxy.$message({ type: "success", message: "上报成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { });
|
||||
} else {
|
||||
proxy.$message({ message: '请选择正确数据', type: 'warning', showClose: true })
|
||||
}
|
||||
}
|
||||
// 上报区厅
|
||||
const provDepar = () => {
|
||||
const listDb = tableList.value.filter(item => item.czzt != '10').map(item => item.id)
|
||||
if (listDb.length > 0) {
|
||||
proxy.$confirm("确定要上报区厅吗", "提示", { type: "warning" }).then(() => {
|
||||
xxcjReportGat({ ids: listDb }).then(res => {
|
||||
proxy.$message({ type: "success", message: "上报区厅成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { })
|
||||
|
||||
|
||||
|
||||
// proxy.$confirm("确定要上报", "警告", { type: "warning" }).then(() => {
|
||||
// xxcjPlsb({ ids: ids.value, lczt: "10" }).then(res => {
|
||||
// proxy.$message({ type: "success", message: "上报成功" });
|
||||
// getList();
|
||||
// })
|
||||
// }).catch(() => { });
|
||||
} else {
|
||||
proxy.$message({ message: '请选择正确数据', type: 'warning', showClose: true })
|
||||
}
|
||||
}
|
||||
// 按钮状态控制已迁移至 useInfoCollectionPermission
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.endTime ? val.endTime[1] : '',
|
||||
bqdmList: val.bqdmList ? val.bqdmList.join(',') : ""
|
||||
}
|
||||
queryFrom.value = { ...promes }
|
||||
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 };
|
||||
xxcjSelectXxsbPage(data).then(res => {
|
||||
pageData.tableData = (res.records || []).map(item => {
|
||||
item.glbqList = item.glbqList || [];
|
||||
return item;
|
||||
});
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => { pageData.tableConfiger.loading = false; })
|
||||
}
|
||||
// 删除
|
||||
const delDictItem = (id) => {
|
||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||
xxcjDeletes({ ids: Array.isArray(id) ? id : [id] }).then((res) => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
})
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 详情
|
||||
const addEdit = (type, row) => {
|
||||
isShow.value = true;
|
||||
setTimeout(() => {
|
||||
detailDiloag.value.init(type, row);
|
||||
}, 500)
|
||||
};
|
||||
const openXxqk = (row) => {
|
||||
if (row.column.property == 'qbmc' || row.column.property == 'xsBh') {
|
||||
isShow.value = true;
|
||||
setTimeout(() => {
|
||||
detailDiloag.value.init('info', row.row);
|
||||
}, 500)
|
||||
}
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 转线索
|
||||
const FollowUpOnLeads = (row) => {
|
||||
if (!qxkz.depBool) return proxy.$message({ message: '权限不足', type: 'warning', showClose: true, })
|
||||
proxy.$confirm("确定要转线索吗?", "警告", { type: "warning" }).then(() => {
|
||||
xxcjXxzsx({ ids: Array.isArray(row) ? row.join(',') : row.id }).then(res => {
|
||||
proxy.$message({ type: "success", message: "转线索成功" });
|
||||
getList();
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const openFkDialogszl = (row) => {
|
||||
if (!qxkz.depBool) {
|
||||
proxy.$message({
|
||||
message: '权限不足',
|
||||
type: 'warning',
|
||||
showClose: true,
|
||||
})
|
||||
return
|
||||
} else {
|
||||
fszlShow.value = true
|
||||
dataList.value = row
|
||||
}
|
||||
|
||||
}
|
||||
// 权限相关函数已迁移至 useInfoCollectionPermission
|
||||
const handleTransferMerchant = (row) => {
|
||||
currRow.value = row
|
||||
isShowTransferMerchantTc.value = true
|
||||
}
|
||||
// 送审
|
||||
const postXxcjXxcjTjsh = (row) => {
|
||||
proxy.$confirm("确定要送审吗", "提示", { type: "warning" }).then(() => {
|
||||
xxcjXxcjTjsh({ xxid: row.id }).then(res => {
|
||||
proxy.$message({ type: "success", message: "送审成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { })
|
||||
}
|
||||
|
||||
// 上报区厅
|
||||
const handleSbqt = (row) => {
|
||||
proxy.$confirm("确定要上报区厅吗", "提示", { type: "warning" }).then(() => {
|
||||
xxcjReportGat({ ids: [row.id] }).then(res => {
|
||||
proxy.$message({ type: "success", message: "上报区厅成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { })
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 初始化权限
|
||||
permission.initPermission()
|
||||
|
||||
titleData.value = route.meta.title
|
||||
tabHeightFn()
|
||||
if (route.query.id) {
|
||||
detailDiloag.value.init('edit', { id: route.query.id });
|
||||
}
|
||||
getList()
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.label-pop {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: '*';
|
||||
top: 0;
|
||||
left: -7px;
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
:v-deep .el-dialog {
|
||||
width: 90% !important;
|
||||
}
|
||||
|
||||
.zdy-model-dialogs {
|
||||
/* background-color: rgb(50, 148, 214); */
|
||||
background: url("~@/assets/images/bg46.png") no-repeat center center;
|
||||
background-size: 100% 100%;
|
||||
padding: 8px 10px;
|
||||
box-sizing: border-box;
|
||||
pointer-events: auto !important;
|
||||
height: calc(100% - 50px);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.vertical-middle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
@ -15,15 +15,14 @@
|
||||
</el-icon>
|
||||
<span class="vertical-middle">导出</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="handleSumbit(ids)" v-if="qxkz.deptLevel != '01'"
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="handleSumbit(ids)" v-if="!isCityLevel"
|
||||
size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span class="vertical-middle">上报</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="provDepar(ids)" v-if="qxkz.deptLevel == '01'"
|
||||
size="small">
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="provDepar(ids)" v-if="isCityLevel" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
@ -50,8 +49,8 @@
|
||||
<template #qblx="{ row }">
|
||||
<DictTag :tag="false" :value="row.qblx" :options="D_GS_XS_LX" />
|
||||
</template>
|
||||
<template #qbly="{ row }">
|
||||
<DictTag :tag="false" :value="row.qbly" :options="D_BZ_CJLX" />
|
||||
<template #qbjb="{ row }">
|
||||
<DictTag :tag="false" :value="row.qbjb" :options="D_BZ_BQJB" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.czzt" :options="D_BZ_QBCZZT" />
|
||||
@ -65,60 +64,40 @@
|
||||
</div>
|
||||
</template>
|
||||
<template #cyqk="{ row }">
|
||||
<el-link v-if="isShowBtn('采纳')" size="small" type="danger" @click="cnMsg(row)"
|
||||
:disabled="butcontroll('04', row.lczt)">采纳</el-link>
|
||||
<!-- 只有上报状态才能回退 -->
|
||||
<el-link v-if="isShowBtn('回退')" size="small" type="danger" @click="rollbackNewspapers(row)"
|
||||
:disabled="butcontroll('04', row.lczt)">回退</el-link>
|
||||
<template v-if="isCityLevel">
|
||||
<el-link v-if="row.clhtzt == '0' || row.clhtzt == '1'" size="small" type="danger" @click="cnMsg(row)"
|
||||
:disabled="row.clhtzt == '1'">{{ row.clhtzt == '1' ? "已采纳" : "采纳" }}</el-link>
|
||||
<el-link v-if="row.clhtzt == '0' || row.clhtzt == '2'" size="small" type="danger"
|
||||
@click="rollbackNewspapers(row)" :disabled="row.clhtzt == '2'">{{ row.clhtzt == '2' ? "已回退" : "回退"
|
||||
}}</el-link>
|
||||
</template>
|
||||
</template>
|
||||
<!-- 所有按钮采纳前不能操作,回退后也不能操作 -->
|
||||
<!-- 操作 -->
|
||||
<!-- "市情指挥人员": ["采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门", "送审"], -->
|
||||
<!-- "县情指人员": ["上报", "回退", "修改", "详情", "送审"], -->
|
||||
<template #controls="{ row }">
|
||||
<el-link @click="handleSbqt(row)" size="small" type="primary" v-if="qxkz.deptLevel == '01'"
|
||||
:disabled="row.lczt == '10'">上报区厅</el-link>
|
||||
<el-link v-if="isShowBtn('送审', row) && qxkz.deptLevel == '01' && row.lczt == '04'"
|
||||
:disabled="!(row.lczt == '04') || row.sldshzt != '00'" size="small" type="primary"
|
||||
@click="postXxcjXxcjTjsh(row)">送审</el-link>
|
||||
<el-link @click="handleSbqt(row)" size="small" type="primary" v-if="isShiQzRole && row.sfsbqt == '0'"
|
||||
:disabled="row.sfsbqt != '0'">上报区厅</el-link>
|
||||
<el-link v-if="canShowBtn('送审', row) && isCityLevel && row.lczt == '04'" :disabled="row.sldshzt != '00'"
|
||||
size="small" type="primary" @click="postXxcjXxcjTjsh(row)">送审</el-link>
|
||||
|
||||
<!-- <el-link
|
||||
v-if="isShowBtn('送审', row) && qxkz.deptLevel == '02'"
|
||||
:disabled="row.xldshzt != '00' "
|
||||
size="small" type="primary"
|
||||
@click="postXxcjXxcjTjsh(row)">
|
||||
送审
|
||||
</el-link> -->
|
||||
<el-link v-if="canShowBtn('上报') && !isCityLevel" size="small" type="primary" @click="appearNewspapers(row)"
|
||||
:disabled="!canReport(row)">上报</el-link>
|
||||
|
||||
<!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
||||
<el-link v-if="isShowBtn('上报') && qxkz.deptLevel == '03'" size="small" type="primary"
|
||||
@click="appearNewspapers(row)" :disabled="row.lczt != '01'">上报</el-link>
|
||||
<el-link v-else-if="isShowBtn('上报')" size="small" type="primary" @click="appearNewspapers(row)"
|
||||
:disabled="!(row.lczt == '02')">上报</el-link>
|
||||
<!-- && row.lczt != '02' -->
|
||||
<el-link v-if="isShowBtn('分组') && (row.lczt == '04' || row.lczt == '08' || row.lczt == '10')" size="small"
|
||||
type="primary" @click="opneMsg(row)">分组</el-link>
|
||||
<!-- 只有领导有肯定 -->
|
||||
<!-- <el-link v-if="isShowBtn('肯定')" size="small" type="primary" @click="affirm(row)">肯定</el-link> -->
|
||||
<el-link v-if="isShowBtn('删除')" size="small" type="primary" @clic.stopk="delDictItem(row.id)">删除</el-link>
|
||||
<el-link v-if="isShowBtn('修改', row)" size="small" type="primary" @click="addEdit('edit', row)">修改</el-link>
|
||||
<el-link v-if="isShowBtn('续报', row) && row.lczt == '04'" size="small" type="primary"
|
||||
<el-link v-if="canShowBtn('分组') && canGroup(row)" size="small" type="primary"
|
||||
@click="opneMsg(row)">分组</el-link>
|
||||
|
||||
<el-link v-if="canShowBtn('删除')" size="small" type="primary" @click.stop="delDictItem(row.id)">删除</el-link>
|
||||
<el-link v-if="canShowBtn('修改', row)" size="small" type="primary" @click="addEdit('edit', row)">修改</el-link>
|
||||
<el-link v-if="canShowBtn('续报', row) && canFollowUpReport(row)" size="small" type="primary"
|
||||
@click="addEdit('followUpReport', row)">续报</el-link>
|
||||
|
||||
<el-link v-if="isShowBtn('详情')" size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
<!-- 所有状态都能进行转线索 -->
|
||||
<el-link v-if="isShowBtn('转线索') && (row.lczt == '04' || row.lczt == '06')" size="small" type="primary"
|
||||
@click="FollowUpOnLeads(row)" :disabled="row.lczt == '08'">转线索</el-link>
|
||||
<!-- 所有状态都能进行转合成 -->
|
||||
<!-- <el-link v-if="isShowBtn('转合成')" size="small" type="primary" @click="openFkDialogszl(row)" :disabled="butcontroll('01', row.lczt)">转合成</el-link> -->
|
||||
<!-- 所有状态都能进行转会商 -->
|
||||
<!-- <el-link v-if="isShowBtn('转会商')" size="small" type="primary" @click="handleTransferMerchant(row)" :disabled="butcontroll('01', row.lczt)">转会商</el-link> -->
|
||||
<el-link v-if="canShowBtn('详情')" size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
|
||||
<el-link v-if="isShowBtn('关注部门') && row.qbjb == '01' && row.lczt == '04'" :disabled="row.sldshzt != '02'"
|
||||
size="small" type="primary" @click="FollowUpOnDept(row)">定向关注</el-link>
|
||||
<!-- 市局能给所有数据创建标签 -->
|
||||
<el-link v-if="isShowBtn('打标签') && (row.lczt == '04' || row.lczt == '06' || row.lczt == '08')" size="small"
|
||||
type="primary" @click="openCustomTag(row)" :disabled="row.sldshzt != '02'">打标签</el-link>
|
||||
<el-link v-if="isShiQzRole && row.sfzxs == '0'" size="small" type="primary" @click="FollowUpOnLeads(row)"
|
||||
:disabled="row.sfzxs != '0'">转线索</el-link>
|
||||
|
||||
<el-link v-if="isShiQzRole" size="small" type="primary" @click="FollowUpOnDept(row)">@</el-link>
|
||||
|
||||
<el-link v-if="canShowBtn('打标签') && canTag(row)" size="small" type="primary"
|
||||
@click="openCustomTag(row)">打标签</el-link>
|
||||
<el-link size="small" type="primary" @click="handleAttention(row)">{{ row.sfgz == '1'
|
||||
? '取消关注' : '关注' }}</el-link>
|
||||
</template>
|
||||
@ -166,23 +145,23 @@ import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import MakeTag from '../components/maketag.vue'
|
||||
import ExportFile from './components/exportFile.vue'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import Fszl from '@/views/backOfficeSystem/HumanIntelligence/components/fszl.vue'
|
||||
import CustomTag from '../components/customTag.vue'
|
||||
import Configuration from '../components/configuration.vue'
|
||||
import transferMerchant from "./components/transferMerchant.vue";
|
||||
import { Edit } from "@element-plus/icons";
|
||||
import { useInfoCollectionPermission } from './useInfoCollectionPermission.js'
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF, D_GS_XS_LY, D_BZ_SSSHZT, D_GS_XS_LX, D_BZ_BQJB, D_BZ_QBCZZT, D_BZ_CJLX, D_BZ_LCZT, D_XXCJ_BQLX } = proxy.$dict("D_BZ_SF", "D_GS_XS_LY", 'D_BZ_SSSHZT', "D_GS_XS_LX", "D_BZ_QBCZZT", "D_BZ_CJLX", "D_BZ_BQJB", "D_BZ_LCZT", "D_XXCJ_BQLX"); //获取字典数据
|
||||
const { D_BZ_SF, D_GS_XS_LY, /* D_BZ_SSSHZT, */ D_GS_XS_LX, D_BZ_BQJB, D_BZ_QBCZZT, D_BZ_CJLX, D_BZ_LCZT, D_XXCJ_BQLX } = proxy.$dict("D_BZ_SF", "D_GS_XS_LY" /*, 'D_BZ_SSSHZT' */, "D_GS_XS_LX", "D_BZ_QBCZZT", "D_BZ_CJLX", "D_BZ_BQJB", "D_BZ_LCZT", "D_XXCJ_BQLX"); //获取字典数据
|
||||
const route = useRoute()
|
||||
const titleData = ref()
|
||||
const exportFileModel = ref(false)
|
||||
const qxkz = reactive({
|
||||
deptBizType: '',
|
||||
deptLevel: '',
|
||||
roleCode: false,
|
||||
depBool: false
|
||||
});
|
||||
|
||||
// 使用权限管理模块
|
||||
const permission = useInfoCollectionPermission()
|
||||
const { state: qxkz, isCityLevel, isShiQzRole, canShowBtn, butcontroll, canReport, canTag, canFollowDept, canTransferClue, canGroup, canFollowUpReport, isPostAdopt } = permission
|
||||
|
||||
const fszlShow = ref(false)// 发送指令
|
||||
const detailDiloag = ref();
|
||||
const inforReportShow = ref(false) //情报信息报告
|
||||
@ -225,7 +204,7 @@ const pageData = reactive({
|
||||
{ label: "情报上报时间", prop: "sxsbsj" },
|
||||
{ label: "情报编号", prop: "xsBh" },
|
||||
{ label: "情报标题", prop: "qbmc" },
|
||||
{ label: "情报来源", prop: "qbly", showSolt: true },
|
||||
{ label: "分组状态", prop: "qbjb", showSolt: true },
|
||||
{ label: "上报人", prop: "xssbr" },
|
||||
{ label: "上报单位", prop: "ssbm" },
|
||||
{ label: "流程状态", prop: "lczt", showSolt: true },
|
||||
@ -423,22 +402,7 @@ const provDepar = () => {
|
||||
proxy.$message({ message: '请选择正确数据', type: 'warning', showClose: true })
|
||||
}
|
||||
}
|
||||
// <!-- [04、06、07、08、09] -->打标签
|
||||
// <!-- [03、05] -->采纳
|
||||
// <!-- [04] -->回退
|
||||
// <!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
||||
const butcontroll = (val, zt) => {
|
||||
switch (val) {
|
||||
case '01':
|
||||
return !(['04', '06', '07', '08', '09'].includes(zt))
|
||||
case '02':
|
||||
return !(['03', '05'].includes(zt))
|
||||
case '03':
|
||||
return !(['02', '03', '04'].includes(zt))
|
||||
case '04':
|
||||
return (['04', '05', '06', '07', '08', '09'].includes(zt))
|
||||
}
|
||||
}
|
||||
// 按钮状态控制已迁移至 useInfoCollectionPermission
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
@ -446,7 +410,7 @@ const onSearch = (val) => {
|
||||
...pageData.pageConfiger,
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.endTime ? val.endTime[1] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : '',
|
||||
bqdmList: val.bqdmList ? val.bqdmList.join(',') : ""
|
||||
}
|
||||
queryFrom.value = { ...promes }
|
||||
@ -535,42 +499,7 @@ const openFkDialogszl = (row) => {
|
||||
}
|
||||
|
||||
}
|
||||
/** 获取当前角色 */
|
||||
function getRole() {
|
||||
const { deptBizType, deptLevel } = getItem('deptId')[0]
|
||||
/** 是否是市情指领导 */
|
||||
const isShiQzLeader = getItem('roleList').find(item => item.roleCode == 'JS_666666') != undefined
|
||||
if (isShiQzLeader) return '市情指领导'
|
||||
/** 是否是市情指人员 */
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) return '市情指挥人员'
|
||||
/** 是否是县情指人员 */
|
||||
const isXianQz = getItem('roleList').find(item => item.roleCode == 'JS_888888') != undefined
|
||||
if (isXianQz) return '县情指人员'
|
||||
return '部门'
|
||||
}
|
||||
/** 是否展示按钮 */
|
||||
const isShowBtn = (btnName, row = {}) => {
|
||||
/** @type {String} 流程状态(01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 08 转线索) */
|
||||
const lczt = row.lczt
|
||||
/** 按钮权限 */
|
||||
const buttonPermissions = {
|
||||
"市情指领导": ["肯定", "采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门"],
|
||||
"市情指挥人员": ["采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门", "送审"],
|
||||
"县情指人员": ["上报", "回退", "修改", "详情", "送审"],
|
||||
"部门": ["上报", "新增", "修改", "续报", "详情"]
|
||||
};
|
||||
|
||||
const role = getRole(); // 角色
|
||||
const isHadAuth = buttonPermissions[role]?.includes(btnName) // 当前角色所有会显示的按钮
|
||||
if (!isHadAuth) return false
|
||||
// 拦截部分逻辑
|
||||
if (role === '部门') {
|
||||
if (btnName === '续报') return lczt != '01'
|
||||
if (btnName === '修改') return lczt == '01'
|
||||
}
|
||||
return true
|
||||
}
|
||||
// 权限相关函数已迁移至 useInfoCollectionPermission
|
||||
const handleTransferMerchant = (row) => {
|
||||
currRow.value = row
|
||||
isShowTransferMerchantTc.value = true
|
||||
@ -596,18 +525,8 @@ const handleSbqt = (row) => {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
const { deptBizType, deptLevel } = getItem('deptId')[0]
|
||||
const Jb = deptLevel[0] == '2' ? '01' : deptLevel[0] == '3' ? '02' : '03'
|
||||
qxkz.roleCode = getItem('roleList').find(item => item.roleCode == 'JS_666666') != undefined
|
||||
qxkz.deptBizType = deptBizType
|
||||
qxkz.deptLevel = Jb
|
||||
if (deptBizType == '23' && Jb == '01') {
|
||||
qxkz.depBool = true
|
||||
} else {
|
||||
qxkz.depBool = false
|
||||
}
|
||||
|
||||
console.log(qxkz, '=======qxkz');
|
||||
// 初始化权限
|
||||
permission.initPermission()
|
||||
|
||||
titleData.value = route.meta.title
|
||||
tabHeightFn()
|
||||
|
||||
@ -0,0 +1,261 @@
|
||||
import { reactive, computed } from 'vue'
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
|
||||
/** 流程状态常量 */
|
||||
export const FlowStatus = {
|
||||
SUBMIT: '01', // 提交
|
||||
REPORT_COUNTY: '02', // 上报县局
|
||||
REPORT_CITY: '03', // 上报市局
|
||||
ADOPT: '04', // 采纳
|
||||
ROLLBACK: '05', // 退回
|
||||
TAG: '06', // 打标签
|
||||
TRANSFER_SYNTHESIS: '07', // 转合成
|
||||
TRANSFER_CLUE: '08', // 转线索
|
||||
TRANSFER_MERCHANT: '09', // 转会商
|
||||
REPORT_PROVINCE: '10' // 上报区厅
|
||||
}
|
||||
|
||||
/** 按钮权限配置 */
|
||||
const BUTTON_PERMISSIONS = {
|
||||
'市情指领导': ['肯定', '采纳', '回退', '分组', '转线索', '转合成', '转会商', '打标签', '修改', '详情', '关注部门'],
|
||||
'市情指挥人员': ['采纳', '回退', '分组', '转线索', '转合成', '转会商', '打标签', '修改', '详情', '关注部门', '送审'],
|
||||
'县情指人员': ['上报', '回退', '修改', '详情', '送审'],
|
||||
'部门': ['上报', '新增', '修改', '续报', '详情']
|
||||
}
|
||||
|
||||
/** 部门级别映射 */
|
||||
const DEPT_LEVEL_MAP = {
|
||||
'2': '01', // 市局
|
||||
'3': '02', // 县局
|
||||
}
|
||||
|
||||
/** 角色代码映射 */
|
||||
const ROLE_CODE_MAP = {
|
||||
'JS_666666': '市情指领导',
|
||||
'JS_777777': '市情指挥人员',
|
||||
'JS_888888': '县情指人员',
|
||||
}
|
||||
|
||||
/** 采纳后的状态(排除回退05) */
|
||||
const POST_ADOPT_STATUS = [FlowStatus.ADOPT, FlowStatus.TAG, FlowStatus.TRANSFER_SYNTHESIS, FlowStatus.TRANSFER_CLUE, FlowStatus.TRANSFER_MERCHANT, FlowStatus.REPORT_PROVINCE]
|
||||
|
||||
/** 按钮可操作的状态配置 */
|
||||
const BTN_STATUS_RULES = {
|
||||
// 转合成/转会商 - 需要已采纳
|
||||
synthesis: [FlowStatus.ADOPT, FlowStatus.TAG, FlowStatus.TRANSFER_SYNTHESIS, FlowStatus.TRANSFER_CLUE, FlowStatus.TRANSFER_MERCHANT],
|
||||
// 采纳 - 需要上报状态
|
||||
adopt: [FlowStatus.REPORT_CITY, FlowStatus.ROLLBACK],
|
||||
// 回退 - 需要上报状态
|
||||
rollback: [FlowStatus.ADOPT, FlowStatus.ROLLBACK, FlowStatus.TAG, FlowStatus.TRANSFER_SYNTHESIS, FlowStatus.TRANSFER_CLUE, FlowStatus.TRANSFER_MERCHANT],
|
||||
// 分组 - 需要已采纳或已转
|
||||
group: [FlowStatus.ADOPT, FlowStatus.TRANSFER_CLUE, FlowStatus.REPORT_PROVINCE],
|
||||
}
|
||||
|
||||
/**
|
||||
* 情报信息采集权限管理 Composable
|
||||
*/
|
||||
export function useInfoCollectionPermission() {
|
||||
/** 权限状态 */
|
||||
const state = reactive({
|
||||
deptBizType: '',
|
||||
deptLevel: '',
|
||||
roleCode: false,
|
||||
depBool: false
|
||||
})
|
||||
|
||||
/** 当前角色 */
|
||||
const currentRole = computed(() => getRole())
|
||||
|
||||
/** 是否为市局 */
|
||||
const isCityLevel = computed(() => state.deptLevel === '01')
|
||||
|
||||
/** 是否为县局 */
|
||||
const isCountyLevel = computed(() => state.deptLevel === '02')
|
||||
|
||||
/** 是否有市情指操作权限(JS_666666 或 JS_777777) */
|
||||
const isShiQzRole = computed(() => {
|
||||
const roleList = getItem('roleList') || []
|
||||
return roleList.some(item => item.roleCode === 'JS_666666' || item.roleCode === 'JS_777777')
|
||||
})
|
||||
|
||||
/** 获取当前角色 */
|
||||
function getRole() {
|
||||
const roleList = getItem('roleList') || []
|
||||
|
||||
for (const role of roleList) {
|
||||
if (ROLE_CODE_MAP[role.roleCode]) {
|
||||
return ROLE_CODE_MAP[role.roleCode]
|
||||
}
|
||||
}
|
||||
return '部门'
|
||||
}
|
||||
|
||||
/** 初始化权限 */
|
||||
function initPermission() {
|
||||
const deptInfo = getItem('deptId')?.[0]
|
||||
if (!deptInfo) return
|
||||
|
||||
const { deptBizType, deptLevel } = deptInfo
|
||||
const levelCode = deptLevel?.[0]
|
||||
|
||||
// 计算部门级别
|
||||
state.deptLevel = DEPT_LEVEL_MAP[levelCode] || levelCode
|
||||
state.deptBizType = deptBizType
|
||||
|
||||
// 是否为市情指领导
|
||||
state.roleCode = getItem('roleList')?.some(item => item.roleCode === 'JS_666666') ?? false
|
||||
|
||||
// 是否有市情指操作权限
|
||||
state.depBool = deptBizType === '23' && state.deptLevel === '01'
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断按钮是否显示
|
||||
* @param {string} btnName 按钮名称
|
||||
* @param {object} row 行数据(可选)
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canShowBtn(btnName, row = {}) {
|
||||
const role = currentRole.value
|
||||
const permissions = BUTTON_PERMISSIONS[role] || []
|
||||
|
||||
if (!permissions.includes(btnName)) return false
|
||||
|
||||
// 部门角色特殊逻辑
|
||||
if (role === '部门') {
|
||||
const lczt = row?.lczt
|
||||
if (btnName === '续报') return lczt !== FlowStatus.SUBMIT
|
||||
if (btnName === '修改') return lczt === FlowStatus.SUBMIT
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断按钮是否禁用
|
||||
* @param {string} btnType 按钮类型
|
||||
* @param {string} lczt 流程状态
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isBtnDisabled(btnType, lczt) {
|
||||
const allowedStatus = BTN_STATUS_RULES[btnType]
|
||||
return !allowedStatus?.includes(lczt)
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断单个按钮是否禁用(兼容旧逻辑)
|
||||
* @param {string} val 类型代码
|
||||
* @param {string} zt 流程状态
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function butcontroll(val, zt) {
|
||||
switch (val) {
|
||||
case '01': // 转合成/转会商
|
||||
return !BTN_STATUS_RULES.synthesis.includes(zt)
|
||||
case '02': // 采纳
|
||||
return !BTN_STATUS_RULES.adopt.includes(zt)
|
||||
case '03': // 提交
|
||||
return ![FlowStatus.REPORT_COUNTY, FlowStatus.REPORT_CITY, FlowStatus.ADOPT].includes(zt)
|
||||
case '04': // 采纳 - 只有01,02,03状态才不禁用
|
||||
return !['01', '02', '03'].includes(zt)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断送审按钮状态
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canSubmitAudit(row) {
|
||||
return isCityLevel.value && row.lczt === FlowStatus.ADOPT && row.sldshzt === '00'
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断上报按钮状态
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canReport(row) {
|
||||
if (isCityLevel.value) {
|
||||
return row.lczt === FlowStatus.SUBMIT
|
||||
}
|
||||
return row.lczt === FlowStatus.REPORT_COUNTY
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为采纳后状态(排除回退)
|
||||
* @param {string} lczt 流程状态
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isPostAdopt(lczt) {
|
||||
return POST_ADOPT_STATUS.includes(lczt)
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断打标签按钮状态
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canTag(row) {
|
||||
return isPostAdopt(row.lczt) && isCityLevel.value
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断关注部门按钮状态
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canFollowDept(row) {
|
||||
return row.qbjb === '01' && isPostAdopt(row.lczt)
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断转线索按钮状态 - 采纳后可转,转过则不再显示
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canTransferClue(row) {
|
||||
// 只允许从采纳状态直接转线索,转过则不再显示
|
||||
return row.lczt === FlowStatus.ADOPT
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断分组按钮状态
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canGroup(row) {
|
||||
return isPostAdopt(row.lczt)
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断续报按钮状态
|
||||
* @param {object} row 行数据
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canFollowUpReport(row) {
|
||||
return row.lczt === FlowStatus.ADOPT
|
||||
}
|
||||
|
||||
return {
|
||||
state,
|
||||
currentRole,
|
||||
isCityLevel,
|
||||
isCountyLevel,
|
||||
isShiQzRole,
|
||||
initPermission,
|
||||
canShowBtn,
|
||||
isBtnDisabled,
|
||||
butcontroll,
|
||||
canSubmitAudit,
|
||||
canReport,
|
||||
canTag,
|
||||
canFollowDept,
|
||||
canTransferClue,
|
||||
canGroup,
|
||||
canFollowUpReport,
|
||||
isPostAdopt,
|
||||
}
|
||||
}
|
||||
@ -94,8 +94,9 @@ const formData = ref([
|
||||
{ label: "线索地点", prop: "zxdz", type: "input" },
|
||||
{ label: "所属专题", prop: "sszt", type: "select", options: props.dic.D_BZ_SSZT },
|
||||
{ prop: "gapline", type: "slot", width: '100%' },
|
||||
{ prop: "scfj", type: "slot", width: '100%' },
|
||||
{ label: "线索内容", prop: "qbnr", type: "textarea", width: '100%' },
|
||||
{ prop: "scfj", type: "slot", width: '100%' },
|
||||
|
||||
]);
|
||||
const fjdz = ref()
|
||||
const listQuery = ref({}); //表单
|
||||
|
||||
@ -49,7 +49,7 @@
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<AddForm ref="detailDiloag" @change="getList" v-if="isShow"
|
||||
:dic="{ D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX }" />
|
||||
:dic="{ /* D_BZ_SF, */ D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX /*, D_GS_XS_QTLX */ }" />
|
||||
</div>
|
||||
<SubmissionProcess v-model="showSp" :data="rowData"
|
||||
:userData="{ ajmc: '线索数据采集审批', flowType: 'XSSJCJSP', modelName: '线索' }" :path="fixedValue" @getList="getList" />
|
||||
@ -70,7 +70,7 @@ import { useRoute } from 'vue-router'
|
||||
const router = useRouter();
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_XS_XSCZZT, D_GS_XS_LY, D_BZ_SSZT, D_BZ_SF, D_GS_XS_LX, D_GS_XS_QTLX, D_BZ_XB, D_BZ_XSSHZT } = proxy.$dict("D_GS_XS_XSCZZT", "D_GS_XS_LY", "D_BZ_SSZT", "D_BZ_SF", "D_GS_XS_LX", "D_GS_XS_QTLX", "D_BZ_XB", "D_BZ_XSSHZT"); //获取字典数据
|
||||
const { D_GS_XS_XSCZZT, D_GS_XS_LY, D_BZ_SSZT, /* D_BZ_SF, */ D_GS_XS_LX, /* D_GS_XS_QTLX, */ D_BZ_XB, D_BZ_XSSHZT } = proxy.$dict("D_GS_XS_XSCZZT", "D_GS_XS_LY", "D_BZ_SSZT" /*, "D_BZ_SF" */, "D_GS_XS_LX" /*, "D_GS_XS_QTLX" */, "D_BZ_XB", "D_BZ_XSSHZT"); //获取字典数据
|
||||
const detailDiloag = ref(null);
|
||||
const searchBox = ref(); //搜索框
|
||||
const isShow = ref(false)
|
||||
|
||||
@ -1,28 +1,22 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" >
|
||||
<el-button type="primary" @click="dologCancel()" size="small">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
</el-button>
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
|
||||
<el-button type="primary" @click="dologCancel()" size="small">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
</el-button>
|
||||
</Search>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="margTop">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData"
|
||||
>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
<template #qblx="{ row }">
|
||||
<DictTag :tag="false" :value="row.qblx" :options="D_GS_XS_LX" />
|
||||
</template>
|
||||
@ -40,11 +34,12 @@
|
||||
<!-- <el-link size="small" type="primary" @click="FollowUpOnLeads(row)">转线索</el-link>
|
||||
<el-link size="small" type="primary" @click="openFszl(row)">转合成</el-link> -->
|
||||
<el-link size="small" type="primary" @click="openCheckProcess(row)">补充信息</el-link>
|
||||
<!-- <el-link size="small" type="primary" @click="openCheckProcessXb(row)"> 续报</el-link> -->
|
||||
<!-- <el-link size="small" type="primary" @click="openCheckProcessXb(row)"> 续报</el-link> -->
|
||||
<el-link size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
<el-link size="small" type="primary" @click="handleCase(row)">
|
||||
<span :style="{'color': row.sfgz == '0' ? 'rgb(242,7,7)' : '#dede17'}">{{ row.sfgz == '0' ? '关注' : '取消关注' }}</span>
|
||||
</el-link>
|
||||
<span :style="{ 'color': row.sfgz == '0' ? 'rgb(242,7,7)' : '#dede17' }">{{ row.sfgz == '0' ? '关注' : '取消关注'
|
||||
}}</span>
|
||||
</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -72,8 +67,8 @@
|
||||
<MakeTag v-model="chooseRow" :dataList="dataList" :dict="{ D_BZ_CJLX, D_BZ_QBCZZT, D_GS_XS_LX, D_BZ_BQJB }"
|
||||
@getList="getList" />
|
||||
<pursueContent v-model="pursueShow" :dataList="dataList" :title="processtitle" />
|
||||
<Fszl v-model="fszlShow" :itemData="dataList" path="/mosty-gsxt/qbcjZhc/sendFqzl" />
|
||||
<!-- <SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
<Fszl v-model="fszlShow" :itemData="dataList" path="/mosty-gsxt/qbcjZhc/sendFqzl" />
|
||||
<!-- <SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" /> -->
|
||||
</template>
|
||||
|
||||
@ -90,7 +85,7 @@ import ExportFile from '@/views/backOfficeSystem/HumanIntelligence/infoCollectio
|
||||
import pursueContent from "../components/pursueContent.vue";
|
||||
import Fszl from '../components/fszl.vue'
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import {xxcjSelectPage,xxcjXxzsx} from '@/api/xxcj.js'
|
||||
import { xxcjSelectPage, xxcjXxzsx } from '@/api/xxcj.js'
|
||||
import { color } from "echarts";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {
|
||||
@ -107,7 +102,7 @@ const {
|
||||
D_BZ_CLLX,
|
||||
D_BZ_XZQHDM,
|
||||
D_BZ_QBCZZT,
|
||||
D_BZ_CJLX ,D_BZ_LCZT } =
|
||||
D_BZ_CJLX, D_BZ_LCZT } =
|
||||
proxy.$dict(
|
||||
"D_BZ_BMJB",
|
||||
"D_GS_XS_LY",
|
||||
@ -132,7 +127,7 @@ const tableList = ref([]);
|
||||
const qxkz = reactive({
|
||||
deptBizType: "",
|
||||
deptLevel: "",
|
||||
userName:''
|
||||
userName: ''
|
||||
})
|
||||
const list = ref()
|
||||
const searchConfiger = ref();
|
||||
@ -143,7 +138,7 @@ onMounted(() => {
|
||||
const Jb = deptLevel[0] == '2' ? '01' : deptLevel[0] == '3' ? '02' : '03'
|
||||
qxkz.deptBizType = deptBizType
|
||||
qxkz.deptLevel = Jb
|
||||
qxkz.depBool = deptBizType == '23' && Jb == '01' ? true : false;
|
||||
qxkz.depBool = deptBizType == '23' && Jb == '01' ? true : false;
|
||||
getRouter()
|
||||
tabHeightFn()
|
||||
if (route.query.id) {
|
||||
@ -188,11 +183,16 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 240,
|
||||
tableColumn: [
|
||||
{ label: "情报上报时间", prop: "sxsbsj" },
|
||||
{ label: "情报上报时间", prop: "sxsbsj" },
|
||||
{ label: "情报编号", prop: "xsBh" },
|
||||
{ label: "情报标题", prop: "qbmc" },
|
||||
{ label: "情报来源", prop: "qbly", showSolt: true },
|
||||
{ label: "流程状态", prop: "lczt", showSolt: true },
|
||||
{ label: "上报人", prop: "xssbr" },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
{ label: "分组人", prop: "fzrxm" },
|
||||
{ label: "分组时间", prop: "fzsj" },
|
||||
|
||||
// { label: "情报来源", prop: "qbly", showSolt: true },
|
||||
// { label: "流程状态", prop: "lczt", showSolt: true },
|
||||
// { label: "消息状态", prop: "czzt", showSolt: true },
|
||||
]
|
||||
});
|
||||
@ -254,12 +254,12 @@ const addEdit = (type, row) => {
|
||||
};
|
||||
|
||||
const handleCase = (row) => {
|
||||
let text = row.sfgz == '0' ? '关注' : '取消关注';
|
||||
proxy.$confirm("确定要" + text + "吗?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: row.id,sfgz: row.sfgz == '0' ? '1' : '0' },'/mosty-gsxt/xxcj/cjgz').then(res => {
|
||||
proxy.$message({ type: "success", message: text + "成功" });
|
||||
getList();
|
||||
})
|
||||
let text = row.sfgz == '0' ? '关注' : '取消关注';
|
||||
proxy.$confirm("确定要" + text + "吗?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: row.id, sfgz: row.sfgz == '0' ? '1' : '0' }, '/mosty-gsxt/xxcj/cjgz').then(res => {
|
||||
proxy.$message({ type: "success", message: text + "成功" });
|
||||
getList();
|
||||
})
|
||||
})
|
||||
}
|
||||
// 表格高度计算
|
||||
@ -292,9 +292,9 @@ const openCheckProcess = (item) => {
|
||||
// 续报
|
||||
const openCheckProcessXb = (item) => {
|
||||
if (qxkz.userName == item.xssbr) {
|
||||
processtitle.value = '信息续报'
|
||||
pursueShow.value = true
|
||||
dataList.value = item
|
||||
processtitle.value = '信息续报'
|
||||
pursueShow.value = true
|
||||
dataList.value = item
|
||||
} else {
|
||||
proxy.$message({
|
||||
message: '您不是该情报的上报人,不能续报',
|
||||
@ -314,12 +314,12 @@ const FollowUpOnLeads = (row) => {
|
||||
showClose: true,
|
||||
})
|
||||
} else {
|
||||
proxy.$confirm("确定要转线索吗?", "警告", { type: "warning" }).then(() => {
|
||||
xxcjXxzsx({ ids: Array.isArray(row) ? row.join(',') : row.id }).then(res => {
|
||||
proxy.$message({ type: "success", message: "转线索成功" });
|
||||
getList();
|
||||
proxy.$confirm("确定要转线索吗?", "警告", { type: "warning" }).then(() => {
|
||||
xxcjXxzsx({ ids: Array.isArray(row) ? row.join(',') : row.id }).then(res => {
|
||||
proxy.$message({ type: "success", message: "转线索成功" });
|
||||
getList();
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
@ -332,8 +332,10 @@ const openFszl = (item) => {
|
||||
type: 'warning',
|
||||
showClose: true,
|
||||
})
|
||||
} else { fszlShow.value = true
|
||||
dataList.value = item }
|
||||
} else {
|
||||
fszlShow.value = true
|
||||
dataList.value = item
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -87,7 +87,7 @@ import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF,D_GS_BK_BKYS,D_BZ_XB,D_GS_BK_SJLX,D_GS_BK_DJ, D_GS_BK_DX, D_GS_BK_ZT,D_GS_BK_CZYQ,D_GS_BK_CZJSDWLX,D_GS_BK_TJFS } = proxy.$dict("D_BZ_SF","D_GS_BK_BKYS","D_BZ_XB","D_GS_BK_SJLX","D_GS_BK_DJ","D_GS_BK_DX","D_GS_BK_ZT","D_GS_BK_CZYQ","D_GS_BK_CZJSDWLX","D_GS_BK_TJFS"); //获取字典数据
|
||||
const { D_BZ_SF,D_GS_BK_BKYS,D_BZ_XB,/*D_GS_BK_SJLX,*/D_GS_BK_DJ, D_GS_BK_DX, D_GS_BK_ZT,D_GS_BK_CZYQ,D_GS_BK_CZJSDWLX,D_GS_BK_TJFS } = proxy.$dict("D_BZ_SF","D_GS_BK_BKYS","D_BZ_XB"/*,"D_GS_BK_SJLX"*/,"D_GS_BK_DJ","D_GS_BK_DX","D_GS_BK_ZT","D_GS_BK_CZYQ","D_GS_BK_CZJSDWLX","D_GS_BK_TJFS"); //获取字典数据
|
||||
const searchBox = ref();
|
||||
const chooseRow = ref({})
|
||||
const btns = ref();
|
||||
|
||||
@ -87,7 +87,7 @@ import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF,D_GS_BK_BKYS,D_BZ_XB,D_GS_BK_SJLX,D_GS_BK_DJ, D_GS_BK_DX, D_GS_BK_ZT,D_GS_BK_CZYQ,D_GS_BK_CZJSDWLX,D_GS_BK_TJFS } = proxy.$dict("D_BZ_SF","D_GS_BK_BKYS","D_BZ_XB","D_GS_BK_SJLX","D_GS_BK_DJ","D_GS_BK_DX","D_GS_BK_ZT","D_GS_BK_CZYQ","D_GS_BK_CZJSDWLX","D_GS_BK_TJFS"); //获取字典数据
|
||||
const { D_BZ_SF,D_GS_BK_BKYS,D_BZ_XB,/*D_GS_BK_SJLX,*/D_GS_BK_DJ, D_GS_BK_DX, D_GS_BK_ZT,D_GS_BK_CZYQ,D_GS_BK_CZJSDWLX,D_GS_BK_TJFS } = proxy.$dict("D_BZ_SF","D_GS_BK_BKYS","D_BZ_XB"/*,"D_GS_BK_SJLX"*/,"D_GS_BK_DJ","D_GS_BK_DX","D_GS_BK_ZT","D_GS_BK_CZYQ","D_GS_BK_CZJSDWLX","D_GS_BK_TJFS"); //获取字典数据
|
||||
const searchBox = ref();
|
||||
const chooseRow = ref({})
|
||||
const btns = ref();
|
||||
|
||||
@ -83,7 +83,17 @@
|
||||
import { qcckGet } from "@/api/qcckApi.js";
|
||||
import { defineProps, ref, getCurrentInstance, watch } 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 props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
|
||||
@ -54,7 +54,17 @@
|
||||
import { qcckGet } from "@/api/qcckApi.js";
|
||||
import { defineProps, ref, getCurrentInstance, watch } 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 props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
|
||||
@ -111,7 +111,7 @@ const props = defineProps({
|
||||
})
|
||||
const emits = defineEmits(["update:modelValue", "choosed", "choosedAdd"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_XB, D_GS_ZDR_YJDJ } = proxy.$dict("D_BZ_XB", "D_GS_ZDR_YJDJ"); // 获取字典数据
|
||||
const { D_BZ_XB, /* D_GS_ZDR_YJDJ */ } = proxy.$dict("D_BZ_XB", /* "D_GS_ZDR_YJDJ" */); // 获取字典数据
|
||||
const input = ref('')
|
||||
const value1 = ref('')
|
||||
const value2 = ref('')
|
||||
|
||||
@ -2,77 +2,74 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" >
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch">
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">发起布控</el-button>
|
||||
</Search>
|
||||
</div>
|
||||
|
||||
<!-- 按钮组 -->
|
||||
<!-- 表格 -->
|
||||
<div class="margTop">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth">
|
||||
<!-- 表格 -->
|
||||
<div class="margTop">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
|
||||
<template #bkZt="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
|
||||
</template>
|
||||
<template #bkDj="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_SSYJ" v-if="route.name == 'myControl'" />
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_BZ_JQDJ" v-else />
|
||||
</template>
|
||||
<template #bkDx="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_NEWDX" />
|
||||
</template>
|
||||
<template #bkdxList="{ row }">
|
||||
<span v-if="row.bkdxList"><span class="nowrap" v-for="(it, idx) in row.bkdxList" :key="idx">
|
||||
{{ it.ryXm ? it.ryXm : it.imei ? it.imei : it.imsi ? it.imsi : '' }}
|
||||
<!-- :it.ryXm?it.mac:it.imsi?it.imsi:'xxxx' -->
|
||||
<span v-if="idx < row.bkdxList.length - 1">、</span></span></span>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
<!-- <template #sjrs="{ row }">
|
||||
<template #bkZt="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
|
||||
</template>
|
||||
<template #bkDj="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_SSYJ" v-if="route.name == 'myControl'" />
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_BZ_JQDJ" v-else />
|
||||
</template>
|
||||
<template #bkDx="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_NEWDX" />
|
||||
</template>
|
||||
<template #bkdxList="{ row }">
|
||||
<span v-if="row.bkdxList"><span class="nowrap" v-for="(it, idx) in row.bkdxList" :key="idx">
|
||||
{{ it.ryXm ? it.ryXm : it.imei ? it.imei : it.imsi ? it.imsi : '' }}
|
||||
<!-- :it.ryXm?it.mac:it.imsi?it.imsi:'xxxx' -->
|
||||
<span v-if="idx < row.bkdxList.length - 1">、</span></span></span>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
<!-- <template #sjrs="{ row }">
|
||||
<span v-if="row.bkdxList"> {{ row.bkdxList.length }} </span>
|
||||
<span v-else>0</span>
|
||||
</template> -->
|
||||
<!-- <template #qyList="{ row }">
|
||||
<!-- <template #qyList="{ row }">
|
||||
<span v-for="(it,idx) in row.qyList" :key="idx"> {{ it.qymc }} <span v-if="idx < row.qyList.length-1">、</span></span>
|
||||
</template> -->
|
||||
<!-- <template #yjcs="{row}">
|
||||
<!-- <template #yjcs="{row}">
|
||||
<span @click="openWarning(row)" style="color: #00ffff;" class="mr5 pointer">{{ row.yjcs || 0}}</span>次
|
||||
</template> -->
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<template v-if="!row.gzlid">
|
||||
<!-- 工作流的送审 -->
|
||||
<!-- <el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<template v-if="!row.gzlid">
|
||||
<!-- 工作流的送审 -->
|
||||
<!-- <el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||
@click="createProcess(row)">送审</el-link> -->
|
||||
|
||||
<!-- 不走工作流的送审 -->
|
||||
<el-link type="primary" size="small" v-if="['01', '03', '06'].includes(row.bkZt)" @click="hadleSendSH(row)">送审</el-link>
|
||||
|
||||
<el-link type="primary" size="small" @click="tbGsxtBkQuashList(row)" v-if="!!!(['01', '03', '06'].includes(row.bkZt))">撤控</el-link>
|
||||
|
||||
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||
@click="handleAdd('edit', row)">编辑</el-link>
|
||||
<!-- 不走工作流的送审 -->
|
||||
<el-link type="primary" size="small" v-if="['01', '03', '06'].includes(row.bkZt)"
|
||||
@click="hadleSendSH(row)">送审</el-link>
|
||||
|
||||
<el-link type="primary" size="small" @click="tbGsxtBkQuashList(row)"
|
||||
v-if="!!!(['01', '03', '06'].includes(row.bkZt))">撤控</el-link>
|
||||
|
||||
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||
@click="handleAdd('edit', row)">编辑</el-link>
|
||||
|
||||
</template>
|
||||
<!-- 审核通过后才有轨迹 -->
|
||||
<el-link type="primary" size="small" @click="openShowHzd(row)" v-if="row.bkZt == '05'">回执单</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)"
|
||||
v-if="['01', '03', '06'].includes(row.bkZt)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 审核通过后才有轨迹 -->
|
||||
<el-link type="primary" size="small" @click="openShowHzd(row)" v-if="row.bkZt == '05'">回执单</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)"
|
||||
v-if="['01', '03', '06'].includes(row.bkZt)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 布控类型 -->
|
||||
<AddBkdx ref="addBkdxForm" @change="getList" :name="route.name" :dic="{
|
||||
@ -82,19 +79,10 @@
|
||||
<!-- 预警弹窗 -->
|
||||
<YjDialog ref="warningkdxForm"></YjDialog>
|
||||
|
||||
<SubmissionProcess
|
||||
v-model="showSp"
|
||||
:data="rowData"
|
||||
:userData="{ ajmc: '布控审批', flowType: 'BKSP', modelName: '布控' }"
|
||||
:path="fixedValue"
|
||||
@getList="getList"
|
||||
/>
|
||||
<Hzd
|
||||
v-model="hzdVisible"
|
||||
:dataList="dataList"
|
||||
:dict="{D_GS_BK_NEWDX,D_BZ_BKLYS,D_GS_SSYJ,D_BZ_JQDJ,D_GZL_SHZT,D_GS_BK_CZYQ}"
|
||||
:name="route.name"
|
||||
/>
|
||||
<SubmissionProcess v-model="showSp" :data="rowData" :userData="{ ajmc: '布控审批', flowType: 'BKSP', modelName: '布控' }"
|
||||
:path="fixedValue" @getList="getList" />
|
||||
<Hzd v-model="hzdVisible" :dataList="dataList"
|
||||
:dict="{ D_GS_BK_NEWDX, D_BZ_BKLYS, D_GS_SSYJ, D_BZ_JQDJ, D_GZL_SHZT, D_GS_BK_CZYQ }" :name="route.name" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -113,9 +101,9 @@ const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_SJLX, D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_ZDR_YJDJ,
|
||||
D_GS_BK_NEWDX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_BZ_BKLYS,D_GZL_SHZT,
|
||||
D_GS_BK_NEWDX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_BZ_BKLYS, D_GZL_SHZT,
|
||||
D_BZ_JQDJ, D_BZ_SF } = proxy.$dict("D_GS_ZDR_YJDJ", "D_GS_BK_BKYS", "D_BZ_XB", "D_GS_BK_SJLX",
|
||||
"D_GS_SSYJ", "D_GS_BK_NEWDX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS",'D_GZL_SHZT',
|
||||
"D_GS_SSYJ", "D_GS_BK_NEWDX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS", 'D_GZL_SHZT',
|
||||
'BD_BK_CLYJBQ', 'D_BZ_JQDJ', "D_BZ_BKLYS", "D_BZ_SF"); //获取字典数据
|
||||
const addBkdxForm = ref(null); //布控对象组件
|
||||
const warningkdxForm = ref(); //布控对象组件
|
||||
@ -153,6 +141,29 @@ const searchConfiger = ref([
|
||||
placeholder: "请选择布控部门",
|
||||
showType: "department",
|
||||
},
|
||||
{
|
||||
label: "布控对象",
|
||||
prop: "bkBt",
|
||||
placeholder: "请输入身份证号",
|
||||
showType: "input"
|
||||
}, {
|
||||
label: "布控对象身份证号",
|
||||
prop: "bkrsfzh",
|
||||
placeholder: "请输入布控对象身份证号",
|
||||
showType: "input"
|
||||
},
|
||||
{
|
||||
label: "发起人姓名",
|
||||
prop: "bkfqrXm",
|
||||
placeholder: "请输入姓名",
|
||||
showType: "input"
|
||||
},
|
||||
{
|
||||
label: "发起人身份证号",
|
||||
prop: "bkfqrSfzh",
|
||||
placeholder: "请输入身份证号",
|
||||
showType: "input"
|
||||
}
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
@ -197,28 +208,17 @@ const createProcess = (row) => {
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
if(route.name == 'PrivateSurveillance'){
|
||||
if (route.name == 'PrivateSurveillance') {
|
||||
// 临时布控
|
||||
searchConfiger.value = [
|
||||
...searchConfiger.value,
|
||||
{
|
||||
label: "姓名",
|
||||
prop: "bkfqrXm",
|
||||
placeholder: "请输入姓名",
|
||||
showType: "input"
|
||||
},
|
||||
{
|
||||
label: "身份证号",
|
||||
prop: "bkfqrSfzh",
|
||||
placeholder: "请输入身份证号",
|
||||
showType: "input"
|
||||
}
|
||||
...searchConfiger.value,
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// 搜索
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
@ -256,16 +256,16 @@ const getList = () => {
|
||||
});
|
||||
};
|
||||
|
||||
function hadleSendSH (row) {
|
||||
function hadleSendSH(row) {
|
||||
proxy.$confirm("确定要送审吗?", "提示", { type: "warning" }).then(() => {
|
||||
qcckGet({}, '/mosty-gsxt/tbGsxtBk/subExamine/'+row.id).then(res => {
|
||||
qcckGet({}, '/mosty-gsxt/tbGsxtBk/subExamine/' + row.id).then(res => {
|
||||
proxy.$message({ type: "success", message: "送审成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "送审失败" });
|
||||
proxy.$message({ type: "error", message: "送审失败" });
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
const shForm = ref({
|
||||
@ -282,10 +282,10 @@ const shFormRules = {
|
||||
// 提交送审
|
||||
const submitSh = () => {
|
||||
try {
|
||||
shFormRef.value.validate(valida=>{
|
||||
if(!valida) return;
|
||||
const params = {...shForm.value }
|
||||
|
||||
shFormRef.value.validate(valida => {
|
||||
if (!valida) return;
|
||||
const params = { ...shForm.value }
|
||||
|
||||
})
|
||||
} catch (err) {
|
||||
if (err !== false) {
|
||||
@ -309,7 +309,7 @@ const handleRow = (id) => {
|
||||
};
|
||||
// 回执单
|
||||
const hzdVisible = ref(false)
|
||||
const dataList= ref({})
|
||||
const dataList = ref({})
|
||||
const openShowHzd = (row) => {
|
||||
hzdVisible.value = true
|
||||
dataList.value = row
|
||||
|
||||
@ -10,15 +10,30 @@
|
||||
<div class="form_cnt">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
</FormMessage>
|
||||
<div class="report-section">
|
||||
<div class="section-title">报告</div>
|
||||
<MyTable :tableData="reportTableData" :tableColumn="reportTableColumn" :tableConfiger="reportTableConfiger"
|
||||
:tableHeight="'400px'" :controlsWidth="120">
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="viewReport(row)">查看</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 报告详情弹窗 -->
|
||||
<ReportDialog ref="reportDialogRef" v-model="reportDialogVisible" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import ReportDialog from "./components/ReportDialog.vue";
|
||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, watch, computed } from "vue";
|
||||
import { addJudgmentCommandList, editJudgmentCommand, getJudgmentCommandDetail } from "@/api/huiShangyp/judgmentCommand.js"
|
||||
|
||||
|
||||
// import { getItem } from '@//utils/storage.js'
|
||||
import { useRouter } from 'vue-router'
|
||||
const emit = defineEmits(["updateDate", "getList"]);
|
||||
@ -44,6 +59,28 @@ const title = ref("");
|
||||
/** 外面行数据 */
|
||||
const outRow = ref({})
|
||||
|
||||
// 报告表格配置
|
||||
const reportTableData = computed(() => Array.isArray(listQuery.value.xfbmList) ? listQuery.value.xfbmList : []);
|
||||
const reportTableColumn = [
|
||||
{ label: "下发部门", prop: "ssbm" },
|
||||
{ label: "操作人", prop: "xtCjr" },
|
||||
];
|
||||
const reportTableConfiger = {
|
||||
showSelectType: "null",
|
||||
showIndex: false,
|
||||
haveControls: true,
|
||||
controls: "操作",
|
||||
loading: false
|
||||
};
|
||||
|
||||
// 报告详情弹窗
|
||||
const reportDialogVisible = ref(false);
|
||||
const reportDialogRef = ref();
|
||||
|
||||
const viewReport = (row) => {
|
||||
reportDialogRef.value.open(row.ypid);
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
zlbt: [{ required: true, message: "请输入标题", trigger: "blur" }],
|
||||
// zlnr: [{ required: true, message: "请输入内容", trigger: "change" }],
|
||||
@ -79,6 +116,7 @@ const getDataById = (id) => {
|
||||
// const xfbmMc = res.xfbmMc
|
||||
});
|
||||
};
|
||||
// http://localhost:9530/mosty-api/mosty-gsxt/gsxtYpbg/0aeb4f6b814b4b05a49f472dd1234935
|
||||
|
||||
|
||||
// 提交
|
||||
@ -149,4 +187,16 @@ defineExpose({ init });
|
||||
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
|
||||
// z-index: 1000;
|
||||
}
|
||||
|
||||
.report-section {
|
||||
margin-top: 20px;
|
||||
|
||||
.section-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
padding-left: 10px;
|
||||
border-left: 3px solid #409eff;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -13,11 +13,7 @@
|
||||
<!-- 研判报告选择 -->
|
||||
<div class="form-item">
|
||||
<label class="form-label">研判报告:</label>
|
||||
<ReportSelectInput
|
||||
v-model="formData.ypmc"
|
||||
:bglx="formData.bglx"
|
||||
@change="handleReportChange"
|
||||
/>
|
||||
<ReportSelectInput v-model="formData.ypmc" :bglx="formData.bglx" @change="handleReportChange" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
<template>
|
||||
<el-dialog v-model="visible" title="报告详情" width="80%" destroy-on-close @closed="handleClosed">
|
||||
<div v-loading="loading" class="report-content">
|
||||
<div v-if="reportDetail" v-html="reportDetail.bgnr"></div>
|
||||
<el-empty v-else-if="!loading" description="暂无报告内容" />
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">关闭</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js';
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue', 'closed']);
|
||||
|
||||
const visible = computed({
|
||||
get: () => props.modelValue,
|
||||
set: (val) => emit('update:modelValue', val)
|
||||
});
|
||||
|
||||
const reportDetail = ref(null);
|
||||
const loading = ref(false);
|
||||
|
||||
const open = (ypbgid) => {
|
||||
visible.value = true;
|
||||
loading.value = true;
|
||||
reportDetail.value = null;
|
||||
qcckGet({}, '/mosty-gsxt/gsxtYpbg/' + ypbgid).then((res) => {
|
||||
reportDetail.value = res || {};
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const handleClosed = () => {
|
||||
reportDetail.value = null;
|
||||
emit('closed');
|
||||
};
|
||||
|
||||
defineExpose({ open });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.report-content {
|
||||
min-height: 45vh;
|
||||
max-height: 60vh;
|
||||
overflow-y: auto;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
@ -68,7 +68,7 @@ const handleConfirm = () => {
|
||||
return
|
||||
}
|
||||
|
||||
inputValue.value = selectedReport.value.ypyt || selectedReport.value.zlbt || ''
|
||||
inputValue.value = selectedReport.value.bgmc || selectedReport.value.ypyt || selectedReport.value.zlbt || ''
|
||||
emit('update:modelValue', inputValue.value)
|
||||
emit('change', selectedReport.value)
|
||||
showDialog.value = false
|
||||
|
||||
@ -19,10 +19,10 @@
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="研判议题" prop="ypyt" />
|
||||
<el-table-column label="研判要求" prop="ypyq" />
|
||||
<el-table-column label="研判时间" prop="ypsj" />
|
||||
<el-table-column label="研判议题" prop="bgmc" />
|
||||
<el-table-column label="研判时间" prop="scsj" />
|
||||
<el-table-column label="发起部门" prop="ssbm" />
|
||||
<el-table-column label="创建人" prop="cjrxm" />
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
<script setup>
|
||||
import { ref, watch, onMounted } from 'vue'
|
||||
import { tacticalGet } from '@/api/huiShangyp/tacticalApi.js'
|
||||
|
||||
import { qcckGet } from '@/api/qcckApi'
|
||||
const props = defineProps({
|
||||
bglx: {
|
||||
type: String,
|
||||
@ -87,10 +87,14 @@ const loadData = async () => {
|
||||
pageSize: pageSize.value,
|
||||
pageCurrent: currentPage.value
|
||||
}
|
||||
// / gsxtYpbg / getPageList
|
||||
// const res = await tacticalGet(params)
|
||||
|
||||
qcckGet(params, '/mosty-gsxt/gsxtYpbg/getPageList').then(res => {
|
||||
tableData.value = res.records || []
|
||||
total.value = res.total || 0
|
||||
})
|
||||
|
||||
const res = await tacticalGet(params)
|
||||
tableData.value = res.records || []
|
||||
total.value = res.total || 0
|
||||
} catch (error) {
|
||||
tableData.value = []
|
||||
total.value = 0
|
||||
|
||||
@ -29,11 +29,11 @@
|
||||
</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="!canEdit(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="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>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)" :disabled="!canDelete(row)">删除</el-link>
|
||||
<el-link v-if="canSign(row)" size="small" type="success" @click="sign(row)">签收</el-link>
|
||||
<el-link v-if="canFeedback(row)" size="small" type="warning" @click="feedback(row)">反馈</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -198,25 +198,46 @@ const handleFeedbackSuccess = () => {
|
||||
|
||||
|
||||
// 权限控制
|
||||
// 显示签收
|
||||
// 获取当前用户在xfbmList中的部门项
|
||||
const getMyDeptItem = (row) => {
|
||||
return row.xfbmList?.find(v => v.ssbmdm == userInfo.value?.deptCode)
|
||||
}
|
||||
|
||||
// 显示签收状态
|
||||
const showSign = (row) => {
|
||||
let item = row.xfbmList.find(v => v.ssbmdm == userInfo.value.deptCode)
|
||||
const item = getMyDeptItem(row)
|
||||
if (item) {
|
||||
return item.zlzt == '01' ? '未签收' : item.zlzt == '02' ? '已签收' : '已反馈'
|
||||
} else {
|
||||
return row.zlzt == '01' ? '未签收' : row.zlzt == '02' ? '已签收' : '已反馈'
|
||||
}
|
||||
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 ''
|
||||
}
|
||||
|
||||
// 删除权限:JS_666666/JS_777777可删除所有,其余只能删除自己的
|
||||
const canDelete = (row) => {
|
||||
const roleList = getItem('roleList') || []
|
||||
const roleCodes = roleList.map(r => r.roleCode)
|
||||
|
||||
if (roleCodes.includes('JS_666666') || roleCodes.includes('JS_777777')) return true
|
||||
return row.ssbmdm == userInfo.value?.deptCode
|
||||
}
|
||||
|
||||
// 修改权限:只能自己修改,且未签收未反馈
|
||||
const canEdit = (row) => {
|
||||
const item = getMyDeptItem(row)
|
||||
if (!item) return false
|
||||
return item.zlzt == '01'
|
||||
}
|
||||
|
||||
// 签收权限:当前部门在列表中且未签收
|
||||
const canSign = (row) => {
|
||||
const item = getMyDeptItem(row)
|
||||
return item?.zlzt == '01'
|
||||
}
|
||||
|
||||
// 反馈权限:当前部门在列表中且已签收或已反馈(可多次反馈)
|
||||
const canFeedback = (row) => {
|
||||
const item = getMyDeptItem(row)
|
||||
return item && (item.zlzt == '02' || item.zlzt == '03')
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@ -3,30 +3,21 @@
|
||||
<div class="head_box">
|
||||
<span class="title">报告{{ title }} </span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" :loading="loading" @click="submit" v-if="title!='详情'">保存</el-button>
|
||||
<el-button type="primary" size="small" :loading="loading" @click="submit" v-if="title != '详情'">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage :formList="formData" :disabled="title=='详情'" v-model="listQuery" ref="elform" :rules="rules">
|
||||
<FormMessage :formList="formData" :disabled="title == '详情'" v-model="listQuery" ref="elform" :rules="rules">
|
||||
<template #fj><el-button type="primary" @click="showText = true">附件上传</el-button></template>
|
||||
</FormMessage>
|
||||
<div class="cntBox">
|
||||
<!-- 工具栏 -->
|
||||
<Toolbar
|
||||
style="border-bottom: 1px solid #ccc"
|
||||
:editor="editorRef"
|
||||
:defaultConfig="toolbarConfig"
|
||||
<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"
|
||||
:mode="mode"
|
||||
@onCreated="handleCreated"
|
||||
@onChange="handChange"
|
||||
/>
|
||||
<Editor :style="`height: 480px; overflow-y: hidden`" v-model="textContent" :defaultConfig="editorConfig"
|
||||
:mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||
</div>
|
||||
<div v-if="listQuery.id" style="display: flex; justify-content: center;">
|
||||
<!-- <el-button style="display: block;" type="primary" @click="ConsultationShow = true">网上会商</el-button> -->
|
||||
@ -120,7 +111,7 @@ const title = ref("");
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type == "add" ? "新增" :type == "edit"? "编辑" : "详情";
|
||||
title.value = type == "add" ? "新增" : type == "edit" ? "编辑" : "详情";
|
||||
|
||||
|
||||
if (row) {
|
||||
@ -132,8 +123,9 @@ const init = (type, row) => {
|
||||
};
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
qcckGet({},'/mosty-gsxt/gsxtYpbg/'+id).then((res) => {
|
||||
qcckGet({}, '/mosty-gsxt/gsxtYpbg/' + id).then((res) => {
|
||||
listQuery.value = res || {};
|
||||
textContent.value = res.bgnr
|
||||
// /** @type {Array<JudgmentDept>} 参与研判部门数据数组 */
|
||||
// const cyypList = Array.isArray(res.cyypList) ? res.cyypList : []
|
||||
// listQuery.value.jsdxBmDm = cyypList.map(item => {
|
||||
@ -150,18 +142,18 @@ const getText = (val) => {
|
||||
setEditorTextContent()
|
||||
}
|
||||
|
||||
function stripReportHeader(html) {
|
||||
const source = typeof html === "string" ? html : "";
|
||||
if (!source) return "";
|
||||
const hrMatch = source.match(/<hr\b[^>]*\/?>/i);
|
||||
if (hrMatch && typeof hrMatch.index === "number") {
|
||||
return source.slice(hrMatch.index + hrMatch[0].length).trim();
|
||||
}
|
||||
if (typeof dataBt.value === "string" && source.startsWith(dataBt.value)) {
|
||||
return source.slice(dataBt.value.length).trim();
|
||||
}
|
||||
return source.trim();
|
||||
}
|
||||
// function stripReportHeader(html) {
|
||||
// const source = typeof html === "string" ? html : "";
|
||||
// if (!source) return "";
|
||||
// const hrMatch = source.match(/<hr\b[^>]*\/?>/i);
|
||||
// if (hrMatch && typeof hrMatch.index === "number") {
|
||||
// return source.slice(hrMatch.index + hrMatch[0].length).trim();
|
||||
// }
|
||||
// if (typeof dataBt.value === "string" && source.startsWith(dataBt.value)) {
|
||||
// return source.slice(dataBt.value.length).trim();
|
||||
// }
|
||||
// return source.trim();
|
||||
// }
|
||||
|
||||
function setEditorTextContent() {
|
||||
let html = dataBt.value;
|
||||
@ -172,11 +164,11 @@ function setEditorTextContent() {
|
||||
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.submit( async (data) => {
|
||||
elform.value.submit(async (data) => {
|
||||
loading.value = true;
|
||||
const params = {
|
||||
...data,
|
||||
bgnr: stripReportHeader(textContent.value)
|
||||
bgnr: textContent.value
|
||||
};
|
||||
const apiFun = !listQuery.value.id ? gsxtYpbgAddEntity : gsxtYpbgEditEntity;
|
||||
if (!listQuery.value.id) delete params.id;
|
||||
@ -211,7 +203,7 @@ const close = () => {
|
||||
loading.value = false;
|
||||
dialogForm.value = false;
|
||||
listQuery.value = {}
|
||||
router.replace({ path: '/strategicResearchs' })// 移除id 避免刷新一直带参数
|
||||
router.replace({ path: '/strategicResearchs' })// 移除id 避免刷新一直带参数
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<EarlyWarning v-if="item.mxlx == YJGZ" ref="regulationRef"
|
||||
:dict="{D_BB_AJLB,D_BZ_WPLX}"
|
||||
:dict="{/* D_BB_AJLB, */ D_BZ_WPLX}"
|
||||
:defaultData="defaultData" :disabled="false" />
|
||||
<Regulation v-if="item.mxlx ==SSYJ" ref="regulationRef" :dict="{D_BZ_RYBQ}"
|
||||
:defaultData="defaultData" :disabled="false" />
|
||||
@ -34,7 +34,7 @@ const props = defineProps({
|
||||
|
||||
})
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BB_AJLB,D_BZ_WPLX,D_BZ_RYBQ} = proxy.$dict("D_BB_AJLB","D_BZ_WPLX","D_BZ_RYBQ")
|
||||
const { /* D_BB_AJLB, */ D_BZ_WPLX, D_BZ_RYBQ } = proxy.$dict(/* "D_BB_AJLB", */ "D_BZ_WPLX", "D_BZ_RYBQ")
|
||||
const title = ref("新增")
|
||||
const emit = defineEmits(['getList'])
|
||||
const listQuery = ref()
|
||||
|
||||
@ -46,7 +46,7 @@ const props = defineProps({
|
||||
})
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BB_AJLB,D_BZ_WPLX} = proxy.$dict("D_BB_AJLB","D_BZ_WPLX")
|
||||
const { /* D_BB_AJLB, */ D_BZ_WPLX } = proxy.$dict(/* "D_BB_AJLB", */ "D_BZ_WPLX")
|
||||
const regulation = ref(null)
|
||||
const queryFrom = ref({})
|
||||
const searchBox = ref(); //搜索框
|
||||
|
||||
@ -14,7 +14,7 @@ import WarningList from "./components/AddModel/warningList.vue"
|
||||
const { proxy } = getCurrentInstance();
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { onMounted, ref, getCurrentInstance } from "vue";
|
||||
const { D_BZ_TPYJLX,D_BZ_YJLX ,D_BZ_JQLY} = proxy.$dict("D_BZ_TPYJLX","D_BZ_YJLX","D_BZ_JQLY")
|
||||
const { /* D_BZ_TPYJLX, */D_BZ_YJLX /* ,D_BZ_JQLY */} = proxy.$dict(/* "D_BZ_TPYJLX", */"D_BZ_YJLX"/* ,"D_BZ_JQLY" */)
|
||||
|
||||
const showModel = ref('研判首页')
|
||||
const itemData = ref({})
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" width="80%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div style="width: 100%;height: 500px;">
|
||||
<div class="table-container">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
:tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" :tableHeight="480">
|
||||
<template #jqdjdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.jqdjdm" :options="dict.D_GS_BQ_DJ" />
|
||||
</template>
|
||||
@ -51,7 +51,9 @@ const pageData = reactive({
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null", //选择类型
|
||||
loading: false
|
||||
loading: false,
|
||||
haveControls: false,
|
||||
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
@ -98,4 +100,10 @@ const submitForm = () => {
|
||||
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
||||
<style lang="scss" scoped>
|
||||
.table-container {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -23,6 +23,23 @@
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
<el-table v-if="title == '详情' && listQuery.czlcList && listQuery.czlcList.length > 0" :data="listQuery.czlcList"
|
||||
border size="small" style="width: 100%;margin-top: 10px;">
|
||||
<el-table-column prop="czrrxm" label="反馈人" min-width="100" />
|
||||
<el-table-column prop="fknr" label="反馈内容" min-width="200" />
|
||||
<el-table-column prop="ssbm" label="所属部门" min-width="150" />
|
||||
<el-table-column label="附件" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<div v-if="parseFkfj(row.fkfj).length">
|
||||
<el-link v-for="(file, idx) in parseFkfj(row.fkfj)" :key="idx" type="primary" :underline="false"
|
||||
@click="downloadFile(file)" style="margin-right: 10px;">
|
||||
{{ file.name || file.id }}
|
||||
</el-link>
|
||||
</div>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div v-if="title == '详情'" class="timeline-container">
|
||||
<el-timeline class="timeline-wrapper" v-if="listQuery.czlcLis && listQuery.czlcList.length > 0">
|
||||
@ -57,8 +74,9 @@ import Xslist from '@/components/ChooseList/ChooseXs/index.vue'
|
||||
import FormMessage from '@/components/aboutTable/FormMessage.vue'
|
||||
import * as MOSTY from '@/components/MyComponents/index'
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { saveAs } from 'file-saver';
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick ,watch} from "vue";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick, watch } from "vue";
|
||||
const emit = defineEmits(["updateDate"]);
|
||||
const props = defineProps({
|
||||
dic: {
|
||||
@ -83,13 +101,13 @@ watch(() => props.dic, (newVal) => {
|
||||
{ label: "联系人", prop: "zllxr", type: "input" },
|
||||
{ label: "联系电话", prop: "zllxdh", type: "input" },
|
||||
{ label: "关联线索", prop: "glxsid", type: "slot" },
|
||||
{ label: "主送单位", prop: "zsdw", type: "department" },
|
||||
{ label: "主送单位", prop: "zsdw", type: "department", depMc: "zsdwMc" },
|
||||
{ label: "抄送单位", prop: "csdw", type: "department" },
|
||||
{ label: "指令内容", prop: "zlnr", type: "textarea", width: '100%' },
|
||||
{ label: "附件", prop: "fjzd", type: "slot", width: '100%' },
|
||||
]
|
||||
}
|
||||
},{deep: true})
|
||||
}, { deep: true })
|
||||
|
||||
const listQuery = ref({}); //表单
|
||||
const loading = ref(false);
|
||||
@ -118,9 +136,17 @@ const init = (type, row,) => {
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
qcckGet({ id }, '/mosty-gsxt/zlxx/selectByid').then((res) => {
|
||||
res.fjzd = res.fjzd ? res.fjzd.split(',') : [];
|
||||
// 解析附件:兼容JSON字符串和逗号分隔两种格式
|
||||
let fjzdList = []
|
||||
try {
|
||||
const parsed = res.fjzd ? JSON.parse(res.fjzd) : []
|
||||
fjzdList = Array.isArray(parsed) ? parsed : []
|
||||
} catch (e) {
|
||||
fjzdList = res.fjzd ? res.fjzd.split(',') : []
|
||||
}
|
||||
listQuery.value = {
|
||||
...res,
|
||||
fjzd: fjzdList,
|
||||
czlcList: res.czlcList ? res.czlcList.reverse() : []
|
||||
};
|
||||
});
|
||||
@ -139,7 +165,18 @@ const submit = () => {
|
||||
let url = title.value == "新增" ? '/mosty-gsxt/zlxx/add' : '/mosty-gsxt/zlxx/update';
|
||||
let params = { ...data }
|
||||
loading.value = true;
|
||||
params.fjzd = params.fjzd ? params.fjzd.join(',') : ''
|
||||
// 将附件转为JSON字符串(包含id和name)
|
||||
let fjzdList = []
|
||||
if (Array.isArray(params.fjzd)) {
|
||||
params.fjzd.forEach(item => {
|
||||
if (Object.prototype.toString.call(item) === '[object Object]') {
|
||||
fjzdList.push({ id: item.id, name: item.name })
|
||||
} else {
|
||||
fjzdList.push({ id: item })
|
||||
}
|
||||
})
|
||||
}
|
||||
params.fjzd = fjzdList.length > 0 ? JSON.stringify(fjzdList) : ''
|
||||
// 将主送单位和抄送单位转换为下发部门列表
|
||||
let xfbmList = [];
|
||||
const zsdwArr = Array.isArray(params.zsdw) ? params.zsdw : (params.zsdw ? [params.zsdw] : []);
|
||||
@ -167,6 +204,34 @@ const close = () => {
|
||||
loading.value = false;
|
||||
router.replace({ path: '/InstructionInformation' })// 移除id 避免刷新一直带参数
|
||||
};
|
||||
|
||||
// 解析附件JSON字符串为数组
|
||||
const parseFkfj = (fkfj) => {
|
||||
if (!fkfj) return []
|
||||
try {
|
||||
const parsed = typeof fkfj === 'string' ? JSON.parse(fkfj) : fkfj
|
||||
return Array.isArray(parsed) ? parsed : []
|
||||
} catch (e) {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
// 下载文件
|
||||
const downloadFile = (file) => {
|
||||
const url = `/mosty-api/mosty-base/minio/image/download/${file.id}`
|
||||
const filename = file.name || file.id
|
||||
fetch(url)
|
||||
.then(response => {
|
||||
if (!response.ok) throw new Error('下载失败')
|
||||
return response.blob()
|
||||
})
|
||||
.then(blob => {
|
||||
saveAs(blob, filename)
|
||||
})
|
||||
.catch(() => {
|
||||
proxy.$message({ type: 'error', message: '下载失败' })
|
||||
})
|
||||
}
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
|
||||
@ -1,7 +1,14 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" title="线索反馈" width="50%" @close="closeDialog" destroy-on-close append-to-body>
|
||||
<div style="height: 15vh; overflow: auto;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" />
|
||||
<div style="height: 50vh; overflow: auto;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
<template #fkfj>
|
||||
<div>
|
||||
<div>上传附件:<span class="f12">(可附电子表格、Word文档、图像、音视频文件)</span> </div>
|
||||
<MOSTY.Upload :showBtn="true" :isAll="true" :isImg="false" :limit="10" v-model="fkfj" />
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
@ -13,6 +20,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, reactive, getCurrentInstance, watch } from "vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
@ -32,16 +40,19 @@ const emit = defineEmits(['update:modelValue', 'getList'])
|
||||
const elform = ref(null)
|
||||
const closeDialog = (formEl) => {
|
||||
elform.value.reset()
|
||||
fkfj.value = []
|
||||
emit('update:modelValue', false)
|
||||
}
|
||||
|
||||
const rules = reactive({
|
||||
fknr: [{ required: true, message: '请输入反馈内容', trigger: 'blur' }],
|
||||
})
|
||||
const fkfj = ref([])
|
||||
const listQuery = ref({})
|
||||
const formData = ref(
|
||||
[
|
||||
{ label: "反馈内容", prop: "fknr", type: "textarea" ,width:'90%'},
|
||||
{ label: "反馈内容", prop: "fknr", type: "textarea", width: '90%' },
|
||||
{ label: "反馈附件", prop: "fkfj", width: '90%', type: "slot" },
|
||||
]
|
||||
)
|
||||
watch(() => props.modelValue, (newVal, oldVal) => {
|
||||
@ -55,8 +66,17 @@ const submitForm = (formEl) => {
|
||||
console.log(listQuery.value);
|
||||
elform.value.submit((valid) => {
|
||||
if (valid) {
|
||||
let fkfjList = [];
|
||||
fkfj.value.forEach(item => {
|
||||
if (Object.prototype.toString.call(item) === '[object Object]') {
|
||||
fkfjList.push({ id: item.id, name: item.name })
|
||||
} else {
|
||||
fkfjList.push({ id: item })
|
||||
}
|
||||
})
|
||||
const params = {
|
||||
...listQuery.value,
|
||||
fkfj: JSON.stringify(fkfjList)
|
||||
}
|
||||
qcckPost(params, '/mosty-gsxt/zlxx/fk').then((res) => {
|
||||
proxy.$message({ type: "success", message: "反馈成功" });
|
||||
|
||||
@ -1,62 +1,53 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch">
|
||||
<el-button type="primary" size="small" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<el-button type="primary" size="small" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</Search>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="margTop">
|
||||
<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 #zllx="{row}">
|
||||
<template #zllx="{ row }">
|
||||
<DictTag :tag="false" :value="row.zllx" :options="D_GS_XS_ZLLX" />
|
||||
</template>
|
||||
<template #zldj="{row}">
|
||||
<template #zldj="{ row }">
|
||||
<DictTag :tag="false" :value="row.zldj" :options="D_GS_ZDQT_FXDJ" />
|
||||
</template>
|
||||
<template #czzt="{row}">
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
|
||||
</template>
|
||||
<template #sffk="{row}">
|
||||
{{ row.sffk == '1' ? '已反馈' : '未反馈' }}
|
||||
<template #sffk="{ row }">
|
||||
{{ row.sffk == '1' ? '已反馈' : '未反馈' }}
|
||||
</template>
|
||||
<template #sfqs="{row}">
|
||||
{{ row.sfqs == '0' ? '未签收' : '已签收' }}
|
||||
<template #sfqs="{ row }">
|
||||
{{ row.sfqs == '0' ? '未签收' : '已签收' }}
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" v-if="row.sfqs == '0'" @click="signRow(row)">签收</el-link>
|
||||
<el-link size="small" type="primary" v-if="row.sfqs == '0'" @click="signRow(row)">签收</el-link>
|
||||
<el-link size="small" type="warning" @click="fkRow(row)">反馈</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)" v-if="showBtn(row)">编辑</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="showBtn(row)">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" :disabled="!canDelete(row)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
</div>
|
||||
<DetailForm ref="detailDiloag" @updateDate="getList" :dic="{D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ}" />
|
||||
<Fk v-model="isShowFk" :dataList="dataList" @getList="getList"/>
|
||||
<DetailForm ref="detailDiloag" @updateDate="getList" :dic="{ D_GS_XS_ZLLX, D_GS_ZDQT_FXDJ }" />
|
||||
<Fk v-model="isShowFk" :dataList="dataList" @getList="getList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -71,50 +62,51 @@ import { useRoute } from "vue-router";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick, watch } from "vue";
|
||||
import { getItem } from '@/utils/storage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {D_GS_XS_SJLY,D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ,D_GS_XS_CZZT} = proxy.$dict('D_GS_XS_SJLY','D_GS_XS_ZLLX','D_GS_ZDQT_FXDJ','D_GS_XS_CZZT')
|
||||
const { /*D_GS_XS_SJLY,*/ D_GS_XS_ZLLX, D_GS_ZDQT_FXDJ, D_GS_XS_CZZT } = proxy.$dict(/*'D_GS_XS_SJLY',*/ 'D_GS_XS_ZLLX', 'D_GS_ZDQT_FXDJ', 'D_GS_XS_CZZT')
|
||||
const detailDiloag = ref();
|
||||
const isShow = ref(false);
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{ label: "指令标题", prop: 'zlbt', placeholder: "请输入指令标题", showType: "input" },
|
||||
{ label: "指令类型", prop: 'zllx', placeholder: "请选择指令类型", showType: "select",options:D_GS_XS_ZLLX },
|
||||
{ label: "指令等级", prop: 'zldj', placeholder: "请选择指令等级", showType: "select" ,options:D_GS_ZDQT_FXDJ},
|
||||
{ label: "处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select" ,options:D_GS_XS_CZZT},
|
||||
{ label: "指令类型", prop: 'zllx', placeholder: "请选择指令类型", showType: "select", options: D_GS_XS_ZLLX },
|
||||
{ label: "指令等级", prop: 'zldj', placeholder: "请选择指令等级", showType: "select", options: D_GS_ZDQT_FXDJ },
|
||||
{ label: "处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select", options: D_GS_XS_CZZT },
|
||||
{ label: "反馈时间", prop: 'time', placeholder: "请选择反馈时间", showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 240,
|
||||
tableColumn: [
|
||||
{ label: '指令标题', prop: 'zlbt' },
|
||||
{ label: '指令类型', prop: 'zllx',showSolt:true },
|
||||
{ label: '指令等级', prop: 'zldj',showSolt:true },
|
||||
{ label: '反馈截止时间', prop: 'jssj' },
|
||||
{ label: '处置状态', prop: 'czzt', showSolt: true },
|
||||
{ label: '是否反馈', prop: 'sffk', showSolt: true },
|
||||
{ label: '是否签收', prop: 'sfqs', showSolt: true },
|
||||
]
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 240,
|
||||
tableColumn: [
|
||||
{ label: '指令标题', prop: 'zlbt' },
|
||||
{ label: '指令类型', prop: 'zllx', showSolt: true },
|
||||
{ label: '指令等级', prop: 'zldj', showSolt: true },
|
||||
{ label: '主送单位', prop: 'sfqs', showSolt: true },
|
||||
{ label: '反馈截止时间', prop: 'jssj' },
|
||||
{ label: '处置状态', prop: 'czzt', showSolt: true },
|
||||
{ label: '是否反馈', prop: 'sffk', showSolt: true },
|
||||
{ label: '是否签收', prop: 'sfqs', showSolt: true },
|
||||
]
|
||||
});
|
||||
const route=useRoute()
|
||||
const userInfo=ref();
|
||||
const route = useRoute()
|
||||
const userInfo = ref();
|
||||
onMounted(() => {
|
||||
if (route.query.id) {
|
||||
addEdit('detail', {id:route.query.id});
|
||||
addEdit('detail', { id: route.query.id });
|
||||
}
|
||||
userInfo.value=getItem('deptId')[0]
|
||||
userInfo.value = getItem('deptId')[0]
|
||||
getList()
|
||||
tabHeightFn();
|
||||
});
|
||||
@ -122,89 +114,97 @@ onMounted(() => {
|
||||
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) =>{
|
||||
queryFrom.value = {...val}
|
||||
queryFrom.value.kssj = val.time ? val.time[0]:'';
|
||||
queryFrom.value.jssj = val.time ? val.time[1]:'';
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
queryFrom.value.kssj = val.time ? val.time[0] : '';
|
||||
queryFrom.value.jssj = val.time ? val.time[1] : '';
|
||||
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 = (val) =>{
|
||||
const getList = (val) => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value };
|
||||
delete data.time;
|
||||
qcckGet(data,'/mosty-gsxt/zlxx/selectPage').then(res=>{
|
||||
qcckGet(data, '/mosty-gsxt/zlxx/selectPage').then(res => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(()=>{ pageData.tableConfiger.loading = false; })
|
||||
}).catch(() => { pageData.tableConfiger.loading = false; })
|
||||
}
|
||||
|
||||
|
||||
|
||||
const deleteRow = (id) =>{
|
||||
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
|
||||
qcckPost({id},'/mosty-gsxt/zlxx/delete').then(()=>{
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
const deleteRow = (id) => {
|
||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id }, '/mosty-gsxt/zlxx/delete').then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => {});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 详情
|
||||
const addEdit = (type, row) => {
|
||||
isShow.value = true;
|
||||
nextTick(()=>{
|
||||
nextTick(() => {
|
||||
detailDiloag.value.init(type, row);
|
||||
})
|
||||
};
|
||||
|
||||
watch(() => route.query.id, (val) => {
|
||||
if (val) {
|
||||
addEdit('detail', {id:route.query.id});
|
||||
addEdit('detail', { id: route.query.id });
|
||||
}
|
||||
},{deep:true})
|
||||
}, { deep: true })
|
||||
// 签收
|
||||
const signRow = (row) =>{
|
||||
proxy.$confirm("确定要签收", "警告", {type: "warning"}).then(() => {
|
||||
qcckGet({id:row.id},'/mosty-gsxt/zlxx/qs').then(()=>{
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
const signRow = (row) => {
|
||||
proxy.$confirm("确定要签收", "警告", { type: "warning" }).then(() => {
|
||||
qcckGet({ id: row.id }, '/mosty-gsxt/zlxx/qs').then(() => {
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => {});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 反馈
|
||||
const isShowFk = ref(false)
|
||||
const dataList = ref()
|
||||
const fkRow = (row) => {
|
||||
if (row.sfqs=='0') {
|
||||
proxy.$message({ type: "error", message: "请先签收" });
|
||||
if (row.sfqs == '0') {
|
||||
proxy.$message({ type: "error", message: "请先签收" });
|
||||
return;
|
||||
}
|
||||
isShowFk.value = true;
|
||||
dataList.value = {...row};
|
||||
dataList.value = { ...row };
|
||||
|
||||
}
|
||||
const showBtn = (row) => {
|
||||
let item = row.xfbmList.find(v => v.ssbmdm == userInfo.value.deptCode)
|
||||
return item?true:false
|
||||
return item ? true : false
|
||||
// // if (item) {
|
||||
// // return item.zlzt == '01' ? 'sign' : item.zlzt == '02' ? 'feedback' : ''
|
||||
// // } else {
|
||||
// // return ''
|
||||
// // }
|
||||
}
|
||||
const canDelete = (row) => {
|
||||
const roleList = getItem('roleList') || []
|
||||
const roleCodes = roleList.map(r => r.roleCode)
|
||||
|
||||
if (roleCodes.includes('JS_666666') || roleCodes.includes('JS_777777')) return true
|
||||
if (roleCodes.includes('JS_888888')) return row.ssbmdm == userInfo.value?.deptCode
|
||||
return false
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 220;
|
||||
|
||||
@ -81,7 +81,7 @@ import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import { qcckGet } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {D_GS_ZDQT_FXDJ,D_GS_XS_ZLLX,D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_XS_ZLLX","D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
||||
const {D_GS_ZDQT_FXDJ,D_GS_XS_ZLLX,/*D_GS_XS_CZZT,*/D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_XS_ZLLX",/*"D_GS_XS_CZZT",*/"D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
||||
const detailDiloag = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
const isShow = ref(false)
|
||||
|
||||
@ -90,7 +90,7 @@ import Detail from "./components/detail.vue";
|
||||
import { qcckGet, qcckPost, ParsingText } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {D_GS_ZDQT_FXDJ,D_GS_XS_ZLLX,D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_XS_ZLLX","D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
||||
const {/*D_GS_ZDQT_FXDJ,*//*D_GS_XS_ZLLX,*//*D_GS_XS_CZZT,*/D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB/*,D_BZ_XSSHZT*/} = proxy.$dict(/*"D_GS_ZDQT_FXDJ",*//*"D_GS_XS_ZLLX",*//*"D_GS_XS_CZZT",*/"D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB"/*,"D_BZ_XSSHZT"*/); //获取字典数据
|
||||
const detailDiloag = ref();
|
||||
const detailForm = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
|
||||
@ -1,91 +1,38 @@
|
||||
<template>
|
||||
<section class="query-wrap">
|
||||
<div class="query-title">{{ title }}</div>
|
||||
<div class="query-grid">
|
||||
<div class="query-title" @click="toggleCollapse">
|
||||
<span class="title-text">{{ title }}</span>
|
||||
<el-icon class="collapse-icon" :class="{ 'is-collapsed': isCollapsed }">
|
||||
<ArrowDown />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div class="query-grid" v-show="!isCollapsed">
|
||||
<div v-for="field in renderFields" :key="field.key" class="query-cell">
|
||||
<div class="cell-label">{{ field.label }}</div>
|
||||
<div
|
||||
class="cell-control"
|
||||
:class="{ 'is-checkbox': field.type === 'checkbox' }"
|
||||
>
|
||||
<el-input
|
||||
clearable
|
||||
v-if="field.type === 'input'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-input"
|
||||
:placeholder="field.placeholder || ''"
|
||||
/>
|
||||
<el-input
|
||||
clearable
|
||||
v-else-if="field.type === 'number'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-input"
|
||||
type="number"
|
||||
:placeholder="field.placeholder || ''"
|
||||
/>
|
||||
<el-select
|
||||
clearable
|
||||
v-else-if="field.type === 'select'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-select"
|
||||
:placeholder="field.placeholder || '请选择'"
|
||||
:multiple="field.multiple || false"
|
||||
collapse-tags
|
||||
collapse-tags-tooltip
|
||||
>
|
||||
<el-option
|
||||
v-for="item in field.options || []"
|
||||
:key="item.value ?? item"
|
||||
:label="item.label ?? item"
|
||||
:value="item.value ?? item"
|
||||
/>
|
||||
<div class="cell-control" :class="{ 'is-checkbox': field.type === 'checkbox' }">
|
||||
<el-input clearable v-if="field.type === 'input'" v-model="formState[field.key]" class="control-input"
|
||||
:placeholder="field.placeholder || ''" />
|
||||
<el-input clearable v-else-if="field.type === 'number'" v-model="formState[field.key]" class="control-input"
|
||||
type="number" :placeholder="field.placeholder || ''" />
|
||||
<el-select clearable v-else-if="field.type === 'select'" v-model="formState[field.key]" class="control-select"
|
||||
:placeholder="field.placeholder || '请选择'" :multiple="field.multiple || false" collapse-tags
|
||||
collapse-tags-tooltip>
|
||||
<el-option v-for="item in field.options || []" :key="item.value ?? item" :label="item.label ?? item"
|
||||
:value="item.value ?? item" />
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-else-if="field.type === 'date'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-date"
|
||||
type="date"
|
||||
:placeholder="field.placeholder || '请选择日期'"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-else-if="field.type === 'datetime'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-date"
|
||||
type="datetime"
|
||||
:placeholder="field.placeholder || '请选择时间'"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-else-if="field.type === 'daterange'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-date"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-else-if="field.type === 'datetimerange'"
|
||||
v-model="formState[field.key]"
|
||||
class="control-date"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
<el-date-picker clearable v-else-if="field.type === 'date'" v-model="formState[field.key]"
|
||||
class="control-date" type="date" :placeholder="field.placeholder || '请选择日期'" value-format="YYYY-MM-DD" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'datetime'" v-model="formState[field.key]"
|
||||
class="control-date" type="datetime" :placeholder="field.placeholder || '请选择时间'"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'daterange'" v-model="formState[field.key]"
|
||||
class="control-date" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
value-format="YYYY-MM-DD" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'datetimerange'" v-model="formState[field.key]"
|
||||
class="control-date" type="datetimerange" range-separator="至" start-placeholder="开始时间"
|
||||
end-placeholder="结束时间" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<template v-else-if="field.type === 'department'">
|
||||
<MOSTY.Department
|
||||
clearable
|
||||
v-model="formState[field.key]"
|
||||
class="control-select"
|
||||
/>
|
||||
<MOSTY.Department clearable v-model="formState[field.key]" class="control-select" />
|
||||
</template>
|
||||
<div v-else-if="field.type === 'checkbox'" class="checkbox-wrap">
|
||||
<el-checkbox v-model="formState[field.key]" />
|
||||
@ -104,8 +51,7 @@
|
||||
<el-button size="small" type="primary" @click="handleSearch">{{
|
||||
searchText
|
||||
}}</el-button>
|
||||
<el-button size="small" type="button" @click="handleReset"
|
||||
>重置
|
||||
<el-button size="small" type="button" @click="handleReset">重置
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -113,7 +59,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, reactive, watch } from "vue";
|
||||
import { computed, reactive, ref, watch } from "vue";
|
||||
import { ArrowDown } from '@element-plus/icons-vue';
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
const props = defineProps({
|
||||
title: {
|
||||
@ -132,15 +79,33 @@ const props = defineProps({
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
defaultCollapsed: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
collapsedHeight: {
|
||||
type: Number,
|
||||
default: 34
|
||||
},
|
||||
expandedHeight: {
|
||||
type: Number,
|
||||
default: 276
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
const emit = defineEmits(['update:modelValue',"search", "submit", "reset"]);
|
||||
const emit = defineEmits(['update:modelValue', "search", "submit", "reset", "collapse"]);
|
||||
const formState = reactive({});
|
||||
const isCollapsed = ref(props.defaultCollapsed);
|
||||
|
||||
watch(()=>formState,val=>{
|
||||
emit('update:modelValue',val)
|
||||
},{immediate:true})
|
||||
const toggleCollapse = () => {
|
||||
isCollapsed.value = !isCollapsed.value;
|
||||
emit('collapse', isCollapsed.value);
|
||||
};
|
||||
|
||||
watch(() => formState, val => {
|
||||
emit('update:modelValue', val)
|
||||
}, { immediate: true })
|
||||
|
||||
|
||||
const renderFields = computed(() => {
|
||||
@ -236,7 +201,9 @@ watch(
|
||||
defineExpose({
|
||||
formState,
|
||||
handleSearch,
|
||||
handleReset
|
||||
handleReset,
|
||||
isCollapsed,
|
||||
collapsedHeight: props.collapsedHeight
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -244,22 +211,46 @@ defineExpose({
|
||||
.query-wrap {
|
||||
border: 1px solid #b8d3ff;
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.query-title {
|
||||
height: 32px;
|
||||
background: linear-gradient(to right, #9ed7ff, #e6f0f8);
|
||||
line-height: 32px;
|
||||
padding-left: 10px;
|
||||
padding: 0 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #0d2148;
|
||||
border-bottom: 1px solid #b8d3ff;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
.title-text {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.collapse-icon {
|
||||
font-size: 16px;
|
||||
color: #0d2148;
|
||||
transition: transform 0.3s;
|
||||
|
||||
&.is-collapsed {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.query-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
flex: 1;
|
||||
align-content: start;
|
||||
}
|
||||
|
||||
.query-cell {
|
||||
@ -366,6 +357,7 @@ defineExpose({
|
||||
|
||||
.query-action {
|
||||
height: 36px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
// justify-content: flex-end;
|
||||
justify-content: space-between;
|
||||
|
||||
@ -7,9 +7,9 @@
|
||||
:align="selectionColumnAlign" />
|
||||
<el-table-column v-for="column in columns" :key="column.prop || column.label || column.type" :prop="column.prop"
|
||||
:type="column.type" :label="column.label" :width="column.width" :min-width="column.minWidth"
|
||||
:align="column.align" :show-overflow-tooltip="true">
|
||||
:align="column.align" :show-overflow-tooltip="isColumnOverflow(column)">
|
||||
<template v-if="column.slotName" #default="scope">
|
||||
<slot v-if="column.slotName" :name="column.slotName" :row="scope.row" :column="column"
|
||||
<slot :name="column.slotName" :row="scope.row" :column="column"
|
||||
:$index="scope.$index">
|
||||
{{ column.prop ? scope.row[column.prop] : '' }}
|
||||
</slot>
|
||||
@ -87,6 +87,15 @@ const onSelectionChange = (selection) => {
|
||||
emit('selection-change', selection)
|
||||
emit('row-change', selection[0] || null)
|
||||
}
|
||||
|
||||
// 判断列是否需要overflow tooltip:只有当列有值时才启用
|
||||
const isColumnOverflow = (column) => {
|
||||
if (!column.prop) return false
|
||||
return props.data.some(row => {
|
||||
const val = row[column.prop]
|
||||
return val !== undefined && val !== null && val !== ''
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<div class="ces-page">
|
||||
<QueryFormPanel :fields="queryFields" @search="handleSearch" />
|
||||
<WarnDataTable :data="tableData" :columns="columns" :selection-mode="selectionMode" :loading="loading">
|
||||
<div ref="queryFormRef">
|
||||
<QueryFormPanel :fields="queryFields" @search="handleSearch" @collapse="handleCollapse" />
|
||||
</div>
|
||||
<WarnDataTable :data="tableData" :columns="columns" :selection-mode="selectionMode" :loading="loading" :tableHeight="tableHeight">
|
||||
<template #status="{ row }">
|
||||
<span class="status" :class="row.statusClass">{{ row.status }}</span>
|
||||
</template>
|
||||
@ -18,14 +20,37 @@
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted, nextTick } from 'vue'
|
||||
import QueryFormPanel from './components/QueryFormPanel.vue'
|
||||
import WarnDataTable from './components/WarnDataTable.vue'
|
||||
|
||||
const queryFormRef = ref()
|
||||
const tableHeight = ref('600px')
|
||||
const selectionMode = ref('multiple')
|
||||
const loading = ref(false)
|
||||
const lastQueryParams = ref({})
|
||||
|
||||
const calcTableHeight = () => {
|
||||
nextTick(() => {
|
||||
const queryEl = queryFormRef.value
|
||||
if (queryEl) {
|
||||
const queryHeight = queryEl.offsetHeight
|
||||
const pageHeight = window.innerHeight
|
||||
const padding = 40
|
||||
tableHeight.value = pageHeight - queryHeight - padding
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleCollapse = () => {
|
||||
setTimeout(calcTableHeight, 350)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
calcTableHeight()
|
||||
window.addEventListener('resize', calcTableHeight)
|
||||
})
|
||||
|
||||
const handleSearch = (params) => {
|
||||
lastQueryParams.value = params
|
||||
}
|
||||
|
||||
@ -1,12 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<PageTitle
|
||||
:malginLeft="10"
|
||||
:height="35"
|
||||
backgroundColor="#ffff"
|
||||
:marginBottom="5"
|
||||
:marginTop="5"
|
||||
>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<!-- -->
|
||||
<template v-for="(item, index) in butList" :key="index">
|
||||
@ -24,17 +18,13 @@
|
||||
>{{ item }}</el-button
|
||||
>
|
||||
</template>
|
||||
<el-select
|
||||
v-model="value"
|
||||
placeholder="请选择预警类型"
|
||||
@change="qh = value"
|
||||
>
|
||||
<el-option label="人像预警" value="人像预警" />
|
||||
<el-option label="车辆预警" value="车辆预警" />
|
||||
<el-option label="区域预警" value="区域预警" />
|
||||
<el-option label="布控预警" value="布控预警" />
|
||||
</el-select>
|
||||
</el-popover> -->
|
||||
<el-select v-model="value" placeholder="请选择预警类型" @change="qh = value">
|
||||
<el-option label="人像预警" value="人像预警" />
|
||||
<el-option label="车辆预警" value="车辆预警" />
|
||||
<el-option label="区域预警" value="区域预警" />
|
||||
<el-option label="布控预警" value="布控预警" />
|
||||
</el-select>
|
||||
</el-popover> -->
|
||||
<!-- <el-popover
|
||||
placement="right"
|
||||
:width="240"
|
||||
@ -59,12 +49,7 @@
|
||||
<el-option label="组合预警" value="组合预警" />
|
||||
</el-select>
|
||||
</el-popover> -->
|
||||
<el-button
|
||||
:type="qh == item ? 'primary' : 'default'"
|
||||
@click="qh = item"
|
||||
size="small"
|
||||
>{{ item }}</el-button
|
||||
>
|
||||
<el-button :type="qh == item ? 'primary' : 'default'" @click="qh = item" size="small">{{ item }}</el-button>
|
||||
</template>
|
||||
</template>
|
||||
</PageTitle>
|
||||
@ -93,7 +78,6 @@ import BehaviorWarning from "@/views/backOfficeSystem/fourColorManage/warningCon
|
||||
import CombinedWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/combinedWarning/index.vue";
|
||||
import PortraitWarning from "@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/index.vue";
|
||||
import VehicleWarning from "@/views/backOfficeSystem/fourColorManage/warningList/vehicleWarning/index.vue";
|
||||
// import ControlWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/controlWarning/index.vue";
|
||||
import RegionalControl from "@/views/backOfficeSystem/fourColorManage/warningControl/regionalControl/index.vue";
|
||||
import WrjWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/wrjWarning/index.vue";
|
||||
import PoliticalSecurityWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/politicalSecurity/index.vue";
|
||||
|
||||
@ -2,9 +2,9 @@
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
|
||||
<el-button size="small" type="primary" @click="addEdit('add', '')">
|
||||
<el-button size="small" type="primary" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
@ -12,7 +12,7 @@
|
||||
</el-button>
|
||||
</Search>
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button>
|
||||
<span style="vertical-align: middle">调级</span>
|
||||
@ -25,7 +25,7 @@
|
||||
</el-button>
|
||||
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div class="margTop">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
@ -38,7 +38,7 @@
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<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>
|
||||
@ -51,8 +51,8 @@
|
||||
<!-- 编辑详情 -->
|
||||
<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"/>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/tbGsxtBqzh/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -155,13 +155,13 @@ const addEdit = (type, row) => {
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
chooseJfBh.value = val.id
|
||||
tbGsxtBqzhId(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
|
||||
@ -12,12 +12,12 @@
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
@ -35,7 +35,7 @@
|
||||
<template #xwfz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%">
|
||||
@ -45,10 +45,11 @@
|
||||
<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="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>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')"
|
||||
v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
@ -65,20 +66,16 @@
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="02" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl
|
||||
ref="semdFqzlRef"
|
||||
:itemData="itemData"
|
||||
@handleClose="handleClose"
|
||||
identification="yj"
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<!-- 详情 -->
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"></AddFrom>
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz" :roleIds="roleIds"/>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -91,7 +88,7 @@ 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 { 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'
|
||||
@ -109,7 +106,7 @@ const czjyRef = ref()
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB,D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB',"D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
const { D_BZ_YJJB, D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB', "D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
@ -130,7 +127,7 @@ const searchConfiger = ref(
|
||||
{ label: "电话号码", prop: 'dh', placeholder: "请输入电话号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'xwms', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
@ -159,8 +156,8 @@ const pageData = reactive({
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "xwms" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "xwcs", showSolt: true,width: 90 },
|
||||
{ label: "预警分值", prop: "xwfz",showSolt: true },
|
||||
{ label: "活动频次", prop: "xwcs", showSolt: true, width: 90 },
|
||||
{ label: "预警分值", prop: "xwfz", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
@ -178,11 +175,11 @@ const gettbGsxtBqglSelectList = (val) => {
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
@ -193,12 +190,12 @@ onMounted(() => {
|
||||
});
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init( row)
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value,...val };
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
@ -265,7 +262,7 @@ const bqYs = (val) => {
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
@ -327,20 +324,20 @@ const openAddModel = (row) => {
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
chooseJfBh.value = val.id
|
||||
yjzxXwyjSelectList(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
|
||||
window.onresize = function() {
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
@ -375,14 +372,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -406,10 +403,9 @@ const handleQs = () => {
|
||||
outline-color: #0000ff;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
@ -41,7 +41,7 @@
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系数</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddModel(row)">详情</span>
|
||||
@ -87,7 +87,7 @@ import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import AddFrom from './components/addFrom.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
@ -194,6 +194,7 @@ const onSearch = (val) => {
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
nextTick(tabHeightFn);
|
||||
}
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
@ -302,12 +303,12 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
|
||||
|
||||
/** 触发选中 */
|
||||
|
||||
@ -1,61 +1,26 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:draggable="true"
|
||||
v-model="showDialog"
|
||||
:append-to-body="true"
|
||||
:destroy-on-close="true"
|
||||
:title="title"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<FormMessage
|
||||
v-model="listQuery"
|
||||
:disabled="title == '反馈' ? false : true"
|
||||
:formList="formData"
|
||||
labelWidth="160px"
|
||||
ref="elform"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-dialog :draggable="true" v-model="showDialog" :append-to-body="true" :destroy-on-close="true" :title="title"
|
||||
:close-on-click-modal="false">
|
||||
<FormMessage v-model="listQuery" :disabled="title == '反馈' ? false : true" :formList="formData" labelWidth="160px"
|
||||
ref="elform" :rules="rules">
|
||||
<template #mbzrmjxm>
|
||||
<MOSTY.Other
|
||||
width="100%"
|
||||
@click="handleChoose('mbzrmjxm')"
|
||||
clearable
|
||||
v-model="listQuery.mbzrmjxm"
|
||||
placeholder="请选择民警"
|
||||
:readonly="true"
|
||||
/>
|
||||
<MOSTY.Other width="100%" @click="handleChoose('mbzrmjxm')" clearable v-model="listQuery.mbzrmjxm"
|
||||
placeholder="请选择民警" :readonly="true" />
|
||||
</template>
|
||||
<template #czzrmj>
|
||||
<MOSTY.Other
|
||||
width="100%"
|
||||
@click="handleChoose('czzrmj')"
|
||||
clearable
|
||||
v-model="listQuery.czzrmj"
|
||||
placeholder="请选择民警"
|
||||
:readonly="true"
|
||||
/>
|
||||
<MOSTY.Other width="100%" @click="handleChoose('czzrmj')" clearable v-model="listQuery.czzrmj"
|
||||
placeholder="请选择民警" :readonly="true" />
|
||||
</template>
|
||||
</FormMessage>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
:loading="loading"
|
||||
v-if="title == '反馈'"
|
||||
>确认</el-button
|
||||
>
|
||||
<el-button type="primary" @click="submitForm" :loading="loading" v-if="title == '反馈'">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<ChooseUser
|
||||
v-model="chooseUserVisible"
|
||||
v-if="chooseUserVisible"
|
||||
@choosedUsers="handleUserSelected"
|
||||
:roleIds="roleIds"
|
||||
:Single="true"
|
||||
/>
|
||||
<ChooseUser v-model="chooseUserVisible" v-if="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"
|
||||
:Single="true" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -64,6 +29,7 @@ import * as MOSTY from "@/components/MyComponents/index";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { getItem } from "@/utils/storage";
|
||||
import { onMounted, reactive, ref, getCurrentInstance, onUnmounted, watch } from "vue";
|
||||
const props = defineProps({
|
||||
lx: {
|
||||
@ -88,6 +54,9 @@ const showDialog = ref(false);
|
||||
const loading = ref(false);
|
||||
const choosetype = ref("");
|
||||
const listQuery = ref({});
|
||||
const userIfo = ref('')
|
||||
const idEntityCard = ref()
|
||||
const USERNAME = ref()
|
||||
const formData = ref([
|
||||
{ label: "发现目标状态", prop: "mbzt", type: "select", options: D_BZ_SF },
|
||||
{
|
||||
@ -96,6 +65,7 @@ const formData = ref([
|
||||
type: "select",
|
||||
options: D_YJXX_CKCZJG
|
||||
},
|
||||
{ label: "处置经过描述", prop: "czjgms", type: "textarea", width: "100%" },
|
||||
{
|
||||
label: "发现目标责任单位",
|
||||
prop: "mbzrdwdm",
|
||||
@ -172,7 +142,8 @@ const rules = reactive({
|
||||
// ckczcsxl: [
|
||||
// { required: true, message: "请选择常控处置措施细类", trigger: "change" }
|
||||
// ],
|
||||
ckczjg: [{ required: true, message: "请输入常控处置结果", trigger: "blur" }]
|
||||
ckczjg: [{ required: true, message: "请输入常控处置结果", trigger: "blur" }],
|
||||
czjgms: [{ required: true, message: "请输入常控处置反馈补充信息", trigger: "blur" }]
|
||||
// cklxzcpg: [
|
||||
// { required: true, message: "请输入常控立线侦察评估", trigger: "blur" }
|
||||
// ],
|
||||
@ -186,43 +157,54 @@ const rules = reactive({
|
||||
});
|
||||
|
||||
const title = ref("");
|
||||
// 事件处理函数引用,用于正确取消监听
|
||||
const handleOpenFkDialog = (val) => {
|
||||
showDialog.value = true;
|
||||
listQuery.value = { yjid: val.id };
|
||||
let url = "";
|
||||
console.log(props.lx);
|
||||
|
||||
switch (props.lx) {
|
||||
case "01":
|
||||
url = "/mosty-gsxt/tbYjxx/getInfo/";
|
||||
break;
|
||||
case "02":
|
||||
url = "/mosty-gsxt/yjzxXwyj/";
|
||||
break;
|
||||
case "03":
|
||||
url = "/mosty-gsxt/yjzxSfyj/";
|
||||
break;
|
||||
case "04":
|
||||
url = "/mosty-gsxt/yjzxZhyj/";
|
||||
break;
|
||||
case "05":
|
||||
url = "/mosty-gsxt/tbYjxx/getInfo/";
|
||||
break;
|
||||
}
|
||||
title.value = val.type;
|
||||
if (val.type == "查看反馈") {
|
||||
qcckGet({}, url + val.id).then((res) => {
|
||||
let list = res.fkList || [];
|
||||
listQuery.value = list.length > 0 ? list[0] : {};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// watch 应该在 setup 顶层定义,不要放在 onMounted 内部
|
||||
watch(() => listQuery.value.mbzt, (newVal) => {
|
||||
const ckczcslxField = formData.value.find(item => item.prop === 'ckczcslx');
|
||||
const ckczcsxlField = formData.value.find(item => item.prop === 'ckczcsxl');
|
||||
if (ckczcslxField) ckczcslxField.show = newVal === '1';
|
||||
if (ckczcsxlField) ckczcsxlField.show = newVal === '1';
|
||||
});
|
||||
|
||||
// 事件监听应该在 setup 顶层注册,确保组件创建后立即可用
|
||||
emitter.on("openFkDialog", handleOpenFkDialog);
|
||||
|
||||
onMounted(() => {
|
||||
// 监听 mbzt 变化,动态显示/隐藏常控处置措施字段
|
||||
watch(() => listQuery.value.mbzt, (newVal) => {
|
||||
const ckczcslxField = formData.value.find(item => item.prop === 'ckczcslx');
|
||||
const ckczcsxlField = formData.value.find(item => item.prop === 'ckczcsxl');
|
||||
if (ckczcslxField) ckczcslxField.show = newVal === '1';
|
||||
if (ckczcsxlField) ckczcsxlField.show = newVal === '1';
|
||||
});
|
||||
|
||||
emitter.on("openFkDialog", (val) => {
|
||||
showDialog.value = true;
|
||||
listQuery.value = { yjid: val.id };
|
||||
let url = "";
|
||||
console.log(props.lx);
|
||||
|
||||
switch (props.lx) {
|
||||
case "01":
|
||||
url = "/mosty-gsxt/tbYjxx/getInfo/";
|
||||
break;
|
||||
case "02":
|
||||
url = "/mosty-gsxt/yjzxXwyj/";
|
||||
break;
|
||||
case "03":
|
||||
url = "/mosty-gsxt/yjzxSfyj/";
|
||||
break;
|
||||
case "04":
|
||||
url = "/mosty-gsxt/yjzxZhyj/";
|
||||
break;
|
||||
}
|
||||
title.value = val.type;
|
||||
if (val.type == "查看反馈") {
|
||||
qcckGet({}, url + val.id).then((res) => {
|
||||
let list = res.fkList || [];
|
||||
listQuery.value = list.length > 0 ? list[0] : {};
|
||||
});
|
||||
}
|
||||
});
|
||||
userIfo.value = getItem('deptId') ? getItem('deptId')[0] : {}
|
||||
idEntityCard.value = getItem('idEntityCard')
|
||||
USERNAME.value = getItem('USERNAME')
|
||||
});
|
||||
|
||||
const handleChoose = (type) => {
|
||||
@ -247,7 +229,8 @@ const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
loading.value = true;
|
||||
const prome = {
|
||||
...listQuery.value
|
||||
...listQuery.value,
|
||||
xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode
|
||||
};
|
||||
let url = "";
|
||||
switch (props.lx) {
|
||||
@ -287,7 +270,8 @@ const close = () => {
|
||||
};
|
||||
|
||||
onUnmounted(() => {
|
||||
emitter.off("openFkDialog");
|
||||
// 传递具体的处理函数引用,确保正确移除监听器
|
||||
emitter.off("openFkDialog", handleOpenFkDialog);
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div>
|
||||
@ -46,7 +46,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="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>
|
||||
@ -148,8 +148,8 @@ const pageData = reactive({
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width:'90' },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ label: "活动频次", prop: "sfcs", width: '90' },
|
||||
{ label: "预警分值", prop: "sffz", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
@ -356,14 +356,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
@ -42,7 +42,7 @@
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系数</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
@ -84,7 +84,7 @@ import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
@ -175,6 +175,7 @@ const onSearch = (val) => {
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
@ -305,12 +306,12 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
|
||||
@ -2,93 +2,43 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel
|
||||
v-model="listQuery"
|
||||
:fields="searchConfiger"
|
||||
@search="onSearch"
|
||||
>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search="onSearch" @collapse="tabHeightFn">
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small"
|
||||
>导出</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleQs"
|
||||
>签收</el-button
|
||||
>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div
|
||||
class="tabBox_zdy"
|
||||
:style="{ height: pageData.tableHeight + 40 + 'px' }"
|
||||
>
|
||||
<WarnDataTable
|
||||
:loading="pageData.tableConfiger.loading"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData"
|
||||
:columns="pageData.tableColumn"
|
||||
table-class="warn-table"
|
||||
@selectionChange="handleChooseData"
|
||||
>
|
||||
<div class="tabBox_zdy" :style="{ height: pageData.tableHeight + 40 + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img
|
||||
src="@/assets/images/car.png"
|
||||
width="30"
|
||||
height="30"
|
||||
v-if="row.yjLx == 2"
|
||||
/>
|
||||
<img
|
||||
src="@/assets/images/default_male.png"
|
||||
width="30"
|
||||
height="30"
|
||||
v-else
|
||||
/>
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image
|
||||
v-else
|
||||
style="width: 30px; height: 30px"
|
||||
:src="row.yjTp"
|
||||
:preview-src-list="[row.yjTp]"
|
||||
show-progress
|
||||
>
|
||||
<el-image v-else style="width: 30px; height: 30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img
|
||||
src="@/assets/images/car.png"
|
||||
width="30"
|
||||
height="30"
|
||||
v-if="row.yjLx == 2"
|
||||
/>
|
||||
<img
|
||||
src="@/assets/images/default_male.png"
|
||||
width="30"
|
||||
height="30"
|
||||
v-else
|
||||
/>
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag
|
||||
:value="row.czzt"
|
||||
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
|
||||
:tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT"
|
||||
/>
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" style="cursor: pointer" @click="openBox(row)" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag
|
||||
:value="row.yjJb"
|
||||
color="#fff"
|
||||
:tag="false"
|
||||
:options="D_BZ_YJJB"
|
||||
/>
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
@ -107,61 +57,37 @@
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode"
|
||||
>处置建议</span
|
||||
>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span
|
||||
class="success"
|
||||
@click="handleQsFk(row, '签收')"
|
||||
v-if="row.czzt == '01'"
|
||||
>签收</span
|
||||
>
|
||||
<span
|
||||
class="success"
|
||||
@click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02'"
|
||||
>反馈</span
|
||||
>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02'">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<FkDialog @change="getList" lx="05" />
|
||||
<AddFrom
|
||||
ref="addModelRef"
|
||||
:dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"
|
||||
/>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination
|
||||
v-model="paginationOpen"
|
||||
:dataList="dataPres"
|
||||
:dict="{
|
||||
D_BZ_XB,
|
||||
D_BZ_YJJB,
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ
|
||||
}"
|
||||
/>
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{
|
||||
D_BZ_XB,
|
||||
D_BZ_YJJB,
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ
|
||||
}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -187,34 +113,34 @@ const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const {
|
||||
D_GS_QLZDRLX,
|
||||
D_BZ_YJLY,
|
||||
// D_BZ_YJLY,
|
||||
D_GSXT_YJXX_CZZT,
|
||||
D_GS_SSYJ,
|
||||
D_BZ_YJJB,
|
||||
D_BZ_BKLYS,
|
||||
// D_BZ_BKLYS,
|
||||
D_BZ_XB,
|
||||
D_BZ_SF,
|
||||
D_GS_CSZT,
|
||||
D_GS_BKZT,
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ,
|
||||
D_BZ_SJLY
|
||||
D_GS_BK_CZYQ
|
||||
// D_BZ_SJLY
|
||||
} = proxy.$dict(
|
||||
"D_GS_QLZDRLX",
|
||||
"D_BZ_YJLY",
|
||||
// "D_BZ_YJLY",
|
||||
"D_GSXT_YJXX_CZZT",
|
||||
"D_GS_SSYJ",
|
||||
"D_BZ_YJJB",
|
||||
"D_BZ_BKLYS",
|
||||
// "D_BZ_BKLYS",
|
||||
"D_BZ_XB",
|
||||
"D_BZ_SF",
|
||||
"D_GS_CSZT",
|
||||
"D_GS_BKZT",
|
||||
"D_GS_ZDR_RYJB",
|
||||
"D_GS_ZDR_GJLB",
|
||||
"D_GS_BK_CZYQ",
|
||||
"D_BZ_SJLY"
|
||||
"D_GS_BK_CZYQ"
|
||||
// "D_BZ_SJLY"
|
||||
);
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ });
|
||||
// 搜索配置
|
||||
@ -404,7 +330,7 @@ const pageData = reactive({
|
||||
{ label: "相似度", slotName: "xsd", align: "center", width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", align: "center" },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: "center" },
|
||||
{ label: "操作", width: 180, slotName: "operation" },
|
||||
{ label: "操作", width: 260, slotName: "operation" },
|
||||
{ label: "超时状态", width: 80, align: "center", slotName: "cszt" },
|
||||
{ label: "在控状态", width: 70, align: "center", slotName: "zkzt" }
|
||||
]
|
||||
@ -437,6 +363,7 @@ const onSearch = (val) => {
|
||||
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
@ -523,13 +450,12 @@ const handleCzjy = (row) => {
|
||||
};
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight =
|
||||
window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
// 指派
|
||||
const dataList = ref(null);
|
||||
const warningShow = ref(false);
|
||||
@ -603,7 +529,7 @@ const handleQs = () => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
|
||||
// 详情
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,71 +2,48 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel
|
||||
v-model="listQuery"
|
||||
:fields="searchConfiger"
|
||||
@search="onSearch"
|
||||
>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search="onSearch" @collapse="tabHeightFn">
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small"
|
||||
>导出</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
size="small"
|
||||
@click="exportExcelAll"
|
||||
>筛选导出</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleQs"
|
||||
>签收</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleRelatedWarning"
|
||||
>关联预警</el-button
|
||||
>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" :loading="btnLoading" size="small" @click="exportExcelAll">筛选导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleRelatedWarning">关联预警</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div
|
||||
class="tabBox_zdy"
|
||||
:style="{ height: pageData.tableHeight + 40 + 'px' }"
|
||||
>
|
||||
<WarnDataTable
|
||||
:loading="pageData.tableConfiger.loading"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData"
|
||||
:columns="pageData.tableColumn"
|
||||
table-class="warn-table"
|
||||
@selectionChange="handleChooseData"
|
||||
>
|
||||
<div class="tabBox_zdy" :style="{ height: pageData.tableHeight + 40 + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #czzt="{ row }">
|
||||
<DictTag
|
||||
:value="row.czzt"
|
||||
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
|
||||
:tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT"
|
||||
/>
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : row.czzt === '02' ? '#1d72e8' : '#000'"
|
||||
:tag="false" :options="D_GSXT_YJXX_CZZT" style="cursor: pointer" @click="openBox(row)" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #bkyj="{ row }">
|
||||
<DictTag :value="row.yjly" :tag="false" :options="D_BZ_SF" v-if="row.yjly" />
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag
|
||||
:value="row.yjJb"
|
||||
color="#fff"
|
||||
:tag="false"
|
||||
:options="D_BZ_YJJB"
|
||||
/>
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_GS_ZDR_YJDJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #qblyjb="{ row }">
|
||||
<DictTag :value="row.qblyjb" :tag="false" :options="D_BZ_QBLYJB" />
|
||||
</template>
|
||||
|
||||
<template #bksj="{ row }">
|
||||
<!-- <template #bksj="{ row }">
|
||||
{{ row.bkkssj && row.bkjssj ? `${row.bkkssj} - ${row.bkjssj}` : "" }}
|
||||
</template> -->
|
||||
<template #bkkssj="{ row }">
|
||||
{{ row.bkkssj ? `${row.bkkssj} ` : "未知" }}
|
||||
</template>
|
||||
<template #bkjssj="{ row }">
|
||||
{{ row.bkjssj ? `${row.bkjssj}` : "未知" }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd ? row.xsd + "%" : "" }}
|
||||
@ -82,64 +59,39 @@
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode"
|
||||
>处置建议</span
|
||||
>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span
|
||||
class="success"
|
||||
@click="handleQsFk(row, '签收')"
|
||||
v-if="row.czzt == '01'"
|
||||
>签收</span
|
||||
>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')" v-else
|
||||
>反馈</span
|
||||
>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')" v-else>反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<FkDialog @change="getList" lx="05" />
|
||||
<AddFrom
|
||||
ref="addModelRef"
|
||||
:dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"
|
||||
/>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_GS_ZDR_YJDJ, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination
|
||||
v-model="paginationOpen"
|
||||
:dataList="dataPres"
|
||||
:dict="{
|
||||
D_BZ_XB,
|
||||
D_BZ_YJJB,
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ
|
||||
}"
|
||||
/>
|
||||
<DeploymentDataDialog
|
||||
v-model="selectDataVisible"
|
||||
title="关联预警"
|
||||
@confirm="handleSelectConfirm"
|
||||
:currentRelatedRow="currentRelatedRow"
|
||||
/>
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{
|
||||
D_BZ_XB,
|
||||
D_GS_ZDR_YJDJ,
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ
|
||||
}" />
|
||||
<DeploymentDataDialog v-model="selectDataVisible" title="关联预警" @confirm="handleSelectConfirm"
|
||||
:currentRelatedRow="currentRelatedRow" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -152,7 +104,7 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick, onUnmounted } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js";
|
||||
@ -160,17 +112,16 @@ import { exportExlByObj } from "@/utils/exportExcel.js";
|
||||
import { getMultiDictVal } from "@/utils/dict.js";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
import DeploymentDataDialog from "../../YjData/DeploymentDataDialog.vue";
|
||||
|
||||
const czjyRef = ref();
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const {
|
||||
D_GS_QLZDRLX,
|
||||
D_BZ_YJLY,
|
||||
// D_BZ_YJLY,
|
||||
D_GSXT_YJXX_CZZT,
|
||||
D_GS_SSYJ,
|
||||
D_BZ_YJJB,
|
||||
D_BZ_BKLYS,
|
||||
D_GS_ZDR_YJDJ,
|
||||
// D_BZ_BKLYS,
|
||||
D_BZ_XB,
|
||||
D_BZ_SF,
|
||||
D_GS_CSZT,
|
||||
@ -178,16 +129,16 @@ const {
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ,
|
||||
D_BZ_SJLY,
|
||||
// D_BZ_SJLY,
|
||||
D_BZ_QBLYJB,
|
||||
D_BZ_BKYJLX
|
||||
} = proxy.$dict(
|
||||
"D_GS_QLZDRLX",
|
||||
"D_BZ_YJLY",
|
||||
// "D_BZ_YJLY",
|
||||
"D_GSXT_YJXX_CZZT",
|
||||
"D_GS_SSYJ",
|
||||
"D_BZ_YJJB",
|
||||
"D_BZ_BKLYS",
|
||||
"D_GS_ZDR_YJDJ",
|
||||
// "D_BZ_BKLYS",
|
||||
"D_BZ_XB",
|
||||
"D_BZ_SF",
|
||||
"D_GS_CSZT",
|
||||
@ -195,91 +146,90 @@ const {
|
||||
"D_GS_ZDR_RYJB",
|
||||
"D_GS_ZDR_GJLB",
|
||||
"D_GS_BK_CZYQ",
|
||||
"D_BZ_SJLY",
|
||||
// "D_BZ_SJLY",
|
||||
"D_BZ_QBLYJB",
|
||||
"D_BZ_BKYJLX"
|
||||
);
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ });
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "处置状态",
|
||||
prop: "czzt",
|
||||
showType: "select",
|
||||
options: D_GSXT_YJXX_CZZT
|
||||
},
|
||||
{
|
||||
label: "预警时间",
|
||||
prop: "datetime",
|
||||
showType: "datetimerange",
|
||||
placeholder: "请选择预警时间"
|
||||
},
|
||||
{
|
||||
label: "姓名",
|
||||
prop: "yjRyxm",
|
||||
showType: "input",
|
||||
placeholder: "请输入姓名"
|
||||
},
|
||||
{
|
||||
label: "身份证号",
|
||||
prop: "yjRysfzh",
|
||||
showType: "input",
|
||||
placeholder: "请输入身份证号"
|
||||
},
|
||||
{
|
||||
label: "管控级别",
|
||||
prop: "qblyjb",
|
||||
showType: "select",
|
||||
options: D_BZ_QBLYJB
|
||||
},
|
||||
{
|
||||
label: "预警级别",
|
||||
prop: "yjJb",
|
||||
showType: "select",
|
||||
options: D_BZ_YJJB,
|
||||
placeholder: "请选择预警级别",
|
||||
multiple: true
|
||||
},
|
||||
{
|
||||
label: "布控时间",
|
||||
prop: "bksj",
|
||||
showType: "daterange",
|
||||
placeholder: "请选择布控开始时间"
|
||||
},
|
||||
{
|
||||
label: "接收单位",
|
||||
prop: "ssbmdm",
|
||||
showType: "department",
|
||||
placeholder: "请选择接收单位"
|
||||
},
|
||||
{
|
||||
label: "布控单位",
|
||||
prop: "gkbmdm",
|
||||
showType: "department",
|
||||
placeholder: "请选择布控单位"
|
||||
},
|
||||
const searchConfiger = ref([{
|
||||
label: "姓名",
|
||||
prop: "yjRyxm",
|
||||
showType: "input",
|
||||
placeholder: "请输入姓名"
|
||||
},
|
||||
{
|
||||
label: "身份证号",
|
||||
prop: "yjRysfzh",
|
||||
showType: "input",
|
||||
placeholder: "请输入身份证号"
|
||||
}, {
|
||||
label: "预警时间",
|
||||
prop: "datetime",
|
||||
showType: "datetimerange",
|
||||
placeholder: "请选择预警时间"
|
||||
},
|
||||
{
|
||||
label: "布控时间",
|
||||
prop: "bksj",
|
||||
showType: "daterange",
|
||||
placeholder: "请选择布控开始时间"
|
||||
}, {
|
||||
label: "处置状态",
|
||||
prop: "czzt",
|
||||
showType: "select",
|
||||
options: D_GSXT_YJXX_CZZT
|
||||
},
|
||||
{
|
||||
label: "管控级别",
|
||||
prop: "qblyjb",
|
||||
showType: "select",
|
||||
options: D_BZ_QBLYJB
|
||||
},
|
||||
{
|
||||
label: "预警级别",
|
||||
prop: "yjJb",
|
||||
showType: "select",
|
||||
options: D_GS_ZDR_YJDJ,
|
||||
placeholder: "请选择预警级别",
|
||||
multiple: true
|
||||
},
|
||||
|
||||
{
|
||||
label: "比对源",
|
||||
prop: "bkyjlx",
|
||||
showType: "select",
|
||||
options: D_BZ_BKYJLX,
|
||||
placeholder: "请选择比对源"
|
||||
},
|
||||
{
|
||||
label: "超时状态",
|
||||
prop: "cszt",
|
||||
placeholder: "请选择超时状态",
|
||||
showType: "select",
|
||||
options: D_GS_CSZT
|
||||
},
|
||||
{
|
||||
label: "在控状态",
|
||||
prop: "zkzt",
|
||||
showType: "select",
|
||||
options: D_GS_BKZT,
|
||||
placeholder: "请选择在控状态"
|
||||
}
|
||||
{
|
||||
label: "布控单位",
|
||||
prop: "gkbmdm",
|
||||
showType: "department",
|
||||
placeholder: "请选择布控单位"
|
||||
},
|
||||
{
|
||||
label: "接收单位",
|
||||
prop: "ssbmdm",
|
||||
showType: "department",
|
||||
placeholder: "请选择接收单位"
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
label: "比对源",
|
||||
prop: "bkyjlx",
|
||||
showType: "select",
|
||||
options: D_BZ_BKYJLX,
|
||||
placeholder: "请选择比对源"
|
||||
},
|
||||
{
|
||||
label: "超时状态",
|
||||
prop: "cszt",
|
||||
placeholder: "请选择超时状态",
|
||||
showType: "select",
|
||||
options: D_GS_CSZT
|
||||
},
|
||||
{
|
||||
label: "在控状态",
|
||||
prop: "zkzt",
|
||||
showType: "select",
|
||||
options: D_GS_BKZT,
|
||||
placeholder: "请选择在控状态"
|
||||
}
|
||||
]);
|
||||
const ORDIMG = "https://89.40.7.122:38496/image";
|
||||
const IMGYM = "https://sg.lz.dsj.xz/dhimage";
|
||||
@ -308,20 +258,26 @@ const pageData = reactive({
|
||||
tableColumn: [
|
||||
{ type: "index", label: "序号", width: 55, align: "center" },
|
||||
{ label: "处置状态", align: "center", width: 70, slotName: "czzt" },
|
||||
{ prop: "yjSj", label: "预警时间", width: 150 },
|
||||
{ prop: "yjSj", label: "预警时间" },
|
||||
{ prop: "yjRyxm", label: "人员姓名", width: 70, align: "center" },
|
||||
{ label: "性别", width: 50, align: "center", slotName: "xbdm" },
|
||||
{ prop: "nl", label: "年龄", width: 50, align: "center" },
|
||||
{ prop: "yjRysfzh", label: "身份证号", width: 150, align: "center" },
|
||||
{ prop: "yjRysfzh", label: "身份证号", align: "center" },
|
||||
{ label: "管控级别", width: 80, align: "center", slotName: "qblyjb" },
|
||||
{ label: "预警级别", width: 80, align: "center", slotName: "yjJb" },
|
||||
{ label: "布控时间", width: 80, align: "center", slotName: "bksj" },
|
||||
{ prop: "ssbm", label: "接收单位", width: 100, align: "center" },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: "center", width: 100 },
|
||||
{ prop: "bkyjlx", label: "比对源", align: "center", width: 80 },
|
||||
// { label: "布控开始时间", width: 80, align: "center", slotName: "bksj" },
|
||||
// { label: "布控结束时间", width: 80, align: "center", slotName: "bksj" },
|
||||
{ label: "布控开始时间", width: 80, align: "center", slotName: "bkkssj" },
|
||||
{ label: "布控结束时间", width: 80, align: "center", slotName: "bkjssj" },
|
||||
// row.bkkssj && row.bkjssj
|
||||
{ prop: "ssbm", label: "接收单位", width: 80, align: "center" },
|
||||
// { prop: "bkyjlx", label: "比对源", align: "center", width: 80 },
|
||||
{ label: "本地布控", align: "center", width: 80, slotName: "bkyj" },
|
||||
{ label: "相似度", slotName: "xsd", align: "center", width: 50 },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: "center", width: 100 },
|
||||
{ label: "预警内容", prop: "yjNr", align: "center" },
|
||||
{ label: "操作", width: 180, slotName: "operation" },
|
||||
{ prop: "zjfknr", label: "最近反馈", width: 100, align: "center" },
|
||||
{ label: "操作", width: 200, slotName: "operation" },
|
||||
{ label: "超时状态", width: 80, align: "center", slotName: "cszt" },
|
||||
{ label: "在控状态", width: 70, align: "center", slotName: "zkzt" }
|
||||
// { prop: "bkkssj", label: "布控开始时间", align: "center" },
|
||||
@ -339,18 +295,6 @@ const pageData = reactive({
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem("deptId") ? getItem("deptId")[0].deptLevel : "";
|
||||
permission_sfqs.value = str.startsWith("2" || "3") ? false : true;
|
||||
let rols = getItem("roleList") ? getItem("roleList") : [];
|
||||
let obj = rols.find((item) => {
|
||||
return ["JS_666666", "JS_777777", "JS_888888"].includes(item.roleCode);
|
||||
});
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
@ -365,6 +309,7 @@ const onSearch = (val) => {
|
||||
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
@ -410,7 +355,7 @@ const handleQsFk = (val, type) => {
|
||||
proxy
|
||||
.$confirm("是否确定要签收?", "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
qcckPost({ id: val.id, xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = "02";
|
||||
getList();
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
@ -454,13 +399,12 @@ const handleCzjy = (row) => {
|
||||
};
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight =
|
||||
window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
// 指派
|
||||
const dataList = ref(null);
|
||||
const warningShow = ref(false);
|
||||
@ -518,7 +462,8 @@ const handleExportData = (arr) => {
|
||||
xsd_name: "相似度",
|
||||
yjNr: "预警内容",
|
||||
cszt_name: "超时状态",
|
||||
zkzt_name: "在控状态"
|
||||
zkzt_name: "在控状态",
|
||||
zjfknr: "最近反馈"
|
||||
};
|
||||
const data = arr.map((item, index) => {
|
||||
return {
|
||||
@ -526,7 +471,7 @@ const handleExportData = (arr) => {
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
xbdm_name: getMultiDictVal(item.xbdm, D_BZ_XB),
|
||||
qblyjb_name: getMultiDictVal(item.qblyjb, D_BZ_QBLYJB),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_GS_ZDR_YJDJ),
|
||||
bkyjlx_name: getMultiDictVal(item.bkyjlx, D_BZ_BKYJLX),
|
||||
xsd_name: (item.xsd > 0 ? item.xsd : 0) + "%",
|
||||
cszt_name: getMultiDictVal(item.cszt, D_GS_CSZT),
|
||||
@ -556,7 +501,7 @@ const handleQs = () => {
|
||||
.$confirm(texy, "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
let ids = wqs.map((item) => item.id);
|
||||
qcckPost({ ids }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
qcckPost({ ids, xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
.then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
@ -565,7 +510,7 @@ const handleQs = () => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
|
||||
// 详情
|
||||
@ -601,6 +546,41 @@ const handleSelectConfirm = (selectedData) => {
|
||||
// 这里可以调用接口进行关联操作
|
||||
// qcckPost({ ... }, "/api/xxx").then(res => { ... })
|
||||
};
|
||||
|
||||
const userIfo = ref('')
|
||||
const idEntityCard = ref()
|
||||
const USERNAME = ref()
|
||||
// 新增一个定时器
|
||||
const timer = ref(null)
|
||||
onMounted(() => {
|
||||
let str = getItem("deptId") ? getItem("deptId")[0].deptLevel : "";
|
||||
permission_sfqs.value = str.startsWith("2" || "3") ? false : true;
|
||||
let rols = getItem("roleList") ? getItem("roleList") : [];
|
||||
let obj = rols.find((item) => {
|
||||
return ["JS_666666", "JS_777777", "JS_888888"].includes(item.roleCode);
|
||||
});
|
||||
roleCode.value = obj ? true : false;
|
||||
userIfo.value = getItem('deptId') ? getItem('deptId')[0] : {}
|
||||
idEntityCard.value = getItem('idEntityCard')
|
||||
USERNAME.value = getItem('USERNAME')
|
||||
tabHeightFn();
|
||||
getList();
|
||||
// 先清除再创建,防止重复
|
||||
if (timer.value) {
|
||||
clearInterval(timer.value);
|
||||
}
|
||||
timer.value = setInterval(() => {
|
||||
getList();
|
||||
}, 1000 * 60 * 5);
|
||||
});
|
||||
|
||||
|
||||
onUnmounted(() => {
|
||||
if (timer.value) {
|
||||
clearInterval(timer.value);
|
||||
timer.value = null;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' />
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn" />
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
@ -58,7 +58,7 @@ import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPan
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB, D_BZ_YJLX, D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB", "D_BZ_YJLX", 'D_BZ_YJLY'); //获取字典数据
|
||||
@ -120,6 +120,7 @@ const onSearch = (val) => {
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
nextTick(tabHeightFn);
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
@ -178,9 +179,12 @@ const pushAssess = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 240;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 240;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
@ -37,12 +37,12 @@
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值" />
|
||||
</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="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>
|
||||
@ -137,13 +137,13 @@ const pageData = reactive({
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" ,width: 180},
|
||||
{ label: "预警时间", prop: "yjsj", width: 180 },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" ,width: 180},
|
||||
{ label: "身份证号", prop: "sfzh", width: 180 },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width: 90 },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ label: "活动频次", prop: "sfcs", width: 90 },
|
||||
{ label: "预警分值", prop: "sffz", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
@ -370,14 +370,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
|
||||
@ -2,109 +2,57 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel :fields="searchConfiger" @search="onSearch">
|
||||
<QueryFormPanel :fields="searchConfiger" @search="onSearch" @collapse="tabHeightFn">
|
||||
<template #yjfz>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="queryFrom.yjksfz"
|
||||
type="number"
|
||||
placeholder="开始分值"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input
|
||||
v-model="queryFrom.yjjsfz"
|
||||
type="number"
|
||||
placeholder="结束分值"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input v-model="queryFrom.yjksfz" type="number" placeholder="开始分值" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
<el-input v-model="queryFrom.yjjsfz" type="number" placeholder="结束分值" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
<template #yjcs>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="queryFrom.ksyjcs"
|
||||
type="number"
|
||||
placeholder="开始次数"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input
|
||||
v-model="queryFrom.jsyjcs"
|
||||
type="number"
|
||||
placeholder="结束次数"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input v-model="queryFrom.ksyjcs" type="number" placeholder="开始次数" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
<el-input v-model="queryFrom.jsyjcs" type="number" placeholder="结束次数" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
<template #but>
|
||||
|
||||
<el-button type="primary" @click="exportExl" size="small"
|
||||
>导出</el-button
|
||||
>
|
||||
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
size="small"
|
||||
@click="exportExcelAll"
|
||||
>筛选导出</el-button
|
||||
>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
|
||||
<el-button type="primary" size="small" @click="handleQs"
|
||||
>签收</el-button
|
||||
>
|
||||
<el-button type="primary" :loading="btnLoading" size="small" @click="exportExcelAll">筛选导出</el-button>
|
||||
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div :style="{ height: pageData.tableHeight + 40 + 'px' }" class="bgTable">
|
||||
<WarnDataTable
|
||||
:loading="pageData.tableConfiger.loading"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData"
|
||||
:columns="pageData.tableColumn"
|
||||
table-class="warn-table"
|
||||
@selectionChange="handleChooseData"
|
||||
>
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff" @click="handleClick(row)">{{
|
||||
row.sfcs
|
||||
}}</span>
|
||||
</template>
|
||||
<template #yjcs="{ row }">
|
||||
<span
|
||||
style="color: #0072ff; cursor: pointer"
|
||||
@click="openYjDetail(row)"
|
||||
>{{ row.yjcs }}</span
|
||||
>
|
||||
<span style="color: #0072ff; cursor: pointer" @click="openYjDetail(row)">{{ row.yjcs }}</span>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag
|
||||
:value="row.czzt"
|
||||
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
|
||||
:tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT"
|
||||
/>
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJBQLX" />
|
||||
</template>
|
||||
<template #yjjb="{ row }">
|
||||
<div :style="{ 'background-color': ys(row) }">
|
||||
<DictTag
|
||||
:value="row.yjjb"
|
||||
color="#fff"
|
||||
:tag="false"
|
||||
:options="D_BZ_YJJB"
|
||||
/>
|
||||
<DictTag :value="row.yjjb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
@ -116,79 +64,40 @@
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode"
|
||||
>处置建议</span
|
||||
>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span
|
||||
class="success"
|
||||
@click="handleQsFk(row, '签收')"
|
||||
v-if="row.czzt == '01' && permission_sfqs"
|
||||
>签收</span
|
||||
>
|
||||
<span
|
||||
class="success"
|
||||
@click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs"
|
||||
>反馈</span
|
||||
>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系数</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddFrom(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="03" />
|
||||
<Information
|
||||
v-model="showDialog"
|
||||
title="发送指令"
|
||||
@submit="submit"
|
||||
@close="closeFszl"
|
||||
>
|
||||
<SemdFqzl
|
||||
ref="semdFqzlRef"
|
||||
:itemData="itemData"
|
||||
@handleClose="handleClose"
|
||||
identification="yj"
|
||||
:tacitly="tacitly"
|
||||
/>
|
||||
<Information v-model="showDialog" title="发送指令" @submit="submit" @close="closeFszl">
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom
|
||||
ref="addModelRef"
|
||||
:dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"
|
||||
/>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
|
||||
<Xwbq ref="xwbqRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<Sfbq ref="sfbqRef" :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="/yjzxSfyj/sjxspz"
|
||||
:roleIds="roleIds"
|
||||
/>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxSfyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
|
||||
<!-- 预警详情弹窗 -->
|
||||
<dialogYjList
|
||||
v-model="yjDetailVisible"
|
||||
:dataList="yjDetailData"
|
||||
:dict="{ D_BZ_JQLY, JQLB, D_BZ_JQDJ, JQXL, JQLX }"
|
||||
/>
|
||||
<dialogYjList v-model="yjDetailVisible" :dataList="yjDetailData" :dict="{ D_BZ_JQLY, JQLB, D_BZ_JQDJ, JQXL, JQLX }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -203,7 +112,7 @@ import Xwbq from "./components/xwbq.vue";
|
||||
import Sfbq from "./components/sfbq.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 } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
|
||||
import { tbGsxtBqglSelectList } from "@/api/zdr";
|
||||
@ -227,7 +136,7 @@ const {
|
||||
D_BZ_YJJB,
|
||||
D_BZ_YJBQLX,
|
||||
D_BZ_JQDJ,
|
||||
D_GS_BQ_DJ,
|
||||
// D_GS_BQ_DJ,
|
||||
JQLB,
|
||||
D_BZ_JQLY,
|
||||
JQXL
|
||||
@ -237,7 +146,7 @@ const {
|
||||
"D_BZ_YJJB",
|
||||
"D_BZ_YJBQLX",
|
||||
"D_BZ_JQDJ",
|
||||
"D_GS_BQ_DJ",
|
||||
// "D_GS_BQ_DJ",
|
||||
"JQLB",
|
||||
"D_BZ_JQLY",
|
||||
"JQXL"
|
||||
@ -360,6 +269,7 @@ const onSearch = (val) => {
|
||||
}
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
@ -406,21 +316,21 @@ const gettbGsxtBqglSelectList = (val) => {
|
||||
queryFrom.value.bqxl = "";
|
||||
bqLbData.value.bqXl = res.data
|
||||
? res.data.map((item) => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
};
|
||||
})
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
};
|
||||
})
|
||||
: [];
|
||||
} else {
|
||||
bqLbData.value.bqDl = res
|
||||
? res.map((item) => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm,
|
||||
id: item.id
|
||||
};
|
||||
})
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm,
|
||||
id: item.id
|
||||
};
|
||||
})
|
||||
: [];
|
||||
}
|
||||
});
|
||||
@ -537,12 +447,12 @@ const handleCzjy = (row) => {
|
||||
};
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight =
|
||||
window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
/** 选中项 */
|
||||
const selectRows = ref([]);
|
||||
const handleChooseData = (val) => {
|
||||
@ -553,7 +463,7 @@ const btnLoading = ref(false);
|
||||
const exportExcelAll = () => {
|
||||
btnLoading.value = true;
|
||||
let params = { ...queryFrom.value };
|
||||
params.startTime = queryFrom.value.dateTime ? queryFrom.value.dateTime[0]: "";
|
||||
params.startTime = queryFrom.value.dateTime ? queryFrom.value.dateTime[0] : "";
|
||||
params.endTime = queryFrom.value.dateTime ? queryFrom.value.dateTime[1] : "";
|
||||
delete params.dateTime;
|
||||
qcckPost(params, "/mosty-gsxt/tbYjxx/getBqyjList").then((res) => {
|
||||
@ -627,7 +537,7 @@ const handleQs = () => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
const ys = (item) => {
|
||||
switch (item.yjjb) {
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
@ -37,12 +37,12 @@
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值" />
|
||||
</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="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>
|
||||
@ -137,13 +137,13 @@ const pageData = reactive({
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" ,width: 180},
|
||||
{ label: "预警时间", prop: "yjsj", width: 180 },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" ,width: 180},
|
||||
{ label: "身份证号", prop: "sfzh", width: 180 },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width: 90 },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ label: "活动频次", prop: "sfcs", width: 90 },
|
||||
{ label: "预警分值", prop: "sffz", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
@ -370,14 +370,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel :fields="searchConfiger" @search='onSearch'>
|
||||
<QueryFormPanel :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn">
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
@ -31,7 +31,7 @@
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系数</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
@ -71,7 +71,7 @@ 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 } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
@ -162,6 +162,7 @@ const onSearch = (val) => {
|
||||
}
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
@ -306,11 +307,12 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
|
||||
@ -39,10 +39,10 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_MXGL_MXLX } = proxy.$dict("D_MXGL_MXLX")
|
||||
const { /* D_MXGL_MXLX */ } = proxy.$dict(/* "D_MXGL_MXLX" */)
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "模型类型", prop: 'mxlx', placeholder: "请选择模型类型", showType: "select", options: D_MXGL_MXLX },
|
||||
{ label: "模型类型", prop: 'mxlx', placeholder: "请选择模型类型", showType: "select", options: [] /* D_MXGL_MXLX */ },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
@ -1,46 +1,20 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:draggable="true"
|
||||
v-model="showDialog"
|
||||
:append-to-body="true"
|
||||
:destroy-on-close="true"
|
||||
:title="title"
|
||||
:close-on-click-modal="false"
|
||||
width="700px"
|
||||
>
|
||||
<FormMessage
|
||||
v-model="listQuery"
|
||||
:formList="formData"
|
||||
labelWidth="150px"
|
||||
ref="elform"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-dialog :draggable="true" v-model="showDialog" :append-to-body="true" :destroy-on-close="true" :title="title"
|
||||
:close-on-click-modal="false" width="700px">
|
||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="150px" ref="elform" :rules="rules">
|
||||
<template #fkrxm>
|
||||
<MOSTY.Other
|
||||
width="100%"
|
||||
@click="handleChoose('fkrxm')"
|
||||
clearable
|
||||
v-model="listQuery.fkrxm"
|
||||
placeholder="请选择反馈人"
|
||||
:readonly="true"
|
||||
/>
|
||||
<MOSTY.Other width="100%" @click="handleChoose('fkrxm')" clearable v-model="listQuery.fkrxm"
|
||||
placeholder="请选择反馈人" :readonly="true" />
|
||||
</template>
|
||||
</FormMessage>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm" :loading="loading"
|
||||
>确认</el-button
|
||||
>
|
||||
<el-button type="primary" @click="submitForm" :loading="loading">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<ChooseUser
|
||||
v-model="chooseUserVisible"
|
||||
v-if="chooseUserVisible"
|
||||
@choosedUsers="handleUserSelected"
|
||||
:Single="true"
|
||||
/>
|
||||
<ChooseUser v-model="chooseUserVisible" v-if="chooseUserVisible" @choosedUsers="handleUserSelected" :Single="true" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -49,6 +23,7 @@ import emitter from "@/utils/eventBus.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import { getItem } from "@/utils/storage.js"
|
||||
import { onMounted, reactive, ref, getCurrentInstance, onUnmounted } from "vue";
|
||||
const emit = defineEmits(["change"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -58,7 +33,9 @@ const { D_BZ_SF, D_ZB_CZCS, D_ZB_CZJG } = proxy.$dict(
|
||||
"D_ZB_CZCS",
|
||||
"D_ZB_CZJG"
|
||||
);
|
||||
|
||||
const userIfo = ref('')
|
||||
const idEntityCard = ref()
|
||||
const USERNAME = ref()
|
||||
const elform = ref();
|
||||
const showDialog = ref(false);
|
||||
const loading = ref(false);
|
||||
@ -82,6 +59,7 @@ const formData = ref([
|
||||
type: "select",
|
||||
options: D_ZB_CZCS
|
||||
},
|
||||
{ label: "处置经过描述", prop: "czjgms", type: "textarea", width: "100%" },
|
||||
{
|
||||
label: "是否下发预警信息",
|
||||
prop: "sfxfyj",
|
||||
@ -99,20 +77,21 @@ const formData = ref([
|
||||
type: "department"
|
||||
},
|
||||
{ label: "反馈人单位联系电话", prop: "fkrdwlxdh", type: "input" },
|
||||
|
||||
{ label: "处置经过描述", prop: "czjgms", type: "textarea", width: "100%" },
|
||||
{ label: "处置备注", prop: "czbz", type: "textarea", width: "100%" },
|
||||
|
||||
{ label: "备注", prop: "bz", type: "textarea", width: "100%" }
|
||||
]);
|
||||
|
||||
const rules = reactive({
|
||||
czjg: [{ required: true, message: "请选择处置结果", trigger: "change" }],
|
||||
czsj: [{ required: true, message: "请选择处置时间", trigger: "change" }],
|
||||
cqcs: [{ required: true, message: "请选择采取措施", trigger: "change" }]
|
||||
cqcs: [{ required: true, message: "请选择采取措施", trigger: "change" }],
|
||||
czjgms: [{ required: true, message: "请输入处置经过描述", trigger: "change" }]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
userIfo.value = getItem('deptId') ? getItem('deptId')[0] : {}
|
||||
idEntityCard.value = getItem('idEntityCard')
|
||||
USERNAME.value = getItem('USERNAME')
|
||||
emitter.on("openZbFkDialog", (val) => {
|
||||
showDialog.value = true;
|
||||
title.value = val.type || "反馈";
|
||||
@ -140,7 +119,8 @@ const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
loading.value = true;
|
||||
const prome = {
|
||||
...listQuery.value
|
||||
...listQuery.value,
|
||||
xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode
|
||||
};
|
||||
qcckPost(prome, "/mosty-gsxt/tbYjxx/swyjfk")
|
||||
.then(() => {
|
||||
|
||||
@ -4,72 +4,30 @@
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel
|
||||
v-model="queryFrom"
|
||||
:fields="searchConfiger"
|
||||
ref="searchDom"
|
||||
@search="onSearch"
|
||||
>
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search="onSearch"
|
||||
@collapse="tabHeightFn">
|
||||
<template #yjCs>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="queryFrom.yjkscs"
|
||||
type="number"
|
||||
placeholder="开始次数"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input
|
||||
v-model="queryFrom.yjjscs"
|
||||
type="number"
|
||||
placeholder="结束次数"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input v-model="queryFrom.yjkscs" type="number" placeholder="开始次数" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
<el-input v-model="queryFrom.yjjscs" type="number" placeholder="结束次数" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
<template #nl>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="queryFrom.ksnl"
|
||||
type="number"
|
||||
placeholder="开始年龄"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input
|
||||
v-model="queryFrom.jsnl"
|
||||
type="number"
|
||||
placeholder="结束年龄"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
></el-input>
|
||||
<el-input v-model="queryFrom.ksnl" type="number" placeholder="开始年龄" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
<el-input v-model="queryFrom.jsnl" type="number" placeholder="结束年龄" style="width: 130px" clearable
|
||||
:min="0"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl"
|
||||
>批量导出</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
size="small"
|
||||
@click="exportExcelAll"
|
||||
>筛选导出</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleQs"
|
||||
>批量签收</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleQs"
|
||||
>批量分析</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="countPeople"
|
||||
>计算人数</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" :loading="btnLoading" size="small" @click="exportExcelAll">筛选导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
@ -83,88 +41,51 @@
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div style="background-color: #fff">
|
||||
<WarnDataTable
|
||||
:loading="pageData.tableConfiger.loading"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData"
|
||||
:columns="pageData.tableColumn"
|
||||
table-class="warn-table"
|
||||
@selectionChange="handleChooseData"
|
||||
>
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag
|
||||
:value="row.czzt"
|
||||
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
|
||||
:tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT"
|
||||
/>
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : row.czzt === '02' ? '#1d72e8' : '#000'"
|
||||
:tag="false" :options="D_GSXT_YJXX_CZZT" style="cursor: pointer" @click="particularsOpen(row)" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag
|
||||
:value="row.yjJb"
|
||||
color="#fff"
|
||||
:tag="false"
|
||||
:options="D_BZ_YJJB"
|
||||
/>
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<!-- <template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
</template> -->
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<span
|
||||
class="primary"
|
||||
@click="handleQsFk(row)"
|
||||
v-if="row.czzt == '01'"
|
||||
>签收</span
|
||||
>
|
||||
<span class="primary" @click="handleQsFk(row, '反馈')" v-else
|
||||
>反馈</span
|
||||
>
|
||||
<span class="primary" @click="handleQsFk(row)" v-if="row.czzt == '01'">签收</span>
|
||||
<span class="primary" @click="handleQsFk(row, '反馈')" v-else>反馈</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span
|
||||
class="warning"
|
||||
@click="failWarning(row)"
|
||||
v-if="row.sfbc != '1'"
|
||||
>报错</span
|
||||
>
|
||||
<span
|
||||
@click="payAttention(row)"
|
||||
:class="row.sfgz == 0 ? 'primary' : 'danger'"
|
||||
>{{ row.sfgz == 0 ? "关注" : "取消关注" }}</span
|
||||
>
|
||||
<span class="warning" @click="failWarning(row)" v-if="row.sfbc != '1'">报错</span>
|
||||
<span @click="payAttention(row)" :class="row.sfgz == 0 ? 'primary' : 'danger'">{{ row.sfgz == 0 ? "关注" :
|
||||
"取消关注" }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars
|
||||
v-model="particularsShow"
|
||||
:dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }"
|
||||
/>
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
<FkDialog @change="getList" lx="05" />
|
||||
<ZbFkDialog @change="getList" />
|
||||
@ -182,13 +103,14 @@ import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPan
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick, onUnmounted } from "vue";
|
||||
import PeopleConut from "./peopleConut.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZbFkDialog from "./ZbFkDialog.vue";
|
||||
import { getItem } from "@/utils/storage.js"
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {
|
||||
D_BZ_YJLY,
|
||||
// D_BZ_YJLY,
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_BZ_YJJB,
|
||||
@ -198,7 +120,7 @@ const {
|
||||
D_GS_ZDR_RYJB,
|
||||
D_BZ_SF
|
||||
} = proxy.$dict(
|
||||
"D_BZ_YJLY",
|
||||
// "D_BZ_YJLY",
|
||||
"D_GS_QLZDRLX",
|
||||
"D_BZ_YJJB",
|
||||
"D_BZ_XB",
|
||||
@ -212,33 +134,6 @@ const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
key: "dateTime",
|
||||
label: "预警时间",
|
||||
type: "datetimerange",
|
||||
placeholder: "请选择预警时间"
|
||||
},
|
||||
{
|
||||
key: "yjJb",
|
||||
label: "预警级别",
|
||||
type: "select",
|
||||
options: D_BZ_YJJB,
|
||||
multiple: true,
|
||||
placeholder: "请选择预警级别"
|
||||
},
|
||||
{
|
||||
key: "ssbmdm",
|
||||
label: "接收单位",
|
||||
type: "department",
|
||||
placeholder: "请选择接收单位"
|
||||
},
|
||||
{
|
||||
key: "sfglyj",
|
||||
label: "关联预警",
|
||||
type: "select",
|
||||
options: D_BZ_SF,
|
||||
placeholder: "请选择关联预警"
|
||||
},
|
||||
{ key: "yjRyxm", label: "姓名", type: "input", placeholder: "请输入姓名" },
|
||||
{
|
||||
key: "xbdm",
|
||||
@ -246,6 +141,36 @@ const searchConfiger = ref([
|
||||
type: "select",
|
||||
options: D_BZ_XB,
|
||||
placeholder: "请选择性别"
|
||||
}, {
|
||||
key: "yjRysfzh",
|
||||
label: "身份证号码",
|
||||
type: "input",
|
||||
placeholder: "请输入身份证号码"
|
||||
}, {
|
||||
key: "nl",
|
||||
label: "年龄",
|
||||
type: "slot",
|
||||
placeholder: "请输入年龄"
|
||||
},
|
||||
|
||||
{
|
||||
key: "bqdl",
|
||||
label: "人员类别",
|
||||
type: "select",
|
||||
options: D_GS_QLZDRLX,
|
||||
placeholder: "请选择人员类别"
|
||||
}, {
|
||||
key: "yjbqmc",
|
||||
label: "人员细类",
|
||||
type: "input",
|
||||
placeholder: "请输入人员细类"
|
||||
}
|
||||
,
|
||||
{ key: "bqdl", label: "人员级别", type: "select", options: D_GS_ZDR_RYJB }, {
|
||||
key: "dateTime",
|
||||
label: "预警时间",
|
||||
type: "datetimerange",
|
||||
placeholder: "请选择预警时间"
|
||||
},
|
||||
{
|
||||
key: "cszt",
|
||||
@ -254,13 +179,6 @@ const searchConfiger = ref([
|
||||
options: D_GS_CSZT,
|
||||
placeholder: "请选择超时状态"
|
||||
},
|
||||
{
|
||||
key: "bqdl",
|
||||
label: "人员类别",
|
||||
type: "select",
|
||||
options: D_GS_QLZDRLX,
|
||||
placeholder: "请选择人员类别"
|
||||
},
|
||||
{
|
||||
key: "sfgz",
|
||||
label: "重点关注",
|
||||
@ -275,18 +193,37 @@ const searchConfiger = ref([
|
||||
options: D_BZ_SF,
|
||||
placeholder: "请选择二次指派"
|
||||
},
|
||||
|
||||
|
||||
|
||||
{
|
||||
key: "yjRysfzh",
|
||||
label: "身份证号码",
|
||||
type: "input",
|
||||
placeholder: "请输入身份证号码"
|
||||
key: "yjJb",
|
||||
label: "预警级别",
|
||||
type: "select",
|
||||
options: D_BZ_YJJB,
|
||||
multiple: true,
|
||||
placeholder: "请选择预警级别"
|
||||
},
|
||||
{
|
||||
key: "nl",
|
||||
label: "年龄",
|
||||
type: "slot",
|
||||
placeholder: "请输入年龄"
|
||||
key: "czzt",
|
||||
label: "签收状态",
|
||||
type: "select",
|
||||
options: D_GSXT_YJXX_CZZT,
|
||||
placeholder: "请选择签收状态"
|
||||
}, {
|
||||
key: "sfglyj",
|
||||
label: "关联预警",
|
||||
type: "select",
|
||||
options: D_BZ_SF,
|
||||
placeholder: "请选择关联预警"
|
||||
},
|
||||
{
|
||||
key: "ssbmdm",
|
||||
label: "接收单位",
|
||||
type: "department",
|
||||
placeholder: "请选择接收单位"
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
key: "yjCs",
|
||||
@ -294,19 +231,12 @@ const searchConfiger = ref([
|
||||
type: "slot",
|
||||
placeholder: "请输入预警次数"
|
||||
},
|
||||
{ key: "bqdl", label: "人员级别", type: "select", options: D_GS_ZDR_RYJB },
|
||||
{ key: "yjLylx", label: "轨迹类别", type: "select", options: D_GS_ZDR_GJLB },
|
||||
{
|
||||
key: "yjDz",
|
||||
label: "活动发生地",
|
||||
type: "input",
|
||||
placeholder: "请输入活动发生地"
|
||||
},
|
||||
{
|
||||
key: "yjbqmc",
|
||||
label: "人员细类",
|
||||
type: "input",
|
||||
placeholder: "请输入人员细类"
|
||||
}
|
||||
]);
|
||||
const btnLoading = ref(false);
|
||||
@ -336,9 +266,11 @@ const pageData = reactive({
|
||||
{ label: "性别", width: 56, align: "center", slotName: "xbdm" },
|
||||
{ prop: "nl", label: "年龄", width: 56, align: "center" },
|
||||
{ label: "预警级别", width: 88, align: "center", slotName: "yjJb" },
|
||||
{ label: "人员类别", width: 90, align: "center", slotName: "bqdl" },
|
||||
{ prop: "bqdlmc", label: "人员类别", width: 90, align: "center" },
|
||||
{ prop: "yjbqmc", label: "人员细类", width: 92 },
|
||||
{ label: "轨迹类别", width: 92, align: "center", slotName: "yjLylx" },
|
||||
// { label: "轨迹类别", width: 92, align: "center", slotName: "yjLylx" },
|
||||
{ prop: "yjLylxmc", label: "轨迹类别", width: 80, align: "center" },
|
||||
{ prop: "zjfknr", label: "最近反馈", width: 80, align: "center" },
|
||||
{ prop: "yjDz", label: "活动发生地" },
|
||||
{ prop: "ssbm", label: "接收单位" },
|
||||
{ prop: "yjCs", label: "次数", width: 60, align: "center" },
|
||||
@ -347,10 +279,6 @@ const pageData = reactive({
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
@ -362,6 +290,7 @@ const onSearch = (val) => {
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
@ -455,6 +384,7 @@ const handleExportData = (arr) => {
|
||||
yjLylx_name: "轨迹类别",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
zjfknr: "最近反馈",
|
||||
yjCs: "次数",
|
||||
cszt_name: "超时状态"
|
||||
};
|
||||
@ -492,7 +422,7 @@ const handleQs = () => {
|
||||
.$confirm(texy, "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
let ids = wqs.map((item) => item.id);
|
||||
qcckPost({ ids }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
qcckPost({ ids, xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
.then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
@ -501,7 +431,7 @@ const handleQs = () => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
// 详情
|
||||
const dataPres = ref({});
|
||||
@ -525,7 +455,7 @@ const handleQsFk = (row, type) => {
|
||||
proxy
|
||||
.$confirm("确认要签收该条预警数据吗?", "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
qcckPost({ ids: [row.id] }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
qcckPost({ ids: [row.id], xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
.then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
@ -534,7 +464,7 @@ const handleQsFk = (row, type) => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
}
|
||||
};
|
||||
// 关注
|
||||
@ -560,7 +490,7 @@ const payAttention = (row) => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
// 人数计算
|
||||
const searchDom = ref(null);
|
||||
@ -588,12 +518,36 @@ const countPeople = () => {
|
||||
};
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight =
|
||||
window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
const userIfo = ref('')
|
||||
const idEntityCard = ref()
|
||||
const USERNAME = ref()
|
||||
const timer = ref(null)
|
||||
onMounted(() => {
|
||||
userIfo.value = getItem('deptId') ? getItem('deptId')[0] : {}
|
||||
idEntityCard.value = getItem('idEntityCard')
|
||||
USERNAME.value = getItem('USERNAME')
|
||||
tabHeightFn();
|
||||
getList();
|
||||
if (timer.value) {
|
||||
clearInterval(timer.value);
|
||||
} else {
|
||||
timer.value = setInterval(() => {
|
||||
getList();
|
||||
}, 1000 * 60 * 5);
|
||||
}
|
||||
});
|
||||
onUnmounted(() => {
|
||||
if (timer.value) {
|
||||
clearInterval(timer.value);
|
||||
timer.value = null;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@ -0,0 +1,472 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container" v-loading="loading">
|
||||
<div class="three-column-layout">
|
||||
<!-- 重点人员基本信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员基本信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员姓名:</span>
|
||||
<span class="info-value">{{ dataForm.yjRyxm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">性别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.xbdm" :tag="false" :options="dict.D_BZ_XB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">年龄:</span>
|
||||
<span class="info-value">{{ dataForm.nl }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">身份证号码:</span>
|
||||
<span class="info-value">{{ dataForm.yjRysfzh }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">户籍地:</span>
|
||||
<span class="info-value">{{ dataForm.hjdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">现住地址:</span>
|
||||
<span class="info-value">{{ dataForm.xzdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">入库时间:</span>
|
||||
<span class="info-value">{{ dataForm.zdrRkkssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">预警级别:</span>
|
||||
<span class="info-value warning-level" :class="ys()">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.bqdl" :tag="false" :options="dict.D_GS_QLZDRLX" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员级别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_GS_ZDR_RYJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">人员细类:</span>
|
||||
<span class="info-value">{{ dataForm.yjbqmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">立案单位:</span>
|
||||
<span class="info-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">简要案情:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">一标三实:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 重点人员活动信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员活动信息页</div>
|
||||
<div class="info-section blue-bg">
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">轨迹类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjLylx" :tag="false" :options="dict.D_GS_ZDR_GJLB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">核查时间:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].czsj }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">比对时间:</span>
|
||||
<span class="info-value">{{ dataForm.yjSj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动发生地:</span>
|
||||
<span class="info-value">{{ dataForm.xxdz }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动场所:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].xxdz }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动信息:</span>
|
||||
<span class="info-value">{{ dataForm.yjNr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息提供单位:</span>
|
||||
<span class="info-value">{{ dataForm.jczmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息接收单位:</span>
|
||||
<span class="info-value">{{ dataForm.ssbm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">二次指派单位:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.zpList && dataForm.zpList.length > 0">
|
||||
<span v-for="(item, index) in dataForm.zpList" :key="item.id">
|
||||
{{ item.zpbm }}<span v-if="index < dataForm.zpList.length - 1">,</span>
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">签收时限:</span>
|
||||
<span class="info-value">{{ dataForm.qssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈时限:</span>
|
||||
<span class="info-value">{{ dataForm.fksj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">处置建议:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.czjyList && dataForm.czjyList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.czjyList" :key="item.id">
|
||||
<span>{{ `${index + 1}、` + item.jynr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈内容:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.fkList && dataForm.fkList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.fkList" :key="item.id">
|
||||
<span v-if="item.ckczbcxx">{{ `${index + 1}、` + item.ckczbcxx }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 历史预警信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">历史预警信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="history-item" v-for="(item, index) in dataForm.yjgjList" :key="item.id">
|
||||
<span class="history-index">{{ `${index + 1}:` }}</span>
|
||||
<span class="history-content">{{ item.yjNr }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, getCurrentInstance, watch, ref } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警详情'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '90%'
|
||||
}, dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const loading = ref(false)
|
||||
let abortController = null
|
||||
const close = () => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
abortController = null
|
||||
}
|
||||
loading.value = false
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const dataForm = ref({});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
getPart(props.dataList.id)
|
||||
}
|
||||
}, { deep: true });
|
||||
const getPart = (id) => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
}
|
||||
abortController = new AbortController()
|
||||
loading.value = true
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${id}`, { signal: abortController.signal }).then(res => {
|
||||
if (res) {
|
||||
dataForm.value = res
|
||||
} else {
|
||||
dataForm.value = {}
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.name !== 'AbortError') {
|
||||
console.error('请求失败:', err)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
const ys = () => {
|
||||
switch (dataForm.value.yjJb) {
|
||||
case '01':
|
||||
return 'red';
|
||||
case '02':
|
||||
return 'orange';
|
||||
case '03':
|
||||
return 'yellow';
|
||||
case '04':
|
||||
return 'blue';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.archive-container {
|
||||
padding: 20px;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.column-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: #f0f2f5;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px 4px 0 0;
|
||||
text-align: center;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.column .info-section {
|
||||
flex: 1;
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.info-section.blue-bg {
|
||||
background: #e6f0f8;
|
||||
border-color: #9ed7ff;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-item.full-width {
|
||||
flex: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
width: 80px;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
flex: 1;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-value.text-area {
|
||||
min-height: 80px;
|
||||
align-items: flex-start;
|
||||
padding: 8px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* 红 */
|
||||
.warning-level.red {
|
||||
background: #fef0f0;
|
||||
border-color: #ffccc7;
|
||||
color: #f56c6c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 橙 */
|
||||
.warning-level.orange {
|
||||
background: #fffbe6;
|
||||
border-color: #ffe58f;
|
||||
color: #d48806 !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 黄 */
|
||||
.warning-level.yellow {
|
||||
background: #fdf6ec;
|
||||
border-color: #faecd8;
|
||||
color: #e6a23c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝 */
|
||||
.warning-level.blue {
|
||||
background: #ecf5ff;
|
||||
border-color: #d9ecff;
|
||||
color: #409eff !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
/* align-items: center; */
|
||||
}
|
||||
|
||||
.history-index {
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
flex: 1;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.demo-tabs {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__content {
|
||||
min-height: 400px;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,19 @@
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules" :labelWidth="90">
|
||||
<template #zpbmdm>
|
||||
<el-cascader
|
||||
v-model="listQuery.zpbmdm"
|
||||
:options="deptOptions"
|
||||
:props="cascaderProps"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择指派部门"
|
||||
:show-all-levels="false"
|
||||
style="width: 100%"
|
||||
@change="handleDeptChange"
|
||||
/>
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
@ -17,6 +30,8 @@
|
||||
import { ref, defineProps, defineEmits, reactive, getCurrentInstance } from 'vue';
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { tbYjxxYjzp } from '@/api/yj'
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
@ -40,12 +55,45 @@ const props = defineProps({
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref()
|
||||
|
||||
const listQuery = ref({ zpbmdm: '', zpbm: '' })
|
||||
const formData = ref([
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "department", width: '45%' },
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "slot", width: '45%' },
|
||||
{ label: "指派原因", prop: "zpyy", type: "textarea", width: '80%' },
|
||||
])
|
||||
|
||||
// 部门级联选择器配置
|
||||
const deptOptions = ref([])
|
||||
const cascaderProps = {
|
||||
children: 'childDeptList',
|
||||
value: 'orgCode',
|
||||
label: 'orgName',
|
||||
checkStrictly: true,
|
||||
emitPath: false
|
||||
}
|
||||
|
||||
// 部门选择变化
|
||||
const handleDeptChange = (val) => {
|
||||
if (val) {
|
||||
const dept = findDeptByCode(deptOptions.value, val)
|
||||
listQuery.value.zpbm = dept?.orgName || ''
|
||||
} else {
|
||||
listQuery.value.zpbm = ''
|
||||
}
|
||||
}
|
||||
|
||||
// 根据部门代码查找部门信息
|
||||
const findDeptByCode = (list, code) => {
|
||||
for (const item of list) {
|
||||
if (item.orgCode === code) return item
|
||||
if (item.childDeptList?.length) {
|
||||
const found = findDeptByCode(item.childDeptList, code)
|
||||
if (found) return found
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
const rules = reactive({
|
||||
zpbmdm: [{ required: true, message: "请选择指派部门", trigger: "blur" }],
|
||||
zpyy: [{ required: true, message: "请输入指派原因", trigger: "change" }],
|
||||
@ -63,14 +111,20 @@ const submit = async () => {
|
||||
});
|
||||
});
|
||||
}
|
||||
// 定义事件
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
elform.value.reset()
|
||||
elform.value.reset()
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
|
||||
// 获取部门数据
|
||||
const getData = () => {
|
||||
qcckGet({}, "/mosty-base/deptFeign/selectQzbm").then((res) => {
|
||||
deptOptions.value = res || []
|
||||
})
|
||||
}
|
||||
getData()
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
<style scoped></style>
|
||||
@ -6,6 +6,7 @@
|
||||
v-model="listQuery"
|
||||
:fields="searchConfiger"
|
||||
@search="onSearch"
|
||||
@collapse="tabHeightFn"
|
||||
>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small"
|
||||
@ -238,8 +239,8 @@ const {
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_RYJB,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_GS_BK_CZYQ,
|
||||
D_GS_QLZDRYXX
|
||||
D_GS_BK_CZYQ
|
||||
// D_GS_QLZDRYXX
|
||||
} = proxy.$dict(
|
||||
"D_GSXT_YJXX_CZZT",
|
||||
"D_GS_SSYJ",
|
||||
@ -253,8 +254,8 @@ const {
|
||||
"D_GS_QLZDRLX",
|
||||
"D_GS_ZDR_RYJB",
|
||||
"D_GS_ZDR_GJLB",
|
||||
"D_GS_BK_CZYQ",
|
||||
"D_GS_QLZDRYXX"
|
||||
"D_GS_BK_CZYQ"
|
||||
// "D_GS_QLZDRYXX"
|
||||
);
|
||||
|
||||
// 字典数据集合
|
||||
@ -447,6 +448,7 @@ const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val, yjLx: val.yjLx.join(",") };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
@ -576,12 +578,12 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight =
|
||||
window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val;
|
||||
|
||||
@ -4,75 +4,33 @@
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel
|
||||
v-model="queryFrom"
|
||||
:fields="searchConfiger"
|
||||
ref="searchDom"
|
||||
@search="onSearch"
|
||||
>
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search="onSearch"
|
||||
@collapse="tabHeightFn">
|
||||
<template #yjCs>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="queryFrom.yjkscs"
|
||||
type="number"
|
||||
placeholder="开始次数"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryFrom.yjjscs"
|
||||
type="number"
|
||||
placeholder="结束次数"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
/>
|
||||
<el-input v-model="queryFrom.yjkscs" type="number" placeholder="开始次数" style="width: 130px" clearable
|
||||
:min="0" />
|
||||
<el-input v-model="queryFrom.yjjscs" type="number" placeholder="结束次数" style="width: 130px" clearable
|
||||
:min="0" />
|
||||
</div>
|
||||
</template>
|
||||
<template #nl>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="queryFrom.ksnl"
|
||||
type="number"
|
||||
placeholder="开始年龄"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
/>
|
||||
<el-input
|
||||
v-model="queryFrom.jsnl"
|
||||
type="number"
|
||||
placeholder="结束年龄"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
:min="0"
|
||||
/>
|
||||
<el-input v-model="queryFrom.ksnl" type="number" placeholder="开始年龄" style="width: 130px" clearable
|
||||
:min="0" />
|
||||
<el-input v-model="queryFrom.jsnl" type="number" placeholder="结束年龄" style="width: 130px" clearable
|
||||
:min="0" />
|
||||
</div>
|
||||
</template>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl"
|
||||
>批量导出</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
size="small"
|
||||
@click="exportExcelAll"
|
||||
>筛选导出</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleQs"
|
||||
>批量签收</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" :loading="btnLoading" size="small" @click="exportExcelAll">筛选导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<!-- <el-button type="primary" size="small" @click="handleQs"
|
||||
>批量分析</el-button
|
||||
> -->
|
||||
<el-button type="primary" size="small" @click="countPeople"
|
||||
>计算人数</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="handleRelatedWarning"
|
||||
>关联预警</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
<el-button type="primary" size="small" @click="handleRelatedWarning">关联预警</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
@ -86,41 +44,25 @@
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div style="background-color: #fff">
|
||||
<WarnDataTable
|
||||
:loading="pageData.tableConfiger.loading"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData"
|
||||
:columns="pageData.tableColumn"
|
||||
table-class="warn-table"
|
||||
@selectionChange="handleChooseData"
|
||||
>
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag
|
||||
:value="row.czzt"
|
||||
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
|
||||
:tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT"
|
||||
/>
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : row.czzt === '02' ? '#1d72e8' : '#000'"
|
||||
:tag="false" :options="D_GSXT_YJXX_CZZT" style="cursor: pointer" @click="particularsOpen(row)" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag
|
||||
:value="row.yjJb"
|
||||
color="#fff"
|
||||
:tag="false"
|
||||
:options="D_BZ_YJJB"
|
||||
/>
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_GS_ZDR_GJLB" />
|
||||
</template>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
@ -132,55 +74,29 @@
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<span
|
||||
class="primary"
|
||||
@click="handleQsSingle(row)"
|
||||
v-if="row.czzt == '01'"
|
||||
>签收</span
|
||||
>
|
||||
<span class="success" v-else @click="handleQsFk(row, '反馈')"
|
||||
>反馈</span
|
||||
>
|
||||
<span class="primary" @click="handleQsSingle(row)" v-if="row.czzt == '01'">签收</span>
|
||||
<span class="success" v-else @click="handleQsFk(row, '反馈')">反馈</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span
|
||||
class="warning"
|
||||
v-if="row.sfbc != '1'"
|
||||
@click="failWarning(row)"
|
||||
>报错</span
|
||||
>
|
||||
<span
|
||||
:class="row.sfgz == 0 ? 'primary' : 'danger'"
|
||||
@click="payAttention(row)"
|
||||
>{{ row.sfgz == 0 ? "关注" : "取消关注" }}
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span :class="row.sfgz == 0 ? 'primary' : 'danger'" @click="payAttention(row)">{{ row.sfgz == 0 ? "关注" :
|
||||
"取消关注" }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars
|
||||
v-model="particularsShow"
|
||||
:dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }"
|
||||
/>
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
<SelectDataDialog
|
||||
v-model="selectDataVisible"
|
||||
title="关联预警"
|
||||
@confirm="handleSelectConfirm"
|
||||
:currentRelatedRow="currentRelatedRow"
|
||||
/>
|
||||
<SelectDataDialog v-model="selectDataVisible" title="关联预警" @confirm="handleSelectConfirm"
|
||||
:currentRelatedRow="currentRelatedRow" />
|
||||
<FkDialog @change="getList" lx="05" />
|
||||
</template>
|
||||
|
||||
@ -195,18 +111,19 @@ import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPan
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick, onUnmounted } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
import SelectDataDialog from "../../YjData/SelectDataDialog.vue";
|
||||
import { getItem } from "@/utils/storage.js"
|
||||
const { proxy } = getCurrentInstance();
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
const {
|
||||
D_BZ_YJLY,
|
||||
// D_BZ_YJLY,
|
||||
D_GS_QLZDRLX,
|
||||
D_GS_ZDR_GJLB,
|
||||
D_BZ_YJJB,
|
||||
D_GS_CSZT,
|
||||
D_GS_QLZDRYXX,
|
||||
// D_GS_QLZDRYXX,
|
||||
D_BZ_XB,
|
||||
D_GSXT_YJXX_CZZT,
|
||||
D_GS_ZDR_RYJB,
|
||||
@ -214,10 +131,10 @@ const {
|
||||
D_BZ_QBLY,
|
||||
D_BZ_QBLYJB
|
||||
} = proxy.$dict(
|
||||
"D_BZ_YJLY",
|
||||
// "D_BZ_YJLY",
|
||||
"D_GS_QLZDRLX",
|
||||
"D_BZ_YJJB",
|
||||
"D_GS_QLZDRYXX",
|
||||
// "D_GS_QLZDRYXX",
|
||||
"D_BZ_XB",
|
||||
"D_GSXT_YJXX_CZZT",
|
||||
"D_GS_ZDR_RYJB",
|
||||
@ -232,12 +149,43 @@ const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref([
|
||||
{ key: "yjRyxm", label: "姓名", type: "input", placeholder: "请输入姓名" },
|
||||
{
|
||||
key: "xbdm",
|
||||
label: "性别",
|
||||
type: "select",
|
||||
options: D_BZ_XB,
|
||||
placeholder: "请选择性别"
|
||||
},
|
||||
{
|
||||
key: "yjRysfzh",
|
||||
label: "身份证号码",
|
||||
type: "input",
|
||||
placeholder: "请输入身份证号码"
|
||||
},
|
||||
{
|
||||
key: "nl",
|
||||
label: "年龄",
|
||||
type: "slot",
|
||||
placeholder: "请输入年龄"
|
||||
}, {
|
||||
key: "dateTime",
|
||||
label: "预警时间",
|
||||
type: "datetimerange",
|
||||
placeholder: "请选择预警时间"
|
||||
}, {
|
||||
key: "bqdl",
|
||||
label: "人员类别",
|
||||
type: "select",
|
||||
options: D_GS_QLZDRLX,
|
||||
placeholder: "请选择人员类别"
|
||||
}, {
|
||||
key: "yjbqmc",
|
||||
label: "人员细类",
|
||||
type: "input",
|
||||
placeholder: "请输入人员细类"
|
||||
},
|
||||
|
||||
{
|
||||
key: "yjJb",
|
||||
label: "预警级别",
|
||||
@ -245,6 +193,12 @@ const searchConfiger = ref([
|
||||
options: D_BZ_YJJB,
|
||||
multiple: true,
|
||||
placeholder: "请选择预警级别"
|
||||
}, {
|
||||
key: "czzt",
|
||||
label: "签收状态",
|
||||
type: "select",
|
||||
options: D_GSXT_YJXX_CZZT,
|
||||
placeholder: "请选择签收状态"
|
||||
},
|
||||
{
|
||||
key: "ssbmdm",
|
||||
@ -259,14 +213,7 @@ const searchConfiger = ref([
|
||||
options: D_BZ_SF,
|
||||
placeholder: "请选择关联预警"
|
||||
},
|
||||
{ key: "yjRyxm", label: "姓名", type: "input", placeholder: "请输入姓名" },
|
||||
{
|
||||
key: "xbdm",
|
||||
label: "性别",
|
||||
type: "select",
|
||||
options: D_BZ_XB,
|
||||
placeholder: "请选择性别"
|
||||
},
|
||||
|
||||
{
|
||||
key: "cszt",
|
||||
label: "超时状态",
|
||||
@ -274,13 +221,7 @@ const searchConfiger = ref([
|
||||
options: D_GS_CSZT,
|
||||
placeholder: "请选择超时状态"
|
||||
},
|
||||
{
|
||||
key: "bqdl",
|
||||
label: "人员类别",
|
||||
type: "select",
|
||||
options: D_GS_QLZDRLX,
|
||||
placeholder: "请选择人员类别"
|
||||
},
|
||||
|
||||
{
|
||||
key: "sfgz",
|
||||
label: "重点关注",
|
||||
@ -295,18 +236,6 @@ const searchConfiger = ref([
|
||||
options: D_BZ_SF,
|
||||
placeholder: "请选择二次指派"
|
||||
},
|
||||
{
|
||||
key: "yjRysfzh",
|
||||
label: "身份证号码",
|
||||
type: "input",
|
||||
placeholder: "请输入身份证号码"
|
||||
},
|
||||
{
|
||||
key: "nl",
|
||||
label: "年龄",
|
||||
type: "slot",
|
||||
placeholder: "请输入年龄"
|
||||
},
|
||||
|
||||
{
|
||||
key: "yjCs",
|
||||
@ -322,12 +251,7 @@ const searchConfiger = ref([
|
||||
type: "input",
|
||||
placeholder: "请输入活动发生地"
|
||||
},
|
||||
{
|
||||
key: "yjbqmc",
|
||||
label: "人员细类",
|
||||
type: "input",
|
||||
placeholder: "请输入人员细类"
|
||||
},
|
||||
|
||||
{
|
||||
key: "qbly",
|
||||
label: "情报来源",
|
||||
@ -343,7 +267,9 @@ const searchConfiger = ref([
|
||||
placeholder: "请选择情报来源级别"
|
||||
}
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const queryFrom = ref({
|
||||
qbly: "02"
|
||||
});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
@ -365,15 +291,16 @@ const pageData = reactive({
|
||||
{ label: "预警状态", width: 80, align: "center", slotName: "status" },
|
||||
{ prop: "yjSj", label: "预警时间", width: 125 },
|
||||
{ prop: "yjRyxm", label: "人员姓名", width: 80 },
|
||||
{ prop: "yjRysfzh", label: "身份证号", width: 158 },
|
||||
{ prop: "yjRysfzh", label: "身份证号" },
|
||||
{ label: "性别", width: 55, align: "center", slotName: "xbdm" },
|
||||
{ prop: "nl", label: "年龄", width: 55, align: "center" },
|
||||
{ label: "预警级别", width: 80, align: "center", slotName: "yjJb" },
|
||||
{ label: "人员类别", width: 80, align: "center", slotName: "bqdl" },
|
||||
{ prop: "bqdlmc", label: "人员类别", width: 80, align: "center" },
|
||||
{ prop: "yjbqmc", label: "人员细类", width: 80 },
|
||||
{ label: "轨迹类别", width: 80, align: "center", slotName: "yjLylx" },
|
||||
{ prop: "yjDz", label: "活动发生地", width: 100 },
|
||||
{ prop: "ssbm", label: "接收单位" },
|
||||
{ prop: "yjLylxmc", label: "轨迹类别", width: 80, align: "center" },
|
||||
{ prop: "yjDz", label: "发生地", width: 80, },
|
||||
{ prop: "ssbm", label: "接收单位", width: 100 },
|
||||
{ prop: "zjfknr", label: "最近反馈", align: "center" },
|
||||
{ label: "情报来源", width: 80, align: "center", slotName: "qbly" },
|
||||
{ label: "来源级别", width: 80, align: "center", slotName: "qblyjb" },
|
||||
{ prop: "yjCs", label: "次数", width: 55, align: "center" },
|
||||
@ -382,14 +309,11 @@ const pageData = reactive({
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(",") || "" };
|
||||
console.log(val);
|
||||
|
||||
queryFrom.value = { ...val, yjJb: Array.isArray(val.yjJb) ? val.yjJb.join(",") : "", qbly: val.qbly ? val.qbly : "02" };
|
||||
queryFrom.value.startTime = val.dateTime ? val.dateTime[0] : "";
|
||||
queryFrom.value.endTime = val.dateTime ? val.dateTime[1] : "";
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
@ -397,6 +321,7 @@ const onSearch = (val) => {
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
nextTick(tabHeightFn);
|
||||
};
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
@ -410,10 +335,11 @@ const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
qbly: queryFrom.value.qbly ? queryFrom.value.qbly : "02",
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
};
|
||||
promes.yjJb = queryFrom.value.yjJb ? queryFrom.value.yjJb.join(",") : "";
|
||||
promes.yjJb = Array.isArray(queryFrom.value.yjJb) ? queryFrom.value.yjJb.join(",") : (queryFrom.value.yjJb || "");
|
||||
delete promes.times;
|
||||
delete promes.dateTime;
|
||||
qcckPost(promes, "/mosty-gsxt/tbYjxx/getQlzdrPageList")
|
||||
@ -460,6 +386,7 @@ const handleExportData = (arr) => {
|
||||
yjLylx_name: "轨迹类别",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
zjfknr: "最近反馈",
|
||||
qbly_name: "情报来源",
|
||||
qblyjb_name: "来源级别",
|
||||
yjCs: "次数",
|
||||
@ -539,7 +466,7 @@ const handleQs = () => {
|
||||
.$confirm(texy, "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
let ids = wqs.map((item) => item.id);
|
||||
qcckPost({ ids }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
qcckPost({ ids, xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
.then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
@ -548,14 +475,13 @@ const handleQs = () => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
// 详情
|
||||
const dataPres = ref({});
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row;
|
||||
|
||||
particularsShow.value = true;
|
||||
};
|
||||
// 单条签收
|
||||
@ -568,7 +494,7 @@ const handleQsSingle = (row) => {
|
||||
proxy
|
||||
.$confirm("确认要签收该条预警数据吗?", "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
qcckPost({ ids: [row.id] }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
qcckPost({ ids: [row.id], xm: USERNAME.value, sfzh: idEntityCard.value, ssbmdm: userIfo.value.deptCode }, "/mosty-gsxt/tbYjxx/batchQs")
|
||||
.then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
@ -577,7 +503,7 @@ const handleQsSingle = (row) => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
@ -602,7 +528,7 @@ const payAttention = (row) => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
};
|
||||
// 人数计算
|
||||
const searchDom = ref(null);
|
||||
@ -654,12 +580,36 @@ const countPeople = () => {
|
||||
};
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight =
|
||||
window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
const userIfo = ref('')
|
||||
const idEntityCard = ref()
|
||||
const USERNAME = ref()
|
||||
const timer = ref(null)
|
||||
onMounted(() => {
|
||||
userIfo.value = getItem('deptId') ? getItem('deptId')[0] : {}
|
||||
idEntityCard.value = getItem('idEntityCard')
|
||||
USERNAME.value = getItem('USERNAME')
|
||||
tabHeightFn();
|
||||
getList();
|
||||
if (timer.value) {
|
||||
clearInterval(timer.value);
|
||||
} else {
|
||||
timer.value = setInterval(() => {
|
||||
getList();
|
||||
}, 1000 * 60 * 5);
|
||||
}
|
||||
});
|
||||
onUnmounted(() => {
|
||||
if (timer.value) {
|
||||
clearInterval(timer.value);
|
||||
timer.value = null;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@ -0,0 +1,472 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container" v-loading="loading">
|
||||
<div class="three-column-layout">
|
||||
<!-- 重点人员基本信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员基本信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员姓名:</span>
|
||||
<span class="info-value">{{ dataForm.yjRyxm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">性别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.xbdm" :tag="false" :options="dict.D_BZ_XB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">年龄:</span>
|
||||
<span class="info-value">{{ dataForm.nl }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">身份证号码:</span>
|
||||
<span class="info-value">{{ dataForm.yjRysfzh }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">户籍地:</span>
|
||||
<span class="info-value">{{ dataForm.hjdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">现住地址:</span>
|
||||
<span class="info-value">{{ dataForm.xzdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">入库时间:</span>
|
||||
<span class="info-value">{{ dataForm.zdrRkkssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">预警级别:</span>
|
||||
<span class="info-value warning-level" :class="ys()">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.bqdl" :tag="false" :options="dict.D_GS_QLZDRLX" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员级别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_GS_ZDR_RYJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">人员细类:</span>
|
||||
<span class="info-value">{{ dataForm.yjbqmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">立案单位:</span>
|
||||
<span class="info-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">简要案情:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">一标三实:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 重点人员活动信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员活动信息页</div>
|
||||
<div class="info-section blue-bg">
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">轨迹类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjLylx" :tag="false" :options="dict.D_GS_ZDR_GJLB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">核查时间:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].czsj }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">比对时间:</span>
|
||||
<span class="info-value">{{ dataForm.yjSj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动发生地:</span>
|
||||
<span class="info-value">{{ dataForm.xxdz }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动场所:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].xxdz }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动信息:</span>
|
||||
<span class="info-value">{{ dataForm.yjNr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息提供单位:</span>
|
||||
<span class="info-value">{{ dataForm.jczmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息接收单位:</span>
|
||||
<span class="info-value">{{ dataForm.ssbm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">二次指派单位:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.zpList && dataForm.zpList.length > 0">
|
||||
<span v-for="(item, index) in dataForm.zpList" :key="item.id">
|
||||
{{ item.zpbm }}<span v-if="index < dataForm.zpList.length - 1">,</span>
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">签收时限:</span>
|
||||
<span class="info-value">{{ dataForm.qssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈时限:</span>
|
||||
<span class="info-value">{{ dataForm.fksj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">处置建议:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.czjyList && dataForm.czjyList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.czjyList" :key="item.id">
|
||||
<span>{{ `${index + 1}、` + item.jynr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈内容:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.fkList && dataForm.fkList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.fkList" :key="item.id">
|
||||
<span v-if="item.ckczbcxx">{{ `${index + 1}、` + item.ckczbcxx }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 历史预警信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">历史预警信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="history-item" v-for="(item, index) in dataForm.yjgjList" :key="item.id">
|
||||
<span class="history-index">{{ `${index + 1}:` }}</span>
|
||||
<span class="history-content">{{ item.yjNr }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, getCurrentInstance, watch, ref } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警详情'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '90%'
|
||||
}, dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const loading = ref(false)
|
||||
let abortController = null
|
||||
const close = () => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
abortController = null
|
||||
}
|
||||
loading.value = false
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const dataForm = ref({});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
getPart(props.dataList.id)
|
||||
}
|
||||
}, { deep: true });
|
||||
const getPart = (id) => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
}
|
||||
abortController = new AbortController()
|
||||
loading.value = true
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${id}`, { signal: abortController.signal }).then(res => {
|
||||
if (res) {
|
||||
dataForm.value = res
|
||||
} else {
|
||||
dataForm.value = {}
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.name !== 'AbortError') {
|
||||
console.error('请求失败:', err)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
const ys = () => {
|
||||
switch (dataForm.value.yjJb) {
|
||||
case '01':
|
||||
return 'red';
|
||||
case '02':
|
||||
return 'orange';
|
||||
case '03':
|
||||
return 'yellow';
|
||||
case '04':
|
||||
return 'blue';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.archive-container {
|
||||
padding: 20px;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.column-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: #f0f2f5;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px 4px 0 0;
|
||||
text-align: center;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.column .info-section {
|
||||
flex: 1;
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.info-section.blue-bg {
|
||||
background: #e6f0f8;
|
||||
border-color: #9ed7ff;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-item.full-width {
|
||||
flex: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
width: 80px;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
flex: 1;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-value.text-area {
|
||||
min-height: 80px;
|
||||
align-items: flex-start;
|
||||
padding: 8px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* 红 */
|
||||
.warning-level.red {
|
||||
background: #fef0f0;
|
||||
border-color: #ffccc7;
|
||||
color: #f56c6c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 橙 */
|
||||
.warning-level.orange {
|
||||
background: #fffbe6;
|
||||
border-color: #ffe58f;
|
||||
color: #d48806 !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 黄 */
|
||||
.warning-level.yellow {
|
||||
background: #fdf6ec;
|
||||
border-color: #faecd8;
|
||||
color: #e6a23c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝 */
|
||||
.warning-level.blue {
|
||||
background: #ecf5ff;
|
||||
border-color: #d9ecff;
|
||||
color: #409eff !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
/* align-items: center; */
|
||||
}
|
||||
|
||||
.history-index {
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
flex: 1;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.demo-tabs {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__content {
|
||||
min-height: 400px;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,10 @@
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules" :labelWidth="90">
|
||||
<template #zpbmdm>
|
||||
<el-cascader v-model="listQuery.zpbmdm" :options="deptOptions" :props="cascaderProps" clearable filterable
|
||||
placeholder="请选择指派部门" :show-all-levels="false" style="width: 100%" @change="handleDeptChange" />
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
@ -17,6 +21,7 @@
|
||||
import { ref, defineProps, defineEmits, reactive, getCurrentInstance } from 'vue';
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { tbYjxxYjzp } from '@/api/yj'
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
@ -40,12 +45,46 @@ const props = defineProps({
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref()
|
||||
const listQuery = ref({ zpbmdm: '', zpbm: '' })
|
||||
const formData = ref([
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "department", width: '45%' },
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "slot", width: '45%' },
|
||||
{ label: "指派原因", prop: "zpyy", type: "textarea", width: '80%' },
|
||||
])
|
||||
|
||||
// 部门级联选择器配置
|
||||
const deptOptions = ref([])
|
||||
const cascaderProps = {
|
||||
children: 'childDeptList',
|
||||
value: 'orgCode',
|
||||
label: 'orgName',
|
||||
checkStrictly: true, // 单选模式下可选择任意一级
|
||||
emitPath: false // 只返回最后一级的值
|
||||
}
|
||||
|
||||
// 部门选择变化
|
||||
const handleDeptChange = (val) => {
|
||||
if (val) {
|
||||
const dept = findDeptByCode(deptOptions.value, val)
|
||||
console.log('找到的部门:', dept)
|
||||
// 根据接口实际字段名获取部门名称
|
||||
listQuery.value.zpbm = dept?.orgName || ''
|
||||
} else {
|
||||
listQuery.value.zpbm = ''
|
||||
}
|
||||
}
|
||||
|
||||
// 根据部门代码查找部门信息
|
||||
const findDeptByCode = (list, code) => {
|
||||
for (const item of list) {
|
||||
if (item.orgCode === code) return item
|
||||
if (item.childDeptList?.length) {
|
||||
const found = findDeptByCode(item.childDeptList, code)
|
||||
if (found) return found
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
const rules = reactive({
|
||||
zpbmdm: [{ required: true, message: "请选择指派部门", trigger: "blur" }],
|
||||
zpyy: [{ required: true, message: "请输入指派原因", trigger: "change" }],
|
||||
@ -66,11 +105,15 @@ const submit = async () => {
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
elform.value.reset()
|
||||
elform.value.reset()
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const getData = () => {
|
||||
qcckGet({}, "/mosty-base/deptFeign/selectQzbm").then((res) => {
|
||||
deptOptions.value = res || []
|
||||
})
|
||||
}
|
||||
getData()
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
<style scoped></style>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn">
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
@ -80,14 +80,22 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_GS_CSZT } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_GS_CSZT")
|
||||
const { D_GSXT_YJXX_CZZT,
|
||||
// D_GS_QLZDRLX,
|
||||
D_BZ_YJJB, D_BZ_YJLYXT,
|
||||
// D_BZ_YJLY,
|
||||
D_BZ_XB, D_GS_CSZT } = proxy.$dict("D_GSXT_YJXX_CZZT",
|
||||
// 'D_GS_QLZDRLX',
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT",
|
||||
// "D_BZ_YJLY",
|
||||
"D_BZ_XB", "D_GS_CSZT")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
@ -186,6 +194,7 @@ const onSearch = (val) => {
|
||||
listQuery.value.startTime = val.times ? val.times[0] : ''
|
||||
listQuery.value.endTime = val.times ? val.times[1] : ''
|
||||
getList()
|
||||
nextTick(tabHeightFn);
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
@ -354,11 +363,12 @@ const pushWarning = (val) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const openBox = (val) => {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn">
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
@ -46,8 +46,8 @@
|
||||
</el-image>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : row.czzt === '02' ? '#1d72e8' : '#000'"
|
||||
:tag="false" :options="D_GSXT_YJXX_CZZT" style="cursor: pointer" @click="particularsOpen(row)" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
@ -143,7 +143,7 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import Particulars from "./components/particulars.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
@ -151,7 +151,7 @@ const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT,
|
||||
D_BZ_YJLY, D_BZ_XB, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_BZ_SF, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ',
|
||||
D_BZ_YJLY, D_BZ_XB, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_BZ_SF, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX',
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT",
|
||||
"D_GS_CSZT", "D_BZ_SF", "D_GS_ZDR_RYJB", "D_GS_ZDR_GJLB", "D_GS_BK_CZYQ")
|
||||
const searchBox = ref(); //搜索框
|
||||
@ -165,6 +165,7 @@ const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ key: "czzt", label: "签收状态", type: "select", options: D_GSXT_YJXX_CZZT, placeholder: "请选择签收状态" },
|
||||
{ label: "布控开始时间", key: 'bkkssj', type: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", key: 'bkjssj', type: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", key: 'startTime', type: "datetimerange", placeholder: "请选择预警时间" },
|
||||
@ -223,7 +224,7 @@ const pageData = reactive({
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "相似度", width: 50, align: 'center', slotName: 'xsd' },
|
||||
{ label: "预警内容", prop: "yjNr", width: 70, align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", width: 70, align: 'center'},
|
||||
{ label: "所属部门", prop: "ssbm", width: 70, align: 'center' },
|
||||
{ label: "数据来源", width: 70, align: 'center', slotName: 'yjLylx' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
@ -261,6 +262,7 @@ const onSearch = (val) => {
|
||||
// listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
getList()
|
||||
nextTick(tabHeightFn);
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
@ -436,11 +438,12 @@ const openBox = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' @collapse="tabHeightFn">
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
@ -119,7 +119,7 @@ import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/seve
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import Particulars from './components/particulars.vue'
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
@ -128,7 +128,7 @@ const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX,
|
||||
D_BZ_XB,
|
||||
D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_GS_BKZT, D_BZ_SF,
|
||||
D_BZ_YJLY, D_GS_CSZT, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_GS_BKZT", "D_BZ_SF",
|
||||
D_BZ_YJLY, D_GS_CSZT, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX', "D_GS_BKZT", "D_BZ_SF",
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BK_CZYQ")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
@ -218,6 +218,7 @@ const onSearch = (val) => {
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
getList()
|
||||
nextTick(tabHeightFn);
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
@ -396,11 +397,12 @@ const openBox = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
nextTick(() => {
|
||||
if (!searchBox.value) return;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
});
|
||||
};
|
||||
window.addEventListener('resize', tabHeightFn);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@ -24,33 +24,15 @@
|
||||
<div v-if="postTitle" class="post-title">{{ postTitle }}</div>
|
||||
<div v-if="bodySource" class="post-text-wrap">
|
||||
<div class="post-text">{{ displayBody }}</div>
|
||||
<span
|
||||
v-if="showFullLink"
|
||||
class="full-text-link"
|
||||
@click.stop="handleClick"
|
||||
>全文</span
|
||||
>
|
||||
<span v-if="showFullLink" class="full-text-link" @click.stop="handleClick">全文</span>
|
||||
</div>
|
||||
|
||||
<!-- 图片展示 -->
|
||||
<div
|
||||
class="post-images"
|
||||
v-if="post.images && post.images.length > 0"
|
||||
:class="{ 'is-three': post.images.length >= 3 }"
|
||||
>
|
||||
<div
|
||||
v-for="(img, index) in post.images"
|
||||
:key="index"
|
||||
class="image-item"
|
||||
@click.stop
|
||||
>
|
||||
<el-image
|
||||
:preview-teleported="true"
|
||||
:src="img"
|
||||
fit="cover"
|
||||
:preview-src-list="post.images"
|
||||
:initial-index="index"
|
||||
>
|
||||
<div class="post-images" v-if="post.images && post.images.length > 0"
|
||||
:class="{ 'is-three': post.images.length >= 3 }">
|
||||
<div v-for="(img, index) in post.images" :key="index" class="image-item" @click.stop>
|
||||
<el-image :preview-teleported="true" :src="img" fit="cover" :preview-src-list="post.images"
|
||||
:initial-index="index">
|
||||
<template #error>
|
||||
<div class="image-error">
|
||||
<el-icon>
|
||||
@ -147,11 +129,9 @@ const handleClick = () => {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: 14px;
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(0, 227, 255, 0.35) 0%,
|
||||
rgba(0, 100, 180, 0.45) 100%
|
||||
);
|
||||
background: linear-gradient(180deg,
|
||||
rgba(0, 227, 255, 0.35) 0%,
|
||||
rgba(0, 100, 180, 0.45) 100%);
|
||||
color: #fff;
|
||||
padding: 3px 10px;
|
||||
border-radius: 2px;
|
||||
|
||||
@ -20,37 +20,18 @@
|
||||
<div class="post-time">{{ post.publishTime }}</div>
|
||||
</div>
|
||||
|
||||
<div class="post-content" v-if="postTitle || bodySource">
|
||||
<div v-if="postTitle" class="post-title">{{ postTitle }}</div>
|
||||
<div v-if="bodySource" class="post-text-wrap">
|
||||
<div class="post-text">{{ displayBody }}</div>
|
||||
<span
|
||||
v-if="showFullLink"
|
||||
class="full-text-link"
|
||||
@click.stop="handleClick"
|
||||
>全文</span
|
||||
>
|
||||
<div class="post-content" v-if="props.post.title || bodySource">
|
||||
<div v-if="props.post.title" class="post-title">{{ props.post.title }}</div>
|
||||
<div v-if="bodySource" class="post-text-wrap" :class="{ 'has-more': showFullLink }">
|
||||
<span class="post-text">{{ props.post.content }}</span><span v-if="showFullLink" class="full-text-link" @click.stop="handleClick">...全文</span>
|
||||
</div>
|
||||
|
||||
<!-- 图片展示 -->
|
||||
<div
|
||||
class="post-images"
|
||||
v-if="post.images && post.images.length > 0"
|
||||
:class="{ 'is-three': post.images.length >= 3 }"
|
||||
>
|
||||
<div
|
||||
v-for="(img, index) in post.images"
|
||||
:key="index"
|
||||
class="image-item"
|
||||
@click.stop
|
||||
>
|
||||
<el-image
|
||||
:preview-teleported="true"
|
||||
:src="img"
|
||||
fit="cover"
|
||||
:preview-src-list="post.images"
|
||||
:initial-index="index"
|
||||
>
|
||||
<div class="post-images" v-if="post.images && post.images.length > 0"
|
||||
:class="{ 'is-three': post.images.length >= 3 }">
|
||||
<div v-for="(img, index) in post.images" :key="index" class="image-item" @click.stop>
|
||||
<el-image :preview-teleported="true" :src="img" fit="cover" :preview-src-list="post.images"
|
||||
:initial-index="index">
|
||||
<template #error>
|
||||
<div class="image-error">
|
||||
<el-icon>
|
||||
@ -70,13 +51,8 @@
|
||||
</el-icon>
|
||||
<span>{{ post.commentCount || 0 }}</span>
|
||||
</div>
|
||||
<button
|
||||
v-if="!post.isPremium"
|
||||
type="button"
|
||||
class="post-pin-btn"
|
||||
:disabled="pinning"
|
||||
@click.stop="handlePinTop"
|
||||
>
|
||||
<button v-if="!post.isPremium" type="button" class="post-pin-btn" :disabled="pinning"
|
||||
@click.stop="handlePinTop">
|
||||
置顶
|
||||
</button>
|
||||
</div>
|
||||
@ -97,7 +73,7 @@ const props = defineProps({
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
{ { props.post } }
|
||||
const emit = defineEmits(["like", "click", "pin"]);
|
||||
|
||||
const pinning = ref(false);
|
||||
@ -122,14 +98,14 @@ const EXCERPT_LEN = 160;
|
||||
|
||||
const rawContent = computed(() => (props.post.content || "").trim());
|
||||
|
||||
const postTitle = computed(() => {
|
||||
const t = rawContent.value;
|
||||
if (!t) return "";
|
||||
const idx = t.indexOf("\n");
|
||||
if (idx === -1) return "";
|
||||
const first = t.slice(0, idx).trim();
|
||||
return first.length > 0 ? first : "";
|
||||
});
|
||||
// const postTitle = computed(() => {
|
||||
// const t = rawContent.value;
|
||||
// if (!t) return "";
|
||||
// const idx = t.indexOf("\n");
|
||||
// if (idx === -1) return "";
|
||||
// const first = t.slice(0, idx).trim();
|
||||
// return first.length > 0 ? first : "";
|
||||
// });
|
||||
|
||||
const bodySource = computed(() => {
|
||||
const t = rawContent.value;
|
||||
@ -184,11 +160,9 @@ const handleClick = () => {
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
border-radius: 3px;
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
$lt-bar-blue-start 0%,
|
||||
$lt-bar-blue-end 100%
|
||||
);
|
||||
background: linear-gradient(135deg,
|
||||
$lt-bar-blue-start 0%,
|
||||
$lt-bar-blue-end 100%);
|
||||
box-shadow: 0 1px 5px lt-blue(0.2);
|
||||
transition: opacity 0.2s ease, transform 0.15s ease;
|
||||
|
||||
@ -207,11 +181,9 @@ const handleClick = () => {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: 14px;
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
$lt-bar-blue-start 0%,
|
||||
$lt-bar-blue-end 100%
|
||||
);
|
||||
background: linear-gradient(135deg,
|
||||
$lt-bar-blue-start 0%,
|
||||
$lt-bar-blue-end 100%);
|
||||
color: #fff;
|
||||
padding: 3px 10px;
|
||||
border-radius: 2px;
|
||||
@ -294,6 +266,11 @@ const handleClick = () => {
|
||||
line-height: 1.65;
|
||||
color: $lt-text-dim;
|
||||
word-break: break-word;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.post-text {
|
||||
@ -301,10 +278,10 @@ const handleClick = () => {
|
||||
}
|
||||
|
||||
.full-text-link {
|
||||
margin-left: 4px;
|
||||
color: $lt-bar-blue-end;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
|
||||
&:hover {
|
||||
text-shadow: 0 0 8px lt-blue(0.35);
|
||||
|
||||
@ -1,40 +1,19 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
class="luntan-tech-dialog"
|
||||
title="发布帖子"
|
||||
width="60%"
|
||||
:before-close="handleClose"
|
||||
:append-to-body="true"
|
||||
>
|
||||
<el-dialog v-model="dialogVisible" class="luntan-tech-dialog" title="发布帖子" width="60%" :before-close="handleClose"
|
||||
:append-to-body="true">
|
||||
<div style="overflow: auto; height: 60vh">
|
||||
<el-form :model="form" :rules="rules" ref="formRef" label-width="80px">
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="form.title"
|
||||
placeholder="请输入帖子标题"
|
||||
maxlength="50"
|
||||
show-word-limit
|
||||
/>
|
||||
<el-input v-model="form.title" placeholder="请输入帖子标题" maxlength="50" show-word-limit />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input
|
||||
v-model="form.content"
|
||||
type="textarea"
|
||||
:rows="6"
|
||||
placeholder="请输入帖子内容"
|
||||
maxlength="500"
|
||||
show-word-limit
|
||||
/>
|
||||
<el-input v-model="form.content" type="textarea" :rows="6" placeholder="请输入帖子内容" maxlength="1000"
|
||||
show-word-limit />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="表情">
|
||||
<V3Emoji
|
||||
:options-name="optionsName"
|
||||
@click-emoji="onEmojiClick"
|
||||
:recent="true"
|
||||
/>
|
||||
<V3Emoji :options-name="optionsName" @click-emoji="onEmojiClick" :recent="true" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="图片">
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
</div> -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch">
|
||||
<el-button type="primary" size="small" @click="addItemMenu" >
|
||||
<el-button type="primary" size="small" @click="addItemMenu">
|
||||
<el-icon>
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
@ -56,7 +56,7 @@
|
||||
<el-tag v-else type="warning">未知</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="bz" show-overflow-tooltip label="备注"></el-table-column>
|
||||
<el-table-column sortable prop="bz" show-overflow-tooltip label="图标"></el-table-column>
|
||||
<el-table-column sortable prop="qxbs" label="权限标识" show-overflow-tooltip align="center"
|
||||
width="140px"></el-table-column>
|
||||
<el-table-column label="操作" align="center" fixed="right" width="220">
|
||||
@ -124,8 +124,8 @@
|
||||
<el-input v-model="dialogForm.menuCode" show-word-limit maxlength="50" placeholder="权限标识对应路由name"
|
||||
autocomplete="off"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item class="one" label="选择图标" prop="iconName" label-width="140px">
|
||||
<ChooseIcon width="400" :limit="13" :isImg="false" clearable="" v-model="dialogForm.iconName"></ChooseIcon>
|
||||
<el-form-item class="one" label="选择图标" prop="bz" label-width="140px">
|
||||
<ChooseIcon width="400" :limit="13" :isImg="false" clearable="" v-model="dialogForm.bz"></ChooseIcon>
|
||||
</el-form-item>
|
||||
<el-form-item class="one" label="排序" prop="orderNo" label-width="140px">
|
||||
<el-input-number v-model="dialogForm.orderNo" class="mx-4" :min="1" :max="100" controls-position="right" />
|
||||
@ -136,10 +136,10 @@
|
||||
<el-option label="注销" value="1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>-->
|
||||
<el-form-item class="one" label="备注" label-width="140px">
|
||||
<!-- <el-form-item class="one" label="备注" label-width="140px">
|
||||
<el-input v-model="dialogForm.bz" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" show-word-limit
|
||||
maxlength="200"></el-input>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
@ -215,7 +215,7 @@ const dialogFormVisible = ref(false);
|
||||
const formLabelWidth = "140px";
|
||||
// 获取数据的方法
|
||||
const getListData = async () => {
|
||||
const params = {...listQuery.value,ssxt:'sgxt'};
|
||||
const params = { ...listQuery.value, ssxt: 'sgxt' };
|
||||
loading.value = true
|
||||
const res = await getSystemMeny(params);
|
||||
tableData.value = res?.records;
|
||||
@ -284,12 +284,12 @@ const onSave = () => {
|
||||
buttonLoading.value = true;
|
||||
updateSysMenu({
|
||||
...dialogForm.value,
|
||||
ssxt:'sgxt'
|
||||
ssxt: 'sgxt'
|
||||
})
|
||||
.then((res) => {
|
||||
dialogFormVisible.value = false;
|
||||
ElMessage.success("修改成功");
|
||||
getListData();
|
||||
getListData();
|
||||
buttonLoading.value = false;
|
||||
})
|
||||
.finally(() => {
|
||||
@ -309,12 +309,12 @@ const onAdd = () => {
|
||||
addSysMenu({
|
||||
...dialogForm.value,
|
||||
parentId: id.value,
|
||||
ssxt:'sgxt'
|
||||
ssxt: 'sgxt'
|
||||
})
|
||||
.then((res) => {
|
||||
dialogFormVisible.value = false;
|
||||
ElMessage.success("新增成功");
|
||||
getListData();
|
||||
getListData();
|
||||
})
|
||||
.finally(() => {
|
||||
buttonLoading.value = false;
|
||||
|
||||
@ -0,0 +1,257 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
title="管理用户"
|
||||
width="1000px"
|
||||
destroy-on-close
|
||||
@closed="handleClosed"
|
||||
>
|
||||
<div class="user-dialog-content">
|
||||
<div class="searchBox">
|
||||
<el-form :model="listQuery" :inline="true">
|
||||
<el-form-item label="用户名">
|
||||
<el-input
|
||||
placeholder="请输入用户名"
|
||||
v-model="listQuery.userName"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="电话号码">
|
||||
<el-input
|
||||
placeholder="请输入电话号码"
|
||||
v-model="listQuery.phone"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="handleFilter">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="reset()">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<div class="action-bar">
|
||||
<el-button type="primary" @click="showChooseUser">添加用户</el-button>
|
||||
<el-button type="danger" @click="unbundleRole()">批量取消授权</el-button>
|
||||
</div>
|
||||
|
||||
<el-table
|
||||
ref="multipleTableRef"
|
||||
:data="tableData"
|
||||
border
|
||||
:height="400"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column prop="loginName" align="center" label="用户名" />
|
||||
<el-table-column prop="userName" align="center" label="用户昵称" />
|
||||
<el-table-column prop="mobile" width="120px" label="移动电话" />
|
||||
<el-table-column prop="xtZhxgsj" align="center" label="录入时间">
|
||||
<template #default="{ row }">
|
||||
{{ $filters.dateFilter(row.xtLrsj) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="120">
|
||||
<template #default="{ row }">
|
||||
<el-popconfirm
|
||||
confirm-button-text="是"
|
||||
cancel-button-text="否"
|
||||
icon-color="red"
|
||||
title="确定要删除?"
|
||||
@confirm="unbundleRole(row)"
|
||||
>
|
||||
<template #reference>
|
||||
<el-button type="danger" size="small">取消授权</el-button>
|
||||
</template>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div class="pagination-wrap">
|
||||
<el-pagination
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="listQuery.page"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="listQuery.size"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ChooseUserDialog
|
||||
v-model="chooseUserVisible"
|
||||
:roleId="roleId"
|
||||
@choosedUsers="saveUsers"
|
||||
/>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch, computed } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import {
|
||||
getRoleUserList,
|
||||
batchUnboundUserRole,
|
||||
grantUserToRole
|
||||
} from '@/api/user-manage'
|
||||
import ChooseUserDialog from './ChooseUserDialog.vue'
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
roleId: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
|
||||
const visible = computed({
|
||||
get: () => props.modelValue,
|
||||
set: (val) => emit('update:modelValue', val)
|
||||
})
|
||||
|
||||
const listQuery = ref({
|
||||
page: 1,
|
||||
size: 20,
|
||||
userName: '',
|
||||
phone: ''
|
||||
})
|
||||
|
||||
const total = ref(0)
|
||||
const tableData = ref([])
|
||||
const multipleSelection = ref([])
|
||||
const multipleTableRef = ref(null)
|
||||
const chooseUserVisible = ref(false)
|
||||
|
||||
// 获取列表数据
|
||||
const getListData = async () => {
|
||||
if (!props.roleId) return
|
||||
|
||||
const params = { ...listQuery.value }
|
||||
params.current = params.page
|
||||
params.roleId = props.roleId
|
||||
|
||||
const res = await getRoleUserList(params)
|
||||
tableData.value = res?.records || []
|
||||
total.value = Number(res.total) || 0
|
||||
}
|
||||
|
||||
// 监听弹窗打开
|
||||
watch(visible, (val) => {
|
||||
if (val && props.roleId) {
|
||||
listQuery.value = {
|
||||
page: 1,
|
||||
size: 20,
|
||||
userName: '',
|
||||
phone: ''
|
||||
}
|
||||
getListData()
|
||||
}
|
||||
})
|
||||
|
||||
const handleFilter = () => {
|
||||
listQuery.value.page = 1
|
||||
getListData()
|
||||
}
|
||||
|
||||
const reset = () => {
|
||||
listQuery.value = {
|
||||
page: 1,
|
||||
size: 20,
|
||||
userName: '',
|
||||
phone: ''
|
||||
}
|
||||
getListData()
|
||||
}
|
||||
|
||||
const handleSizeChange = (currentSize) => {
|
||||
listQuery.value.size = currentSize
|
||||
getListData()
|
||||
}
|
||||
|
||||
const handleCurrentChange = (currentPage) => {
|
||||
listQuery.value.page = currentPage
|
||||
getListData()
|
||||
}
|
||||
|
||||
const handleSelectionChange = (val) => {
|
||||
multipleSelection.value = val
|
||||
}
|
||||
|
||||
// 取消授权
|
||||
const unbundleRole = (row) => {
|
||||
const params = {
|
||||
roleId: props.roleId,
|
||||
ids: []
|
||||
}
|
||||
|
||||
if (row) {
|
||||
params.ids.push(row.id)
|
||||
} else {
|
||||
if (multipleSelection.value.length <= 0) {
|
||||
ElMessage.warning('请先选择要取消授权的用户')
|
||||
return
|
||||
}
|
||||
multipleSelection.value.forEach((item) => {
|
||||
params.ids.push(item.id)
|
||||
})
|
||||
}
|
||||
|
||||
batchUnboundUserRole(params).then(() => {
|
||||
ElMessage.success('操作成功')
|
||||
handleFilter()
|
||||
})
|
||||
}
|
||||
|
||||
// 显示选择用户弹窗
|
||||
const showChooseUser = () => {
|
||||
chooseUserVisible.value = true
|
||||
}
|
||||
|
||||
// 批量添加用户
|
||||
const saveUsers = (users) => {
|
||||
if (users.length > 0) {
|
||||
const userIds = users.map((item) => item.id)
|
||||
const params = {
|
||||
roleId: props.roleId,
|
||||
userIds: userIds
|
||||
}
|
||||
grantUserToRole(params).then(() => {
|
||||
ElMessage.success('添加成功')
|
||||
handleFilter()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const handleClosed = () => {
|
||||
tableData.value = []
|
||||
multipleSelection.value = []
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.user-dialog-content {
|
||||
.searchBox {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.action-bar {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.pagination-wrap {
|
||||
margin-top: 15px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,183 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="选择用户"
|
||||
v-model="visible"
|
||||
width="1200px"
|
||||
destroy-on-close
|
||||
append-to-body
|
||||
>
|
||||
<div>
|
||||
<el-form :model="listQuery" :inline="true">
|
||||
<el-form-item label="所属部门">
|
||||
<MOSTY.Department width="200px" clearable v-model="listQuery.ssbmdm" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用户名">
|
||||
<el-input
|
||||
placeholder="请输入用户名"
|
||||
v-model="listQuery.loginName"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="电话号码">
|
||||
<el-input
|
||||
placeholder="请输入电话号码"
|
||||
v-model="listQuery.phone"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="handleFilter">查询</el-button>
|
||||
<el-button @click="reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
ref="multipleUserRef"
|
||||
:data="tableData"
|
||||
border
|
||||
:row-key="getRowKey"
|
||||
height="400"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" :reserve-selection="true" />
|
||||
<el-table-column prop="loginName" align="center" label="用户名" width="150" />
|
||||
<el-table-column prop="idEntityCard" align="center" label="身份证号" />
|
||||
<el-table-column prop="deptName" align="center" label="部门" />
|
||||
<el-table-column prop="inDustRialId" align="center" width="150" label="警号" />
|
||||
<el-table-column prop="mobile" width="150" align="center" label="电话" />
|
||||
<el-table-column prop="sex" align="center" label="性别" width="80">
|
||||
<template #default="{ row }">
|
||||
{{ row.sex == 1 ? '男' : '女' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div style="margin-top: 15px; display: flex; justify-content: flex-end;">
|
||||
<el-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"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="handleClose">取消</el-button>
|
||||
<el-button type="primary" @click="onConfirm">确认</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, watch, nextTick } from 'vue'
|
||||
import * as MOSTY from '@/components/MyComponents/index'
|
||||
import { selectUserDeptPage } from '@/api/user-manage'
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
roleId: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:modelValue', 'choosedUsers'])
|
||||
|
||||
const visible = computed({
|
||||
get: () => props.modelValue,
|
||||
set: (val) => emit('update:modelValue', val)
|
||||
})
|
||||
|
||||
const listQuery = ref({
|
||||
current: 1,
|
||||
size: 20,
|
||||
loginName: '',
|
||||
phone: '',
|
||||
ssbmdm: ''
|
||||
})
|
||||
|
||||
const total = ref(0)
|
||||
const tableData = ref([])
|
||||
const multipleUserRef = ref(null)
|
||||
const multipleSelectionUser = ref([])
|
||||
|
||||
// 监听弹窗打开
|
||||
watch(visible, (val) => {
|
||||
if (val) {
|
||||
nextTick(() => {
|
||||
getListData()
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
const getListData = () => {
|
||||
selectUserDeptPage(listQuery.value).then((res) => {
|
||||
tableData.value = res?.records || []
|
||||
total.value = Number(res.total) || 0
|
||||
})
|
||||
}
|
||||
|
||||
const handleFilter = () => {
|
||||
listQuery.value.current = 1
|
||||
getListData()
|
||||
}
|
||||
|
||||
const reset = () => {
|
||||
listQuery.value = {
|
||||
current: 1,
|
||||
size: 20,
|
||||
loginName: '',
|
||||
phone: '',
|
||||
ssbmdm: ''
|
||||
}
|
||||
getListData()
|
||||
}
|
||||
|
||||
const handleSizeChange = (currentSize) => {
|
||||
listQuery.value.size = currentSize
|
||||
getListData()
|
||||
}
|
||||
|
||||
const handleCurrentChange = (currentPage) => {
|
||||
listQuery.value.current = currentPage
|
||||
getListData()
|
||||
}
|
||||
|
||||
const getRowKey = (row) => row.id
|
||||
|
||||
const handleSelectionChange = (val) => {
|
||||
multipleSelectionUser.value = val
|
||||
}
|
||||
|
||||
const onConfirm = () => {
|
||||
const userList = multipleSelectionUser.value
|
||||
// 去重
|
||||
const list = []
|
||||
const listId = []
|
||||
userList.forEach((val) => {
|
||||
if (listId.indexOf(val.id) === -1) {
|
||||
list.push(val)
|
||||
listId.push(val.id)
|
||||
}
|
||||
})
|
||||
emit('choosedUsers', list)
|
||||
handleClose()
|
||||
}
|
||||
|
||||
const handleClose = () => {
|
||||
multipleSelectionUser.value = []
|
||||
if (multipleUserRef.value && tableData.value.length > 0) {
|
||||
tableData.value.forEach(item => {
|
||||
multipleUserRef.value.toggleRowSelection(item, false)
|
||||
})
|
||||
}
|
||||
emit('update:modelValue', false)
|
||||
}
|
||||
</script>
|
||||
@ -7,7 +7,7 @@
|
||||
:destroy-on-close="true"
|
||||
@close="closed"
|
||||
>
|
||||
<div class="treeCnt">
|
||||
<div class="treeCnt" v-loading="loading" element-loading-text="加载中...">
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
:data="allPermission"
|
||||
@ -21,7 +21,7 @@
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="closed">取消</el-button>
|
||||
<el-button type="primary" @click="onComfirm">保存</el-button>
|
||||
<el-button type="primary" @click="onComfirm" :loading="saveLoading">保存</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@ -30,12 +30,13 @@
|
||||
|
||||
<script setup>
|
||||
import { ElMessage } from "element-plus";
|
||||
import { defineProps, watch, ref, nextTick } from "vue";
|
||||
import { watch, ref, nextTick } from "vue";
|
||||
import {
|
||||
saveRoleMenuInfo,
|
||||
getRoleMenuIds,
|
||||
getMenuTree
|
||||
} from "@/api/user-manage";
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
@ -48,6 +49,10 @@ const props = defineProps({
|
||||
});
|
||||
|
||||
const emits = defineEmits(["update:modelValue", "updateRole"]);
|
||||
|
||||
const loading = ref(false);
|
||||
const saveLoading = ref(false);
|
||||
|
||||
const closed = () => {
|
||||
emits("update:modelValue", false);
|
||||
};
|
||||
@ -55,33 +60,6 @@ const closed = () => {
|
||||
// 控制父子关联:操作时关联,回显时不关联
|
||||
const checkStrictly = ref(false);
|
||||
|
||||
// 递归收集所有子节点id
|
||||
const getAllChildKeys = (node) => {
|
||||
let keys = [];
|
||||
if (node.sysMenuList && node.sysMenuList.length) {
|
||||
node.sysMenuList.forEach((child) => {
|
||||
keys.push(child.id);
|
||||
keys = keys.concat(getAllChildKeys(child));
|
||||
});
|
||||
}
|
||||
return keys;
|
||||
};
|
||||
|
||||
// 递归收集所有祖先节点id
|
||||
const getAllParentKeys = (nodeId, tree, parentKeys = []) => {
|
||||
for (const node of tree) {
|
||||
if (node.id === nodeId) return parentKeys;
|
||||
if (node.sysMenuList && node.sysMenuList.length) {
|
||||
const result = getAllParentKeys(nodeId, node.sysMenuList, [
|
||||
...parentKeys,
|
||||
node.id
|
||||
]);
|
||||
if (result) return result;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
// 提交:选中的节点 + 所有祖先节点都传给后端
|
||||
const onComfirm = () => {
|
||||
const checkedKeys = treeRef.value.getCheckedKeys();
|
||||
@ -92,10 +70,15 @@ const onComfirm = () => {
|
||||
roleId: Number(props.roleId),
|
||||
menuIds: submitKeys.map((item) => Number(item))
|
||||
};
|
||||
saveRoleMenuInfo(params).then((res) => {
|
||||
ElMessage.success("操作成功");
|
||||
});
|
||||
closed();
|
||||
saveLoading.value = true;
|
||||
saveRoleMenuInfo(params)
|
||||
.then(() => {
|
||||
ElMessage.success("操作成功");
|
||||
closed();
|
||||
})
|
||||
.finally(() => {
|
||||
saveLoading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
//所有权限
|
||||
@ -127,10 +110,15 @@ watch(
|
||||
() => props.modelValue,
|
||||
async (val) => {
|
||||
if (val && props.roleId) {
|
||||
loading.value = true;
|
||||
checkStrictly.value = false;
|
||||
treeRef.value?.setCheckedKeys([]);
|
||||
await getPermissionList();
|
||||
getRolePermission();
|
||||
try {
|
||||
await getPermissionList();
|
||||
await getRolePermission();
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@ -241,6 +241,10 @@
|
||||
v-model="privilegesDialogVisible"
|
||||
:roleId="currentRow.id"
|
||||
></PrivilegesDialog>
|
||||
<AllocationUserDialog
|
||||
v-model="allocationUserVisible"
|
||||
:roleId="currentRow.id"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -248,6 +252,7 @@
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import PrivilegesDialog from "./conponents/PrivilegesDialog.vue";
|
||||
import AllocationUserDialog from "./conponents/AllocationUserDialog.vue";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { ref, onMounted, getCurrentInstance, onUnmounted } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -258,7 +263,6 @@ import {
|
||||
updateSysRole,
|
||||
deleteSysRole
|
||||
} from "@/api/user-manage";
|
||||
import { useRouter } from "vue-router";
|
||||
const searchBox = ref(null); // 搜索盒子
|
||||
const keyCount = ref(0); //tabel组件刷新值
|
||||
const tableHeight = ref(); // 表格高度
|
||||
@ -342,6 +346,7 @@ const updateDict = (row) => {
|
||||
|
||||
/**privileges 分配权限 */
|
||||
const privilegesDialogVisible = ref(false);
|
||||
const allocationUserVisible = ref(false);
|
||||
const privilegesHanlder = (row) => {
|
||||
privilegesDialogVisible.value = true;
|
||||
currentRow.value = { ...row };
|
||||
@ -419,10 +424,9 @@ const closeDialog = () => {
|
||||
};
|
||||
|
||||
//分配用户
|
||||
const router = useRouter();
|
||||
const allocationUser = (row) => {
|
||||
//
|
||||
router.push(`/user/allocationUser/${row.id}`);
|
||||
currentRow.value = { ...row };
|
||||
allocationUserVisible.value = true;
|
||||
};
|
||||
// 高度计算
|
||||
const tabHeightFn = () => {
|
||||
|
||||
60
src/views/error/401.vue
Normal file
60
src/views/error/401.vue
Normal file
@ -0,0 +1,60 @@
|
||||
<template>
|
||||
<div class="error-page">
|
||||
<div class="error-content">
|
||||
<h1>401</h1>
|
||||
<h2>无访问权限</h2>
|
||||
<p>您没有权限访问此页面,请联系管理员申请相关权限。</p>
|
||||
<el-button type="primary" @click="goBack">返回上一页</el-button>
|
||||
<el-button @click="goHome">返回首页</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const router = useRouter()
|
||||
|
||||
const goBack = () => {
|
||||
router.go(-1)
|
||||
}
|
||||
|
||||
const goHome = () => {
|
||||
router.push('/')
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.error-page {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
}
|
||||
|
||||
.error-content {
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.error-content h1 {
|
||||
font-size: 120px;
|
||||
margin: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.error-content h2 {
|
||||
font-size: 32px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.error-content p {
|
||||
font-size: 16px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.error-content .el-button {
|
||||
margin: 0 10px;
|
||||
}
|
||||
</style>
|
||||
64
src/views/error/404.vue
Normal file
64
src/views/error/404.vue
Normal file
@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<div class="error-page">
|
||||
<div class="error-content">
|
||||
<h1>404</h1>
|
||||
<h2>无权限访问</h2>
|
||||
<p>您没有权限访问此页面,请联系上级部门添加相关权限。</p>
|
||||
<el-button type="primary" @click="goHome">返回首页</el-button>
|
||||
<el-button @click="logout">退出登录</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useStore } from 'vuex'
|
||||
|
||||
const router = useRouter()
|
||||
const store = useStore()
|
||||
|
||||
const goHome = () => {
|
||||
router.push('/')
|
||||
}
|
||||
|
||||
const logout = () => {
|
||||
store.dispatch("user/logout")
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.error-page {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
}
|
||||
|
||||
.error-content {
|
||||
text-align: center;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.error-content h1 {
|
||||
font-size: 120px;
|
||||
margin: 0;
|
||||
font-weight: 700;
|
||||
color: #667eea;
|
||||
}
|
||||
|
||||
.error-content h2 {
|
||||
font-size: 32px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.error-content p {
|
||||
font-size: 16px;
|
||||
margin-bottom: 30px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.error-content .el-button {
|
||||
margin: 0 10px;
|
||||
}
|
||||
</style>
|
||||
@ -103,34 +103,34 @@ const router = useRouter();
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {
|
||||
D_GS_ZDR_CZZT,
|
||||
D_GS_BK_SQLX,
|
||||
// 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_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
|
||||
// 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_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"
|
||||
// "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: {
|
||||
|
||||
@ -146,17 +146,17 @@ const {
|
||||
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
|
||||
// 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",
|
||||
@ -164,18 +164,18 @@ const {
|
||||
"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"
|
||||
"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({
|
||||
|
||||
@ -60,7 +60,29 @@ 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 {
|
||||
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,
|
||||
|
||||
@ -76,10 +76,12 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { xxcjXfxsSelectPage } from "@/api/xxcj.js";
|
||||
import { ref, reactive, getCurrentInstance, watch } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF, D_GS_XS_SJLY, D_GS_XS_ZLLX, D_GS_ZDQT_FXDJ, D_GS_XS_CZZT } =
|
||||
const { D_BZ_SF,
|
||||
// D_GS_XS_SJLY,
|
||||
D_GS_XS_ZLLX, D_GS_ZDQT_FXDJ, D_GS_XS_CZZT } =
|
||||
proxy.$dict(
|
||||
"D_BZ_SF",
|
||||
"D_GS_XS_SJLY",
|
||||
// "D_GS_XS_SJLY",
|
||||
"D_GS_XS_ZLLX",
|
||||
"D_GS_ZDQT_FXDJ",
|
||||
"D_GS_XS_CZZT"
|
||||
|
||||
@ -78,8 +78,8 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { xxcjQbcjSelectPage, xxcjXfxsSelectPage } from "@/api/xxcj.js";
|
||||
import { ref, reactive, getCurrentInstance, watch } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_XS_CZZT, D_GS_XS_LY, D_GS_XS_LX, D_BZ_XSSHZT } = proxy.$dict(
|
||||
"D_GS_XS_CZZT",
|
||||
const { /* D_GS_XS_CZZT, */ D_GS_XS_LY, D_GS_XS_LX, D_BZ_XSSHZT } = proxy.$dict(
|
||||
/* "D_GS_XS_CZZT", */
|
||||
"D_GS_XS_LY",
|
||||
"D_GS_XS_LX",
|
||||
"D_BZ_XSSHZT"
|
||||
|
||||
@ -23,11 +23,7 @@
|
||||
<!-- <KeyPpersonneltypes /> -->
|
||||
<MyCase />
|
||||
</div>
|
||||
<div
|
||||
class="commom-aside"
|
||||
@mouseenter="mouseEnter"
|
||||
@mouseleave="mouseLeave"
|
||||
>
|
||||
<div class="commom-aside" @mouseenter="mouseEnter" @mouseleave="mouseLeave">
|
||||
<div class="relative-full-height">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="reversalPushShow" class="flip-wrapper">
|
||||
@ -46,11 +42,7 @@
|
||||
<div class="commom-aside-big">
|
||||
<Calendar />
|
||||
</div>
|
||||
<div
|
||||
class="commom-aside-big"
|
||||
@mouseenter="mouseEnter"
|
||||
@mouseleave="mouseLeave"
|
||||
>
|
||||
<div class="commom-aside-big" @mouseenter="mouseEnter" @mouseleave="mouseLeave">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="reversalShow" class="flip-wrapper">
|
||||
<Experience @reversalPush="reversal"></Experience>
|
||||
@ -80,17 +72,8 @@
|
||||
</el-icon>
|
||||
</div>
|
||||
<div class="icon-button notification-button">
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="showNotification ? '通知关闭' : '通知打开'"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-icon
|
||||
:size="20"
|
||||
@click="handleOpenNotification"
|
||||
class="icon-top"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="showNotification ? '通知关闭' : '通知打开'" placement="bottom">
|
||||
<el-icon :size="20" @click="handleOpenNotification" class="icon-top">
|
||||
<Open v-if="showNotification" />
|
||||
<TurnOff v-else />
|
||||
</el-icon>
|
||||
@ -108,18 +91,11 @@
|
||||
</div>
|
||||
<div class="search-container">
|
||||
<div class="search-icon">
|
||||
<el-icon
|
||||
:size="20"
|
||||
@click="showSeatch = !showSeatch"
|
||||
class="icon-top"
|
||||
>
|
||||
<el-icon :size="20" @click="showSeatch = !showSeatch" class="icon-top">
|
||||
<Search />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div
|
||||
:style="{ width: showSeatch ? '270px' : '0' }"
|
||||
class="trnsitinForm"
|
||||
>
|
||||
<div :style="{ width: showSeatch ? '270px' : '0' }" class="trnsitinForm">
|
||||
<el-input v-model="searchText" placeholder="请输入身份证" clearable>
|
||||
<template #append>
|
||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
||||
@ -172,6 +148,9 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineOptions({
|
||||
name: 'HomePage'
|
||||
});
|
||||
import QxsqDialog from "./components/qxsqDialog.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { ref, onMounted, onUnmounted, getCurrentInstance } from "vue";
|
||||
@ -517,7 +496,7 @@ const handleCloseYp = () => {
|
||||
// 自动刷新定时器逻辑
|
||||
// ============================================
|
||||
const refreshTimer = ref(null);
|
||||
const IDLE_TIMEOUT = 15 * 60 * 1000;
|
||||
const IDLE_TIMEOUT = 30 * 60 * 1000;
|
||||
|
||||
const resetRefreshTimer = () => {
|
||||
if (refreshTimer.value) {
|
||||
@ -753,7 +732,7 @@ const MapCenter = () => {
|
||||
}
|
||||
|
||||
/* 收缩时只显示第一个图标,隐藏其他内容 */
|
||||
.badge-content:not(.expanded) > :not(:first-child) {
|
||||
.badge-content:not(.expanded)> :not(:first-child) {
|
||||
opacity: 0;
|
||||
max-height: 0;
|
||||
margin: 0;
|
||||
|
||||
@ -75,7 +75,8 @@
|
||||
<div class="flex align-center">
|
||||
<img class="mr10" src="@/assets/images/icon_046.png" alt="" />
|
||||
<div class="f14 user-info">
|
||||
<div :style="{ color: isRed ? '#ff5500' : '#fff', fontWeight: isRed ? 'bold' : 'normal' }">{{ userName }}</div>
|
||||
<div :style="{ color: isRed ? '#ff5500' : '#fff', fontWeight: isRed ? 'bold' : 'normal' }">{{ userName }}
|
||||
</div>
|
||||
<div class="dept-text" :title="dept">{{ dept }}</div>
|
||||
</div>
|
||||
|
||||
@ -111,6 +112,7 @@ import { timeValidate, weekValidate } from "@/utils/tools.js";
|
||||
import { useRouter, useRoute, onBeforeRouteLeave } from "vue-router";
|
||||
import { useStore } from "vuex";
|
||||
import { getUserIsRed } from "@/api/sys.js"
|
||||
import { ElMessage } from 'element-plus'
|
||||
const icon1 = require("@/assets/images/icon_048.png"); //晴天
|
||||
const icon2 = require("@/assets/images/icon_049.png"); //小雨
|
||||
const icon3 = require("@/assets/images/icon_050.png"); //高温
|
||||
@ -180,29 +182,59 @@ function getIsRed() {
|
||||
}
|
||||
// 按钮切换
|
||||
const handleBtns = (val) => {
|
||||
console.log('[head.vue] 按钮点击:', val, '时间:', Date.now());
|
||||
btnsActive.value = val;
|
||||
|
||||
// 获取用户权限
|
||||
const menusPermission = getItem('menusPermission') || []
|
||||
|
||||
// 权限检查映射
|
||||
const permissionMap = {
|
||||
"数据整合": "mpvPeo",
|
||||
"实战支撑": "InfoCollection",
|
||||
"分析研判": "ResearchHome",
|
||||
"安全监控": "resourceMonitoring"
|
||||
}
|
||||
|
||||
// 检查权限
|
||||
const checkPermission = (name) => {
|
||||
const permission = permissionMap[name]
|
||||
if (permission && !menusPermission.includes(permission)) {
|
||||
ElMessage.warning('您没有访问权限,请联系管理员')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
switch (val) {
|
||||
case "数据整合":
|
||||
router.push("/mpvPeo");
|
||||
if (checkPermission("数据整合")) {
|
||||
router.push("/mpvPeo")
|
||||
}
|
||||
break;
|
||||
case "实战支撑":
|
||||
router.push("/InfoCollection");
|
||||
if (checkPermission("实战支撑")) {
|
||||
router.push("/InfoCollection");
|
||||
}
|
||||
break;
|
||||
case "分析研判":
|
||||
router.push("/ResearchHome");
|
||||
if (checkPermission("分析研判")) {
|
||||
router.push("/ResearchHome");
|
||||
}
|
||||
break;
|
||||
case "安全监控":
|
||||
if (checkPermission("安全监控")) {
|
||||
router.push("/resourceMonitoring");
|
||||
}
|
||||
break;
|
||||
case "后台":
|
||||
if (props.defDay) {
|
||||
router.push("/YjData");
|
||||
router.push("/forumPost");
|
||||
} else {
|
||||
router.push("/");
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case "安全监控":
|
||||
router.push("/resourceMonitoring");
|
||||
break;
|
||||
|
||||
case "退出登录":
|
||||
store.dispatch("user/logout");
|
||||
break;
|
||||
|
||||
@ -20,7 +20,7 @@ import * as MOSTY from "@/components/MyComponents/index";
|
||||
import CheckBox from "@/components/checkBox/index.vue";
|
||||
import { ref ,reactive, onMounted,getCurrentInstance} from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {D_GS_ZDQT_LB,D_BZ_YJJB} =proxy.$dict('D_GS_ZDQT_LB','D_BZ_YJJB')
|
||||
const { /* D_GS_ZDQT_LB, D_BZ_YJJB */ } = proxy.$dict(/* 'D_GS_ZDQT_LB', 'D_BZ_YJJB' */)
|
||||
const checkData = reactive({
|
||||
list: ["人员", "车辆"],
|
||||
hasChoose: ["人员", "车辆"],
|
||||
|
||||
@ -66,8 +66,46 @@ import { useRoute,useRouter } from 'vue-router'
|
||||
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 {
|
||||
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 props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
|
||||
Reference in New Issue
Block a user