Compare commits
5 Commits
45908dd5c1
...
4bbb5c5133
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4bbb5c5133 | ||
|
|
d294c3f07a | ||
|
|
fba16c75b9 | ||
|
|
e5cd75c845 | ||
|
|
be09e531b9 |
10
hx-ai-intelligent/src/api/deviceManage.ts
Normal file
10
hx-ai-intelligent/src/api/deviceManage.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
const BASE_URL = '/carbon-smart';
|
||||
export enum device {
|
||||
queryDeviceTree = `${BASE_URL}/deviceInfo/queryDeviceTree`,
|
||||
queryDevicePage = `${BASE_URL}/deviceInfo/queryDevicePage`,
|
||||
dropArea = `${BASE_URL}/deviceInfo/dropArea`,
|
||||
}
|
||||
|
||||
export enum group {
|
||||
queryDeviceGroupTree = `${BASE_URL}/deviceGroup/queryDeviceGroupTree`,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ export const appConfig = {
|
||||
projectType: 'web',
|
||||
baseApi: '/api',
|
||||
projectName: '济阳站_AI智能BAS系统',
|
||||
enablePermissions: true,
|
||||
enablePermissions: false,
|
||||
// themeColor: '#eee',
|
||||
siderPosition: 'left',
|
||||
baseHeader: '/parkingManage',
|
||||
@@ -92,6 +92,7 @@ export const appConfig = {
|
||||
permissionVos: 'permissionVos',
|
||||
});
|
||||
sessionStorage.setItem('ORGID', info.orgId);
|
||||
selectDefaultValue.value = info.orgId;
|
||||
return { data: { ...trD } };
|
||||
});
|
||||
},
|
||||
|
||||
@@ -7,8 +7,6 @@ import type { App, Directive, DirectiveBinding } from 'vue';
|
||||
import { authorizationService } from '/nerv-lib/saas/store/modules/authorization-service';
|
||||
|
||||
function isAuth(el: Element, binding: any) {
|
||||
console.log(el, binding);
|
||||
|
||||
const { checkPermission, checkAllPermission, checkPermissionRouter } = authorizationService();
|
||||
const { value, modifiers } = binding;
|
||||
|
||||
|
||||
4
hx-ai-intelligent/src/icon/deviceType.svg
Normal file
4
hx-ai-intelligent/src/icon/deviceType.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11.0960693359375" height="11.361328125" viewBox="0 0 11.0960693359375 11.361328125" fill="none">
|
||||
<path d="M5.97288 0.0889032L10.8515 3.28616C11.0042 3.38656 11.0961 3.55643 11.0961 3.73899L11.0961 10.8194C11.096 11.1182 10.8536 11.3604 10.5548 11.3604L0.541595 11.3604C0.242524 11.3606 1.90735e-06 11.1182 0 10.8191L0 3.74666C0 3.56014 0.0961657 3.38656 0.254683 3.28776L5.38954 0.0820341C5.56864 -0.0296883 5.79635 -0.02711 5.97288 0.0886391L5.97288 0.0889032ZM7.84865 7.26703L6.76599 7.26703C6.31761 7.26703 5.95412 7.63051 5.95412 8.07889L5.95412 9.18401C5.95412 9.63239 6.31761 9.99588 6.76599 9.99588L7.84838 9.99588C8.29677 9.99588 8.66025 9.63239 8.66025 9.18401L8.66025 8.07916C8.66025 7.63078 8.29677 7.2673 7.84838 7.2673L7.84865 7.26703ZM7.84865 3.71945L6.76599 3.71945C6.31761 3.71945 5.95412 4.08293 5.95412 4.53131L5.95412 5.63643C5.95412 6.08481 6.31761 6.4483 6.76599 6.4483L7.84838 6.4483C8.29677 6.4483 8.66025 6.08481 8.66025 5.63643L8.66025 4.53131C8.66025 4.08293 8.29677 3.71945 7.84838 3.71945L7.84865 3.71945Z" fill="#4388FB" >
|
||||
</path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -10,53 +10,27 @@ const organizationManage = {
|
||||
name: 'UserManage',
|
||||
meta: { title: '用户管理', hideChildren: true, icon: 'zuzhiguanli' },
|
||||
component: Base,
|
||||
redirect: { name: 'userManageIndex' },
|
||||
redirect: { name: 'UserManageIndex' },
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
name: 'userManageIndex',
|
||||
name: 'UserManageIndex',
|
||||
component: () => import('/@/view/organizationManage/usermanage/index.vue'),
|
||||
meta: {
|
||||
title: '用户管理',
|
||||
keepAlive: true,
|
||||
isCheck: false,
|
||||
operates: [
|
||||
{ title: '新增', code: 'userAdd' },
|
||||
{
|
||||
title: '导入',
|
||||
code: 'userImport',
|
||||
},
|
||||
{
|
||||
title: '模板下载',
|
||||
code: 'userTemDownload',
|
||||
},
|
||||
{
|
||||
title: '导出',
|
||||
code: 'userExports',
|
||||
},
|
||||
{
|
||||
title: '批量删除',
|
||||
code: 'userBatchDel',
|
||||
},
|
||||
{
|
||||
title: '编辑',
|
||||
code: 'userEdit',
|
||||
},
|
||||
{
|
||||
title: '冻结',
|
||||
code: 'userFrozen',
|
||||
},
|
||||
{
|
||||
title: '解冻',
|
||||
code: 'userUnFrozen',
|
||||
},
|
||||
{
|
||||
title: '重置密码',
|
||||
code: 'userCodeReset',
|
||||
},
|
||||
{
|
||||
title: '删除',
|
||||
code: 'userDelete',
|
||||
},
|
||||
{ title: '导入', code: 'userImport' },
|
||||
{ title: '模板下载', code: 'userTemDownload' },
|
||||
{ title: '导出', code: 'userExports' },
|
||||
{ title: '批量删除', code: 'userBatchDel' },
|
||||
{ title: '编辑', code: 'userEdit' },
|
||||
{ title: '冻结', code: 'userFrozen' },
|
||||
{ title: '解冻', code: 'userUnFrozen' },
|
||||
{ title: '重置密码', code: 'userCodeReset' },
|
||||
{ title: '删除', code: 'userDelete' },
|
||||
],
|
||||
// backApi: [],
|
||||
},
|
||||
|
||||
@@ -1,180 +1,237 @@
|
||||
import { dateUtil } from '/nerv-lib/util/date-util';
|
||||
import data from './mock.json';
|
||||
export const tableConfig = {
|
||||
title: '设备台账',
|
||||
// api: '/carbon_emission/device/getDeviceList',
|
||||
value: data.dataSource,
|
||||
treeConfig: {
|
||||
header: {
|
||||
icon: 'orgLink',
|
||||
title: '设备类别',
|
||||
},
|
||||
defaultExpandAll: true,
|
||||
api: () => {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve(data);
|
||||
}, 100);
|
||||
});
|
||||
import { device } from '/@/api/deviceManage';
|
||||
import { ref } from 'vue';
|
||||
import { http } from '/nerv-lib/util';
|
||||
|
||||
export const tableConfig = (orgId) => {
|
||||
return ref({
|
||||
title: '设备信息',
|
||||
api: device.queryDevicePage,
|
||||
params: { orgId },
|
||||
treeConfig: {
|
||||
header: {
|
||||
icon: 'deviceType',
|
||||
title: '设备类别',
|
||||
},
|
||||
params: { orgId },
|
||||
dynamicParams: 'code',
|
||||
defaultExpandAll: true,
|
||||
api: device.queryDeviceTree,
|
||||
fieldNames: { title: 'deviceType', key: 'code' },
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'deviceType',
|
||||
label: '设备名称',
|
||||
component: 'NsInput',
|
||||
autoSubmit: true,
|
||||
componentProps: {
|
||||
placeholder: '请输入设备类型',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
rowSelection: null,
|
||||
columns: [
|
||||
{
|
||||
title: '设备名称',
|
||||
dataIndex: 'deviceName',
|
||||
},
|
||||
{
|
||||
title: '设备型号',
|
||||
dataIndex: 'deviceModel',
|
||||
},
|
||||
{
|
||||
title: 'SN码',
|
||||
dataIndex: 'snCode',
|
||||
textNumber: 5,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '设备一级区域',
|
||||
dataIndex: 'device1Area',
|
||||
textNumber: 5,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '设备二级区域',
|
||||
dataIndex: 'device2Area',
|
||||
textNumber: 5,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '设备详细位置',
|
||||
dataIndex: 'deviceAddress',
|
||||
textNumber: 5,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '设备规格',
|
||||
dataIndex: 'deviceTp',
|
||||
textNumber: 4,
|
||||
},
|
||||
{
|
||||
title: '设备厂商纳税人识别号',
|
||||
dataIndex: 'deviceRatepay',
|
||||
textNumber: 8,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '设备厂商',
|
||||
textNumber: 4,
|
||||
dataIndex: 'manufacturer',
|
||||
},
|
||||
{
|
||||
title: '厂商联系人',
|
||||
dataIndex: 'contactPerson',
|
||||
},
|
||||
{
|
||||
title: '设备描述',
|
||||
dataIndex: 'deviceDesc',
|
||||
textNumber: 5,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: 'IP地址',
|
||||
dataIndex: 'ipAddress',
|
||||
},
|
||||
{
|
||||
title: '生产日期',
|
||||
dataIndex: 'manufactureDate',
|
||||
},
|
||||
{
|
||||
title: '采购日期',
|
||||
dataIndex: 'purchaseDate',
|
||||
},
|
||||
{
|
||||
title: '启用日期',
|
||||
dataIndex: 'startDate',
|
||||
},
|
||||
{
|
||||
title: '设备成本(元)',
|
||||
dataIndex: 'equipmentCost',
|
||||
textNumber: 6,
|
||||
},
|
||||
{
|
||||
title: '使用期限',
|
||||
dataIndex: 'usagePeriod',
|
||||
textNumber: 4,
|
||||
customRender: ({ value }) => `${value}年`,
|
||||
},
|
||||
{
|
||||
title: '额定功率',
|
||||
dataIndex: 'ratedPower',
|
||||
textNumber: 4,
|
||||
// customRender: ({ value }) => `${value}年`,
|
||||
},
|
||||
{
|
||||
title: '特殊参数',
|
||||
textNumber: 4,
|
||||
dataIndex: 'specialParameters',
|
||||
},
|
||||
],
|
||||
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'name',
|
||||
field: 'deviceName',
|
||||
label: '设备名称',
|
||||
component: 'NsInput',
|
||||
autoSubmit: true,
|
||||
componentProps: {
|
||||
placeholder: '请输入',
|
||||
placeholder: '请输入设备名称',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'areas',
|
||||
label: '设备区域',
|
||||
component: 'NsCascader',
|
||||
format: (record) => {
|
||||
console.log(record);
|
||||
|
||||
return record?.reduce(
|
||||
(pre, cur) => {
|
||||
const len = cur?.length - 1;
|
||||
pre[len].push(cur[len]);
|
||||
return pre;
|
||||
},
|
||||
[[], []],
|
||||
);
|
||||
},
|
||||
fieldMap: ['area1', 'area2'],
|
||||
componentProps: {
|
||||
placeholder: '请选择设备区域',
|
||||
multiple: true,
|
||||
loadData: (selectedOptions, options) => {
|
||||
const targetOption = selectedOptions[selectedOptions.length - 1];
|
||||
if (!selectedOptions.length) {
|
||||
http.post(device.dropArea, { orgId }).then((res) => {
|
||||
options.value = res.data?.map((item) => {
|
||||
return { label: item, value: item, children: [], isLeaf: false };
|
||||
});
|
||||
});
|
||||
}
|
||||
const value = targetOption?.value;
|
||||
if (targetOption) {
|
||||
targetOption.loading = true;
|
||||
http.post(device.dropArea, { device1Area: value, orgId }).then((res) => {
|
||||
targetOption.loading = false;
|
||||
targetOption.children = res.data?.map((item) => {
|
||||
return { label: item, value: item, children: [], isLeaf: true };
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'manufacturer',
|
||||
label: '设备厂商',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入设备厂商',
|
||||
options: [
|
||||
{
|
||||
label: '全部',
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
label: '生产日期',
|
||||
component: 'NsRangePicker',
|
||||
fieldMap: ['manufactureBeginDate', 'manufactureEndDate'],
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
placeholder: ['设备生产开始日期', '设备生产结束日期'],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'createTime1',
|
||||
label: '采购日期',
|
||||
component: 'NsRangePicker',
|
||||
fieldMap: ['purchaseBeginDate', 'purchaseEndDate'],
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
placeholder: ['设备采购开始日期', '设备采购结束日期'],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'createTime2',
|
||||
label: '启用日期',
|
||||
component: 'NsRangePicker',
|
||||
fieldMap: ['startBeginDate', 'startEndDate'],
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
placeholder: ['设备启用开始日期', '设备启用结束日期'],
|
||||
},
|
||||
},
|
||||
],
|
||||
params: {},
|
||||
},
|
||||
},
|
||||
params: {
|
||||
page: 0,
|
||||
pageSize: 10,
|
||||
},
|
||||
rowSelection: null,
|
||||
columns: [
|
||||
{
|
||||
title: '设备名称',
|
||||
dataIndex: 'id',
|
||||
},
|
||||
{
|
||||
title: '设备型号',
|
||||
dataIndex: 'deviceCode',
|
||||
},
|
||||
{
|
||||
title: 'SN码',
|
||||
dataIndex: 'deviceName',
|
||||
textNumber: 8,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '设备一级区域',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '设备二级区域',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '设备详细位置',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '设备规格',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '设备厂商纳税人识别号',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '厂商联系人',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '设备描述',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: 'IP地址',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '生产日期',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '采购日期',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '启用日期',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '设备成本(元)',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '使用期限',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '额定功率',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
{
|
||||
title: '特殊参数',
|
||||
dataIndex: 'position',
|
||||
},
|
||||
],
|
||||
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'name',
|
||||
label: '设备名称',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'provider',
|
||||
label: '设备厂商',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'payWay',
|
||||
label: '设备区域',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
placeholder: '请选择',
|
||||
options: [
|
||||
{
|
||||
label: '全部',
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
label: '生产日期',
|
||||
component: 'NsRangePicker',
|
||||
fieldMap: ['queryStartDate', 'queryEndDate'],
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'createTime1',
|
||||
label: '采购日期',
|
||||
component: 'NsRangePicker',
|
||||
fieldMap: ['queryStartDate', 'queryEndDate'],
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'createTime2',
|
||||
label: '启用日期',
|
||||
component: 'NsRangePicker',
|
||||
fieldMap: ['queryStartDate', 'queryEndDate'],
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
},
|
||||
},
|
||||
],
|
||||
params: {},
|
||||
},
|
||||
// pagination: { pageSizeOptions: false },
|
||||
rowKey: 'uuid',
|
||||
// pagination: { pageSizeOptions: false },
|
||||
rowKey: 'uuid',
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
<template>
|
||||
<ns-view-list-table v-bind="tableConfig" />
|
||||
<ns-view-list-table v-bind="config" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { tableConfig } from './config';
|
||||
import { computed, nextTick, ref } from 'vue';
|
||||
const orgId = ref('');
|
||||
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
|
||||
orgId.value = result;
|
||||
const config = tableConfig(orgId.value);
|
||||
|
||||
defineOptions({
|
||||
name: 'LedgerIndex', // 与页面路由name一致缓存才可生效
|
||||
});
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- @format -->
|
||||
|
||||
<template>
|
||||
<div class="ns-table-header" v-if="!isEmpty(getActions)">
|
||||
<div class="ns-table-header">
|
||||
<div class="ns-table-title ns-title-extra-box" v-if="tableTitle">{{ tableTitle }}</div>
|
||||
<div class="ns-table-header-action">
|
||||
<div class="ns-table-header-action" v-if="!isEmpty(getActions)">
|
||||
<slot name="header" :data="data"></slot>
|
||||
<template v-for="item in getActions" :key="item.name">
|
||||
<ns-button @click="item.finalHandle()" :disabled="item.dynamicDisabled" :type="item.type">
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<template>
|
||||
<div class="ns-tree-form">
|
||||
<div v-show="header" class="ns-tree-title">
|
||||
<ns-icon :name="header.icon" size="14" />
|
||||
<span>{{ header.title }}</span>
|
||||
</div>
|
||||
<div v-show="!formConfig?.schema">
|
||||
<ns-form ref="formElRef" v-bind="formConfig" :model="formModel" @finish="formFinish" />
|
||||
</div>
|
||||
</div>
|
||||
<a-spin :spinning="treeState.loading">
|
||||
<div class="ns-tree-form">
|
||||
<div v-show="header" class="ns-tree-title">
|
||||
<ns-icon :name="header.icon" size="14" />
|
||||
<span>{{ header.title }}</span>
|
||||
</div>
|
||||
<div v-show="!formConfig?.schema">
|
||||
<ns-form ref="formElRef" v-bind="formConfig" :model="formModel" @finish="formFinish" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="min-height: 300px">
|
||||
<ns-tree v-if="treeData?.length" v-bind="getBindValue" v-model:selectedKeys="selectedKeys">
|
||||
<template #[item]="data" v-for="(item, index) in Object.keys($slots)" :key="index">
|
||||
@@ -66,7 +67,7 @@
|
||||
treeState.loading = loading;
|
||||
};
|
||||
const httpPrams = computed(() => {
|
||||
return { ...route.params, ...route.query, ...props.defaultParams };
|
||||
return { ...route.params, ...route.query, ...props.params };
|
||||
});
|
||||
|
||||
const getData = (params = {}) => {
|
||||
|
||||
@@ -431,11 +431,14 @@
|
||||
flex: 1;
|
||||
.projectTitle {
|
||||
font-size: 28px;
|
||||
font-weight: 900;
|
||||
font-weight: 500;
|
||||
letter-spacing: 2.33px;
|
||||
line-height: 40px;
|
||||
color: @primary-color;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
text-wrap: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
:deep(.header-menu .ant-menu-title-content) {
|
||||
|
||||
Reference in New Issue
Block a user