From 6c700995c5e9bbe3a72cfc60fab863b3566e303a Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Fri, 25 Feb 2022 11:06:04 +0800
Subject: [PATCH] 任务拆分
---
src/router/views/index.js | 14
src/views/activitys/real_xc.vue | 1394 +++++++++++++++++++++++++++++
src/views/activitys/real_px.vue | 1394 +++++++++++++++++++++++++++++
3 files changed, 2,788 insertions(+), 14 deletions(-)
diff --git a/src/router/views/index.js b/src/router/views/index.js
index a306693..68fff1e 100644
--- a/src/router/views/index.js
+++ b/src/router/views/index.js
@@ -575,19 +575,5 @@
import( /* webpackChunkName: "views" */ '@/views/zc/zc')
}]
}
- , {
- path: '/activitys',
- component: Layout,
- redirect: '/activitys/index',
- children: [{
- path: 'index',
- name: '活动下发',
- meta: {
- i18n: 'real'
- },
- component: () =>
- import( /* webpackChunkName: "views" */ '@/views/activitys/real')
- }]
-},
]
diff --git a/src/views/activitys/real_px.vue b/src/views/activitys/real_px.vue
new file mode 100644
index 0000000..30960b3
--- /dev/null
+++ b/src/views/activitys/real_px.vue
@@ -0,0 +1,1394 @@
+<template>
+ <basic-container class="activitys">
+ <avue-crud
+ :option="option"
+ :table-loading="loading"
+ :before-open="beforeOpen"
+ :data="data"
+ :page.sync="page"
+ ref="crud"
+ @row-del="rowDel"
+ v-model="form"
+ :permission="permissionList"
+ @row-update="rowUpdate"
+ @row-save="rowSave"
+ :row-style="rowStyle"
+ :search.sync="search"
+ row-class-name="tabFontSize"
+ @search-change="searchChange"
+ @search-reset="searchReset"
+ @selection-change="selectionChange"
+ @current-change="currentChange"
+ @size-change="sizeChange"
+ @row-click="rowClick"
+ @refresh-change="refreshChange"
+ @on-load="onLoad"
+ >
+ <!-- @row-click="rowClick" -->
+ <template slot="menuLeft">
+ <el-button
+ type="danger"
+ v-show="true"
+ size="mini"
+ icon="el-icon-delete"
+ plain
+ v-if="permission.real_delete"
+ @click="handleDelete"
+ >删 除
+ </el-button>
+ </template>
+
+ <!-- <template slot="menuLeft">
+ <el-button
+ v-bind:class="activeClass == 0 ? 'btn-color' : ''"
+ size="mini"
+ @click="getBRdata(0)"
+ >本日
+ </el-button>
+ <el-button
+ v-bind:class="activeClass == 1 ? 'btn-color' : ''"
+ size="mini"
+ @click="getBRdata(1)"
+ >本周
+ </el-button>
+ <el-button
+ v-bind:class="activeClass == 2 ? 'btn-color' : ''"
+ size="mini"
+ @click="getBRdata(2)"
+ >本月
+ </el-button>
+ <el-button
+ v-bind:class="activeClass == 3 ? 'btn-color' : ''"
+ size="mini"
+ @click="getQBdata(3)"
+ >全部
+ </el-button>
+ </template> -->
+
+ <!-- <template slot="menuLeft">
+ <el-button
+ type="warning"
+ size="mini"
+ plain
+ icon="el-icon-download"
+ @click="handleExport"
+ >导出
+ </el-button>
+ <el-button
+ type="warning"
+ size="mini"
+ plain
+ icon="el-icon-pie-chart"
+ @click="handleExportStatis"
+ >导出报表
+ </el-button>
+ </template> -->
+
+ <template slot-scope="{ row }" slot="jtype">
+ <el-tag
+ >{{
+ row.jtype == "0" || row.jtype == ""
+ ? "未派发"
+ : row.jtype == "1" &&
+ (row.securityId == null || row.securityId == "")
+ ? "未接收"
+ : row.jtype == "1" &&
+ (row.securityId != null || row.securityId != "")
+ ? "已接收"
+ : "已处置"
+ }}
+ </el-tag>
+ </template>
+ <template slot-scope="{ row }" slot="cid">
+ <el-tag
+ >{{
+ row.cid == "1" ? "事件发生" : row.cid == "3" ? "是" : "事件恢复"
+ }}
+ </el-tag>
+ </template>
+
+ <template slot-scope="{ type, size, row }" slot="menu">
+ <el-button
+ v-if="row.jtype == 0 || row.jtype == 0 || row.jtype == ''"
+ icon="el-icon-s-order"
+ :size="size"
+ :type="type"
+ @click.stop="PoliceTracking(row)"
+ >派发
+ </el-button>
+ </template>
+
+ <template slot-scope="{ type, disabled }" slot="lineForm">
+ <div class="mapClassMain" style="width: 860px; height: 400px">
+ <Map ref="modalForm"/>
+ </div>
+ </template>
+ </avue-crud>
+
+ <real-popup ref="realPopupView"></real-popup>
+ <el-drawer title="电子地图" append-to-body="true" :visible.sync="showMap">
+ <iframe
+ id="mapDiv"
+ ref="mapDiv"
+ src="/map/index.html?openid=ClientManagement&ISinit=1"
+ frameborder="0"
+ width="100%"
+ height="100%"
+ ></iframe>
+ </el-drawer>
+ </basic-container>
+</template>
+
+<script>
+import {
+ getList,
+ remove,
+ update,
+ add,
+ getclient,
+} from "@/api/activitys/activitys";
+import {mapGetters} from "vuex";
+import AvueMap from "avue-plugin-map";
+
+export default {
+ data() {
+ return {
+ showMap: false,
+ hls: "",
+ videoSource: "",
+ activeClass: 3,
+ form: {},
+ query: {},
+ search: {},
+ dateTime: [],
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0,
+ },
+ selectionList: [],
+ option: {
+ height: "auto",
+ indexLabel: "序号",
+ calcHeight: 54,
+ labelWidth: "100",
+ size: "mini",
+ border: false,
+ //stripe:true,
+ menuWidth: 260,
+ dialogWidth: 950,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 3,
+ align: "center",
+ index: true,
+ viewBtn: true,
+ selection: true,
+ dialogClickModal: false,
+ column: [
+ {
+ label: "任务标题",
+ prop: "rname",
+ search: true,
+ searchSpan: 4,
+ span: 12,
+ rules: [
+ {
+ required: true,
+ message: "请选择报警时间",
+ trigger: "blur",
+ },
+ ],
+ },
+
+ {
+ label: "下发时间",
+ type: "datetime",
+ prop: "time",
+ width: 160,
+ span: 12,
+ format: "yyyy-MM-dd HH:mm:ss",
+ valueFormat: "yyyy-MM-dd HH:mm:ss",
+ rules: [
+ {
+ required: true,
+ message: "请选择报警时间",
+ trigger: "blur",
+ },
+ ],
+ },
+ {
+ label: "任务封面",
+ prop: "url",
+ // align:'center',
+ width: 80,
+ type: "upload",
+ listType: "picture-img",
+ action: "/api/blade-resource/oss/endpoint/put-file",
+ propsHttp: {
+ res: "data",
+ url: "link",
+ },
+ // hide: true,
+ span: 24,
+ },
+ // {
+ // label: "报警时间",
+ // prop: "releaseTimeRange",
+ // type: "datetime",
+ // format: "yyyy-MM-dd",
+ // valueFormat: "yyyy-MM-dd",
+ // searchValue: [this.getStartTime(), this.getEndTime()],
+ // searchRange: true,
+ // searchSpan: 5,
+ // hide: true,
+ // addDisplay: false,
+ // editDisplay: false,
+ // viewDisplay: false,
+ // search: true,
+ // rules: [
+ // {
+ // required: true,
+ // message: "请输入时间",
+ // trigger: "blur",
+ // },
+ // ],
+ // },
+ {
+ label: "任务内容",
+ prop: "content",
+ span: 24,
+ },
+ // {
+ // label: "地址",
+ // prop: "place",
+ // span: 10,
+ // rules: [
+ // {
+ // required: true,
+ // message: "请选择地址",
+ // trigger: "blur",
+ // },
+ // ],
+ // },
+ // {
+ // label: null,
+ // prop: "map",
+ // labelWidth: "0",
+ // searchSpan: 0,
+ // maxlength: 0,
+ // hide: true,
+ // span: 2,
+ // // display:false,
+ // component: "AvueMap",
+ // },
+ // {
+ // label: "经度",
+ // hide: true,
+ // prop: "jd",
+ // searchSpan: 2,
+ // width: "100",
+ // labelWidth: "120",
+ // formatter: (row, value, label, column) => {
+ // return (value = value.substring(0, 11));
+ // },
+ // span: 7,
+ // },
+ // {
+ // label: "纬度",
+ // labelWidth: "45",
+ // hide: true,
+ // prop: "wd",
+ // formatter: (row, value, label, column) => {
+ // return (value = value.substring(0, 10));
+ // },
+ // span: 5,
+ // },
+ {
+ label: "所属辖区",
+ prop: "jurisdiction",
+ searchLabelWidth: 80,
+ search: true,
+ searchSpan: 4,
+ overHidden: true,
+ parent: false,
+ type: "tree",
+ dicUrl: "/api/jurisdiction/lazy-tree",
+ props: {
+ label: "title",
+ value: "id"
+ },
+ checkStrictly: true,
+ rules: [
+ {
+ required: true,
+ message: "请选择所属辖区",
+ trigger: "click"
+ }
+ ]
+ },
+ {
+ label: "省份",
+ hide: true,
+ prop: "province",
+ // search: true,
+ width: 100,
+ searchSpan: 2,
+ searchLabelWidth: 45,
+ placeholder: "省份",
+ type: "select",
+ value: "36",
+ props: {
+ label: "name",
+ value: "code",
+ },
+ cascaderItem: ["city", "district"],
+ dicUrl: "/api/blade-system/region/select",
+ span: 6,
+ className: "cityreal1",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "地市",
+ hide: true,
+ prop: "city",
+ type: "select",
+ width: 100,
+ searchPlaceholder: "地市",
+ placeholder: "地市",
+ searchLabelWidth: 1,
+ value: "3601",
+ searchSpan: 2,
+ // search: true,
+ props: {
+ label: "name",
+ value: "code",
+ },
+ dicUrl: "/api/blade-system/region/select?code={{key}}",
+ span: 3,
+ labelWidth: "0",
+ className: "cityreal2",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "区县",
+ hide: true,
+ searchSpan: 2,
+ searchLabelWidth: 1,
+ width: 100,
+ searchPlaceholder: "区县",
+ placeholder: "区县",
+ // search: true,
+ prop: "district",
+ type: "select",
+ props: {
+ label: "name",
+ value: "code",
+ },
+ dicUrl: "/api/blade-system/region/select?code={{key}}",
+ span: 3,
+ labelWidth: "0",
+ className: "cityreal3",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "任务状态",
+ prop: "rtype",
+ type: "select",
+ value: "2",
+ dicData: [
+ {
+ label: "任务开始",
+ value: "2",
+ },
+ {
+ label: "任务结束",
+ value: "1",
+ },
+ {
+ label: "正在进行",
+ value: "0",
+ },
+ ],
+ // label: "任务状态",
+ // searchSpan: 3,
+ // width: 96,
+ // search: true,
+ // slot: true,
+ // value: "0",
+ // searchPlaceholder: "请选择",
+ // prop: "rtype",
+ // type: "select",
+ // dicData: [
+ // {
+ // label: "任务开始",
+ // value: "0",
+ // },
+ // {
+ // label: "正在进行",
+ // value: "1",
+ // },
+ // {
+ // label: "任务结束",
+ // value: "2",
+ // },
+ // ],
+ },
+ // {
+ // label: "派发人",
+ // prop: "alarmPeople",
+ // width: 90,
+ // addDisplay: false,
+ // editDisplay: false,
+ // },
+ {
+ label: "积分数值",
+ prop: "integral",
+ type: "number",
+ // multiple: true,
+ // dicUrl: "/api/catalogs/catalogs/getBigTree",
+ // props: {
+ // label: "title",
+ // },
+ width: 72,
+ // hide: true,
+ minRows: 1,
+ value: 1,
+ // leafOnly: "",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "接收人数",
+ prop: "jnum",
+ type: "number",
+ // multiple: true,
+ // dicUrl: "/api/catalogs/catalogs/getBigTree",
+ // props: {
+ // label: "title",
+ // },
+ width: 72,
+ // hide: true,
+ minRows: 1,
+ value: 1,
+ // leafOnly: "",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ // {
+ // label: "巡逻路线",
+ // prop: "xllx",
+ // hide: true,
+ // display: true,
+ // type: "tree",
+ // dicUrl: "/api/routeIn/routein/tree",
+ // props: {
+ // label: "title",
+ // },
+ // addDisplay: true,
+ // },
+ {
+ label: "请在下方地图中,建立路径!",
+ labelWidth: "0",
+ className: "mapClass",
+ prop: "haveMap",
+ hide: true,
+ display: true,
+ rules: [
+ {
+ required: true,
+ message: "请在下方地图中,建立路径!",
+ trigger: "blur",
+ },
+ ],
+ addDisabled: true,
+ editDisabled: true,
+ // value: "", //赋值不上去,舍弃
+ // type: "tree",
+ // dicUrl: "/api/routeIn/routein/tree",
+ // props: {
+ // label: "title",
+ // },
+ },
+ {
+ label: "路线展示",
+ labelWidth: "0",
+ prop: "line",
+ className: "mapClass",
+ hide: true,
+ display: true,
+ span: 24,
+ formslot: true,
+ addDisplay: true,
+ },
+ ],
+ },
+ data: [],
+ recorder: null,
+ peopleList: [],
+ // rotesData: "",
+ };
+ },
+ watch: {
+ "form.map": {
+ // form是表单或者表格绑定的数据集,v-model='form'
+ handler(val) {
+ var that = this;
+ if (val) {
+ //重新加载一次页面详情数据,解决新的省市区无法写入问题
+ //判断是新增还是修改
+ if (that.isEdit) {
+ getclient(this.form.id).then((res) => {
+ // that.province = res.data.data.province;
+ // that.city = res.data.data.city;
+ // that.district = res.data.data.district;
+ });
+ }
+
+ //地址截取,从县/区开始截取,并且取从县区第一个出现的位置开始
+ if (val.formattedAddress == "") {
+ return;
+ }
+
+ //经纬度替换
+ this.form.wd = val.latitude;
+ this.form.jd = val.longitude;
+
+ var address = val.formattedAddress.toString();
+ if (address.search("县") != -1) {
+ this.form.place = address.substring(
+ address.indexOf("县") + 1,
+ address.length
+ );
+ }
+ if (address.search("区") != -1) {
+ this.form.place = address.substring(
+ address.indexOf("区") + 1,
+ address.length
+ );
+ }
+ //写入新的省市区
+ that.form.province = val.addressComponent.province;
+ if (val.addressComponent.city == "") {
+ that.form.city = val.addressComponent.province;
+ } else {
+ that.form.city = val.addressComponent.city;
+ }
+ that.form.district = val.addressComponent.district;
+ } else {
+ that.form.map = {
+ formattedAddress: "",
+ latitude: 28.699957,
+ longitude: 115.862118,
+ };
+ }
+ },
+ immediate: true,
+ },
+ // "form.alarmType": {
+ // handler(val) {
+ // // var xllx = this.findObject(this.option.column, "xllx");
+ // var xllxzs = this.findObject(this.option.column, "xllxzs");
+ // if (val === "巡逻任务") {
+ // // xllx.display = true;
+ // xllxzs.display = true;
+ // // xllx.rules = [
+ // // {
+ // // required: true,
+ // // message: "请选择巡逻路线",
+ // // trigger: "blur",
+ // // },
+ // // ];
+ // } else {
+ // // xllx.display = false;
+ // xllxzs.display = false;
+ // // xllx.rules = [];
+ // }
+ // },
+ // immediate: true,
+ // },
+ "form.line": {
+ handler(val) {
+ if (val) {
+ this.getxllx(val);
+ }
+ },
+ immediate: true,
+ },
+ rotesData() {
+ // console.log(this.rotesData, "rotesDatarotesDatarotesData");
+ // console.log(this.rotesData, "this.rotesDatathis.rotesData");
+ if (this.rotesData) {
+ // var haveMap = (this.option.column[9].value = "已选择路径!");
+ // haveMap.value = "已选择路径!";
+ // console.log(haveMap);
+ this.form["line"] = this.rotesData;
+ this.form["haveMap"] = "已绘制路径!";
+ } else {
+ this.form["line"] = "";
+ this.form["haveMap"] = "";
+ }
+ },
+ },
+ computed: {
+ ...mapGetters(["permission", "flowRoutes", "rotesData", "userInfo"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.real_add, false),
+ viewBtn: this.vaildData(null, false),
+ delBtn: this.vaildData(this.permission.real_delete, false),
+ editBtn: this.vaildData(this.permission.real_edit, false),
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach((ele) => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ },
+ },
+ created() {
+ this.dateTime = this.getDate();
+ },
+ mounted() {
+ var xb = JSON.parse(window.sessionStorage.getItem("sjsb"));
+ var data = this.$route.query;
+ if (xb == 1) {
+ this.form = data;
+ this.openAdd();
+ window.sessionStorage.removeItem("sjsb");
+ }
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ // console.log(row);
+ // return;
+ var userId1 = this.userInfo.user_id;
+ var username = this.userInfo.nick_name;
+ let d = {
+ line: row.line, //路线
+ rname: row.rname, //标题
+ url: row.url, //封面
+ time: row.time, //下发时间
+ province: row.$province, //省
+ city: row.$city, //城市
+ district: row.$district, //区县
+ jnum: row.jnum, //接收总数
+ integral: row.integral + "", //积分
+ content: row.content, //内容
+ rtype: row.rtype, //任务状态
+ fid: userId1,//发起人id
+ fname: username, //发起人id
+ jurisdiction: row.jurisdiction
+ };
+ // console.log(d);
+ // done();
+ // return;
+ let that = this;
+ add(d).then(
+ () => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ done();
+ },
+ (error) => {
+ loading();
+ }
+ );
+ return;
+ },
+ getxllx(val) {
+ var that = this;
+ if (this.$refs.modalForm == undefined) {
+ setTimeout(function () {
+ try {
+ that.$refs.modalForm.addLinesDraw(val);
+ } catch (error) {
+ }
+ }, 1500);
+ } else {
+ try {
+ that.$refs.modalForm.addLinesDraw(val);
+ } catch (error) {
+ }
+ }
+ },
+ rowUpdate(row, index, done, loading) {
+ let that = this;
+ update(row).then(
+ () => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ done();
+ },
+ (error) => {
+ loading();
+ }
+ );
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ });
+ },
+ searchReset() {
+ this.activeClass = 3;
+ //清空搜索框中的内容
+ this.query = {};
+ //清空this.$route.query
+ this.$router.push({query: {}});
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ //清空this.$route.query
+ this.$router.push({query: {}});
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ // console.log(type, "this.formthis.formthis.form");
+ // console.log(type);
+ // if (["edit", "view"].includes(type)) {
+ // getclient(this.form.id).then((res) => {
+ // this.form = res.data.data;
+ // });
+ // }
+ // console.log(this.form);
+ if (type == "add") {
+ this.$store.commit("setRotesData", false); //用vuex传最终数据 清除
+ done();
+ return;
+ }
+ if (this.form.line != "" && this.form != undefined) {
+ this.form["haveMap"] = "已绘制路径!";
+ } else {
+ this.form["haveMap"] = "";
+ }
+ done();
+ },
+ currentChange(currentPage) {
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize) {
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ getList(page.currentPage, page.pageSize,params).then((res) => {
+ const data = res.data.data;
+ this.page.total = data.total;
+
+ data.records.sort((a, b) => {
+ return a.jtype - b.jtype;
+ });
+
+ this.data = data.records;
+
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+ getDate() {
+ // 当前时间
+ var timestamp = Date.parse(new Date());
+ var serverDate = new Date(timestamp);
+
+ // 本周周一的时间
+ var mondayTime =
+ timestamp - (serverDate.getDay() - 1) * 24 * 60 * 60 * 1000;
+ var mondayData = new Date(mondayTime);
+ //年
+ var mondayY = mondayData.getFullYear();
+ //月
+ var mondayM =
+ mondayData.getMonth() + 1 < 10
+ ? "0" + (mondayData.getMonth() + 1)
+ : mondayData.getMonth() + 1;
+ //日
+ var mondayD =
+ mondayData.getDate() < 10
+ ? "0" + mondayData.getDate()
+ : mondayData.getDate();
+ // 当前时间
+ var currentData = new Date(timestamp);
+ //年
+ var currentY = currentData.getFullYear();
+ //月
+ var currentM =
+ currentData.getMonth() + 1 < 10
+ ? "0" + (currentData.getMonth() + 1)
+ : currentData.getMonth() + 1;
+ //日
+ var currentD =
+ currentData.getDate() < 10
+ ? "0" + currentData.getDate()
+ : currentData.getDate();
+ //时
+ var currenH =
+ currentData.getHours() < 10
+ ? "0" + currentData.getHours()
+ : currentData.getHours();
+ //分
+ var currenM =
+ currentData.getMinutes() < 10
+ ? "0" + currentData.getMinutes()
+ : currentData.getMinutes();
+ //秒
+ var currenS =
+ currentData.getSeconds() < 10
+ ? "0" + currentData.getSeconds()
+ : currentData.getSeconds();
+
+ return {
+ day: {
+ beginTime: currentY + "-" + currentM + "-" + currentD + " 00:00:00",
+ endTime:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":00",
+ },
+ week: {
+ beginTime: mondayY + "-" + mondayM + "-" + mondayD + " 00:00:00",
+ endTime:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":00",
+ },
+ month: {
+ beginTime: mondayY + "-" + mondayM + "-01 00:00:00",
+ endTime:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":00",
+ },
+ current:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":" +
+ currenS,
+ };
+ },
+ getBRdata(e) {
+ this.activeClass = e;
+ this.query = {};
+ this.$router.push({query: {}});
+ var today = new Date();
+ var params = {};
+
+ if (e == 0) {
+ params = {
+ beginTime: this.showToDay(today) + " 00:00:00",
+ endTime: this.showToDay(today) + " 23:59:59",
+ };
+ //修改搜索框中的值
+ this.search.releaseTimeRange = [
+ this.showToDay(today) + " 00:00:00",
+ this.showToDay(today) + " 23:59:59",
+ ];
+ }
+ if (e == 1) {
+ params = {
+ beginTime: this.showWeekFirstDay(today) + " 00:00:00",
+ endTime: this.showToDay(today) + " 23:59:59",
+ };
+ //修改搜索框中的值
+ this.search.releaseTimeRange = [
+ this.showWeekFirstDay(today) + " 00:00:00",
+ this.showToDay(today) + " 23:59:59",
+ ];
+ }
+ if (e == 2) {
+ params = {
+ beginTime: this.showMonthFirstDay(today) + " 00:00:00",
+ endTime: this.showToDay(today) + " 23:59:59",
+ };
+ //修改搜索框中的值
+ this.search.releaseTimeRange = [
+ this.showMonthFirstDay(today) + " 00:00:00",
+ this.showToDay(today) + " 23:59:59",
+ ];
+ }
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ //本日
+ showToDay(Nowdate) {
+ var M = Number(Nowdate.getMonth()) + 1;
+ if (M < 10) {
+ M = "0" + M;
+ }
+ var day = Nowdate.getDate();
+ if (day < 10) {
+ day = "0" + day;
+ }
+ return Nowdate.getFullYear() + "-" + M + "-" + day;
+ },
+
+ //本周第一天
+ showWeekFirstDay(Nowdate) {
+ var WeekFirstDay = new Date(Nowdate - (Nowdate.getDay() - 1) * 86400000);
+ var M = Number(WeekFirstDay.getMonth()) + 1;
+ if (M < 10) {
+ M = "0" + M;
+ }
+ var day = WeekFirstDay.getDate();
+ if (day < 10) {
+ day = "0" + day;
+ }
+ return WeekFirstDay.getFullYear() + "-" + M + "-" + day;
+ },
+
+ //本月第一天
+ showMonthFirstDay(Nowdate) {
+ var MonthFirstDay = new Date(
+ Nowdate.getFullYear(),
+ Nowdate.getMonth(),
+ 1
+ );
+ var M = Number(MonthFirstDay.getMonth()) + 1;
+ if (M < 10) {
+ M = "0" + M;
+ }
+ return (
+ MonthFirstDay.getFullYear() +
+ "-" +
+ M +
+ "-" +
+ "0" +
+ MonthFirstDay.getDate()
+ );
+ },
+ getBZdata(e) {
+ this.activeClass = e;
+ var params = {
+ beginTime: this.dateTime.week.beginTime,
+ endTime: this.dateTime.week.endTime,
+ };
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ getBYdata(e) {
+ this.activeClass = e;
+ var params = {
+ beginTime: this.dateTime.month.beginTime,
+ endTime: this.dateTime.month.endTime,
+ };
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ getQBdata(e) {
+ this.search.releaseTimeRange = ["", ""];
+ this.activeClass = e;
+ var params = {};
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ rowStyle({row, column, rowIndex}) {
+ if (row.jtype == "0") {
+ return {
+ color: "#ff2727",
+ };
+ } else if (row.jtype == "1") {
+ return {
+ color: "#15a2fe",
+ };
+ } else {
+ return {
+ color: "#000000",
+ };
+ }
+ },
+ handleStart(row) {
+ var arr = [];
+ this.$store.state.tags.tagList.forEach((item) => {
+ if (item.label != "视频") {
+ arr.push(item);
+ }
+ });
+ this.$store.state.tags.tagList = arr;
+ this.$router.push({
+ path: `/real/video/`,
+ query: row,
+ });
+ },
+ handleHistory(row) {
+ var arr = [];
+ this.$store.state.tags.tagList.forEach((item) => {
+ if (item.label != "设备历史") {
+ arr.push(item);
+ }
+ });
+ this.$store.state.tags.tagList = arr;
+ this.$router.push({path: `/real/history/${row.deviceNumber}`});
+ },
+ handleMap(row) {
+ this.showMap = true;
+ this.$nextTick(() => {
+ this.$refs.mapDiv.onload = () => {
+ window.frames[0].init("ClientManagement", {
+ x: row.jd,
+ y: row.wd,
+ clientID: row.deviceNumber,
+ });
+ };
+ });
+ },
+ getStartTime() {
+ if (
+ this.$route.query.startTime != undefined &&
+ this.$route.query.startTime != null &&
+ this.$route.query.startTime != ""
+ ) {
+ return this.$route.query.startTime;
+ }
+ return "";
+ },
+ getEndTime() {
+ if (
+ this.$route.query.endTime != undefined &&
+ this.$route.query.endTime != null &&
+ this.$route.query.endTime != ""
+ ) {
+ return this.$route.query.endTime;
+ }
+ return "";
+ },
+ handleManage(row) {
+ this.$refs.realPopupView.onItemGetParentData(row);
+ },
+
+ beginTimeOrEndTime(time) {
+ var beginTime = new Date(time);
+
+ var endTime = new Date(new Date(time).valueOf() - 1000 * 60 * 60 * 3);
+
+ var beginY = beginTime.getFullYear();
+
+ var beginM =
+ beginTime.getMonth() + 1 < 10
+ ? "0" + (beginTime.getMonth() + 1)
+ : beginTime.getMonth() + 1;
+
+ var beginD =
+ beginTime.getDate() < 10
+ ? "0" + beginTime.getDate()
+ : beginTime.getDate();
+
+ var beginH =
+ beginTime.getHours() < 10
+ ? "0" + beginTime.getHours()
+ : beginTime.getHours();
+
+ var beginm =
+ beginTime.getMinutes() < 10
+ ? "0" + beginTime.getMinutes()
+ : beginTime.getMinutes();
+
+ var begins =
+ beginTime.getSeconds() < 10
+ ? "0" + beginTime.getSeconds()
+ : beginTime.getSeconds();
+
+ var endY = endTime.getFullYear();
+
+ var endM =
+ endTime.getMonth() + 1 < 10
+ ? "0" + (endTime.getMonth() + 1)
+ : endTime.getMonth() + 1;
+
+ var endD =
+ endTime.getDate() < 10 ? "0" + endTime.getDate() : endTime.getDate();
+
+ var endH =
+ endTime.getHours() < 10 ? "0" + endTime.getHours() : endTime.getHours();
+
+ var endm =
+ endTime.getMinutes() < 10
+ ? "0" + endTime.getMinutes()
+ : endTime.getMinutes();
+
+ var ends =
+ endTime.getSeconds() < 10
+ ? "0" + endTime.getSeconds()
+ : endTime.getSeconds();
+ return {
+ begin: beginY + beginM + beginD + beginH + beginm + begins,
+ end: endY + endM + endD + endH + endm + ends,
+ };
+ },
+
+ PoliceTracking(row) {
+ var arr = [];
+ this.$store.state.tags.tagList.forEach((item) => {
+ if (item.label != "任务详情") {
+ arr.push(item);
+ }
+ });
+ this.$store.state.tags.tagList = arr;
+ //警情追踪
+ this.$router.push({path: "/policeTracking/details", query: row});
+ },
+ //打开新增窗体
+ openAdd() {
+ this.$refs.crud.rowAdd();
+ },
+
+ //数据导出
+ handleExport() {
+ this.$confirm("是否导出实时警情数据?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ }).then(() => {
+ window.open(
+ `/api/alarm/alarm/export-alarm?beginTime=${this.$route.query.startTime}&endTime=${this.$route.query.endTime}&waringType=${this.$route.query.waringType}&timeDesc=${this.$route.query.timeDesc}`
+ );
+ });
+ },
+ //数据报表导出
+ handleExportStatis() {
+ let beginTime =
+ this.$route.query.startTime == undefined
+ ? ""
+ : this.$route.query.startTime;
+ let endTime =
+ this.$route.query.endTime == undefined ? "" : this.$route.query.endTime;
+ let waringType =
+ this.$route.query.waringType == undefined
+ ? ""
+ : this.$route.query.waringType;
+ let timeDesc =
+ this.$route.query.timeDesc == undefined
+ ? ""
+ : this.$route.query.timeDesc;
+ window.open(
+ `https://web.byisf.com/api/blade-report/ureport/preview?_u=blade-alarm.statis.ureport.xml&beginTime=${beginTime}&endTime=${endTime}&waringType=${waringType}&timeDesc=${timeDesc}`
+ );
+ //window.open(`http://localhost:8108/ureport/excel?_u=blade-alarm.statis.ureport.xml&beginTime=${beginTime}&endTime=${endTime}&waringType=${waringType}&timeDesc=${timeDesc}`);
+ },
+ rowClick(val) {
+ //行点击事件
+ //警情追踪
+ this.PoliceTracking(val);
+ },
+ },
+};
+</script>
+
+<style>
+.el-card__body .waringTypeClass {
+ width: 12%;
+}
+
+.mapClass div label {
+ display: none;
+}
+
+.mapClassMain {
+ padding-left: 25px !important;
+}
+
+.cityreal2 div label,
+.cityreal3 div label {
+ display: none;
+}
+
+/*页面样式*/
+.el-card__body .cityreal1 {
+ width: 150px;
+ padding-right: 0px !important;
+}
+
+.el-card__body .cityreal2 {
+ width: 100px;
+ padding-left: 10px !important;
+ padding-right: 0px !important;
+}
+
+.el-card__body .cityreal3 {
+ width: 100px;
+ padding-left: 10px !important;
+ padding-right: 0px !important;
+}
+
+/*新增窗体样式*/
+.el-dialog .cityreal1 {
+ width: 216px;
+ padding-right: 0px !important;
+}
+
+.el-dialog .cityreal2 {
+ width: 130px;
+ padding-left: 10px !important;
+ padding-right: 10px !important;
+}
+
+.el-dialog .cityreal3 {
+ width: 105px;
+ padding-left: 0px !important;
+ padding-right: 0px !important;
+}
+
+.cityClassParams .avue-form__group.avue-form__group--flex {
+ display: flex;
+ justify-content: space-between;
+}
+
+.cityClassParams .cityClassSelect {
+ flex: 1;
+ margin: 0 !important;
+ padding-left: 0px !important;
+ padding-right: 0px !important;
+}
+
+.cityClassParams .cityClassSelect:nth-child(2) {
+ margin: 0 10px !important;
+}
+
+.cityClassParams .cityClassSelect .el-form-item {
+ margin-bottom: 0px !important;
+}
+
+.cityClassParams .cityClassSelect .el-form-item .el-input__inner {
+ height: 28px !important;
+ line-height: 28px !important;
+}
+
+.cityClass2 div label {
+ display: none;
+}
+
+.cityClass3 div label {
+ display: none;
+}
+
+.old-video-dialog {
+ position: absolute !important;
+ top: 0 !important;
+ left: auto !important;
+ right: 0px !important;
+ bottom: 0 !important;
+ margin: auto !important;
+ height: 100% !important;
+ width: 476px !important;
+}
+
+.old-video-dialog .el-dialog {
+ position: absolute !important;
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ margin: auto !important;
+ margin-top: 15vh !important;
+ height: 538px;
+}
+
+.old-video-dialog .el-dialog .el-dialog__body {
+ height: calc(100% - 54px);
+ box-sizing: border-box;
+}
+
+.el-button.btn-color {
+ color: rgb(255, 255, 255);
+ background-color: rgb(64, 158, 255);
+ border-color: rgb(64, 158, 255);
+}
+
+.tabFontSize {
+ font-size: 15px;
+}
+</style>
diff --git a/src/views/activitys/real_xc.vue b/src/views/activitys/real_xc.vue
new file mode 100644
index 0000000..30960b3
--- /dev/null
+++ b/src/views/activitys/real_xc.vue
@@ -0,0 +1,1394 @@
+<template>
+ <basic-container class="activitys">
+ <avue-crud
+ :option="option"
+ :table-loading="loading"
+ :before-open="beforeOpen"
+ :data="data"
+ :page.sync="page"
+ ref="crud"
+ @row-del="rowDel"
+ v-model="form"
+ :permission="permissionList"
+ @row-update="rowUpdate"
+ @row-save="rowSave"
+ :row-style="rowStyle"
+ :search.sync="search"
+ row-class-name="tabFontSize"
+ @search-change="searchChange"
+ @search-reset="searchReset"
+ @selection-change="selectionChange"
+ @current-change="currentChange"
+ @size-change="sizeChange"
+ @row-click="rowClick"
+ @refresh-change="refreshChange"
+ @on-load="onLoad"
+ >
+ <!-- @row-click="rowClick" -->
+ <template slot="menuLeft">
+ <el-button
+ type="danger"
+ v-show="true"
+ size="mini"
+ icon="el-icon-delete"
+ plain
+ v-if="permission.real_delete"
+ @click="handleDelete"
+ >删 除
+ </el-button>
+ </template>
+
+ <!-- <template slot="menuLeft">
+ <el-button
+ v-bind:class="activeClass == 0 ? 'btn-color' : ''"
+ size="mini"
+ @click="getBRdata(0)"
+ >本日
+ </el-button>
+ <el-button
+ v-bind:class="activeClass == 1 ? 'btn-color' : ''"
+ size="mini"
+ @click="getBRdata(1)"
+ >本周
+ </el-button>
+ <el-button
+ v-bind:class="activeClass == 2 ? 'btn-color' : ''"
+ size="mini"
+ @click="getBRdata(2)"
+ >本月
+ </el-button>
+ <el-button
+ v-bind:class="activeClass == 3 ? 'btn-color' : ''"
+ size="mini"
+ @click="getQBdata(3)"
+ >全部
+ </el-button>
+ </template> -->
+
+ <!-- <template slot="menuLeft">
+ <el-button
+ type="warning"
+ size="mini"
+ plain
+ icon="el-icon-download"
+ @click="handleExport"
+ >导出
+ </el-button>
+ <el-button
+ type="warning"
+ size="mini"
+ plain
+ icon="el-icon-pie-chart"
+ @click="handleExportStatis"
+ >导出报表
+ </el-button>
+ </template> -->
+
+ <template slot-scope="{ row }" slot="jtype">
+ <el-tag
+ >{{
+ row.jtype == "0" || row.jtype == ""
+ ? "未派发"
+ : row.jtype == "1" &&
+ (row.securityId == null || row.securityId == "")
+ ? "未接收"
+ : row.jtype == "1" &&
+ (row.securityId != null || row.securityId != "")
+ ? "已接收"
+ : "已处置"
+ }}
+ </el-tag>
+ </template>
+ <template slot-scope="{ row }" slot="cid">
+ <el-tag
+ >{{
+ row.cid == "1" ? "事件发生" : row.cid == "3" ? "是" : "事件恢复"
+ }}
+ </el-tag>
+ </template>
+
+ <template slot-scope="{ type, size, row }" slot="menu">
+ <el-button
+ v-if="row.jtype == 0 || row.jtype == 0 || row.jtype == ''"
+ icon="el-icon-s-order"
+ :size="size"
+ :type="type"
+ @click.stop="PoliceTracking(row)"
+ >派发
+ </el-button>
+ </template>
+
+ <template slot-scope="{ type, disabled }" slot="lineForm">
+ <div class="mapClassMain" style="width: 860px; height: 400px">
+ <Map ref="modalForm"/>
+ </div>
+ </template>
+ </avue-crud>
+
+ <real-popup ref="realPopupView"></real-popup>
+ <el-drawer title="电子地图" append-to-body="true" :visible.sync="showMap">
+ <iframe
+ id="mapDiv"
+ ref="mapDiv"
+ src="/map/index.html?openid=ClientManagement&ISinit=1"
+ frameborder="0"
+ width="100%"
+ height="100%"
+ ></iframe>
+ </el-drawer>
+ </basic-container>
+</template>
+
+<script>
+import {
+ getList,
+ remove,
+ update,
+ add,
+ getclient,
+} from "@/api/activitys/activitys";
+import {mapGetters} from "vuex";
+import AvueMap from "avue-plugin-map";
+
+export default {
+ data() {
+ return {
+ showMap: false,
+ hls: "",
+ videoSource: "",
+ activeClass: 3,
+ form: {},
+ query: {},
+ search: {},
+ dateTime: [],
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0,
+ },
+ selectionList: [],
+ option: {
+ height: "auto",
+ indexLabel: "序号",
+ calcHeight: 54,
+ labelWidth: "100",
+ size: "mini",
+ border: false,
+ //stripe:true,
+ menuWidth: 260,
+ dialogWidth: 950,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 3,
+ align: "center",
+ index: true,
+ viewBtn: true,
+ selection: true,
+ dialogClickModal: false,
+ column: [
+ {
+ label: "任务标题",
+ prop: "rname",
+ search: true,
+ searchSpan: 4,
+ span: 12,
+ rules: [
+ {
+ required: true,
+ message: "请选择报警时间",
+ trigger: "blur",
+ },
+ ],
+ },
+
+ {
+ label: "下发时间",
+ type: "datetime",
+ prop: "time",
+ width: 160,
+ span: 12,
+ format: "yyyy-MM-dd HH:mm:ss",
+ valueFormat: "yyyy-MM-dd HH:mm:ss",
+ rules: [
+ {
+ required: true,
+ message: "请选择报警时间",
+ trigger: "blur",
+ },
+ ],
+ },
+ {
+ label: "任务封面",
+ prop: "url",
+ // align:'center',
+ width: 80,
+ type: "upload",
+ listType: "picture-img",
+ action: "/api/blade-resource/oss/endpoint/put-file",
+ propsHttp: {
+ res: "data",
+ url: "link",
+ },
+ // hide: true,
+ span: 24,
+ },
+ // {
+ // label: "报警时间",
+ // prop: "releaseTimeRange",
+ // type: "datetime",
+ // format: "yyyy-MM-dd",
+ // valueFormat: "yyyy-MM-dd",
+ // searchValue: [this.getStartTime(), this.getEndTime()],
+ // searchRange: true,
+ // searchSpan: 5,
+ // hide: true,
+ // addDisplay: false,
+ // editDisplay: false,
+ // viewDisplay: false,
+ // search: true,
+ // rules: [
+ // {
+ // required: true,
+ // message: "请输入时间",
+ // trigger: "blur",
+ // },
+ // ],
+ // },
+ {
+ label: "任务内容",
+ prop: "content",
+ span: 24,
+ },
+ // {
+ // label: "地址",
+ // prop: "place",
+ // span: 10,
+ // rules: [
+ // {
+ // required: true,
+ // message: "请选择地址",
+ // trigger: "blur",
+ // },
+ // ],
+ // },
+ // {
+ // label: null,
+ // prop: "map",
+ // labelWidth: "0",
+ // searchSpan: 0,
+ // maxlength: 0,
+ // hide: true,
+ // span: 2,
+ // // display:false,
+ // component: "AvueMap",
+ // },
+ // {
+ // label: "经度",
+ // hide: true,
+ // prop: "jd",
+ // searchSpan: 2,
+ // width: "100",
+ // labelWidth: "120",
+ // formatter: (row, value, label, column) => {
+ // return (value = value.substring(0, 11));
+ // },
+ // span: 7,
+ // },
+ // {
+ // label: "纬度",
+ // labelWidth: "45",
+ // hide: true,
+ // prop: "wd",
+ // formatter: (row, value, label, column) => {
+ // return (value = value.substring(0, 10));
+ // },
+ // span: 5,
+ // },
+ {
+ label: "所属辖区",
+ prop: "jurisdiction",
+ searchLabelWidth: 80,
+ search: true,
+ searchSpan: 4,
+ overHidden: true,
+ parent: false,
+ type: "tree",
+ dicUrl: "/api/jurisdiction/lazy-tree",
+ props: {
+ label: "title",
+ value: "id"
+ },
+ checkStrictly: true,
+ rules: [
+ {
+ required: true,
+ message: "请选择所属辖区",
+ trigger: "click"
+ }
+ ]
+ },
+ {
+ label: "省份",
+ hide: true,
+ prop: "province",
+ // search: true,
+ width: 100,
+ searchSpan: 2,
+ searchLabelWidth: 45,
+ placeholder: "省份",
+ type: "select",
+ value: "36",
+ props: {
+ label: "name",
+ value: "code",
+ },
+ cascaderItem: ["city", "district"],
+ dicUrl: "/api/blade-system/region/select",
+ span: 6,
+ className: "cityreal1",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "地市",
+ hide: true,
+ prop: "city",
+ type: "select",
+ width: 100,
+ searchPlaceholder: "地市",
+ placeholder: "地市",
+ searchLabelWidth: 1,
+ value: "3601",
+ searchSpan: 2,
+ // search: true,
+ props: {
+ label: "name",
+ value: "code",
+ },
+ dicUrl: "/api/blade-system/region/select?code={{key}}",
+ span: 3,
+ labelWidth: "0",
+ className: "cityreal2",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "区县",
+ hide: true,
+ searchSpan: 2,
+ searchLabelWidth: 1,
+ width: 100,
+ searchPlaceholder: "区县",
+ placeholder: "区县",
+ // search: true,
+ prop: "district",
+ type: "select",
+ props: {
+ label: "name",
+ value: "code",
+ },
+ dicUrl: "/api/blade-system/region/select?code={{key}}",
+ span: 3,
+ labelWidth: "0",
+ className: "cityreal3",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "任务状态",
+ prop: "rtype",
+ type: "select",
+ value: "2",
+ dicData: [
+ {
+ label: "任务开始",
+ value: "2",
+ },
+ {
+ label: "任务结束",
+ value: "1",
+ },
+ {
+ label: "正在进行",
+ value: "0",
+ },
+ ],
+ // label: "任务状态",
+ // searchSpan: 3,
+ // width: 96,
+ // search: true,
+ // slot: true,
+ // value: "0",
+ // searchPlaceholder: "请选择",
+ // prop: "rtype",
+ // type: "select",
+ // dicData: [
+ // {
+ // label: "任务开始",
+ // value: "0",
+ // },
+ // {
+ // label: "正在进行",
+ // value: "1",
+ // },
+ // {
+ // label: "任务结束",
+ // value: "2",
+ // },
+ // ],
+ },
+ // {
+ // label: "派发人",
+ // prop: "alarmPeople",
+ // width: 90,
+ // addDisplay: false,
+ // editDisplay: false,
+ // },
+ {
+ label: "积分数值",
+ prop: "integral",
+ type: "number",
+ // multiple: true,
+ // dicUrl: "/api/catalogs/catalogs/getBigTree",
+ // props: {
+ // label: "title",
+ // },
+ width: 72,
+ // hide: true,
+ minRows: 1,
+ value: 1,
+ // leafOnly: "",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ {
+ label: "接收人数",
+ prop: "jnum",
+ type: "number",
+ // multiple: true,
+ // dicUrl: "/api/catalogs/catalogs/getBigTree",
+ // props: {
+ // label: "title",
+ // },
+ width: 72,
+ // hide: true,
+ minRows: 1,
+ value: 1,
+ // leafOnly: "",
+ addDisplay: true,
+ editDisplay: true,
+ viewDisplay: true,
+ },
+ // {
+ // label: "巡逻路线",
+ // prop: "xllx",
+ // hide: true,
+ // display: true,
+ // type: "tree",
+ // dicUrl: "/api/routeIn/routein/tree",
+ // props: {
+ // label: "title",
+ // },
+ // addDisplay: true,
+ // },
+ {
+ label: "请在下方地图中,建立路径!",
+ labelWidth: "0",
+ className: "mapClass",
+ prop: "haveMap",
+ hide: true,
+ display: true,
+ rules: [
+ {
+ required: true,
+ message: "请在下方地图中,建立路径!",
+ trigger: "blur",
+ },
+ ],
+ addDisabled: true,
+ editDisabled: true,
+ // value: "", //赋值不上去,舍弃
+ // type: "tree",
+ // dicUrl: "/api/routeIn/routein/tree",
+ // props: {
+ // label: "title",
+ // },
+ },
+ {
+ label: "路线展示",
+ labelWidth: "0",
+ prop: "line",
+ className: "mapClass",
+ hide: true,
+ display: true,
+ span: 24,
+ formslot: true,
+ addDisplay: true,
+ },
+ ],
+ },
+ data: [],
+ recorder: null,
+ peopleList: [],
+ // rotesData: "",
+ };
+ },
+ watch: {
+ "form.map": {
+ // form是表单或者表格绑定的数据集,v-model='form'
+ handler(val) {
+ var that = this;
+ if (val) {
+ //重新加载一次页面详情数据,解决新的省市区无法写入问题
+ //判断是新增还是修改
+ if (that.isEdit) {
+ getclient(this.form.id).then((res) => {
+ // that.province = res.data.data.province;
+ // that.city = res.data.data.city;
+ // that.district = res.data.data.district;
+ });
+ }
+
+ //地址截取,从县/区开始截取,并且取从县区第一个出现的位置开始
+ if (val.formattedAddress == "") {
+ return;
+ }
+
+ //经纬度替换
+ this.form.wd = val.latitude;
+ this.form.jd = val.longitude;
+
+ var address = val.formattedAddress.toString();
+ if (address.search("县") != -1) {
+ this.form.place = address.substring(
+ address.indexOf("县") + 1,
+ address.length
+ );
+ }
+ if (address.search("区") != -1) {
+ this.form.place = address.substring(
+ address.indexOf("区") + 1,
+ address.length
+ );
+ }
+ //写入新的省市区
+ that.form.province = val.addressComponent.province;
+ if (val.addressComponent.city == "") {
+ that.form.city = val.addressComponent.province;
+ } else {
+ that.form.city = val.addressComponent.city;
+ }
+ that.form.district = val.addressComponent.district;
+ } else {
+ that.form.map = {
+ formattedAddress: "",
+ latitude: 28.699957,
+ longitude: 115.862118,
+ };
+ }
+ },
+ immediate: true,
+ },
+ // "form.alarmType": {
+ // handler(val) {
+ // // var xllx = this.findObject(this.option.column, "xllx");
+ // var xllxzs = this.findObject(this.option.column, "xllxzs");
+ // if (val === "巡逻任务") {
+ // // xllx.display = true;
+ // xllxzs.display = true;
+ // // xllx.rules = [
+ // // {
+ // // required: true,
+ // // message: "请选择巡逻路线",
+ // // trigger: "blur",
+ // // },
+ // // ];
+ // } else {
+ // // xllx.display = false;
+ // xllxzs.display = false;
+ // // xllx.rules = [];
+ // }
+ // },
+ // immediate: true,
+ // },
+ "form.line": {
+ handler(val) {
+ if (val) {
+ this.getxllx(val);
+ }
+ },
+ immediate: true,
+ },
+ rotesData() {
+ // console.log(this.rotesData, "rotesDatarotesDatarotesData");
+ // console.log(this.rotesData, "this.rotesDatathis.rotesData");
+ if (this.rotesData) {
+ // var haveMap = (this.option.column[9].value = "已选择路径!");
+ // haveMap.value = "已选择路径!";
+ // console.log(haveMap);
+ this.form["line"] = this.rotesData;
+ this.form["haveMap"] = "已绘制路径!";
+ } else {
+ this.form["line"] = "";
+ this.form["haveMap"] = "";
+ }
+ },
+ },
+ computed: {
+ ...mapGetters(["permission", "flowRoutes", "rotesData", "userInfo"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.real_add, false),
+ viewBtn: this.vaildData(null, false),
+ delBtn: this.vaildData(this.permission.real_delete, false),
+ editBtn: this.vaildData(this.permission.real_edit, false),
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach((ele) => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ },
+ },
+ created() {
+ this.dateTime = this.getDate();
+ },
+ mounted() {
+ var xb = JSON.parse(window.sessionStorage.getItem("sjsb"));
+ var data = this.$route.query;
+ if (xb == 1) {
+ this.form = data;
+ this.openAdd();
+ window.sessionStorage.removeItem("sjsb");
+ }
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ // console.log(row);
+ // return;
+ var userId1 = this.userInfo.user_id;
+ var username = this.userInfo.nick_name;
+ let d = {
+ line: row.line, //路线
+ rname: row.rname, //标题
+ url: row.url, //封面
+ time: row.time, //下发时间
+ province: row.$province, //省
+ city: row.$city, //城市
+ district: row.$district, //区县
+ jnum: row.jnum, //接收总数
+ integral: row.integral + "", //积分
+ content: row.content, //内容
+ rtype: row.rtype, //任务状态
+ fid: userId1,//发起人id
+ fname: username, //发起人id
+ jurisdiction: row.jurisdiction
+ };
+ // console.log(d);
+ // done();
+ // return;
+ let that = this;
+ add(d).then(
+ () => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ done();
+ },
+ (error) => {
+ loading();
+ }
+ );
+ return;
+ },
+ getxllx(val) {
+ var that = this;
+ if (this.$refs.modalForm == undefined) {
+ setTimeout(function () {
+ try {
+ that.$refs.modalForm.addLinesDraw(val);
+ } catch (error) {
+ }
+ }, 1500);
+ } else {
+ try {
+ that.$refs.modalForm.addLinesDraw(val);
+ } catch (error) {
+ }
+ }
+ },
+ rowUpdate(row, index, done, loading) {
+ let that = this;
+ update(row).then(
+ () => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ done();
+ },
+ (error) => {
+ loading();
+ }
+ );
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ });
+ },
+ searchReset() {
+ this.activeClass = 3;
+ //清空搜索框中的内容
+ this.query = {};
+ //清空this.$route.query
+ this.$router.push({query: {}});
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ //清空this.$route.query
+ this.$router.push({query: {}});
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!",
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ // console.log(type, "this.formthis.formthis.form");
+ // console.log(type);
+ // if (["edit", "view"].includes(type)) {
+ // getclient(this.form.id).then((res) => {
+ // this.form = res.data.data;
+ // });
+ // }
+ // console.log(this.form);
+ if (type == "add") {
+ this.$store.commit("setRotesData", false); //用vuex传最终数据 清除
+ done();
+ return;
+ }
+ if (this.form.line != "" && this.form != undefined) {
+ this.form["haveMap"] = "已绘制路径!";
+ } else {
+ this.form["haveMap"] = "";
+ }
+ done();
+ },
+ currentChange(currentPage) {
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize) {
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ getList(page.currentPage, page.pageSize,params).then((res) => {
+ const data = res.data.data;
+ this.page.total = data.total;
+
+ data.records.sort((a, b) => {
+ return a.jtype - b.jtype;
+ });
+
+ this.data = data.records;
+
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+ getDate() {
+ // 当前时间
+ var timestamp = Date.parse(new Date());
+ var serverDate = new Date(timestamp);
+
+ // 本周周一的时间
+ var mondayTime =
+ timestamp - (serverDate.getDay() - 1) * 24 * 60 * 60 * 1000;
+ var mondayData = new Date(mondayTime);
+ //年
+ var mondayY = mondayData.getFullYear();
+ //月
+ var mondayM =
+ mondayData.getMonth() + 1 < 10
+ ? "0" + (mondayData.getMonth() + 1)
+ : mondayData.getMonth() + 1;
+ //日
+ var mondayD =
+ mondayData.getDate() < 10
+ ? "0" + mondayData.getDate()
+ : mondayData.getDate();
+ // 当前时间
+ var currentData = new Date(timestamp);
+ //年
+ var currentY = currentData.getFullYear();
+ //月
+ var currentM =
+ currentData.getMonth() + 1 < 10
+ ? "0" + (currentData.getMonth() + 1)
+ : currentData.getMonth() + 1;
+ //日
+ var currentD =
+ currentData.getDate() < 10
+ ? "0" + currentData.getDate()
+ : currentData.getDate();
+ //时
+ var currenH =
+ currentData.getHours() < 10
+ ? "0" + currentData.getHours()
+ : currentData.getHours();
+ //分
+ var currenM =
+ currentData.getMinutes() < 10
+ ? "0" + currentData.getMinutes()
+ : currentData.getMinutes();
+ //秒
+ var currenS =
+ currentData.getSeconds() < 10
+ ? "0" + currentData.getSeconds()
+ : currentData.getSeconds();
+
+ return {
+ day: {
+ beginTime: currentY + "-" + currentM + "-" + currentD + " 00:00:00",
+ endTime:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":00",
+ },
+ week: {
+ beginTime: mondayY + "-" + mondayM + "-" + mondayD + " 00:00:00",
+ endTime:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":00",
+ },
+ month: {
+ beginTime: mondayY + "-" + mondayM + "-01 00:00:00",
+ endTime:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":00",
+ },
+ current:
+ currentY +
+ "-" +
+ currentM +
+ "-" +
+ currentD +
+ " " +
+ currenH +
+ ":" +
+ currenM +
+ ":" +
+ currenS,
+ };
+ },
+ getBRdata(e) {
+ this.activeClass = e;
+ this.query = {};
+ this.$router.push({query: {}});
+ var today = new Date();
+ var params = {};
+
+ if (e == 0) {
+ params = {
+ beginTime: this.showToDay(today) + " 00:00:00",
+ endTime: this.showToDay(today) + " 23:59:59",
+ };
+ //修改搜索框中的值
+ this.search.releaseTimeRange = [
+ this.showToDay(today) + " 00:00:00",
+ this.showToDay(today) + " 23:59:59",
+ ];
+ }
+ if (e == 1) {
+ params = {
+ beginTime: this.showWeekFirstDay(today) + " 00:00:00",
+ endTime: this.showToDay(today) + " 23:59:59",
+ };
+ //修改搜索框中的值
+ this.search.releaseTimeRange = [
+ this.showWeekFirstDay(today) + " 00:00:00",
+ this.showToDay(today) + " 23:59:59",
+ ];
+ }
+ if (e == 2) {
+ params = {
+ beginTime: this.showMonthFirstDay(today) + " 00:00:00",
+ endTime: this.showToDay(today) + " 23:59:59",
+ };
+ //修改搜索框中的值
+ this.search.releaseTimeRange = [
+ this.showMonthFirstDay(today) + " 00:00:00",
+ this.showToDay(today) + " 23:59:59",
+ ];
+ }
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ //本日
+ showToDay(Nowdate) {
+ var M = Number(Nowdate.getMonth()) + 1;
+ if (M < 10) {
+ M = "0" + M;
+ }
+ var day = Nowdate.getDate();
+ if (day < 10) {
+ day = "0" + day;
+ }
+ return Nowdate.getFullYear() + "-" + M + "-" + day;
+ },
+
+ //本周第一天
+ showWeekFirstDay(Nowdate) {
+ var WeekFirstDay = new Date(Nowdate - (Nowdate.getDay() - 1) * 86400000);
+ var M = Number(WeekFirstDay.getMonth()) + 1;
+ if (M < 10) {
+ M = "0" + M;
+ }
+ var day = WeekFirstDay.getDate();
+ if (day < 10) {
+ day = "0" + day;
+ }
+ return WeekFirstDay.getFullYear() + "-" + M + "-" + day;
+ },
+
+ //本月第一天
+ showMonthFirstDay(Nowdate) {
+ var MonthFirstDay = new Date(
+ Nowdate.getFullYear(),
+ Nowdate.getMonth(),
+ 1
+ );
+ var M = Number(MonthFirstDay.getMonth()) + 1;
+ if (M < 10) {
+ M = "0" + M;
+ }
+ return (
+ MonthFirstDay.getFullYear() +
+ "-" +
+ M +
+ "-" +
+ "0" +
+ MonthFirstDay.getDate()
+ );
+ },
+ getBZdata(e) {
+ this.activeClass = e;
+ var params = {
+ beginTime: this.dateTime.week.beginTime,
+ endTime: this.dateTime.week.endTime,
+ };
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ getBYdata(e) {
+ this.activeClass = e;
+ var params = {
+ beginTime: this.dateTime.month.beginTime,
+ endTime: this.dateTime.month.endTime,
+ };
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ getQBdata(e) {
+ this.search.releaseTimeRange = ["", ""];
+ this.activeClass = e;
+ var params = {};
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ rowStyle({row, column, rowIndex}) {
+ if (row.jtype == "0") {
+ return {
+ color: "#ff2727",
+ };
+ } else if (row.jtype == "1") {
+ return {
+ color: "#15a2fe",
+ };
+ } else {
+ return {
+ color: "#000000",
+ };
+ }
+ },
+ handleStart(row) {
+ var arr = [];
+ this.$store.state.tags.tagList.forEach((item) => {
+ if (item.label != "视频") {
+ arr.push(item);
+ }
+ });
+ this.$store.state.tags.tagList = arr;
+ this.$router.push({
+ path: `/real/video/`,
+ query: row,
+ });
+ },
+ handleHistory(row) {
+ var arr = [];
+ this.$store.state.tags.tagList.forEach((item) => {
+ if (item.label != "设备历史") {
+ arr.push(item);
+ }
+ });
+ this.$store.state.tags.tagList = arr;
+ this.$router.push({path: `/real/history/${row.deviceNumber}`});
+ },
+ handleMap(row) {
+ this.showMap = true;
+ this.$nextTick(() => {
+ this.$refs.mapDiv.onload = () => {
+ window.frames[0].init("ClientManagement", {
+ x: row.jd,
+ y: row.wd,
+ clientID: row.deviceNumber,
+ });
+ };
+ });
+ },
+ getStartTime() {
+ if (
+ this.$route.query.startTime != undefined &&
+ this.$route.query.startTime != null &&
+ this.$route.query.startTime != ""
+ ) {
+ return this.$route.query.startTime;
+ }
+ return "";
+ },
+ getEndTime() {
+ if (
+ this.$route.query.endTime != undefined &&
+ this.$route.query.endTime != null &&
+ this.$route.query.endTime != ""
+ ) {
+ return this.$route.query.endTime;
+ }
+ return "";
+ },
+ handleManage(row) {
+ this.$refs.realPopupView.onItemGetParentData(row);
+ },
+
+ beginTimeOrEndTime(time) {
+ var beginTime = new Date(time);
+
+ var endTime = new Date(new Date(time).valueOf() - 1000 * 60 * 60 * 3);
+
+ var beginY = beginTime.getFullYear();
+
+ var beginM =
+ beginTime.getMonth() + 1 < 10
+ ? "0" + (beginTime.getMonth() + 1)
+ : beginTime.getMonth() + 1;
+
+ var beginD =
+ beginTime.getDate() < 10
+ ? "0" + beginTime.getDate()
+ : beginTime.getDate();
+
+ var beginH =
+ beginTime.getHours() < 10
+ ? "0" + beginTime.getHours()
+ : beginTime.getHours();
+
+ var beginm =
+ beginTime.getMinutes() < 10
+ ? "0" + beginTime.getMinutes()
+ : beginTime.getMinutes();
+
+ var begins =
+ beginTime.getSeconds() < 10
+ ? "0" + beginTime.getSeconds()
+ : beginTime.getSeconds();
+
+ var endY = endTime.getFullYear();
+
+ var endM =
+ endTime.getMonth() + 1 < 10
+ ? "0" + (endTime.getMonth() + 1)
+ : endTime.getMonth() + 1;
+
+ var endD =
+ endTime.getDate() < 10 ? "0" + endTime.getDate() : endTime.getDate();
+
+ var endH =
+ endTime.getHours() < 10 ? "0" + endTime.getHours() : endTime.getHours();
+
+ var endm =
+ endTime.getMinutes() < 10
+ ? "0" + endTime.getMinutes()
+ : endTime.getMinutes();
+
+ var ends =
+ endTime.getSeconds() < 10
+ ? "0" + endTime.getSeconds()
+ : endTime.getSeconds();
+ return {
+ begin: beginY + beginM + beginD + beginH + beginm + begins,
+ end: endY + endM + endD + endH + endm + ends,
+ };
+ },
+
+ PoliceTracking(row) {
+ var arr = [];
+ this.$store.state.tags.tagList.forEach((item) => {
+ if (item.label != "任务详情") {
+ arr.push(item);
+ }
+ });
+ this.$store.state.tags.tagList = arr;
+ //警情追踪
+ this.$router.push({path: "/policeTracking/details", query: row});
+ },
+ //打开新增窗体
+ openAdd() {
+ this.$refs.crud.rowAdd();
+ },
+
+ //数据导出
+ handleExport() {
+ this.$confirm("是否导出实时警情数据?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ }).then(() => {
+ window.open(
+ `/api/alarm/alarm/export-alarm?beginTime=${this.$route.query.startTime}&endTime=${this.$route.query.endTime}&waringType=${this.$route.query.waringType}&timeDesc=${this.$route.query.timeDesc}`
+ );
+ });
+ },
+ //数据报表导出
+ handleExportStatis() {
+ let beginTime =
+ this.$route.query.startTime == undefined
+ ? ""
+ : this.$route.query.startTime;
+ let endTime =
+ this.$route.query.endTime == undefined ? "" : this.$route.query.endTime;
+ let waringType =
+ this.$route.query.waringType == undefined
+ ? ""
+ : this.$route.query.waringType;
+ let timeDesc =
+ this.$route.query.timeDesc == undefined
+ ? ""
+ : this.$route.query.timeDesc;
+ window.open(
+ `https://web.byisf.com/api/blade-report/ureport/preview?_u=blade-alarm.statis.ureport.xml&beginTime=${beginTime}&endTime=${endTime}&waringType=${waringType}&timeDesc=${timeDesc}`
+ );
+ //window.open(`http://localhost:8108/ureport/excel?_u=blade-alarm.statis.ureport.xml&beginTime=${beginTime}&endTime=${endTime}&waringType=${waringType}&timeDesc=${timeDesc}`);
+ },
+ rowClick(val) {
+ //行点击事件
+ //警情追踪
+ this.PoliceTracking(val);
+ },
+ },
+};
+</script>
+
+<style>
+.el-card__body .waringTypeClass {
+ width: 12%;
+}
+
+.mapClass div label {
+ display: none;
+}
+
+.mapClassMain {
+ padding-left: 25px !important;
+}
+
+.cityreal2 div label,
+.cityreal3 div label {
+ display: none;
+}
+
+/*页面样式*/
+.el-card__body .cityreal1 {
+ width: 150px;
+ padding-right: 0px !important;
+}
+
+.el-card__body .cityreal2 {
+ width: 100px;
+ padding-left: 10px !important;
+ padding-right: 0px !important;
+}
+
+.el-card__body .cityreal3 {
+ width: 100px;
+ padding-left: 10px !important;
+ padding-right: 0px !important;
+}
+
+/*新增窗体样式*/
+.el-dialog .cityreal1 {
+ width: 216px;
+ padding-right: 0px !important;
+}
+
+.el-dialog .cityreal2 {
+ width: 130px;
+ padding-left: 10px !important;
+ padding-right: 10px !important;
+}
+
+.el-dialog .cityreal3 {
+ width: 105px;
+ padding-left: 0px !important;
+ padding-right: 0px !important;
+}
+
+.cityClassParams .avue-form__group.avue-form__group--flex {
+ display: flex;
+ justify-content: space-between;
+}
+
+.cityClassParams .cityClassSelect {
+ flex: 1;
+ margin: 0 !important;
+ padding-left: 0px !important;
+ padding-right: 0px !important;
+}
+
+.cityClassParams .cityClassSelect:nth-child(2) {
+ margin: 0 10px !important;
+}
+
+.cityClassParams .cityClassSelect .el-form-item {
+ margin-bottom: 0px !important;
+}
+
+.cityClassParams .cityClassSelect .el-form-item .el-input__inner {
+ height: 28px !important;
+ line-height: 28px !important;
+}
+
+.cityClass2 div label {
+ display: none;
+}
+
+.cityClass3 div label {
+ display: none;
+}
+
+.old-video-dialog {
+ position: absolute !important;
+ top: 0 !important;
+ left: auto !important;
+ right: 0px !important;
+ bottom: 0 !important;
+ margin: auto !important;
+ height: 100% !important;
+ width: 476px !important;
+}
+
+.old-video-dialog .el-dialog {
+ position: absolute !important;
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ margin: auto !important;
+ margin-top: 15vh !important;
+ height: 538px;
+}
+
+.old-video-dialog .el-dialog .el-dialog__body {
+ height: calc(100% - 54px);
+ box-sizing: border-box;
+}
+
+.el-button.btn-color {
+ color: rgb(255, 255, 255);
+ background-color: rgb(64, 158, 255);
+ border-color: rgb(64, 158, 255);
+}
+
+.tabFontSize {
+ font-size: 15px;
+}
+</style>
--
Gitblit v1.9.3