初始提交

This commit is contained in:
2025-09-04 16:35:14 +08:00
commit 5cd52c4d2c
735 changed files with 155784 additions and 0 deletions

108
src/pages/scyy/cl.vue Normal file
View File

@ -0,0 +1,108 @@
<template>
<div class="container" style="padding-top:13vw">
<TopNav navTitle="车辆" />
<div class="search-boxSJY">
<van-search v-model="clList.cph" placeholder="请输入车牌号" style="width: 100%" @update:model-value="getList(1)" />
</div>
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="item-box jwz-line" v-for="(item, index) in clList.list" :key="index">
<div class="ps-title">{{ item.cph }}</div>
<div class="lineSJY">所属部门: {{ item.ssbm }}</div>
<div class="lineSJY">
车辆状态: {{ item.zbzt == "1" ? "正常" : "非正常" }}
</div>
<div class="lineSJY">
<div class="first-one">车牌号: {{ item.cph }}</div>
<div class="first-one">车辆年款: {{ item.clnk }}</div>
</div>
<div class="lineSJY">
<div style="display: flex; width: 50%">
号牌种类:{{ setDict(item.cllx, D_BZ_CLLX) }}
</div>
<div style="display: flex; width: 50%">
车辆品牌{{ item.clpp }}
</div>
</div>
<div class="lineSJY">
<div class="first-one">购置日期: {{ item.gmrq }}</div>
<div class="first-one">报废日期: {{ item.bfrq }}</div>
</div>
</div>
</van-list>
</div>
</template>
<script setup>
import TopNav from "../../components/topNav.vue";
import { getClList } from "../../api/scyy.js";
import { ref, reactive, onMounted } from "vue";
import { getDictList, setDict } from "../../utils/dict";
import { useRouter } from "vue-router";
const router = useRouter();
function onClickLeft() {
router.push("/home");
}
const { D_BZ_CLLX } = getDictList("D_BZ_CLLX");
const clList = reactive({
list: [],
cph: "",
});
onMounted(() => {
getList();
});
const loading = ref(false);
const finished = ref(false);
const page = ref(1);
const total = ref(0);
function getList(val) {
loading.value = false;
if (val === 1) {
page.value = 1
}
getClList({
pageCurrent: page.value,
pageSize: 10,
cph: clList.cph,
})
.then((res) => {
if (val === 1) {
clList.list = res.records;
} else {
res.records.forEach((ele) => {
clList.list.push(ele);
});
}
total.value = res.total;
onLoad();
finished.value = true;
})
.catch((err) => {
finished.value = true;
});
}
function onLoad() {
if (page.value * 10 < total.value) {
page.value++;
getList();
}
}
</script>
<style lang="scss" scoped>
@import "../../assets/styles/mixin.scss";
.item-box {
line-height: 1.8em;
margin: 0 5vw;
border-bottom: 1px solid #f3f3f3;
@include font_color($font-color-theme);
@include font_size($font_medium_s);
}
.ps-title {
color: #1F6CEC;
font-weight: bold;
@include font_size($font_medium);
line-height: 6vw;
}
</style>

119
src/pages/scyy/jwz.vue Normal file
View File

@ -0,0 +1,119 @@
<template>
<div class="container" style="padding-top: 13vw">
<TopNav navTitle="警务站" />
<div class="search-box">
<van-search v-model="jwzList.jwzMc" placeholder="请输入警务站名称" style="width: 100%" @update:model-value="getList(1)" />
</div>
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="listInfoBox">
<List :labelData="jwzList.list">
<template v-slot="{ item }">
<div class="ps-title">{{ item.jwzMc }}</div>
<div class="line">
警务站类型{{ setDict(item.jwzLx, D_BZ_JWZLX) }}
</div>
<div class="line"><van-icon name="location-o" /> 详细地址: {{ item.jwzDz }}</div>
<div class="line"><van-icon name="underway-o" /> 建立日期: {{ item.xjSj }}</div>
<div class="line">
<van-icon name="user-o" /> 负责人:
{{ item.fzrXm }}&nbsp;&nbsp;&nbsp;{{ item.ssbm }}
</div>
<div class="lineGap"></div>
</template>
</List>
</div>
</van-list>
</div>
</template>
<script setup>
import List from "../../components/ListItem.vue";
import TopNav from "../../components/topNav.vue";
import { getJwzList } from "../../api/scyy.js";
import { ref, reactive, onMounted } from "vue";
import { useRouter } from "vue-router";
import { getDictList, setDict } from "../../utils/dict";
const router = useRouter();
function onClickLeft() {
router.push("/home");
}
const { D_BZ_JWZLX } = getDictList("D_BZ_JWZLX");
const jwzList = reactive({
list: [],
jwzMc: "",
});
function goCreatePoliceStation() {
router.push("/createPoliceStation");
}
onMounted(() => {
getList();
});
// 查询警务站列表
const loading = ref(false);
const finished = ref(false);
const page = ref(1);
const total = ref(0);
function getList(val) {
loading.value = false;
getJwzList({
pageNo: page.value,
pageSize: 10,
jwzMc: jwzList.jwzMc,
})
.then((res) => {
if (val === 1) {
jwzList.list = res.records;
} else {
res.records.forEach((ele) => {
jwzList.list.push(ele);
});
}
total.value = res.total;
onLoad();
finished.value = true;
})
.catch((err) => {
finished.value = true;
});
}
function onLoad() {
if (page.value * 10 < total.value) {
page.value++;
getList();
}
}
</script>
<style lang="scss" scoped>
@import "../../assets/styles/mixin.scss";
.search-box {
display: flex;
align-items: center;
}
// 列表
.listInfoBox {
@include font_size($font_medium_s);
padding: 0 4vw;
box-sizing: border-box;
.ps-title {
color: #1f6cec;
font-weight: bold;
line-height: 6vw;
@include font_size($font_medium);
}
.line {
line-height: 5vw;
}
.lineGap {
height: 4px;
border-bottom: 1px solid #e9e9e9;
}
}
</style>

83
src/pages/scyy/kfd.vue Normal file
View File

@ -0,0 +1,83 @@
<template>
<div class="container" style="padding-top: 13vw">
<TopNav navTitle="快反点" />
<van-search v-model="kfdList.kfdMc" placeholder="请输入快反点名称" @update:model-value="serachData" />
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="item-box" v-for="(item, index) in kfdList.list" :key="index">
<div class="titleSJY">{{ item.kfdMc }}</div>
<!-- <div><van-icon name="underway-o" /> 建立日期: {{ item.xtCjsj }}</div> -->
<div><van-icon name="user-o" /> 市所属部门: {{ item.ssbm }}</div>
<div><van-icon name="location-o" /> 地址: {{ item.kfdDz }}</div>
</div>
</van-list>
</div>
</template>
<script setup>
import TopNav from "../../components/topNav.vue";
import { getKfdList } from "../../api/scyy.js";
import { ref, reactive, onMounted } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
const kfdList = reactive({
list: [],
kfdMc: "",
});
onMounted(() => {
serachData();
});
const loading = ref(false);
const finished = ref(false);
const page = ref(1);
const total = ref(0);
function serachData() {
page.value = 1
getList()
}
function getList() {
loading.value = false;
let params = {
pageNum: page.value,
pageSize: 10,
kfdMc: kfdList.kfdMc,
};
getKfdList(params)
.then((res) => {
if (page.value === 1) {
kfdList.list = res.records;
} else {
kfdList.list = kfdList.list.concat(res.records);
}
total.value = res.total;
onLoad();
finished.value = true;
})
.catch((err) => {
finished.value = true;
});
}
function onLoad() {
if (page.value * 10 < total.value) {
page.value++;
getList();
}
}
</script>
<style lang="scss" scoped>
@import "../../assets/styles/mixin.scss";
.item-box {
line-height: 1.8em;
margin: 0 5vw;
border-bottom: 1px solid #f3f3f3;
@include font_color($font-color-theme);
@include font_size($font_medium_s);
}
.titleSJY {
color: #1f6cec;
font-weight: bold;
@include font_size($font_medium);
}
</style>

129
src/pages/scyy/xfll.vue Normal file
View File

@ -0,0 +1,129 @@
<template>
<div class="container" style="padding-top: 13vw">
<van-sticky :offset-top="0">
<TopNav navTitle="巡防力量" />
<div class="search-boxSJY">
<van-search v-model="xlllList.xm" placeholder="请输入搜索关键词" style="width: 100%" @update:model-value="getList(1)" />
</div>
</van-sticky>
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"
:immediate-check="false">
<div class="item-boxxfll" :class="item.fl === '01' ? 'bgColorm' : 'bgColorf'"
v-for="(item, index) in xlllList.list" :key="index">
<div class="image-box">
<van-image fill="cover" :src="require('../../assets/images/tx.png')" />
</div>
<div class="xlll-info-box">
<div :class="item.fl === '01' ? 'title-box1' : 'title-box2'">
<div :class="item.fl === '01' ? 'line-y1' : 'line-y2'"></div>
<span>{{ item.xm }}</span>&nbsp;&nbsp;&nbsp;
<span>
<dict-tag :options="D_BZ_XB" :value="item.xbdm" :tag="false" /> </span>&nbsp;&nbsp;&nbsp;
<span>{{ item.fl === "01" ? "民警" : "辅警" }}</span>
</div>
<div>{{ item.sfzh }}</div>
<div>所在部门: {{ item.ssbm }}</div>
<div>警员编号: {{ item.jh }}</div>
<div>联系电话: {{ item.lxdh }}</div>
</div>
</div>
</van-list>
</div>
</template>
<script setup>
import TopNav from "../../components/topNav.vue";
import { getXfllList } from "../../api/scyy.js";
import { ref, reactive, onMounted } from "vue";
import { useRouter } from "vue-router";
import { getDictList, setDict } from "../../utils/dict";
const { D_BZ_XB } = getDictList("D_BZ_XB");
const router = useRouter();
const xlllList = reactive({
list: [],
xm: "",
total: 0,
});
onMounted(() => {
getList(1);
});
const loading = ref(false);
const finished = ref(false);
const page = ref(1);
const total = ref(0);
function getList(val) {
loading.value = true;
getXfllList({
pageCurrent: page.value,
pageSize: 10,
xm: xlllList.xm,
})
.then((res) => {
total.value = res.total;
if (val === 1) {
xlllList.list = res.records;
} else {
res.records.forEach((ele) => {
xlllList.list.push(ele);
});
}
loading.value = false;
})
.catch((err) => {
finished.value = true;
});
}
function onLoad() {
if (page.value * 10 < total.value) {
page.value++;
getList();
} else {
finished.value = true;
}
}
// 添加民警
function goCreatePeoplePolice() {
router.push("/createMJ");
}
// 添加辅警
function goCreateAssistantPolice() {
router.push("/createFJ");
}
</script>
<style lang="scss" scoped>
@import "../../assets/styles/mixin.scss";
.item-boxxfll {
line-height: 1.8em;
margin: 2vw;
padding: 2vw;
box-sizing: border-box;
@include font_color($font-color-theme);
@include font_size($font_medium_s);
display: flex;
.image-box {
flex: 1;
margin: 2vw;
}
.xlll-info-box {
flex: 3;
}
}
.bgColorm {
background-color: #f0f6ff;
}
.bgColorf {
background-color: #f9eeff;
}
.titleSJY {
color: #1f6cec;
font-weight: bold;
@include font_size($font_medium);
}
</style>

85
src/pages/scyy/xfq.vue Normal file
View File

@ -0,0 +1,85 @@
<template>
<div class="container" style="padding-top:13vw">
<TopNav navTitle="巡防区" />
<van-search v-model="xfqList.xfqMc" placeholder="请输入巡防区名称" @update:model-value="getList(1)" />
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="item-box" v-for="(item, index) in xfqList.list" :key="index">
<div class="titleSJY">{{ item.xfqMc }}</div>
<div>建立时间: {{ item.xtCjsj }}</div>
<div><van-icon name="user-o" /> 负责人: {{ item.xfqFzr }}</div>
<div>负责人身份证号{{ item.xfqFzrSfz }}</div>
<div>所属部门{{ item.ssbm }}</div>
<div class="line">巡防区等级:{{ setDict(item.xfqDj, D_BZ_XFQDJ) }}</div>
<div class="line">巡防区类型:{{ setDict(item.xfqLx, D_BZ_XQLX) }}</div>
</div>
</van-list>
</div>
</template>
<script setup>
import TopNav from "../../components/topNav.vue";
import { getXfqList } from "../../api/scyy.js";
import { ref, reactive, onMounted } from "vue";
import { getDictList, setDict } from "../../utils/dict";
import { useRouter } from "vue-router";
const router = useRouter();
const { D_BZ_XFQDJ, D_BZ_XQLX } = getDictList("D_BZ_XFQDJ", "D_BZ_XQLX");
const xfqList = reactive({
list: [],
xfqMc: "",
});
onMounted(() => {
getList();
});
const loading = ref(false);
const finished = ref(false);
const page = ref(1);
const total = ref(0);
function getList(val) {
loading.value = false;
getXfqList({
pageCurrent: page.value,
pageSize: 10,
xfqMc: xfqList.xfqMc,
})
.then((res) => {
if (val === 1) {
xfqList.list = res.records;
} else {
res.records.forEach((ele) => {
xfqList.list.push(ele);
});
}
total.value = res.total;
onLoad();
finished.value = true;
})
.catch((err) => {
finished.value = true;
});
}
function onLoad() {
if (page.value * 10 < total.value) {
page.value++;
getXfqList();
}
}
</script>
<style lang="scss" scoped>
@import "../../assets/styles/mixin.scss";
.item-box {
line-height: 1.8em;
margin: 0 5vw;
border-bottom: 1px solid #f3f3f3;
@include font_color($font-color-theme);
@include font_size($font_medium_s);
}
.titleSJY {
color: #1F6CEC;
font-weight: bold;
@include font_size($font_medium);
}
</style>

187
src/pages/scyy/zb.vue Normal file
View File

@ -0,0 +1,187 @@
<template>
<div class="container" style="padding-top:13vw">
<TopNav navTitle="装备" />
<van-tabs v-model:active="active" background="#fff" color="#1989fa">
<van-tab title="智能装备管理">
<div class="search-boxSJY">
<van-search v-model="zbList.sbmc" placeholder="请输入智能装备名称" style="width: 100%"
@update:model-value="getList(1)" />
</div>
<van-list v-model:loading="loading1" :finished="finished1" finished-text="没有更多了" @load="onLoad1">
<div class="item-box" v-for="(item, index) in zbList.list" :key="index">
<div class="titleSJY">{{ item.sbmc }}</div>
<div class="lineSJY">所属部门: {{ item.ssbm }}</div>
<div class="lineSJY">
<div class="first-one">装备型号: {{ item.xh }}</div>
<div style="display: flex">
装备类型:&nbsp;<dict-tag :options="D_BZ_ZNZBFL" :value="item.scode" :tag="false" />
</div>
</div>
<div class="lineSJY">
<div>生产厂商: {{ item.sccs }}</div>
</div>
<div class="lineSJY">
<div class="first-one">采购日期: {{ item.cgrq }}</div>
<div>到期时间: {{ item.dqsj }}</div>
</div>
</div>
</van-list>
</van-tab>
<van-tab title="警用器械管理">
<div class="search-boxSJY">
<van-search v-model="zbList.qxMc" placeholder="请输入警用器械名称" style="width: 100%"
@update:model-value="getJyqxList(1)" />
</div>
<van-list v-model:loading="loading2" :finished="finished2" finished-text="没有更多了" @load="onLoad2">
<div class="item-box" v-for="(item, index) in zbList.jyqxList" :key="index">
<div class="titleSJY">
<div class="line-y"></div>
&nbsp;&nbsp;{{ item.qxMc }}
</div>
<div class="lineSJY">
<div class="first-one">器械编码: {{ item.qxbh }}</div>
<div>器械名称: {{ item.qxMc }}</div>
</div>
<div class="lineSJY">
<div class="first-one">
器械类型:&nbsp;<dict-tag :options="D_BZ_JYQXFL" :value="item.scode" :tag="false" />
</div>
<div>生产厂商: {{ item.sccs }}</div>
</div>
<div class="lineSJY">
<div class="first-one">采购日期: {{ item.cgrq }}</div>
<div>到期时间: {{ item.dqsj }}</div>
</div>
<div class="lineSJY">
<div class="first-one">所属部门: {{ item.ssbm }}</div>
<div>录入批次: {{ item.qxPch }}</div>
</div>
</div>
</van-list>
</van-tab>
</van-tabs>
</div>
</template>
<script setup>
import { getZnzb, selectJyqx } from "../../api/scyy.js";
import TopNav from "../../components/topNav.vue";
import { ref, reactive, onMounted, watch } from "vue";
import { getDictList, setDict } from "../../utils/dict";
import { useRouter, useRoute } from "vue-router";
const router = useRouter();
const route = useRoute();
const { D_BZ_ZNZBFL, D_BZ_JYQXFL } = getDictList("D_BZ_ZNZBFL", "D_BZ_JYQXFL");
function goCreateEquipment(val) {
router.push({ name: "CreateEquipment", params: { sign: val } });
}
const active = ref(0);
watch(active, (newVal, oldVal) => {
if (newVal === 0) {
zbList.list = [];
getList();
} else {
zbList.jyqxList = [];
getJyqxList();
}
});
watch(route.params.flag, (val) => {
active.value = val;
});
const zbList = reactive({
list: [],
sbmc: "",
jyqxList: [],
qxMc: "",
});
onMounted(() => {
getList();
});
// 获取智能装备
const loading1 = ref(false);
const finished1 = ref(false);
const page1 = ref(1);
const total1 = ref(0);
function getList(val) {
loading1.value = false;
getZnzb({
pageNo: page1.value,
pageSize: 10,
sbmc: zbList.sbmc,
})
.then((res) => {
if (val === 1) {
zbList.list = res.records;
} else {
res.records.forEach((ele) => {
zbList.list.push(ele);
});
}
total1.value = res.total;
onLoad();
finished1.value = true;
})
.catch((err) => {
finished1.value = true;
});
}
function onLoad1() {
if (page1.value * 10 < total1.value) {
page1.value++;
getList();
}
}
// 查询警用器械
const loading2 = ref(false);
const finished2 = ref(false);
const page2 = ref(1);
const total2 = ref(0);
function getJyqxList(val) {
loading2.value = false;
selectJyqx({
pageNo: page2.value,
pageSize: 10,
qxMc: zbList.qxMc,
})
.then((res) => {
if (val === 1) {
zbList.jyqxList = res.records;
} else {
res.records.forEach((ele) => {
zbList.jyqxList.push(ele);
});
}
total2.value = res.total;
finished2.value = true;
})
.catch((err) => {
finished2.value = true;
});
}
function onLoad2() {
if (page2.value * 10 < total2.value) {
page2.value++;
getJyqxList();
}
}
</script>
<style lang="scss" scoped>
@import "../../assets/styles/mixin.scss";
.item-box {
line-height: 1.8em;
margin: 0 5vw;
border-bottom: 1px solid #f3f3f3;
@include font_color($font-color-theme);
@include font_size($font_medium_s);
}
.titleSJY {
color: #1F6CEC;
font-weight: bold;
@include font_size($font_medium);
line-height: 6vw;
}
</style>