This commit is contained in:
1378012178@qq.com 2025-07-22 09:46:20 +08:00
commit 405fe93f30
30 changed files with 888 additions and 54 deletions

View File

@ -20,7 +20,7 @@ enum Api {
}
/**
*
*
* @param params
*/
export const getNuList = (params) => {

View File

@ -65,7 +65,7 @@
//
modalTitle: {
type: String,
default: '护理单元选择',
default: '区域选择',
},
},
emits: ['register', 'getSelectResult'],
@ -112,7 +112,7 @@
//update-end-author:liusq date:2023-10-30 for: [issues/5514]
schemas: [
{
label: '护理单元名称',
label: '区域名称',
field: 'nuName',
component: 'JInput',
colProps: { span: 10 },
@ -122,13 +122,13 @@
//
const columns = [
{
title: '护理单元编码',
title: '区域编码',
dataIndex: 'nuId',
width: 180,
align: 'left',
},
{
title: '护理单元名称',
title: '区域名称',
dataIndex: 'nuName',
// width: 180,
},
@ -144,7 +144,7 @@
rowKey: 'nuId',
columns: [
{
title: '护理单元名称',
title: '区域名称',
dataIndex: 'nuName',
width: 40,
},

View File

@ -1,5 +1,5 @@
<template>
<Header :class="getHeaderClass" style="background-image: url('../resource/img/bj.png');">
<Header :class="getHeaderClass" style="background-image: url('../resource/img/bj.png');background-repeat: no-repeat;background-size: 100% auto;">
<!-- left start -->
<div :class="`${prefixCls}-left`">
<!-- logo -->

View File

@ -4,7 +4,7 @@
<!-- <LayoutHeader fixed v-if="getShowFullHeaderRef" /> -->
<Layout :class="[layoutClass]">
<LayoutSideBar v-if="getShowSidebar || getIsMobile" />
<Layout :class="`${prefixCls}-main`" style="background-image: url('../resource/img/bj.png');">
<Layout :class="`${prefixCls}-main`" >
<LayoutMultipleHeader />
<LayoutContent />
<LayoutFooter />

View File

@ -7,6 +7,7 @@ enum Api {
edit = '/nuBaseInfo/nuBaseInfo/edit',
importExcel = '/nuBaseInfo/nuBaseInfo/importExcel',
exportXls = '/nuBaseInfo/nuBaseInfo/exportXls',
qyList = '/nuBaseInfo/nuBaseInfo/qyList',
}
/**
@ -25,6 +26,7 @@ export const getImportUrl = Api.importExcel;
* @param params
*/
export const list = (params) => defHttp.get({ url: Api.list, params });
export const qyList = (params) => defHttp.get({ url: Api.qyList, params });
/**
*

View File

@ -6,12 +6,17 @@ import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '护理单元名称',
title: '设备编码',
align: "center",
dataIndex: 'deviceMac'
},
{
title: '区域名称',
align: "center",
dataIndex: 'nuName'
},
{
title: '护理单元编码',
title: '区域编码',
align: "center",
dataIndex: 'nuId'
},
@ -21,15 +26,15 @@ export const columns: BasicColumn[] = [
dataIndex: 'areaFlag_dictText'
},
{
title: '使用状态',
title: '区域状态',
align: "center",
dataIndex: 'status_dictText'
dataIndex: 'status_dictText',
},
];
// 高级查询数据
export const superQuerySchema = {
nuName: {title: '护理单元名称',order: 0,view: 'text', type: 'string',},
nuName: {title: '区域名称',order: 0,view: 'text', type: 'string',},
areaFlag: {title: '区域标签',order: 1,view: 'list', type: 'string',dictCode: 'nu_type',},
status: {title: '使用状态',order: 2,view: 'list', type: 'string',dictCode: 'nu_status',},
};

View File

@ -6,8 +6,8 @@
<a-row :gutter="24">
<a-col :lg="6">
<a-form-item name="nuName">
<template #label><span title="护理单元名称">护理单元名称</span></template>
<j-input placeholder="请输入护理单元名称" v-model:value="queryParam.nuName" allow-clear ></j-input>
<template #label><span title="区域名称">区域名称</span></template>
<j-input placeholder="请输入区域名称" v-model:value="queryParam.nuName" allow-clear ></j-input>
</a-form-item>
</a-col>
<a-col :lg="6">
@ -70,7 +70,7 @@
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '护理单元',
title: '区域',
api: list,
columns,
canResize:false,
@ -85,7 +85,7 @@
},
},
exportConfig: {
name: "护理单元",
name: "区域",
url: getExportUrl,
params: queryParam,
},

View File

@ -0,0 +1,281 @@
<template>
<div class="p-2">
<!--查询区域-->
<div class="jeecg-basic-table-form-container">
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="6">
<a-form-item name="nuName">
<template #label><span title="区域信息名称">区域信息名称</span></template>
<j-input placeholder="请输入区域信息名称" v-model:value="queryParam.nuName" allow-clear ></j-input>
</a-form-item>
</a-col>
<a-col :lg="6">
<a-form-item name="areaFlag">
<template #label><span title="区域标签">区域标签</span></template>
<j-dict-select-tag v-model:value="queryParam.areaFlag" dictCode="nu_type" placeholder="请选择区域标签" allow-clear @change="changeAreaFlag" />
</a-form-item>
</a-col>
<a-col :lg="6">
<a-form-item name="status">
<template #label><span title="区域状态">区域状态</span></template>
<a-select placeholder="请选择区域状态" v-model:value="queryParam.status" allow-clear v-if="queryParam.areaFlag == '1'">
<a-select-option value="0">空闲</a-select-option>
<a-select-option value="1">入住</a-select-option>
<a-select-option value="2">外出</a-select-option>
<a-select-option value="3">预警</a-select-option>
<a-select-option value="5">停用</a-select-option>
</a-select>
<a-select placeholder="请先选择区域标签" v-model:value="queryParam.status" allow-clear v-else-if="!queryParam.areaFlag">
<a-select-option value="">请先选择区域标签</a-select-option>
</a-select>
<a-select placeholder="请选择区域状态" v-model:value="queryParam.status" allow-clear v-else>
<a-select-option value="3">预警</a-select-option>
<a-select-option value="4">启用</a-select-option>
<a-select-option value="5">停用</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
<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-col>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!--引用表格-->
<BasicTable @register="registerTable">
<!--插槽:table标题-->
<template #tableTitle>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
<template v-slot:bodyCell="{ column, record, index, text }">
<template v-if="column.key === 'status_dictText'">
<a-tag v-if="record.status == '9'"
:color="'volcano'"
>
{{ text }}
</a-tag>
<span v-else>{{text}}</span>
</template>
<template v-else-if="column.key === 'nuName'">
<a @click="handleWlsb(record)">{{text}}</a>
</template>
</template>
</BasicTable>
<!-- 表单区域 -->
<NuBaseInfoModal ref="registerModal" @success="handleSuccess"></NuBaseInfoModal>
<BaseWlsbListModal ref="wlsbModal" ></BaseWlsbListModal>
<CameraPreviewModal ref="previewModal"></CameraPreviewModal>
</div>
</template>
<script lang="ts" name="nuBaseInfo-nuBaseInfo" setup>
import { ref, reactive } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, superQuerySchema } from './NuBaseInfo.data';
import { qyList, saveOrUpdate } from './NuBaseInfo.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import NuBaseInfoModal from './components/NuBaseInfoModal.vue'
import BaseWlsbListModal from './components/BaseWlsbListModal.vue'
import CameraPreviewModal from '/@/views/iot/tplink/camera/components/CameraPreviewModal.vue'
import { useUserStore } from '/@/store/modules/user';
import { JInput } from '/@/components/Form';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import JSelectMultiple from '/@/components/Form/src/jeecg/components/JSelectMultiple.vue';
import { useMessage } from '/@/hooks/web/useMessage';
const { createMessage } = useMessage();
const formRef = ref();
const previewModal = ref();
const wlsbModal = ref();
const queryParam = reactive<any>({});
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref();
const userStore = useUserStore();
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '区域信息',
api: qyList,
columns,
canResize:false,
useSearchForm: false,
showIndexColumn: true,
actionColumn: {
width: 160,
fixed: 'right',
},
beforeFetch: async (params) => {
params.column = 'status',params.order = 'desc'
return Object.assign(params, queryParam);
},
},
});
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
const labelCol = reactive({
xs:24,
sm:6,
xl:6,
xxl:6
});
const wrapperCol = reactive({
xs: 24,
sm: 18,
});
//
function handleWlsb(record) {
wlsbModal.value.disableSubmit = true;
wlsbModal.value.edit(record);
}
//
function changeAreaFlag(value) {
queryParam.status = '';
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
registerModal.value.disableSubmit = false;
registerModal.value.edit(record);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 启用
*/
async function handleQiyong(record) {
record.status = 4;
if(record.areaFlag=='1'){
record.status = 0;
}
await saveOrUpdate(record, true).then((res) => {
if (res.success) {
createMessage.success(res.message);
} else {
createMessage.warning(res.message);
}
reload();
});
}
/**
* 停用
*/
async function handleTingyong(record) {
record.status = 5;
await saveOrUpdate(record, true).then((res) => {
if (res.success) {
createMessage.success(res.message);
} else {
createMessage.warning(res.message);
}
reload();
});
}
/**
* 预览
*/
function handlePreview(record: Recordable) {
previewModal.value.disableSubmit = true;
previewModal.value.edit(record);
}
/**
* 操作栏
*/
function getTableAction(record) {
return [
{
label: '启用',
onClick: handleQiyong.bind(null, record),
ifShow: record.status == 5,
auth: 'nuBaseInfo:nu_base_info:edit'
},
{
label: '停用',
onClick: handleTingyong.bind(null, record),
ifShow: record.status != 5,
auth: 'nuBaseInfo:nu_base_info:edit'
},
{
label: '更名',
onClick: handleEdit.bind(null, record),
auth: 'nuBaseInfo:nu_base_info:edit'
},
{
label: '预览',
onClick: handlePreview.bind(null, record),
ifShow: record.deviceMac != null,
},
];
}
/**
* 查询
*/
function searchQuery() {
reload();
}
/**
* 重置
*/
function searchReset() {
formRef.value.resetFields();
selectedRowKeys.value = [];
//
reload();
}
</script>
<style lang="less" scoped>
.jeecg-basic-table-form-container {
padding: 0;
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
.query-group-cust{
min-width: 100px !important;
}
.query-group-split-cust{
width: 30px;
display: inline-block;
text-align: center
}
.ant-form-item:not(.ant-form-item-with-help){
margin-bottom: 16px;
height: 32px;
}
:deep(.ant-picker),:deep(.ant-input-number){
width: 100%;
}
}
</style>

View File

@ -0,0 +1,480 @@
<template>
<div class="p-2">
<a-row>
<a-col v-for="(item,index) in zndbList.records" :key="index" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6" style="padding: 8px;">
<a-card style="width: 100%;border-radius: 8px;" :headStyle="{ height: '60px', padding: '0 24px' }" :bodyStyle="{ padding: '24px 24px 4px 24px' }">
<template #title>
<a-row style="font-weight: normal;">
<a-col :span="18" style="font-size: 14px;">
<div>SN<span style="font-weight: bold;">{{item.address}}</span></div>
<div style="font-size: 12px;">抄表时间{{item.readTime?item.readTime:'未抄表'}}</div>
</a-col>
<a-col :span="6" style="text-align: center;padding-top: 4px;">
<div :class="item.relayState=='1'?'zxClass':'lxClass'">{{item.relayState=='1'?'在线':'离线'}}</div>
</a-col>
</a-row>
</template>
<a-row>
<a-col :span="24" style="margin-top: -10px;"><a-tag color="red">智能电表</a-tag></a-col>
<a-col :span="12" >{{item.nuId_dictText?item.nuId_dictText:'未配置'}}</a-col>
<a-col :span="12" style="text-align: right;">
<span style="text-align: right;background:#f6f6f6;padding: 2px 10px;border-radius:5px;">NUID: {{item.nuId?item.nuId:'未配置'}}</span>
</a-col>
<a-col :span="14" style="text-align: right;font-size: 44px;font-weight: bold;margin-top:18px;">
<span>{{item.eleValue?item.eleValue:'0.00'}}</span>
</a-col>
<a-col :span="8" style="padding: 12px 0 0 5px;margin-top:18px;">
<div style="font-size: 12px;margin: 5px 0 -5px 2px;padding:2px;">KWH</div>
<div style="margin-top:-3px;"><span style="background:#eeeeee;padding: 2px;border-radius:5px;font-size:11px;">用电量</span></div>
</a-col>
</a-row>
<a-divider />
<p style="text-align:center;">
<span style="display:inline-block;cursor: pointer;" @click="handleRead(item)">
<span class="tbClass"><img src="../../../../assets/iot/a1.png" style="width:20px;" /></span><br/>
<span class="antTitle">抄表</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleControlLz(item)">
<span class="tbClass"><img src="../../../../assets/iot/a5.png" style="width:20px;" /></span><br/>
<span class="antTitle">拉闸</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleControlHz(item)">
<span class="tbClass"><img src="../../../../assets/iot/a2.png" style="width:20px;" /></span><br/>
<span class="antTitle">合闸</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleReset(item)">
<span class="tbClass"><img src="../../../../assets/iot/a3.png" style="width:20px;" /></span><br/>
<span class="antTitle">清零</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="showApiLog(item)">
<span class="tbClass"><img src="../../../../assets/iot/a4.png" style="width:20px;" /></span><br/>
<span class="antTitle">日志</span>
</span>
</p>
</a-card>
</a-col>
<a-col v-for="(item,index) in znsbList.records" :key="index" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6" style="padding: 8px;">
<a-card style="width: 100%;border-radius: 8px;" :headStyle="{ height: '60px', padding: '0 24px' }" :bodyStyle="{ padding: '24px 24px 4px 24px' }">
<template #title>
<a-row style="font-weight: normal;">
<a-col :span="18" style="font-size: 14px;">
<div>SN<span style="font-weight: bold;">{{item.address}}</span></div>
<div style="font-size: 12px;">抄表时间{{item.readTime?item.readTime:'未抄表'}}</div>
</a-col>
<a-col :span="6" style="text-align: center;padding-top: 4px;">
<div :class="item.relayState=='1'?'zxClass':'lxClass'">{{item.relayState=='1'?'在线':'离线'}}</div>
</a-col>
</a-row>
</template>
<a-row>
<a-col :span="24" style="margin-top: -10px;"><a-tag color="blue">智能水表</a-tag></a-col>
<a-col :span="12" >{{item.nuId_dictText?item.nuId_dictText:'未配置'}}</a-col>
<a-col :span="12" style="text-align: right;">
<span style="text-align: right;background:#f6f6f6;padding: 2px 10px;border-radius:5px;">NUID: {{item.nuId?item.nuId:'未配置'}}</span>
</a-col>
<a-col :span="14" style="text-align: right;font-size: 44px;font-weight: bold;margin-top:18px;">
<span>{{item.eleValue?item.eleValue:'0.00'}}</span>
</a-col>
<a-col :span="8" style="padding: 12px 0 0 5px;margin-top:18px;">
<div style="font-size: 12px;margin: 8px 0 -5px 2px;"></div>
<div style="margin-top:-3px;"><span style="background:#eeeeee;padding: 2px;border-radius:5px;font-size:11px;">用水量</span></div>
</a-col>
</a-row>
<a-divider />
<p style="text-align:center;">
<span style="display:inline-block;cursor: pointer;" @click="handleSbRead(item)">
<span class="tbClass"><img src="../../../../assets/iot/a1.png" style="width:20px;" /></span><br/>
<span class="antTitle">抄表</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleSbControlLz(item)">
<span class="tbClass"><img src="../../../../assets/iot/a10.png" style="width:20px;" /></span><br/>
<span class="antTitle">开阀</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleSbControlHz(item)">
<span class="tbClass"><img src="../../../../assets/iot/a11.png" style="width:20px;" /></span><br/>
<span class="antTitle">关阀</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleSbReset(item)">
<span class="tbClass"><img src="../../../../assets/iot/a3.png" style="width:20px;" /></span><br/>
<span class="antTitle">清零</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="showApiWaterLog(item)">
<span class="tbClass"><img src="../../../../assets/iot/a4.png" style="width:20px;" /></span><br/>
<span class="antTitle">日志</span>
</span>
</p>
</a-card>
</a-col>
<a-col v-for="(item,index) in wsdjList.records" :key="index" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6" style="padding: 8px;">
<a-card style="width: 100%;border-radius: 8px;min-height:280px;" :headStyle="{ height: '60px', padding: '0 24px' }" :bodyStyle="{ padding: '24px 24px 4px 24px' }">
<template #title>
<a-row style="font-weight: normal;">
<a-col :span="18" style="font-size: 14px;">
<div>SN<span style="font-weight: bold;">{{item.sn}}</span></div>
<div style="font-size: 12px;">抄表时间{{item.reportingTime?item.reportingTime:'未抄表'}}</div>
</a-col>
<a-col :span="6" style="text-align: center;padding-top: 4px;">
<div :class="item.relayState=='1'?'zxClass':'lxClass'">{{item.status=='1'?'在线':'离线'}}</div>
</a-col>
</a-row>
</template>
<a-row>
<a-col :span="24" style="margin-top: -10px;"><a-tag color="green">温湿度计</a-tag></a-col>
<a-col :span="12" >{{item.nuId_dictText?item.nuId_dictText:'未配置'}}</a-col>
<a-col :span="12" style="text-align: right;">
<span style="text-align: right;background:#f6f6f6;padding: 2px 10px;border-radius:5px;">NUID: {{item.nuId?item.nuId:'未配置'}}</span>
</a-col>
<a-col :span="24" style="padding: 12px 0 0 5px;margin-top:28px;">
<a-row>
<a-col :span="11" style="text-align: center;">
<span><img src="../../../../assets/iot/a8.png" style="width:25px;margin-top: -15px;" /></span>
<span style="font-size: 30px;font-weight:700;">{{item.temperature?item.temperature:'-'}}</span>
<span style="font-size: 16px;"></span>
</a-col>
<a-col :span="2" style="text-align: center;">
<a-divider type="vertical" style="height: 40px;"/>
</a-col>
<a-col :span="11" style="text-align: center;">
<span style="margin-top:0px;"><img src="../../../../assets/iot/a9.png" style="width:25px;margin-top: -15px;" /></span>
<span style="font-size: 30px;font-weight:700;margin-left: 6px;">{{item.humidity?item.humidity:'-'}}</span>
<span style="font-size: 16px;">%</span>
</a-col>
</a-row>
</a-col>
</a-row>
<a-divider />
<p style="text-align:center;">
<span style="display:inline-block;cursor: pointer;" @click="handleWsdjRead(item)">
<span class="tbClass"><img src="../../../../assets/iot/a7.png" style="width:20px;" /></span><br/>
<span class="antTitle">抄表</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="handleEdit(item)">
<span class="tbClass"><img src="../../../../assets/iot/a6.png" style="width:20px;" /></span><br/>
<span class="antTitle">配置</span>
</span>
<span style="display:inline-block;margin-left:10%;cursor: pointer;" @click="showWsdjApiLog(item)">
<span class="tbClass"><img src="../../../../assets/iot/a4.png" style="width:20px;" /></span><br/>
<span class="antTitle">日志</span>
</span>
</p>
</a-card>
</a-col>
<a-col v-if="zndbList?.records.length==0 && znsbList?.records.length==0 && wsdjList?.records.length == 0" span="24">
<div style="margin: 30px auto;">
<a-empty />
</div>
</a-col>
</a-row>
<ApiLogModal ref="apiLogModal"></ApiLogModal>
<ApiLogWaterModal ref="apiLogWaterModal"></ApiLogWaterModal>
<ApiLogAlarmModal ref="apiLogAlarmModal"></ApiLogAlarmModal>
<DeviceInfoDrawer @register="registerDrawer" @success="handleSuccess" />
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, h } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import {eleReset, eleControl, eleRead } from '/@/views/iot/tq/electricity/electricity.api';
import {Modal} from "ant-design-vue";
import ApiLogModal from "@/views/iot/tq/electricity/apilog/ApiLogModal.vue";
import ApiLogWaterModal from "@/views/iot/tq/electricity/apilog/WaterApiLogModal.vue";
import ApiLogAlarmModal from '/@/views/iot/yiweilian/components/ApiLogAlarmModal.vue'
import DeviceInfoDrawer from "/@/views/iot/yiweilian/components/DeviceInfoDrawer.vue";
import {useDrawer} from "@/components/Drawer";
import {updateDeviceRealTime} from '/@/views/iot/yiweilian/humid.api';
import {eleSbReset, eleSbControl, eleSbRead } from "/@/views/iot/tq/water/water.api";
const formRef = ref();
const apiLogModal = ref();
const apiLogWaterModal = ref();
const apiLogAlarmModal = ref();
const zndbList = ref<any>({records: []});//
const znsbList = ref<any>({records: []});//
const wsdjList = ref<any>({records: []});//湿
const anyInfo = ref<any>({});//
//drawer
const [registerDrawer, { openDrawer }] = useDrawer();
function edit(record) {
anyInfo.value = record;
getZndb(record);//
getZnsb(record);//
getWsdj(record);//湿
}
//
function getZndb(record){
var queryParam = {pageSize:-1,nuId:record.nuId}
defHttp.get({url: '/iot/tq/electricityMeter/list',params:queryParam}).then(res => {
console.log("🚀 ~ defHttp.get ~ res:", res)
zndbList.value = res;
console.log("🚀 ~ defHttp.get ~ zndbList:", zndbList)
});
}
//
function getZnsb(record){
var queryParam = {pageSize:-1,nuId:record.nuId}
defHttp.get({url: '/iot/tq/waterMeter/list',params:queryParam}).then(res => {
console.log("🚀 ~ defHttp.get ~ res:", res)
znsbList.value = res;
});
}
//湿
function getWsdj(record){
var queryParam = {pageSize:-1,nuId:record.nuId}
defHttp.get({url: '/iot/yiweilian/humidDevice/list',params:queryParam}).then(res => {
console.log("🚀 ~ defHttp.get ~ res:", res)
wsdjList.value = res;
});
}
//
async function handleRead(record) {
const params = {
'cid' : record.cid,
'address' : record.address,
};
await eleRead(params);
setTimeout(() => {
getZndb(anyInfo);
}, 4000);
}
//
async function handleControlLz(record) {
if(record.relayState == '0'){
Modal.info({
title: '拉闸',
content: h('div', {}, [
h('p', '此电表已拉闸!'),
]),
onOk() {},
});
return;
}
const params = {
'cid' : record.cid,
'address' : record.address,
'type' : '10',
};
await eleControl(params);
setTimeout(() => {
getZndb(anyInfo);
}, 4000);
}
//
async function handleControlHz(record) {
if(record.relayState == '1'){
Modal.info({
title: '合闸',
content: h('div', {}, [
h('p', '此电表已合闸!'),
]),
onOk() {},
});
return;
}
const params = {
'cid' : record.cid,
'address' : record.address,
'type' : '11',
};
await eleControl(params);
setTimeout(() => {
getZndb(anyInfo);
}, 4000);
}
//
async function handleReset(record) {
const params = {
'cid' : record.cid,
'address' : record.address,
};
await eleReset(params);
setTimeout(() => {
getZndb(anyInfo);
}, 4000);
}
/**
* 查看电表api日志
*/
function showApiLog(record){
console.log(record);
apiLogModal.value.disableSubmit = true;
apiLogModal.value.showApiLog(record);
}
//
async function handleSbRead(record) {
const params = {
'cid' : record.cid,
'address' : record.address,
};
await eleSbRead(params);
setTimeout(() => {
getZnsb(anyInfo);
}, 4000);
}
//
async function handleSbControlLz(record) {
if(record.relayState == '0'){
Modal.info({
title: '开阀',
content: h('div', {}, [
h('p', '此水表已开阀!'),
]),
onOk() {},
});
return;
}
const params = {
'cid' : record.cid,
'address' : record.address,
'type' : '43',
};
await eleSbControl(params);
setTimeout(() => {
getZnsb(anyInfo);
}, 4000);
}
//
async function handleSbControlHz(record) {
if(record.relayState == '1'){
Modal.info({
title: '关阀',
content: h('div', {}, [
h('p', '此水表已关阀!'),
]),
onOk() {},
});
return;
}
const params = {
'cid' : record.cid,
'address' : record.address,
'type' : '53',
};
await eleSbControl(params);
setTimeout(() => {
getZnsb(anyInfo);
}, 4000);
}
//
async function handleSbReset(record) {
const params = {
'cid' : record.cid,
'address' : record.address,
};
await eleSbReset(params);
setTimeout(() => {
getZnsb(anyInfo);
}, 4000);
}
/**
* 查看水表api日志
*/
function showApiWaterLog(record){
console.log(record);
apiLogWaterModal.value.disableSubmit = true;
apiLogWaterModal.value.showApiLog(record);
}
// 湿
async function handleWsdjRead(record) {
const params = {
'sn' : record.sn,
};
await updateDeviceRealTime(params);
setTimeout(() => {
getWsdj(anyInfo);//湿
}, 4000);
}
// 湿
async function handleEdit(record) {
record["isUpdate"] = true;
console.log(record);
openDrawer(true, {
record,
isUpdate: true,
showFooter: true,
tenantSaas: false,
});
}
/**
* 温湿度计查看api日志
*/
function showWsdjApiLog(record){
apiLogAlarmModal.value.disableSubmit = true;
apiLogAlarmModal.value.showLogAlarm(record);
}
defineExpose({
edit,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px;
}
.cardTitle{
background: #1ea0fa;
width: 100%;
margin: -28px -24px;
padding-top: 15px;
border-radius: 5px 5px 0px 0px;
color: white;
height: 55px;
display: block;
position: absolute;
}
.zxClass{
font-size:14px;
background: linear-gradient(to right, #1ea0fa, #017de9);
border-radius: 8px;
height: 35px;
color: white;
line-height: 35px;
}
.lxClass{
font-size:14px;
background: linear-gradient(to right, #cccccc, #cccccc);
border-radius: 8px;
height: 35px;
color: white;
line-height: 35px;
}
.tbClass{
background: #f6f6f6;
padding: 8px;
border-radius: 5px;
}
.antTitle{
margin-top: 10px;
display: block;
font-size: 12px;
}
</style>

View File

@ -0,0 +1,60 @@
<template>
<j-modal :title="title" :width="width" :maxHeight="`200px`" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<BaseWlsbListForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></BaseWlsbListForm>
</j-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import BaseWlsbListForm from './BaseWlsbListForm.vue'
import JModal from '/@/components/Modal/src/JModal/JModal.vue';
const title = ref<string>('');
const width = ref<string>('80%');
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 编辑
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
edit,
disableSubmit,
});
</script>
<style lang="less">
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>
<style lang="less" scoped></style>

View File

@ -5,18 +5,18 @@
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"
name="NuBaseInfoForm">
<a-row>
<a-col :span="24">
<a-form-item label="护理单元名称" v-bind="validateInfos.nuName" id="NuBaseInfoForm-nuName" name="nuName">
<a-input v-model:value="formData.nuName" placeholder="请输入护理单元名称" allow-clear></a-input>
<a-col :span="24" style="margin-top: 60px;">
<a-form-item label="区域名称" v-bind="validateInfos.nuName" id="NuBaseInfoForm-nuName" name="nuName">
<a-input v-model:value="formData.nuName" placeholder="请输入区域名称" allow-clear></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="护理单元编码" v-bind="validateInfos.nuId" id="NuBaseInfoForm-nuId" name="nuId">
<a-col :span="24" hidden>
<a-form-item label="区域编码" v-bind="validateInfos.nuId" id="NuBaseInfoForm-nuId" name="nuId">
<a-input v-model:value="formData.nuId" placeholder="编码自动生成" allow-clear :disabled="true"
:readonly="formData.nuId"></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-col :span="24" hidden>
<a-form-item label="区域标签" v-bind="validateInfos.areaFlag" id="NuBaseInfoForm-areaFlag" name="areaFlag">
<j-dict-select-tag v-model:value="formData.areaFlag" dictCode="nu_type" :disabled="true"
placeholder="请选择区域标签ID" allow-clear />

View File

@ -6,7 +6,7 @@ import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '护理单元',
title: '区域',
align: "center",
dataIndex: 'nuId_dictText'
},
@ -140,7 +140,7 @@ export const columns: BasicColumn[] = [
// 高级查询数据
export const superQuerySchema = {
nuId: {title: '护理单元',order: 0,view: 'list', type: 'string',dictCode: '',},
nuId: {title: '区域',order: 0,view: 'list', type: 'string',dictCode: '',},
customerName: {title: '姓名',order: 1,view: 'text', type: 'string',},
customerSex: {title: '性别',order: 2,view: 'text', type: 'string',},
customerAge: {title: '年龄',order: 3,view: 'list', type: 'string',dictCode: '',},

View File

@ -48,7 +48,7 @@
</span>
</div>
<div style="height: 130px">
<div class="center-lines">护理单元{{item.nuId_dictText }}</div>
<div class="center-lines">区域{{item.nuId_dictText }}</div>
<div class="center-lines">报销类型{{item.reimbType_dictText }}</div>
<div class="center-lines">医保类型{{item.medicalType_dictText }}</div>
<div class="center-lines">联系电话{{item.contactNumber }}</div>
@ -62,7 +62,7 @@
<template #overlay>
<a-menu>
<a-menu-item @click="handleEdit(item)">编辑</a-menu-item>
<a-menu-item @click="handleCheckNu(item)" v-if="item.currentState!='3'">更换护理单元</a-menu-item>
<a-menu-item @click="handleCheckNu(item)" v-if="item.currentState!='3'">更换区域</a-menu-item>
<a-menu-item @click="handleWaichu(item)" v-if="item.currentState=='1'">外出</a-menu-item>
<a-menu-item @click="handleFanhui(item)" v-if="item.currentState=='2'">返回</a-menu-item>
<a-menu-item @click="handleTuizhu(item)" v-if="item.currentState=='1' || item.currentState=='2'">退住</a-menu-item>

View File

@ -32,7 +32,7 @@
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '选择护理单元';
title.value = disableSubmit.value ? '详情' : '选择区域';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);

View File

@ -62,8 +62,8 @@
</a-col>
</a-col>
<a-col :span="24" hidden>
<a-form-item label="护理单元" v-bind="validateInfos.nuId" id="NuBizCustomerInfoForm-nuId" name="nuId">
<j-dict-select-tag v-model:value="formData.nuId" dictCode="" placeholder="请选择护理单元" allow-clear />
<a-form-item label="区域" v-bind="validateInfos.nuId" id="NuBizCustomerInfoForm-nuId" name="nuId">
<j-dict-select-tag v-model:value="formData.nuId" dictCode="" placeholder="请选择区域" allow-clear />
</a-form-item>
</a-col>

View File

@ -55,12 +55,12 @@ export const columns: BasicColumn[] = [
dataIndex: 'locationName'
},
{
title: '护理单元',
title: '区域',
align: "center",
dataIndex: 'nuId_dictText',
},
// {
// title: '护理单元',
// title: '区域',
// align: "center",
// dataIndex: 'nuName'
// },
@ -146,7 +146,7 @@ export const formSchema: FormSchema[] = [
dynamicDisabled: true
},
{
label: '护理单元',
label: '区域',
field: 'nuId',
component: 'JSelectNu',
componentProps: {

View File

@ -4,16 +4,16 @@
<div class="jeecg-basic-table-form-container">
<a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="6">
<!-- <a-col :lg="6">
<a-form-item name="address">
<template #label><span title="SN">SN</span></template>
<j-input placeholder="请输入SN" v-model:value="queryParam.address" allow-clear ></j-input>
</a-form-item>
</a-col>
</a-col> -->
<a-col :lg="6">
<a-form-item name="nuId">
<template #label><span title="护理单元">护理单元</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选护理单元" allow-clear />
<template #label><span title="区域">区域</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选区域" allow-clear />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">

View File

@ -44,7 +44,7 @@ import {ref, reactive, createVNode, h, onMounted, watch, unref} from 'vue';
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '护理单元-物联管理-录像信息',
title: '区域-物联管理-录像信息',
api: searchVideo,
columns: recordingColumns,
canResize: false,

View File

@ -55,7 +55,7 @@
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '护理单元-物联管理-录像计划',
title: '区域-物联管理-录像计划',
api: list,
columns,
rowKey : "ids",

View File

@ -43,7 +43,7 @@
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '护理单元-物联管理-机构信息',
title: '区域-物联管理-机构信息',
api: list,
columns,
canResize:false,

View File

@ -45,7 +45,7 @@
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '护理单元-物联管理-区域信息',
title: '区域-物联管理-区域信息',
api: list,
columns,
canResize:false,

View File

@ -9,7 +9,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'departName'
},
{
title: '护理单元',
title: '区域',
align: "center",
dataIndex: 'nuName'
},
@ -96,11 +96,11 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 6 },
},
{
label: '护理单元',
label: '区域',
field: 'deviceStatus',
component: 'JDictSelectTag',
componentProps: {
placeholder: '请选择护理单元',
placeholder: '请选择区域',
dictCode: 'nu_base_info,nu_name,id,del_flag = 0 order by nu_name asc',
},
colProps: { span: 6 },

View File

@ -12,8 +12,8 @@
</a-col>
<a-col :lg="6">
<a-form-item name="nuId">
<template #label><span title="护理单元">护理单元</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选护理单元" allow-clear />
<template #label><span title="区域">区域</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选区域" allow-clear />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">

View File

@ -12,8 +12,8 @@
</a-col>
<a-col :lg="6">
<a-form-item name="nuId">
<template #label><span title="护理单元">护理单元</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选护理单元" allow-clear />
<template #label><span title="区域">区域</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选区域" allow-clear />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">

View File

@ -20,18 +20,21 @@ export const list = (params) => defHttp.get({ url: Api.list, params });
* @param params
*/
export const eleReset = (params?) => defHttp.get({ url: Api.eleReset, params });
export const eleSbReset = (params?) => defHttp.get({ url: Api.eleReset, params });
/**
*
* @param params
*/
export const eleControl = (params?) => defHttp.get({ url: Api.eleControl, params });
export const eleSbControl = (params?) => defHttp.get({ url: Api.eleControl, params });
/**
*
* @param params
*/
export const eleRead = (params?) => defHttp.get({ url: Api.eleRead, params });
export const eleSbRead = (params?) => defHttp.get({ url: Api.eleRead, params });
/**
*

View File

@ -89,11 +89,11 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 6 },
},
{
label: '护理单元',
label: '区域',
field: 'deviceStatus',
component: 'JDictSelectTag',
componentProps: {
placeholder: '请选择护理单元',
placeholder: '请选择区域',
dictCode: 'nu_base_info,nu_name,id,del_flag = 0 order by nu_name asc',
},
colProps: { span: 6 },

View File

@ -12,8 +12,8 @@
</a-col>
<a-col :lg="6">
<a-form-item name="nuId">
<template #label><span title="护理单元">护理单元</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选护理单元" allow-clear />
<template #label><span title="区域">区域</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.nuId" :dictCode="`nu_base_info,nu_name,nu_id`" placeholder="请选区域" allow-clear />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">

View File

@ -105,7 +105,7 @@ export function useBasicFormSchema() {
rules: [
{
required: true,
message: '请填写护理单元长者入住应缴金额',
message: '请填写区域长者入住应缴金额',
},
],
},

View File

@ -109,6 +109,9 @@ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
actionColumn: {
width: 240,
},
beforeFetch: async (params) => {
return Object.assign(params, queryParam);
},
},
//update-begin---author:wangshuai ---date:20220616 for[issues/I5AMDD]/ export.url/import.url ------------
exportConfig: {

View File

@ -6,7 +6,7 @@ import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '护理单元名称',
title: '区域名称',
align: "center",
dataIndex: 'nuName'
},