Files
ba_web/src/views/backOfficeSystem/basicsmanage/watchman-ll/patrol-police/index.vue
2025-09-22 09:01:41 +08:00

1154 lines
33 KiB
Vue

<template>
<div>
<div class="titleBox">
<div class="title">巡防民警</div>
<div class="btnBox">
<el-button type="primary" @click="add">
<el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
<el-button @click="batchDelete" :disabled="ids.length == 0" typeof="danger">
<el-icon style="vertical-align: middle">
<Delete />
</el-icon>
<span style="vertical-align: middle">批量删除</span>
</el-button>
</div>
</div>
<div class="searchBox" ref="searchBox">
<el-form :model="form" :inline="true">
<el-form-item label="所属部门">
<MOSTY.Department width="100%" clearable v-model="form.ssbmdm" />
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="form.mjName" placeholder="请输入姓名" clearable />
</el-form-item>
<el-form-item label="身份证号码">
<el-input v-model="form.sfzh" placeholder="请输入身份证号码" clearable />
</el-form-item>
<el-form-item label="是否离职">
<el-select clearableupdate v-model="form.xtSjzt" placeholder="请选择状态">
<el-option v-for="item in D_BZ_SFLZ" :label="item.label" :key="item.value" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter"> 查询 </el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
</div>
<div class="total">
<span>民警总数 {{ total }} </span>
<div class="jnbq">
<el-button v-for="item in lxList" :key="item.id" :class="form.bqId === item.id ? 'on' : ''"
@click="chackJn(item)" size="small">{{ item.bqmc }}</el-button>
</div>
</div>
<div class="tabBox">
<el-table :data="tableData" border ref="dataTreeList" row-key="id"
:tree-props="{ children: 'itemList', hasChildren: true }" style="width: 100%"
@selection-change="handleSelectionChange" :height="tableHeight" :key="keyCount" v-loading="loadingTable"
element-loading-background="rgba(0,0,0,0.3)" element-loading-text="数据加载中">
<el-table-column label="序号" type="index" align="center" width="80" />
<el-table-column width="120" align="center" label="图片">
<template #default="{ row }">
<div class="phone">
<el-image v-if="row.tpid" :src="urlImg + row.tpid" fit="cover" lazy />
<el-image v-else :src="Person" fit="cover" lazy />
</div>
</template>
</el-table-column>
<el-table-column prop="xm" width="130" show-overflow-tooltip align="center" label="民警姓名">
</el-table-column>
<el-table-column prop="sfzh" width="200" show-overflow-tooltip align="center" label="身份证号码">
</el-table-column>
<el-table-column prop="ssbm" label="所属部门" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="jh" label="警号" width="120" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="zyjn" show-overflow-tooltip label="专业技能" align="center">
<template #default="{ row }">
<el-tag class="ml-2" v-for="(it, index) in row.sklList" :key="index">{{ it.bqmc }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="370px" fixed="right">
<template #default="{ row }">
<el-button @click="onClickUpdate(row)" size="small">修改</el-button>
<el-button plain @click="chackZqjl(row)" size="small">执勤记录</el-button>
<el-button plain size="small" @click="getDocument(row)">人员档案</el-button>
<el-button v-if="row.xtSjzt != 0" @click="lzList(row)" type="warning" size="small">离职</el-button>
<el-button @click="delDictItem(row)" type="danger" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination class="pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="form.current" :page-sizes="[10, 20, 50]" :page-size="form.size"
layout="total, sizes, prev, pager, next, jumper" :total="total">
</el-pagination>
</div>
</div>
<div v-if="dialogFormVisible" class="dialog">
<div class="head_box">
<span class="title">{{ title }}</span>
<div>
<el-button type="primary" size="small" @click="submit" v-if="!isDisabled" :loading="loading">保存</el-button>
<el-button size="small" @click="(dialogFormVisible = false), (isDisabled = false)">关闭</el-button>
</div>
</div>
<el-form ref="elform" :model="addForm" :rules="rules" :inline="true" label-position="top">
<div style="
width: 25%;
display: flex;
justify-content: center;
margin-bottom: 10px;
">
<div style="position: relative; width: 90px; height: 100px">
<el-upload action="/mosty-base/minio/image/upload/id" :on-change="upImgFile" :on-success="upImg"
:show-file-list="false">
<el-image v-if="imgUrl" :src="imgUrl" fit="cover" />
<el-icon v-else>
<Plus></Plus>
</el-icon>
<span v-if="imgUrl" style="position: absolute; top: -52px; right: -20px">
<el-icon size="20" @click.stop="deletImg">
<Close />
</el-icon>
</span>
</el-upload>
</div>
</div>
<el-form-item label="民警姓名" prop="xm">
<el-input v-model="addForm.xm" placeholder="请输入民警姓名" clearable style="width: 100%" />
</el-form-item>
<el-form-item label="身份证号码" prop="sfzh">
<el-input v-model="addForm.sfzh" placeholder="请输入身份证号码" clearable style="width: 100%" />
</el-form-item>
<el-form-item label="性别" prop="xbdm">
<el-select clearable v-model="addForm.xbdm" placeholder="请选择" style="width: 100%">
<el-option v-for="(item, index) in D_BZ_XB" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="民族" prop="mzdm">
<el-select clearable v-model="addForm.mzdm" placeholder="请选择民族" style="width: 100%">
<el-option v-for="(item, index) in D_BZ_MZ" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="政治面貌" prop="zzmm">
<el-select clearable v-model="addForm.zzmm" placeholder="请选择" style="width: 100%">
<el-option v-for="(item, index) in D_BZ_ZZMM" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="婚姻状况" prop="hyzk">
<el-select clearable v-model="addForm.hyzk" placeholder="请选择" style="width: 100%">
<el-option v-for="(item, index) in D_BZ_HYZK" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="学历" prop="whcddm">
<el-select clearable v-model="addForm.whcddm" placeholder="请选择" style="width: 100%">
<el-option v-for="(item, index) in D_BZ_WHCD" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="民警编号" prop="jh">
<el-input v-model="addForm.jh" placeholder="请输入民警编号" clearable style="width: 100%" />
</el-form-item>
<el-form-item label="联系电话" prop="lxdh">
<el-input v-model="addForm.lxdh" placeholder="请输入联系电话" clearable style="width: 100%" />
</el-form-item>
<el-form-item label="所属部门" prop="ssbmid">
<MOSTY.Department :placeholder="addForm.ssbm" style="width: 100%" ref="cascader" clearable filterable
:options="depList" :props="props" @getDepValue="handleChange" v-model="addForm.ssbmdm" />
</el-form-item>
<el-form-item label="人员类别" prop="lx">
<el-select clearable v-model="addForm.lx" placeholder="请选择" style="width: 100%">
<el-option v-for="(item, index) in D_BZ_RYLB" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item style="width: 100%" label="专业技能" prop="sklList" @change="selectJnbq">
<el-select v-model="addForm.sklList" multiple placeholder="请选择" style="width: 100%" @change="onChangeBQ">
<el-option v-for="item in bqList" :key="item.id" :label="item.bqmc" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="备注" style="width: 100%">
<el-input v-model="addForm.bz" placeholder="请输入关键字" show-word-limit type="textarea" />
</el-form-item>
</el-form>
</div>
<!-- 执勤记录 -->
<div v-if="zqjl" class="dialog">
<div class="head_box">
<div class="title">巡防民警执勤记录</div>
<div>
<el-button v-if="mapActive" type="primary" size="small" @click="mapActive = false">关闭日历模式</el-button>
<el-button v-else type="primary" size="small" @click="mapActive = true">日历模式</el-button>
<el-button size="small" @click="zqjl = false">关闭</el-button>
</div>
</div>
<div v-if="mapActive" class="txmap">
<ZbCalendar />
</div>
<div v-else>
<el-table :data="zqjlData" border ref="dataTreeList" row-key="id"
:tree-props="{ children: 'itemList', hasChildren: true }" style="width: 100%"
@selection-change="handleSelectionChange" :height="tableHeight1" :key="keyCount" v-loading="loadingTable"
element-loading-background="rgba(0,0,0,0.3)" element-loading-text="数据加载中">
<el-table-column prop="zqbm" show-overflow-tooltip align="center" width="150px" label="执勤部门">
</el-table-column>
<el-table-column prop="jzcy" show-overflow-tooltip align="center" width="200" label="警组成员">
</el-table-column>
<el-table-column prop="sc" label="时长" align="center" width="150"></el-table-column>
<el-table-column prop="lc" label="里程" width="100px" align="center"></el-table-column>
<el-table-column prop="jqczsl" show-overflow-tooltip label="警情处置数量" align="center">
</el-table-column>
<el-table-column prop="xctjs" show-overflow-tooltip label="现场调解数" align="center">
</el-table-column>
<el-table-column prop="tjl" show-overflow-tooltip label="调解率" align="center">
</el-table-column>
<el-table-column prop="yjzlczsl" show-overflow-tooltip label="预警指令处置数量" align="center">
</el-table-column>
<el-table-column prop="ryyjsl" show-overflow-tooltip label="人员移交数量" align="center">
</el-table-column>
<el-table-column prop="pccls" show-overflow-tooltip label="盘查车辆数量" align="center">
</el-table-column>
<el-table-column prop="clyjsl" show-overflow-tooltip label="移交数量" align="center">
</el-table-column>
</el-table>
<div class="fenye" :style="{ top: tableHeight1 + 'px' }">
<el-pagination class="pagination" @size-change="handleSizeChangezq" @current-change="handleCurrentChangezq"
:current-page="formzq.current" :page-sizes="[10, 20, 50]" :page-size="form.size"
layout="total, sizes, prev, pager, next, jumper" :total="totalzq">
</el-pagination>
</div>
</div>
</div>
<div class="dialog" v-if="chooseUserVisible">
<div class="head_box">
<span class="title">选择用户</span>
<div>
<el-button v-if="chooseUserVisible" type="primary" size="small" @click="plADD">保存</el-button>
<el-button v-else type="primary" size="small" @click="chooseUserVisible = false">保存</el-button>
<el-button size="small" @click="chooseUserVisible = false">关闭</el-button>
</div>
</div>
<div class="my_transfer">
<div class="tree">
<MOSTY.DepartmentTree width="300px" placeholder="管理部门ID" clearable filterable :isBmId="true"
v-model="userQuery.deptId" />
</div>
<div class="left">
<div class="serch">
<el-form :model="userQuery" :inline="true">
<el-form-item label="用户名">
<el-input placeholder="请输入用户名" v-model="userQuery.loginName" clearable></el-input>
</el-form-item>
<el-form-item label="电话号码">
<el-input placeholder="请输入电话" v-model="userQuery.phone" clearable></el-input>
</el-form-item>
<el-form-item label="身份证号码">
<el-input v-model="userQuery.idEntityCard" placeholder="请输入身份证号码" clearable />
</el-form-item>
<el-form-item label="是否包含下级">
<el-select v-model="userQuery.isChild">
<el-option v-for="item in D_BZ_SF" :key="item" :label="item.label" :value="item.value">{{ item.label
}}</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="success" @click="getListLeftData">查询</el-button>
<el-button type="info" @click="resetLeftdata()">
重置
</el-button>
</el-form-item>
</el-form>
</div>
<div class="tableBox" :style="{ height: tableHeight1 + 'px' }" style="border: 1px solid #07376d">
<el-table :data="tableLeftData" border row-key="id" height="100%" style="width:100%"
@selection-change="handleSelectionChangeLeft">
<el-table-column type="selection" width="40" align="center" />
<el-table-column prop="deptName" label="所属部门" align="center" />
<el-table-column prop="userName" label="用户姓名" align="center" />
<el-table-column prop="idEntityCard" label="身份证号" align="center" />
<el-table-column prop="mobile" label="电话号码" align="center" />
<el-table-column prop="inDustRialId" label="警号" align="center" />
</el-table>
<div>
<el-pagination class="pagination" @size-change="handleSizeChangeUser"
@current-change="handleCurrentChangeUser" :current-page="userQuery.current"
:page-sizes="[10, 20, 50, 100]" :page-size="userQuery.size"
layout="total, sizes, prev, pager, next, jumper" :total="totalUser">
</el-pagination>
</div>
</div>
</div>
<div class="btn">
<el-button :icon="Back" circle @click="upLeft" />
<el-button :icon="Right" circle @click="upRight" />
</div>
<div class="right" style="height: 700px; border: 1px solid #07376d">
<el-table :data="tableRightData" ref="multipleTableRef" border row-key="id" height="100%"
@selection-change="handleSelectionChangeRight">
<el-table-column type="selection" width="40" align="center" />
<el-table-column prop="deptName" label="所属部门" align="center"></el-table-column>
<el-table-column prop="userName" label="用户姓名" align="center"></el-table-column>
<el-table-column prop="inDustRialId" label="警号" align="center"></el-table-column>
</el-table>
</div>
</div>
</div>
<!-- 人员档案弹窗 -->
<PersonnelDialog :D_BZ_XB="D_BZ_XB" :D_BZ_MZ="D_BZ_MZ" :D_BZ_XLCJ="D_BZ_XLCJ" :D_BZ_XFXLLX="D_BZ_XFXLLX"
ref="personDialog" />
</div>
</template>
<script setup>
import PersonnelDialog from "./personnelProfile.vue";
import ZbCalendar from "@/components/ZbCalendar/index";
import { Right, Back } from "@element-plus/icons-vue";
import * as MOSTY from "@/components/MyComponents/index";
import Person from "@/assets/images/default_male.png";
import { selectDeptPage, selectUserDeptPage } from "@/api/user-manage";
import {
getTbJcglXfll,
deleteTbJcglXfll,
getTbJcglXfllInfo,
updateTbJcglXfll,
addTbJcglXfll,
getTbJcglBq,
getCountBqsl,
batchDeleteList,
getSfhList,
ryLz
} from "@/api/xfll";
import { getSysUserList } from "@/api/user-manage";
import { ElMessage } from "element-plus";
import {
ref,
reactive,
onMounted,
computed,
getCurrentInstance,
onUnmounted,
toRaw,
watch
} from "vue";
const multipleTableRef = ref(null);
const tableLeftData = ref([]);
//左边选中数据
const leftdata = ref([]);
//右边选中数据
const rightData = ref([]);
const urlImg = ref("/mosty-base/minio/image/download/");
const zqjlData = ref([
{
zqbm: "xxx部门",
jzcy: "张三、李四、王五...",
sc: "8小时",
jqczsl: "13件",
yjzls: "21",
xctjs: "16件",
tjl: "30%",
pcrysl: 13,
ryyjsl: 2,
lc: "123KM",
pccls: 4,
clyjsl: 1,
createtime: "2022-06-01 11:42"
},
{
zqbm: "xxx部门",
jzcy: "张三、李四、王五...",
sc: "8小时",
jqczsl: "13件",
xctjs: "16件",
tjl: "30%",
lc: "123KM",
yjzls: "21",
pcrysl: 13,
ryyjsl: 2,
pccls: 4,
clyjsl: 1,
createtime: "2022-06-02 14:44"
}
]);
const personDialog = ref(null);
const tableRightData = ref([]);
const treeRef = ref(null);
const defaultProps = {
children: "children",
label: "label"
};
const data = ref([]);
//用户穿梭框搜索数据
const userQuery = ref({
current: 1,
size: 20,
deptId: "",
loginName: "",
phone: "",
isChild: "1",
idEntityCard: ""
});
const imgUrl = ref("");
function resetLeftdata() {
userQuery.value = {
current: 1,
size: 20
};
getListLeftData();
}
const value = ref([]);
const searchBox = ref(null); // 搜索盒子
const tableHeight = ref(); // 表格高度
const title = ref("新增巡逻民警信息");
function upImgFile(row) { }
function upImg(row) {
addForm.value.tpid = row.data;
imgUrl.value = urlImg.value + row.data;
}
function deletImg() {
imgUrl.value = "";
addForm.value.tpid = "";
}
function upRight() {
let num = leftdata.value.length;
leftdata.value.forEach((v) => {
const index = tableRightData.value.indexOf(v);
const i = tableLeftData.value.indexOf(v);
if (index == -1 && idEntityList.value.indexOf(v.idEntityCard) == -1) {
tableRightData.value.push(v);
multipleTableRef.value.toggleRowSelection(v, true);
tableLeftData.value.splice(i, 1);
num--;
}
});
if (num != 0) {
ElMessage({ message: "请勿重复添加", type: "warning" });
}
}
// 人员档案
function getDocument(row) {
personDialog.value.init(row);
}
function upLeft() {
rightData.value.forEach((v) => {
const index = tableLeftData.value.indexOf(v);
const i = tableRightData.value.indexOf(v);
if (index == -1) {
tableLeftData.value.push(v);
tableRightData.value.splice(i, 1);
}
});
}
//级联选择器配置
const props = {
expandTrigger: "children",
children: "childDeptList",
label: "orgName",
value: "id",
checkStrictly: true
// emitPath: false
};
//获取字典数据
const { proxy } = getCurrentInstance();
const {
D_BZ_XB,
D_BZ_WHCD,
D_BZ_ZZMM,
D_BZ_HYZK,
D_BZ_MZ,
D_BZ_RYLB,
D_BZ_SF,
D_BZ_XLCJ,
D_BZ_XFXLLX,
D_BZ_SFLZ
} = proxy.$dict(
"D_BZ_XB",
"D_BZ_WHCD",
"D_BZ_ZZMM",
"D_BZ_HYZK",
"D_BZ_MZ",
"D_BZ_RYLB",
"D_BZ_SF",
"D_BZ_XLCJ",
"D_BZ_XFXLLX",
"D_BZ_SFLZ"
);
const lxList = reactive([]); //搜索框标签选择数据
//筛选条件参数
const form = ref({
current: 1,
size: 20,
mjName: "",
sfzh: "",
ssbmdm: JSON.parse(window.localStorage.getItem("deptId"))[0].deptCode,
bqId: "",
bqlx: "",
xtSjzt: "1"
});
//筛选条件参数执勤记录
const formzq = ref({
current: 1,
size: 20
});
const chooseUserVisible = ref(false); //是否显示选择用户弹窗
const tableData = ref([]); //表单数据
const total = ref(0); //总数据
//执勤记录弹窗
const zqjl = ref(false);
const mapActive = ref(false);
const totalzq = ref(0);
const dialogFormVisible = ref(false); //是否显示弹窗
const elform = ref(null); //表单对象
const loadingTable = ref(true);
const cascader = ref(null); //级联选择器
const depList = ref([]); //部门数据
const bqList = ref([]); //标签数据
const tableHeight1 = ref(0);
const bqIdList = ref([]); // 选中的
const isDisabled = ref(false); //是否警用保存按钮
const ssbmIds = ref([]); //级联选择器回显ID
const ids = ref([]); //批量删除的ID
const chackipt = ref(false);
const keyCount = ref(0); //tabel组件刷新值
//列表身份证集合,穿梭框去重
const idEntityList = ref([]);
//新增表单参数
const loading = ref(false); //是否显示按钮加载
const listQuery = ref({
current: 1,
size: 20,
loginName: "",
phone: "",
isChild: "1"
});
const addForm = ref({
id: "",
fl: "01",
xm: "",
sfzh: "",
xbdm: "",
mzdm: "",
zzmm: "",
hyzk: "",
whcddm: "",
jh: "",
jx: "",
lx: "",
lxdh: "",
sklList: [],
bz: "",
ssbm: "",
ssbmid: ssbmIds.value[ssbmIds.value - 1]
});
//新增表单验证数据
const rules = reactive({
xm: [
{
required: true,
message: "请输入民警姓名"
}
],
sfzh: [
{
required: true,
message: "请输入身份证号码"
}
],
xbdm: [
{
required: true,
message: "请选择性别",
trigger: "change"
}
],
mzdm: [
{
required: true,
message: "请选择民族"
}
],
zzmm: [
{
required: true,
message: "请选择政治面貌"
}
],
hyzk: [
{
required: true,
message: "请选择婚姻状况"
}
],
whcddm: [
{
required: true,
message: "请选择学历"
}
],
jh: [
{
required: true,
message: "请输入民警编号"
}
],
lxdh: [
{
required: true,
message: "请输入联系电话"
}
],
jx: [
{
required: true,
message: "请选择警衔"
}
],
bqId: [
{
required: true,
message: "请选择技能"
}
]
});
function chackZqjl(item) {
zqjl.value = true;
}
function setBm() {
if (ssbmIds.value.length > 1) {
const info = cascader.value.getCheckedNodes()[0];
addForm.value.ssxgaj = info.label;
addForm.value.ssxgajdm = info.value;
}
}
const filterNode = (value, data) => {
if (!value) return true;
return data.label.includes(value);
};
onMounted(() => {
let deopt = JSON.parse(localStorage.getItem("deptId"));
userQuery.value.deptId = deopt[0].deptId;
getLeftdata();
//获取搜索栏标签选择数据
getCountBqsl().then((res) => {
res.forEach((item) => {
lxList.push(item);
});
});
getListData();
//获取部门信息
selectDeptPage({}).then((res) => {
depList.value = res.records;
});
//获取新增标签数据
let data = {
pageSize: 5000,
pageCurrent: 1,
xtSjzt: "1",
bqlx: "SKL"
};
getTbJcglBq(data).then((res) => {
bqList.value = res.records.filter((item) => {
return item.xtSjzt == "1";
});
});
tabHeightFn();
window.onresize = function () {
tabHeightFn();
};
proxy.mittBus.on("mittFn", (data) => {
keyCount.value = data;
});
getListLeftData();
});
function add() {
tableRightData.value = [];
title.value = "新增巡逻民警信息";
chooseUserVisible.value = true;
ssbmIds.value = [];
addForm.value = {
id: "",
fl: "01",
xm: "",
sfzh: "",
xbdm: "",
mzdm: "",
zzmm: "",
hyzk: "",
whcddm: "",
jh: "",
jx: "",
lx: "",
lxdh: "",
sklList: [],
bz: "",
ssbm: "",
ssbmid: "",
ssbmdm: JSON.parse(window.localStorage.getItem("deptId"))[0].deptCode
};
getLeftdata();
}
onUnmounted(() => {
proxy.mittBus.off("mittFn");
});
//批量数据
const handleSelectionChange = (val) => {
ids.value = [];
if (val) {
val.forEach((item) => {
ids.value.push(item.id);
});
}
};
function handleSelectionChangeLeft(val) {
leftdata.value = val;
}
function handleSelectionChangeRight(val) {
rightData.value = val;
}
watch(
() => userQuery.value.deptId,
(newVal) => {
getListLeftData();
}
);
function getLeftdata() {
// selectUserDeptPage(userQuery.value).then((res) => {
// tableLeftData.value = [];
// let rightIds = tableRightData.value.map((item) => item.id);
// res.records.forEach((v) => {
// if (rightIds.indexOf(v.id) == -1) {
// tableLeftData.value.push(v);
// }
// });
// totalUser.value = res.total;
// });
}
// 获取数据的方法
const getListLeftData = async () => {
const res = await getSysUserList(userQuery.value);
tableLeftData.value = res?.records;
totalUser.value = res.total;
};
//批量删除数据
const batchDelete = () => {
proxy
.$confirm("确定要删除", "警告", {
type: "warning"
})
.then(() => {
batchDeleteList(ids.value).then((res) => {
ElMessage({
message: "删除成功",
type: "success"
});
getListData();
});
})
.catch(() => {
proxy.$message.info("已取消");
});
};
// 用户穿梭框相关
const totalUser = ref(0);
function handleSizeChangeUser(e) {
userQuery.value.size = e;
getListLeftData();
}
function handleCurrentChangeUser(e) {
userQuery.value.current = e;
getListLeftData();
}
//更改查询条数
function handleSizeChangezq(e) {
formzq.value.size = e;
formzq.value.current = 1;
getListData();
}
//分页查询
function handleCurrentChangezq(e) {
formzq.value.current = e;
getListData();
}
//更改查询条数
function handleSizeChange(e) {
form.value.size = e;
form.value.current = 1;
getListData();
}
//分页查询
function handleCurrentChange(e) {
form.value.current = e;
getListData();
}
//新增选择部门
function addHandleChange(e) {
const info = cascader.value.getCheckedNodes()[0];
addForm.value.ssbm = info.label;
addForm.value.ssbmid = info.value;
}
//选择标签
function onChangeBQ(e) {
addForm.value.bqId = JSON.parse(JSON.stringify(e));
}
//查询条件选择部门
function handleChange(e) {
addForm.value.ssbmid = e ? e.id : ''
addForm.value.ssbm = e ? e.orgName : ''
}
//新增提交
function submit() {
elform.value.validate((valid) => {
if (valid) {
loading.value = true;
let data = addForm.value;
if (data.id) {
updateTbJcglXfll(data)
.then((res) => {
ElMessage({
message: "修改成功",
type: "success"
});
dialogFormVisible.value = false;
loading.value = false;
form.value.current = 1;
getListData();
})
.catch(() => {
loading.value = false;
});
} else {
addTbJcglXfll(data)
.then((res) => {
ElMessage({
message: "添加成功",
type: "success"
});
dialogFormVisible.value = false;
loading.value = false;
form.value.current = 1;
getListData();
})
.catch(() => {
loading.value = false;
});
}
}
});
}
//批量新增
function plADD() {
const allData = tableRightData.value.map((item) => {
const itemForm = {
ryid: item.id,
ssbmid: item.deptId,
ssbm: item.deptName,
ssbmdm: item.deptCode,
lxdh: item.mobile,
xm: item.userName,
sfzh: item.idEntityCard,
whcddm: item.whcd,
fl: "01",
jh: item.inDustRialId,
zzmm: item.politic,
hyzk: item.marital,
lx: item.type,
xbdm: item.sex,
mzdm: item.nation
};
return addTbJcglXfll(itemForm);
});
Promise.all(allData).then((res) => {
ElMessage({
message: "添加成功",
type: "success"
});
chooseUserVisible.value = false;
dialogFormVisible.value = false;
getListData();
});
}
//点击标签功能
function chackJn(item) {
form.value.current = 1;
form.value.bqId = item.id;
form.value.bqlx = item.bqlx;
getListData();
}
//重置搜索
function reset() {
form.value = {
current: 1,
size: 20,
mjName: "",
sfzh: "",
ssbmdm: "",
bqId: "",
bqlx: "",
xtSjzt: "1"
};
getListData();
}
//点击查询
const handleFilter = () => {
form.value.current = 1;
getListData();
};
//获取数据
const getListData = () => {
loadingTable.value = true;
console.log(form.value.ssbmdm, 'form.value.ssbmdm++++++++++');
let data = {
fl: "01",
sfzh: form.value.sfzh,
xm: form.value.mjName,
pageSize: form.value.size,
pageCurrent: form.value.current,
bqId: form.value.bqId,
bqlx: form.value.bqlx,
ssbmdm: form.value.ssbmdm,
xtSjzt: form.value.xtSjzt
};
getTbJcglXfll(data)
.then((res) => {
if (res.records.length > 0) {
res.records.forEach((item) => {
if (item.sklTag) {
item.jnbqList = item.sklTag.split(",");
}
if (item.expTag) {
item.jybqList = item.expTag.split(",").splice(2);
}
});
}
tableData.value = res.records;
total.value = res.total;
loadingTable.value = false;
})
.catch(() => {
loadingTable.value = false;
});
// 获取身份证数据
getSfhList().then((res) => {
idEntityList.value = res;
});
};
//设置详情
function setInfo(e) {
title.value = "巡逻民警详情";
getTbJcglXfllInfo(e.id).then((res) => {
ssbmIds.value = [];
proxy.$set(res.ssbmdm, depList.value, "childDeptList", (res) => {
ssbmIds.value.push(res);
});
addForm.value = res;
dialogFormVisible.value = true;
});
}
//点击修改打开弹窗
function onClickUpdate(e) {
chackipt.value = true;
title.value = "修改巡逻民警信息";
getTbJcglXfllInfo(e.id).then((res) => {
ssbmIds.value = [];
proxy.$set(res.ssbmdm, depList.value, "childDeptList", (res) => {
ssbmIds.value.push(res);
});
addForm.value = res;
addForm.value.ssbmid = addForm.value.ssbmid * 1;
addForm.value.ssbmid = addForm.value.ssbmid * 1;
addForm.value.sklList = res.sklList.map((item) => item.id);
dialogFormVisible.value = true;
imgUrl.value = res.tpid ? urlImg.value + res.tpid : "";
});
}
//删除人员
function delDictItem(e) {
proxy
.$confirm("确定要删除", "警告", {
type: "warning"
})
.then(() => {
batchDeleteList([e.id]).then((res) => {
ElMessage({
message: "删除成功",
type: "success"
});
getListData();
});
})
.catch(() => {
proxy.$message.info("已取消");
});
}
//人员离职
function lzList(e) {
proxy
.$confirm("确定要离职", "警告", {
type: "warning"
})
.then(() => {
ryLz([e.id]).then((res) => {
ElMessage({
message: "成功",
type: "success"
});
getListData();
});
})
.catch(() => {
proxy.$message.info("已取消");
});
}
// 表格高度计算
const tabHeightFn = () => {
tableHeight.value = window.innerHeight - searchBox.value.offsetHeight - 274;
tableHeight1.value = window.innerHeight - 340;
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
.dialog {
.mj_box {
display: flex;
padding: 3rem;
.item {
height: 40rem;
width: 20rem;
}
.leftAndRiight {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 1rem;
width: 10rem;
}
}
}
.treeLeft,
.checkedRight {
padding: 1.5rem;
border: 1px solid #07376d;
}
.total {
display: flex;
}
.jnbq {
margin-left: 1rem;
margin-bottom: 0.5rem;
>.el-button.on {
background: #046ce4;
}
}
.head_box {
// width: 300px;
width: 97%;
}
.my_transfer {
height: calc(100% - 50px);
display: flex;
.btn {
width: 50px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 10px;
}
.left {
margin: 12px;
flex: 1;
position: relative;
.tableBox {
position: absolute;
width: 100%;
}
.serch {
position: relative;
width: 100%;
height: 96px;
>.el-form--inline {
display: block;
width: 100%;
padding: 0;
>.el-form-item--default {
width: 31%;
}
}
}
.tableBox {
width: 100%;
}
}
.right {
width: 380px;
margin: 12px;
}
}
.phone {
width: 95px;
height: 120px;
.el-image {
width: 95px;
max-height: 120px;
}
}
::v-deep .el-upload {
width: 90px;
height: 100px;
border: 1px dashed #e0e0e0;
margin-bottom: 14px;
.el-icon {
margin-top: 34px;
font-size: 26px;
}
.el-image {
width: 100%;
height: 100%;
}
}
</style>