Browse Source

1、添加AIS信息弹窗

2、修改设备入网申请、审评模块
master
Fuyuu 9 months ago
parent
commit
d4d2ae5e3f
  1. BIN
      src/assets/images/ship_a.png
  2. 45
      src/components/earthMap/AISInfoDetail.vue
  3. 164
      src/components/earthMap/AISInfoWindow.vue
  4. 22
      src/utils/earthMap/earthObj.ts
  5. 10
      src/utils/earthMap/shipDraw.ts
  6. 19
      src/views/earthMap/edit/EarthComp.vue
  7. 223
      src/views/military/modules/equipmentManage/licenseManage/MsIotImportLicense.data.ts
  8. 19
      src/views/military/modules/equipmentManage/licenseManage/MsIotImportLicenseApply.vue
  9. 12
      src/views/military/modules/equipmentManage/licenseManage/MsIotImportLicenseList.vue
  10. 123
      src/views/military/modules/equipmentManage/licenseManage/components/ApplyForm.vue
  11. 30
      src/views/military/modules/equipmentManage/licenseManage/components/ApplyModal.vue
  12. 265
      src/views/military/modules/equipmentManage/licenseManage/components/MsIotImportLicenseForm.vue
  13. 13
      src/views/military/modules/equipmentManage/licenseManage/components/MsIotImportLicenseModal.vue

BIN
src/assets/images/ship_a.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

45
src/components/earthMap/AISInfoDetail.vue

@ -2,9 +2,10 @@
<div id="infoDetail" class="infoDetail"> <div id="infoDetail" class="infoDetail">
<Window :title="title" @cancel="cancel" :width="500" :minWidth="500" :height="340" v-show="show"> <Window :title="title" @cancel="cancel" :width="500" :minWidth="500" :height="340" v-show="show">
<p class="content"></p> <p class="content"></p>
<div style="float:left;width:49%;"> <div style="float: left; width: 49%">
<p><span class="content-title">航行轨迹</span> <p
<XbsjSwitch v-model="switchVal" style="margin-top: 6px;"></XbsjSwitch> ><span class="content-title">航行轨迹</span>
<XbsjSwitch v-model="switchVal" style="margin-top: 6px"></XbsjSwitch>
</p> </p>
</div> </div>
<!-- <div style="float:left;width:49%;"> <!-- <div style="float:left;width:49%;">
@ -17,44 +18,44 @@
<script lang="ts"> <script lang="ts">
import { onMounted, defineComponent, ref, getCurrentInstance, computed, watch, onBeforeUnmount } from 'vue'; import { onMounted, defineComponent, ref, getCurrentInstance, computed, watch, onBeforeUnmount } from 'vue';
import $ from 'jquery' import $ from 'jquery';
// import mitt from '/@/utils/mitt'; // import mitt from '/@/utils/mitt';
import $mitt from "@/utils/earthMap/mitt"; import $mitt from '@/utils/earthMap/mitt';
export default defineComponent({ export default defineComponent({
name: "infoDetail", name: 'infoDetail',
props: { props: {
eventSerialNum: { eventSerialNum: {
type: Number type: Number,
}, },
title: { title: {
type: String type: String,
}, },
content: { content: {
type: String type: String,
}, },
}, },
setup(props) { setup(props) {
const { proxy }: any = getCurrentInstance(); const { proxy }: any = getCurrentInstance();
// const $mitt = mitt(); // const $mitt = mitt();
let show = ref(true) let show = ref(true);
let switchVal = ref(window.$earth.sceneTree.$refs['path_' + props.eventSerialNum].czmObject.enabled,) let switchVal = ref(window.$earth.sceneTree.$refs['path_' + props.eventSerialNum].czmObject.enabled);
let defaultProperty = ref({ let defaultProperty = ref({
title: '默认窗口', title: '默认窗口',
}) });
//computed //computed
const title = computed(() => { const title = computed(() => {
return typeof props.title == "undefined" ? defaultProperty.value.title : props.title; return typeof props.title == 'undefined' ? defaultProperty.value.title : props.title;
}); });
watch(switchVal, (e) => { watch(switchVal, (e) => {
window.$earth.sceneTree.$refs['path_' + props.eventSerialNum].czmObject.enabled = e; window.$earth.sceneTree.$refs['path_' + props.eventSerialNum].czmObject.enabled = e;
}) });
onMounted(() => { onMounted(() => {
{ {
// //
$(".infoDetail .content").empty(); $('.infoDetail .content').empty();
$(".infoDetail .content").append(props.content); $('.infoDetail .content').append(props.content);
} }
{ {
// cancel() // cancel()
@ -62,11 +63,11 @@ export default defineComponent({
cancel(); cancel();
}); });
} }
}) });
onBeforeUnmount(() => { onBeforeUnmount(() => {
$mitt.off('cancel') $mitt.off('cancel');
}) });
function cancel() { function cancel() {
proxy.$parent.destroyTool(proxy); proxy.$parent.destroyTool(proxy);
@ -78,11 +79,9 @@ export default defineComponent({
defaultProperty, defaultProperty,
title, title,
cancel, cancel,
} };
}, },
}) });
</script> </script>
<style> <style>

164
src/components/earthMap/AISInfoWindow.vue

@ -0,0 +1,164 @@
<!--
* @Author: Fuyuu 1805498209@qq.com
* @Date: 2024-01-05 14:18:33
* @LastEditors: Fuyuu 1805498209@qq.com
* @LastEditTime: 2024-01-05 16:45:48
* @FilePath: \dt-admin-pc-v2\src\components\earthMap\AISInfoWindow.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div class="AISInfo">
<Window
:title="title"
:width="600"
:minWidth="600"
:height="380"
:left="650"
:top="240"
@cancel="cancel"
:floatright="false"
:showCancelButton="true"
:footervisible="false"
:showcloseButton="true"
id="aisInfoWindow"
>
<div class="ais_content">
<div class="content_item">
<div class="item_title">船名:</div>
<div class="item_content">赛尔号101</div>
</div>
<div class="content_item">
<div class="item_title">MMSI:</div>
<div class="item_content">413247920</div>
</div>
<div class="content_item">
<div class="item_title">船首向:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">呼号:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">航迹向:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">IMO:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">航速:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">经度:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">纬度:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">状态:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">类型:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">船长/:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">目的地:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">吃水:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">国籍:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">预到时间:</div>
<div class="item_content">123456</div>
</div>
<div class="content_item">
<div class="item_title">更新时间:</div>
<div class="item_content">123456</div>
</div>
<!-- 轨迹显示 -->
<div class="content_item">
<div class="item_title">航行轨迹:</div>
<a-switch v-model:checked="checked" @change="changeTrack" />
</div>
</div>
</Window>
</div>
</template>
<script lang="ts">
import { defineComponent, getCurrentInstance, ref } from 'vue';
import Window from '@/components/earthMap/components/Window.vue';
export default defineComponent({
name: 'AISInfoWindow',
props: {
title: {
type: String,
default: 'AIS信息',
},
},
components: {
Window,
},
setup(props, context) {
const { proxy }: any = getCurrentInstance();
const checked = ref(false);
//
function cancel() {
proxy.$parent.AISInfoWindowShow = false;
}
//
function changeTrack(e) {
checked.value = e;
}
return {
checked,
cancel,
changeTrack,
};
},
});
</script>
<style lang="less" scoped>
#aisInfoWindow .xbsj-model-header .xbsj-model-arrow {
right: 25px;
}
.ais_content {
width: 95%;
margin: 0 auto;
display: flex;
flex-direaction: row;
flex-wrap: wrap;
.content_item {
width: 50%;
margin: 6px 0;
display: flex;
flex-direaction: row;
font-size: 14px;
.item_title {
color: #fff;
margin-right: 4px;
}
.item_content {
color: #00ffe4;
}
}
}
</style>

22
src/utils/earthMap/earthObj.ts

@ -323,7 +323,7 @@ export const addCustomPrimitive = (
}; };
// 创建船只贴地图片 // 创建船只贴地图片
export const addShipGroundImg = (lon: number, lat: number, height: number, imgUrl: string, rt: number, trackId: number) => { export const addShipGroundImg = (lon: number, lat: number, height: number, imgUrl: string, imgUrl_a: string, rt: number, trackId: number) => {
const shipGroundImg = new window.XE.Obj.GroundImage(window.$earth); const shipGroundImg = new window.XE.Obj.GroundImage(window.$earth);
const objConfig = { const objConfig = {
name: `${trackId}号船只`, name: `${trackId}号船只`,
@ -335,6 +335,16 @@ export const addShipGroundImg = (lon: number, lat: number, height: number, imgUr
ground: false, ground: false,
}; };
shipGroundImg.xbsjFromJSON(objConfig); shipGroundImg.xbsjFromJSON(objConfig);
//移入事件
shipGroundImg.onmouseover = (e: any) => {
e.id.imageUrls = [imgUrl_a];
window.$earth.czm.viewer._container.style.cursor = 'pointer';
};
//移出事件
shipGroundImg.onmouseout = (e: any) => {
e.id.imageUrls = [imgUrl];
window.$earth.czm.viewer._container.style.cursor = 'default';
};
return shipGroundImg; return shipGroundImg;
}; };
@ -342,12 +352,14 @@ export const addShipGroundImg = (lon: number, lat: number, height: number, imgUr
export const addShipTrack = (positions: number[][]) => { export const addShipTrack = (positions: number[][]) => {
const shipTrack = new window.XE.Obj.Polyline(window.$earth); const shipTrack = new window.XE.Obj.Polyline(window.$earth);
const objConfig = { const objConfig = {
width: 2.0, width: 3.0,
positions, positions,
material: { material: {
type: 'XbsjPolylineDashMaterial', type: 'XbsjODLineMaterial',
XbsjPolylineDashMaterial: { XbsjODLineMaterial: {
color: [1, 1, 0.03, 1], bgColor: [1, 1, 0.03, 1],
color: [1, 0, 1, 1],
glowPower: 0.6,
}, },
}, },
ground: true, ground: true,

10
src/utils/earthMap/shipDraw.ts

@ -2,7 +2,7 @@
* @Author: Fuyuu 1805498209@qq.com * @Author: Fuyuu 1805498209@qq.com
* @Date: 2024-01-03 17:42:49 * @Date: 2024-01-03 17:42:49
* @LastEditors: Fuyuu 1805498209@qq.com * @LastEditors: Fuyuu 1805498209@qq.com
* @LastEditTime: 2024-01-03 18:05:32 * @LastEditTime: 2024-01-05 17:35:32
* @FilePath: \dt-admin-pc-v2\src\utils\earthMap\shipDraw.ts * @FilePath: \dt-admin-pc-v2\src\utils\earthMap\shipDraw.ts
* @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
@ -20,10 +20,12 @@ let shipDataList: any = [];
// 绘制单个船只 // 绘制单个船只
const drawShips = function (shipItem) { const drawShips = function (shipItem) {
// 引入图片 // 引入初始图片
let imageUrl = new URL(`../../assets/images/ship.png`, import.meta.url).href; let imageUrl = new URL(`../../assets/images/ship.png`, import.meta.url).href;
// 引入高亮图片
let imageUrl_a = new URL(`../../assets/images/ship_a.png`, import.meta.url).href;
// 绘制船只 // 绘制船只
let shipModel = addShipGroundImg(shipItem.longitude, shipItem.latitude, 0.5, imageUrl, shipItem.course, shipItem.trackId); let shipModel = addShipGroundImg(shipItem.longitude, shipItem.latitude, 0.5, imageUrl, imageUrl_a, shipItem.course, shipItem.trackId);
// 返回船只绘制信息 // 返回船只绘制信息
return shipModel; return shipModel;
}; };
@ -43,7 +45,7 @@ export const drawAllShips = function (message) {
let existingShip = shipDataList.find((shipItem) => shipItem.trackId === messageData.trackId); let existingShip = shipDataList.find((shipItem) => shipItem.trackId === messageData.trackId);
if (existingShip) { if (existingShip) {
// 添加新的轨迹点 // 添加新的轨迹点
existingShip.trackList.unshift([toRadians(messageData.longitude), toRadians(messageData.latitude), 0]); existingShip.trackList.push([toRadians(messageData.longitude), toRadians(messageData.latitude), 0]);
// 获取场景中的船只信息 // 获取场景中的船只信息
let shipData = window.$earth.getObject(existingShip.guid); let shipData = window.$earth.getObject(existingShip.guid);
// 更新位置和航向 // 更新位置和航向

19
src/views/earthMap/edit/EarthComp.vue

@ -83,6 +83,8 @@
:eidtId="eidtId" :eidtId="eidtId"
></AddModelWin> ></AddModelWin>
<AddRoamVideo v-if="addRoamVideoShow"></AddRoamVideo> <AddRoamVideo v-if="addRoamVideoShow"></AddRoamVideo>
<!-- AIS信息显示窗口 -->
<AISInfoWindow v-if="AISInfoWindowShow"></AISInfoWindow>
</div> </div>
</template> </template>
@ -101,6 +103,8 @@
import VideoSplitScreen from '@/components/earthMap/VideoSplitScreen.vue'; import VideoSplitScreen from '@/components/earthMap/VideoSplitScreen.vue';
import VideoWindow from '@/components/earthMap/VideoWindow.vue'; import VideoWindow from '@/components/earthMap/VideoWindow.vue';
import WarnInfoList from '@/components/earthMap/WarnInfoList.vue'; import WarnInfoList from '@/components/earthMap/WarnInfoList.vue';
import AISInfoDetail from '@/components/earthMap/AISInfoDetail.vue';
import AISInfoWindow from '@/components/earthMap/AISInfoWindow.vue';
import { getRealTime } from '@/utils/date'; import { getRealTime } from '@/utils/date';
import $mitt from '@/utils/earthMap/mitt'; import $mitt from '@/utils/earthMap/mitt';
import { drawInit } from '@/utils/earthMap/earthDraw'; import { drawInit } from '@/utils/earthMap/earthDraw';
@ -195,9 +199,10 @@
AddModelWin, AddModelWin,
AddRoamVideo, AddRoamVideo,
VideoFusionWin, VideoFusionWin,
AISInfoDetail,
AISInfoWindow,
}, },
props: {}, props: {},
}) })
export default class EarthComp extends Vue { export default class EarthComp extends Vue {
/** /**
@ -342,7 +347,8 @@
// //
monitorPosition: any = []; monitorPosition: any = [];
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
//AIS
AISInfoWindowShow = false;
mounted() { mounted() {
let that = this; let that = this;
@ -1871,7 +1877,10 @@
} }
let pickedFeature = this._viewer.scene.pick(click.position); let pickedFeature = this._viewer.scene.pick(click.position);
console.log('点击的船只:', pickedFeature);
if (pickedFeature && pickedFeature.id) { if (pickedFeature && pickedFeature.id) {
//
if (pickedFeature.id.xbsjType && pickedFeature.id.xbsjType === 'Model') { if (pickedFeature.id.xbsjType && pickedFeature.id.xbsjType === 'Model') {
//线 //线
this.cameraData.forEach((data) => { this.cameraData.forEach((data) => {
@ -1928,6 +1937,11 @@
} }
}); });
} }
//
if (pickedFeature.id.xbsjType && pickedFeature.id.xbsjType === 'GroundImage') {
this.AISInfoWindowShow = true;
// console.log(this.AISInfoWindowShow);
}
// //
if ( if (
pickedFeature.id._xbsjOwner && pickedFeature.id._xbsjOwner &&
@ -2007,7 +2021,6 @@
that.cameraModalShow = false; that.cameraModalShow = false;
that.poiModalShow = false; that.poiModalShow = false;
} }
console.debug('点击到的模型', pickedFeature);
}, window.Cesium.ScreenSpaceEventType.LEFT_CLICK); }, window.Cesium.ScreenSpaceEventType.LEFT_CLICK);
} }
/* 鼠标右键事件 */ /* 鼠标右键事件 */

223
src/views/military/modules/equipmentManage/licenseManage/MsIotImportLicense.data.ts

@ -4,82 +4,85 @@ import { rules } from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils'; import { render } from '/@/utils/common/renderUtils';
//列表数据 //列表数据
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ // {
title: '状态', // title: '设备Id',
align: "center", // align: 'center',
dataIndex: 'status_dictText', // dataIndex: 'deviceId',
sorter: true, // width: 200,
width: 120 // },
},
{
title: '设备Id',
align: "center",
dataIndex: 'deviceId',
width: 200
},
{ {
title: '设备名称', title: '设备名称',
align: "center",
dataIndex: 'deviceName'
},
{
title: '设备类型',
align: "center",
dataIndex: 'deviceType_dictText',
sorter: true,
},
{
title: '入网时间',
align: "center",
dataIndex: 'importDate',
sorter: true,
},
{
title: '申请人',
align: 'center', align: 'center',
dataIndex: 'createBy', dataIndex: 'deviceId_dictText',
}, },
// {
// title: '设备类型',
// align: 'center',
// dataIndex: 'deviceType_dictText',
// sorter: true,
// width: 150,
// },
// {
// title: '申请人',
// align: 'center',
// dataIndex: 'createBy',
// width: 120,
// },
{ {
title: '申请时间', title: '申请时间',
align: 'center', align: 'center',
dataIndex: 'createTime', dataIndex: 'createTime',
sorter: true, sorter: true,
}, },
// {
// title: '审批人',
// align: 'center',
// dataIndex: 'auditManid',
// width: 120,
// },
{ {
title: '备注', title: '审核状态',
align: "center", align: 'center',
dataIndex: 'remark' dataIndex: 'status_dictText',
}, sorter: true,
{ width: 140,
title: '许可证编号',
align: "center",
dataIndex: 'licenseNo',
},
{
title: '审批人',
align: "center",
dataIndex: 'auditManid'
}, },
{ {
title: '审批时间', title: '入网时间',
align: "center", align: 'center',
dataIndex: 'auditDate', dataIndex: 'importDate',
sorter: true, sorter: true,
}, },
// {
// title: '许可证编号',
// align: 'center',
// dataIndex: 'licenseNo',
// },
// {
// title: '审批时间',
// align: 'center',
// dataIndex: 'auditDate',
// sorter: true,
// },
// {
// title: '备注',
// align: 'center',
// dataIndex: 'remark',
// },
]; ];
//查询数据 //查询数据
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [
{ {
label: "设备名称", label: '设备名称',
field: 'deviceName', field: 'deviceName',
component: 'Input', component: 'Input',
colProps: { span: 6 }, colProps: { span: 6 },
}, },
{ {
label: "入网时间", label: '入网时间',
field: "importDate", field: 'importDate',
component: 'RangePicker', component: 'RangePicker',
componentProps: { componentProps: {
showTime: true, showTime: true,
@ -87,8 +90,8 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 6 }, colProps: { span: 6 },
}, },
{ {
label: "审批时间", label: '审批时间',
field: "auditDate", field: 'auditDate',
component: 'RangePicker', component: 'RangePicker',
componentProps: { componentProps: {
showTime: true, showTime: true,
@ -104,9 +107,7 @@ export const formSchema: FormSchema[] = [
field: 'deviceId', field: 'deviceId',
component: 'Input', component: 'Input',
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入设备Id!' }];
{ required: true, message: '请输入设备Id!' },
];
}, },
}, },
{ {
@ -114,9 +115,7 @@ export const formSchema: FormSchema[] = [
field: 'deviceName', field: 'deviceName',
component: 'Input', component: 'Input',
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入设备名称!' }];
{ required: true, message: '请输入设备名称!' },
];
}, },
}, },
{ {
@ -124,9 +123,7 @@ export const formSchema: FormSchema[] = [
field: 'deviceType', field: 'deviceType',
component: 'InputNumber', component: 'InputNumber',
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入设备类型!' }];
{ required: true, message: '请输入设备类型!' },
];
}, },
}, },
{ {
@ -134,9 +131,7 @@ export const formSchema: FormSchema[] = [
field: 'licenseNo', field: 'licenseNo',
component: 'Input', component: 'Input',
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入许可证编号!' }];
{ required: true, message: '请输入许可证编号!' },
];
}, },
}, },
{ {
@ -145,12 +140,10 @@ export const formSchema: FormSchema[] = [
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
showTime: true, showTime: true,
valueFormat: 'YYYY-MM-DD HH:mm:ss' valueFormat: 'YYYY-MM-DD HH:mm:ss',
}, },
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入入网时间!' }];
{ required: true, message: '请输入入网时间!' },
];
}, },
}, },
{ {
@ -163,9 +156,7 @@ export const formSchema: FormSchema[] = [
field: 'auditManid', field: 'auditManid',
component: 'Input', component: 'Input',
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入审批人!' }];
{ required: true, message: '请输入审批人!' },
];
}, },
}, },
{ {
@ -174,12 +165,10 @@ export const formSchema: FormSchema[] = [
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
showTime: true, showTime: true,
valueFormat: 'YYYY-MM-DD HH:mm:ss' valueFormat: 'YYYY-MM-DD HH:mm:ss',
}, },
dynamicRules: ({ model, schema }) => { dynamicRules: ({ model, schema }) => {
return [ return [{ required: true, message: '请输入审批时间!' }];
{ required: true, message: '请输入审批时间!' },
];
}, },
}, },
{ {
@ -196,69 +185,72 @@ export const formSchema: FormSchema[] = [
}, },
]; ];
//申请列表数据 //申请列表数据
export const applyColumns: BasicColumn[] = [ export const applyColumns: BasicColumn[] = [
// {
// title: '设备Id',
// align: 'center',
// dataIndex: 'deviceId',
// },
{ {
title: '设备Id', title: '设备名称',
align: "center", align: 'center',
dataIndex: 'deviceId' dataIndex: 'deviceId_dictText',
},
{
title: '申请人',
align: 'center',
dataIndex: 'createBy',
width: 120,
}, },
{ {
title: '设备名称', title: '申请时间',
align: "center", align: 'center',
dataIndex: 'deviceName' dataIndex: 'createTime',
sorter: true,
}, },
// {
// title: '设备类型',
// align: 'center',
// dataIndex: 'deviceType_dictText',
// sorter: true,
// width: 120,
// },
{ {
title: '设备类型', title: '审核状态',
align: "center", align: 'center',
dataIndex: 'deviceType_dictText', dataIndex: 'status_dictText',
sorter: true, sorter: true,
width: 120 width: 140,
}, },
{ {
title: '许可证编号', title: '许可证编号',
align: "center", align: 'center',
dataIndex: 'licenseNo' dataIndex: 'licenseNo',
}, },
{ {
title: '入网时间', title: '入网时间',
align: "center", align: 'center',
dataIndex: 'importDate', dataIndex: 'importDate',
sorter: true, sorter: true,
}, },
{ // {
title: '状态', // title: '备注',
align: "center", // align: 'center',
dataIndex: 'status_dictText', // dataIndex: 'remark',
sorter: true, // },
width: 90
},
{
title: '备注',
align: "center",
dataIndex: 'remark'
},
// { // {
// title: '申请人', // title: '申请人',
// align: 'center', // align: 'center',
// dataIndex: 'createBy', // dataIndex: 'createBy',
// }, // },
{ // {
title: '申请时间', // title: '更新时间',
align: 'center', // align: 'center',
dataIndex: 'createTime', // dataIndex: 'updateTime',
sorter: true, // sorter: true,
}, // },
{
title: '更新时间',
align: 'center',
dataIndex: 'updateTime',
sorter: true,
},
// { // {
// title: '审批人', // title: '审批人',
// align: "center", // align: "center",
@ -270,5 +262,4 @@ export const applyColumns: BasicColumn[] = [
// dataIndex: 'auditDate', // dataIndex: 'auditDate',
// sorter: true, // sorter: true,
// }, // },
]; ];

19
src/views/military/modules/equipmentManage/licenseManage/MsIotImportLicenseApply.vue

@ -10,7 +10,7 @@
<div class="jeecg-basic-table-form-container"> <div class="jeecg-basic-table-form-container">
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :lg="6"> <!-- <a-col :lg="6">
<a-form-item label="设备名称" name="deviceName"> <a-form-item label="设备名称" name="deviceName">
<JInput placeholder="请输入设备名称" v-model:value="queryParam.deviceName"></JInput> <JInput placeholder="请输入设备名称" v-model:value="queryParam.deviceName"></JInput>
</a-form-item> </a-form-item>
@ -29,7 +29,7 @@
<a-date-picker showTime value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间" v-model:value="queryParam.importDate_end" /> <a-date-picker showTime value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间" v-model:value="queryParam.importDate_end" />
</a-form-item> </a-form-item>
</a-form-item> </a-form-item>
</a-col> </a-col> -->
<!-- <template v-if="toggleSearchStatus"> --> <!-- <template v-if="toggleSearchStatus"> -->
<!-- <a-col :lg="6"> <!-- <a-col :lg="6">
<a-form-item label="审批时间"> <a-form-item label="审批时间">
@ -39,18 +39,14 @@
</a-form-item> </a-form-item>
</a-col> --> </a-col> -->
<!-- </template> --> <!-- </template> -->
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons"> <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6"> <a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button> <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button> <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
<!-- <a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
{{ toggleSearchStatus ? '收起' : '展开' }}
<Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
</a> -->
</a-col> </a-col>
</span> </span>
</a-col> </a-col> -->
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
@ -58,7 +54,7 @@
<BasicTable @register="registerTable" :rowSelection="rowSelection"> <BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题--> <!--插槽:table标题-->
<template #tableTitle> <template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button> <!-- <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button> -->
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button> <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0"> <a-dropdown v-if="selectedRowKeys.length > 0">
@ -160,12 +156,11 @@
} }
/** /**
* 编辑事件 * 审核
*/ */
function handleEdit(record: Recordable) { function handleEdit(record: Recordable) {
registerModal.value.disableSubmit = false; registerModal.value.disableSubmit = false;
registerModal.value.supplement = true; registerModal.value.supplement = true;
console.log(registerModal.value);
registerModal.value.edit(record); registerModal.value.edit(record);
} }
@ -209,7 +204,7 @@
onClick: handleDetail.bind(null, record), onClick: handleDetail.bind(null, record),
}, },
{ {
label: '补充', label: '审批',
onClick: handleEdit.bind(null, record), onClick: handleEdit.bind(null, record),
}, },
]; ];

12
src/views/military/modules/equipmentManage/licenseManage/MsIotImportLicenseList.vue

@ -9,7 +9,7 @@
<!--查询区域--> <!--查询区域-->
<div class="jeecg-basic-table-form-container"> <div class="jeecg-basic-table-form-container">
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24"> <!-- <a-row :gutter="24">
<a-col :lg="6"> <a-col :lg="6">
<a-form-item label="设备名称" name="deviceName"> <a-form-item label="设备名称" name="deviceName">
<JInput placeholder="请输入设备名称" v-model:value="queryParam.deviceName"></JInput> <JInput placeholder="请输入设备名称" v-model:value="queryParam.deviceName"></JInput>
@ -30,7 +30,6 @@
</a-form-item> </a-form-item>
</a-form-item> </a-form-item>
</a-col> </a-col>
<!-- <template v-if="toggleSearchStatus"> -->
<a-col :lg="6"> <a-col :lg="6">
<a-form-item label="审批时间" name="auditDate_begin"> <a-form-item label="审批时间" name="auditDate_begin">
<a-date-picker <a-date-picker
@ -46,20 +45,15 @@
</a-form-item> </a-form-item>
</a-form-item> </a-form-item>
</a-col> </a-col>
<!-- </template> -->
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left" class="table-page-search-submitButtons"> <span style="float: left" class="table-page-search-submitButtons">
<a-col :lg="6"> <a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button> <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button> <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
<!-- <a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
{{ toggleSearchStatus ? '收起' : '展开' }}
<Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
</a> -->
</a-col> </a-col>
</span> </span>
</a-col> </a-col>
</a-row> </a-row> -->
</a-form> </a-form>
</div> </div>
<!--引用表格--> <!--引用表格-->
@ -208,7 +202,7 @@
function getTableAction(record) { function getTableAction(record) {
return [ return [
{ {
label: '审批', label: '编辑',
onClick: handleEdit.bind(null, record), onClick: handleEdit.bind(null, record),
}, },
]; ];

123
src/views/military/modules/equipmentManage/licenseManage/components/ApplyForm.vue

@ -2,40 +2,45 @@
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row> <a-row>
<a-col :span="24"> <!-- <a-col :span="24">
<a-form-item label="设备类型" v-bind="validateInfos.deviceType"> <a-form-item label="设备类型" v-bind="validateInfos.deviceType">
<j-dict-select-tag v-model:value="formData.deviceType" dictCode="ms_device_type" placeholder="请选择设备类型" <j-dict-select-tag
:disabled="disabled || supplementDisable" :getPopupContainer="(triggerNode: any) => triggerNode.parentNode" v-model:value="formData.deviceType"
:string-to-number="true" /> dictCode="ms_device_type"
placeholder="请选择设备类型"
:disabled="disabled || supplementDisable"
:getPopupContainer="(triggerNode: any) => triggerNode.parentNode"
:string-to-number="true"
/>
</a-form-item> </a-form-item>
</a-col> </a-col> -->
<a-col :span="24"> <a-col :span="24">
<a-form-item label="设备名称" v-bind="validateInfos.deviceName"> <a-form-item label="申请设备" v-bind="validateInfos.deviceName">
<!-- <a-input v-model:value="formData.deviceName" placeholder="请输入设备名称" :disabled="disabled"></a-input> --> <a-input v-model:value="formData.deviceName" :disabled="true"></a-input>
<a-select v-model:value="formData.deviceName" show-search placeholder="请输入设备名称" :options="options"
@focus="handleFocus" @select="handleselect" :disabled="disabled || supplementDisable">
</a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <!-- <a-col :span="24">
<a-form-item label="设备Id" v-bind="validateInfos.deviceId"> <a-form-item label="申请设备" v-bind="validateInfos.deviceId">
<a-input v-model:value="formData.deviceId" placeholder="请输入设备Id" <a-input v-model:value="formData.deviceId" :disabled="true"></a-input>
:disabled="true"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col> -->
<!-- <a-col :span="24">
<a-col :span="24">
<a-form-item label="入网时间" v-bind="validateInfos.importDate"> <a-form-item label="入网时间" v-bind="validateInfos.importDate">
<a-date-picker placeholder="请选择入网时间" v-model:value="formData.importDate" showTime <a-date-picker
value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" :disabled="disabled || supplementDisable" /> placeholder="请选择入网时间"
</a-form-item> v-model:value="formData.importDate"
</a-col> showTime
<!-- <a-col :span="12"> value-format="YYYY-MM-DD HH:mm:ss"
<a-form-item label="状态" v-bind="validateInfos.status"> style="width: 100%"
<a-input-number v-model:value="formData.status" placeholder="请输入状态" style="width: 100%" :disabled="disabled"/> :disabled="disabled || supplementDisable"
/>
</a-form-item> </a-form-item>
</a-col> --> </a-col> -->
<a-col :span="24">
<a-form-item label="审核状态" v-bind="validateInfos.status">
<j-dict-select-tag type="list" v-model:value="formData.status" dictCode="ms_approval_status" :string-to-number="true" :disabled="true" />
</a-form-item>
</a-col>
<!-- <a-col :span="12"> <!-- <a-col :span="12">
<a-form-item label="许可证编号" v-bind="validateInfos.licenseNo"> <a-form-item label="许可证编号" v-bind="validateInfos.licenseNo">
<a-input v-model:value="formData.licenseNo" placeholder="请输入许可证编号" :disabled="disabled"></a-input> <a-input v-model:value="formData.licenseNo" placeholder="请输入许可证编号" :disabled="disabled"></a-input>
@ -104,11 +109,11 @@ const confirmLoading = ref<boolean>(false);
const options: any = ref([]); const options: any = ref([]);
// //
const validatorRules = { const validatorRules = {
deviceId: [{ required: true, message: '请输入设备Id!' },], // deviceId: [{ required: true, message: 'Id!' }],
deviceName: [{ required: true, message: '请输入设备名称!' },], // deviceName: [{ required: true, message: '!' }],
deviceType: [{ required: true, message: '请输入设备类型!' },], // deviceType: [{ required: true, message: '!' }],
// licenseNo: [{ required: true, message: '!'},], // licenseNo: [{ required: true, message: '!'},],
importDate: [{ required: true, message: '请输入入网时间!' },], // importDate: [{ required: true, message: '!' }],
// auditManid: [{ required: true, message: '!'},], // auditManid: [{ required: true, message: '!'},],
// auditDate: [{ required: true, message: '!'},], // auditDate: [{ required: true, message: '!'},],
}; };
@ -136,29 +141,53 @@ const supplementDisable = computed(() => {
function add() { function add() {
edit({ edit({
importDate: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), // importDate: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), //
status: 0 // status: 0, //
}); });
} }
/** /**
* 编辑 * 审批
*/ */
function edit(record) { function edit(record, apply_status) {
nextTick(() => { nextTick(() => {
resetFields(); resetFields();
// //
Object.assign(formData, record); Object.assign(formData, record);
//
formData.importDate = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss');
//
formData.licenseNo = generateRandomCode();
}); });
} }
function generateRandomCode() {
const now = new Date();
const year = now.getFullYear().toString().slice(-2);
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const seconds = now.getSeconds().toString().padStart(2, '0');
const randomNum = Math.floor(Math.random() * 1000)
.toString()
.padStart(3, '0');
const code = `${year}${month}${day}${hours}${minutes}${seconds}${randomNum}`;
return code;
}
/** /**
* 提交数据 * 提交数据
*/ */
async function submitForm() { async function submitForm(apply_status) {
// //
await validate(); await validate();
confirmLoading.value = true; confirmLoading.value = true;
const isUpdate = ref<boolean>(false); const isUpdate = ref<boolean>(false);
if (apply_status == 1) {
formData.status = 1;
} else {
formData.status = 2;
}
// //
let model = formData; let model = formData;
if (model.id) { if (model.id) {
@ -190,30 +219,32 @@ async function submitForm() {
} }
function handleFocus() { function handleFocus() {
defHttp.get({ defHttp
url: "/military/msDeviceInfo/list", .get(
params: { deviceType: formData.deviceType } {
}, { isTransformResponse: false }) url: '/military/msDeviceInfo/list',
params: { deviceType: formData.deviceType },
},
{ isTransformResponse: false }
)
// getAction("/military/msDeviceInfo/list",{deviceType:this.model.deviceType}) // getAction("/military/msDeviceInfo/list",{deviceType:this.model.deviceType})
.then(res => { .then((res) => {
if (res.success) { if (res.success) {
options.value = [] // options.value = []; //
let records = res.result.records; let records = res.result.records;
for (let i of records) { for (let i of records) {
let item = { value: i.deviceName, label: i.deviceName, id: i.id, type: i.deviceType }; let item = { value: i.deviceName, label: i.deviceName, id: i.id, type: i.deviceType };
options.value.push(item) options.value.push(item);
} }
} else { } else {
console.error(res.message) console.error(res.message);
} }
}) });
} }
function handleselect(e, option) { function handleselect(e, option) {
console.log(e, option); console.log(e, option);
formData.deviceId = option.id formData.deviceId = option.id;
formData.deviceType = option.type formData.deviceType = option.type;
} }
defineExpose({ defineExpose({

30
src/views/military/modules/equipmentManage/licenseManage/components/ApplyModal.vue

@ -2,20 +2,17 @@
* @Author: Fuyuu 1805498209@qq.com * @Author: Fuyuu 1805498209@qq.com
* @Date: 2023-11-30 10:39:05 * @Date: 2023-11-30 10:39:05
* @LastEditors: Fuyuu 1805498209@qq.com * @LastEditors: Fuyuu 1805498209@qq.com
* @LastEditTime: 2023-12-01 09:22:01 * @LastEditTime: 2024-01-05 09:18:11
* @FilePath: \dt-admin-pc-v2\src\views\military\modules\iot\components\ApplyModal.vue * @FilePath: \dt-admin-pc-v2\src\views\military\modules\iot\components\ApplyModal.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
<template> <template>
<a-modal <a-modal :title="title" :width="width" :visible="visible" @cancel="handleCancel">
:title="title" <template #footer>
:width="width" <a-button v-if="disableSubmit" @click="handleCancel">关闭</a-button>
:visible="visible" <a-button v-if="!disableSubmit" type="primary" danger @click="refuse()">拒绝</a-button>
@ok="handleOk" <a-button v-if="!disableSubmit" type="primary" @click="agree()">同意</a-button>
:okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" </template>
@cancel="handleCancel"
cancelText="关闭"
>
<ApplyForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :supplement="supplement" :formBpm="false"></ApplyForm> <ApplyForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :supplement="supplement" :formBpm="false"></ApplyForm>
</a-modal> </a-modal>
</template> </template>
@ -31,7 +28,6 @@
const supplement = ref<boolean>(false); const supplement = ref<boolean>(false);
const registerForm = ref(); const registerForm = ref();
const emit = defineEmits(['register', 'success']); const emit = defineEmits(['register', 'success']);
/** /**
* 新增 * 新增
*/ */
@ -43,12 +39,22 @@
}); });
} }
//
function refuse() {
registerForm.value.submitForm(2);
}
//
function agree() {
registerForm.value.submitForm(1);
}
/** /**
* 编辑 * 编辑
* @param record * @param record
*/ */
function edit(record) { function edit(record) {
title.value = disableSubmit.value ? '详情' : '补充'; title.value = disableSubmit.value ? '详情' : '审批';
visible.value = true; visible.value = true;
nextTick(() => { nextTick(() => {
registerForm.value.edit(record); registerForm.value.edit(record);

265
src/views/military/modules/equipmentManage/licenseManage/components/MsIotImportLicenseForm.vue

@ -3,50 +3,87 @@
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row> <a-row>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="设备Id" v-bind="validateInfos.deviceId"> <a-form-item label="申请设备" v-bind="validateInfos.deviceId">
<a-input v-model:value="formData.deviceId" placeholder="请输入设备Id" :disabled="disabled"></a-input> <a-tree-select
ref="deviceTree"
v-model:value="formData.deviceId"
allow-clear
:treeData="nodeTree"
:disabled="disabled"
placeholder="请选择申请设备"
@change="handleChange"
>
</a-tree-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="设备名称" v-bind="validateInfos.deviceName"> <a-form-item label="设备编码">
<a-input v-model:value="formData.deviceName" placeholder="请输入设备名称" :disabled="disabled"></a-input> <a-input v-model:value="deviceCode" :disabled="true" placeholder="未选择申请设备"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="设备类型" v-bind="validateInfos.deviceType"> <a-form-item label="部署位置">
<j-dict-select-tag v-model:value="formData.deviceType" dictCode="ms_device_type" placeholder="请选择设备类型" <a-input v-model:value="devicePosition" :disabled="true" placeholder="未选择申请设备"></a-input>
:disabled="disabled" :getPopupContainer="(triggerNode: any) => triggerNode.parentNode"
:string-to-number="true" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <!-- <a-col :span="12">
<a-form-item label="设备类型" v-bind="validateInfos.deviceType">
<j-dict-select-tag
v-model:value="formData.deviceType"
dictCode="ms_device_type"
placeholder="请选择设备类型"
:disabled="disabled"
:getPopupContainer="(triggerNode: any) => triggerNode.parentNode"
:string-to-number="true"
/>
</a-form-item>
</a-col> -->
<!-- <a-col :span="12">
<a-form-item label="入网时间" v-bind="validateInfos.importDate"> <a-form-item label="入网时间" v-bind="validateInfos.importDate">
<a-date-picker placeholder="请选择入网时间" v-model:value="formData.importDate" showTime <a-date-picker
value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" :disabled="disabled" /> placeholder="请选择入网时间"
v-model:value="formData.importDate"
showTime
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
:disabled="disabled"
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="状态" v-bind="validateInfos.status"> <a-form-item label="状态" v-bind="validateInfos.status">
<j-dict-select-tag type="list" v-model:value="formData.status" dictCode="ms_approval_status" <j-dict-select-tag
:string-to-number="true" placeholder="请选择状态" :disabled="disabled" /> type="list"
v-model:value="formData.status"
dictCode="ms_approval_status"
:string-to-number="true"
placeholder="请选择状态"
:disabled="disabled"
/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="许可证编号" v-bind="validateInfos.licenseNo"> <a-form-item label="许可证编号" v-bind="validateInfos.licenseNo">
<a-input v-model:value="formData.licenseNo" placeholder="请输入许可证编号" :disabled="disabled"></a-input> <a-input v-model:value="formData.licenseNo" placeholder="请输入许可证编号" :disabled="disabled"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col> -->
<a-col :span="12"> <!-- <a-col :span="12">
<a-form-item label="审批人" v-bind="validateInfos.auditManid"> <a-form-item label="审批人" v-bind="validateInfos.auditManid">
<a-input v-model:value="formData.auditManid" placeholder="请输入审批人" :disabled="disabled"></a-input> <a-input v-model:value="formData.auditManid" placeholder="请输入审批人" :disabled="disabled"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col> -->
<a-col :span="12"> <!-- <a-col :span="12">
<a-form-item label="审批时间" v-bind="validateInfos.auditDate"> <a-form-item label="审批时间" v-bind="validateInfos.auditDate">
<a-date-picker placeholder="请选择审批时间" v-model:value="formData.auditDate" showTime <a-date-picker
value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" :disabled="disabled" /> placeholder="请选择审批时间"
v-model:value="formData.auditDate"
showTime
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
:disabled="disabled"
/>
</a-form-item> </a-form-item>
</a-col> </a-col> -->
<a-col :span="12"> <a-col :span="12">
<a-form-item label="备注" v-bind="validateInfos.remark"> <a-form-item label="备注" v-bind="validateInfos.remark">
<a-input v-model:value="formData.remark" placeholder="请输入备注" :disabled="disabled"></a-input> <a-input v-model:value="formData.remark" placeholder="请输入备注" :disabled="disabled"></a-input>
@ -67,6 +104,135 @@ import { saveOrUpdate } from '../MsIotImportLicense.api';
import { Form } from 'ant-design-vue'; import { Form } from 'ant-design-vue';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
//
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
// id
const sceneId = userStore.userInfo?.sceneId;
//
const sceneList: any = [];
//
const areaList: any = [];
//
const stationList: any = [];
//
const newDeviceList: any = [];
//
function getCurrentScene() {
return defHttp.get(
{ url: '/military/msMapScene/list', params: { sceneId: sceneId + '*', pageNo: 1, pageSize: 9999 } },
{ isTransformResponse: false }
);
}
//
function getCurrentSceneArea() {
return defHttp.get({ url: '/military/msMapLine/list', params: { pageNo: 1, pageSize: 9999 } }, { isTransformResponse: false });
}
//
function getCurrentAreaStation() {
return defHttp.get({ url: '/military/camera/site/list', params: { pageNo: 1, pageSize: 9999 } }, { isTransformResponse: false });
}
//
function getCurrentStationDevice() {
return defHttp.get({ url: '/military/dtDeviceInfo/list', params: { isAudit: 0, pageNo: 1, pageSize: 9999 } }, { isTransformResponse: false });
}
//
const nodeTree: any = ref([]);
//
const deviceCode: any = ref('');
//
const devicePosition: any = ref('');
//
function handleChange(value, label, extra) {
if (value) {
defHttp
.get({ url: '/military/dtDeviceInfo/queryById', params: { id: value, pageNo: 1, pageSize: 9999 } }, { isTransformResponse: false })
.then((res) => {
let deviceData = res.result;
deviceCode.value = deviceData.deviceCode;
devicePosition.value = deviceData.devicePosition;
formData.deviceName = deviceData.deviceName;
});
} else {
deviceCode.value = '';
devicePosition.value = '';
}
}
onMounted(() => {
//
getCurrentScene().then((res) => {
sceneList.value = res.result.records;
getCurrentSceneArea().then((res1) => {
areaList.value = res1.result.records;
getCurrentAreaStation().then((res2) => {
stationList.value = res2.result.records;
getCurrentStationDevice().then((res3) => {
newDeviceList.value = res3.result.records;
//
const tree: any = [];
//
sceneList.value.forEach((row) => {
const node = { title: row.sceneName, value: row.sceneId, children: [] };
tree.push(node);
});
//
areaList.value.forEach((row) => {
const parentNode = tree.find((node) => node.value === row.sceneId);
if (parentNode) {
const node = { title: row.name, value: row.id, children: [] };
parentNode.children.push(node);
}
});
//
stationList.value.forEach((row) => {
const parentNodes = tree.map((node) => node.children).flat();
const parentNode = parentNodes.find((node) => node.value === row.lineId);
if (parentNode) {
const node = { title: row.sitename, value: row.id, children: [] };
parentNode.children.push(node);
}
});
//
newDeviceList.value.forEach((row) => {
//
const parentNodes = tree.flatMap((node) => node.children).flatMap((node) => node.children);
const parentNode = parentNodes.find((node) => node.value === row.deviceOwnerId);
if (parentNode) {
const node = { title: row.deviceName, value: row.id, children: null };
parentNode.children.push(node);
}
});
// ant tree-select
nodeTree.value = handleCameraTree(tree);
});
});
});
});
});
//
function handleCameraTree(data, index = undefined) {
let arr: any = [];
for (let i = 0; i < data.length; i++) {
let obj: any = {};
let item = data[i];
obj.title = item.title;
obj.value = obj.key = item.value;
obj.disabled = item.children?.length >= 0 ? true : false;
if (item.children && item.children.length > 0) {
obj.children = [];
let indexValue: any = index ? index + '-' + (i + 1) : i + 1;
obj.children = handleCameraTree(item.children, indexValue);
}
arr.push(obj);
}
return arr;
}
const props = defineProps({ const props = defineProps({
formDisabled: { type: Boolean, default: false }, formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => {} }, formData: { type: Object, default: () => {} },
@ -83,7 +249,7 @@ const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']); const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({ const formData = reactive<Record<string, any>>({
id: '', id: '',
deviceId: '', deviceId: undefined,
deviceName: '', deviceName: '',
deviceType: undefined, deviceType: undefined,
licenseNo: '', licenseNo: '',
@ -99,14 +265,14 @@ const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false); const confirmLoading = ref<boolean>(false);
// //
const validatorRules = { const validatorRules = {
deviceId: [{ required: true, message: '请输入设备Id!' },], deviceId: [{ required: true, message: '请选择申请设备!', trigger: 'blur' }],
deviceName: [{ required: true, message: '请输入设备名称!' },], // deviceName: [{ required: true, message: '!' }],
deviceType: [{ required: true, message: '请选择设备类型!' },], // deviceType: [{ required: true, message: '!' }],
licenseNo: [{ required: true, message: '请输入许可证编号!' },], // licenseNo: [{ required: true, message: '!' }],
importDate: [{ required: true, message: '请输入入网时间!' },], // importDate: [{ required: true, message: '!' }],
status: [{ required: true, message: '请选择状态!' }], // status: [{ required: true, message: '' }],
auditManid: [{ required: true, message: '请输入审批人!' },], // auditManid: [{ required: true, message: '!' }],
auditDate: [{ required: true, message: '请输入审批时间!' },], // auditDate: [{ required: true, message: '!' }],
}; };
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true }); const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });
@ -126,20 +292,24 @@ const supplementDisable = computed(() => {
return props.supplement; return props.supplement;
}); });
watch(() => formData.status, (val) => { watch(
() => formData.status,
(val) => {
if (val == 2) { if (val == 2) {
formData.licenseNo = null formData.licenseNo = null;
} else if (val == 1) {
formData.licenseNo = new Date().getTime() + Math.floor(Math.random() * 100); //
} }
else if (val == 1) {
formData.licenseNo = new Date().getTime() + Math.floor(Math.random() * 100) //
} }
}) );
/** /**
* 新增 * 新增
*/ */
function add() { function add() {
edit({}); edit({
status: 0,
});
} }
/** /**
@ -150,9 +320,27 @@ function edit(record) {
resetFields(); resetFields();
// //
Object.assign(formData, record); Object.assign(formData, record);
// formData.licenseNo = new Date().getTime() + Math.floor(Math.random() * 100) // formData.auditDate = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'); //
formData.auditDate = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') // //
// formData.status = 1 // if (formData.id) {
//
if (formData.deviceId) {
defHttp
.get(
{ url: '/military/dtDeviceInfo/queryById', params: { id: formData.deviceId, pageNo: 1, pageSize: 9999 } },
{ isTransformResponse: false }
)
.then((res) => {
let deviceData = res.result;
deviceCode.value = deviceData.deviceCode;
devicePosition.value = deviceData.devicePosition;
formData.deviceName = deviceData.deviceName;
});
} else {
deviceCode.value = '';
devicePosition.value = '';
}
}
}); });
} }
@ -194,7 +382,6 @@ async function submitForm() {
}); });
} }
defineExpose({ defineExpose({
add, add,
edit, edit,

13
src/views/military/modules/equipmentManage/licenseManage/components/MsIotImportLicenseModal.vue

@ -1,12 +1,21 @@
<template> <template>
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭"> <a-modal
:title="title"
:width="width"
:visible="visible"
@ok="handleOk"
:okButtonProps="{ class: { 'jee-hidden': disableSubmit } }"
@cancel="handleCancel"
cancelText="关闭"
destroyOnClose
>
<MsIotImportLicenseForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></MsIotImportLicenseForm> <MsIotImportLicenseForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></MsIotImportLicenseForm>
</a-modal> </a-modal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, nextTick } from 'vue'; import { ref, nextTick } from 'vue';
import MsIotImportLicenseForm from './MsIotImportLicenseForm.vue' import MsIotImportLicenseForm from './MsIotImportLicenseForm.vue';
const title = ref<string>(''); const title = ref<string>('');
const width = ref<number>(1080); const width = ref<number>(1080);

Loading…
Cancel
Save