Compare commits

...

5 Commits

Author SHA1 Message Date
xuziqiang
4bbb5c5133 fix: 组件调整 2024-07-04 11:19:38 +08:00
xuziqiang
d294c3f07a feat: 设备台账联调 2024-07-03 18:08:02 +08:00
xuziqiang
fba16c75b9 feat: 设备台账联调 2024-07-03 18:07:52 +08:00
xuziqiang
e5cd75c845 feat: 设备台账联调 2024-07-03 17:58:39 +08:00
xuziqiang
be09e531b9 fix:调整路由 2024-07-03 10:50:16 +08:00
10 changed files with 276 additions and 222 deletions

View 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`,
}

View File

@@ -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 } };
});
},

View File

@@ -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;

View 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

View File

@@ -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: [],
},

View File

@@ -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',
});
};

View File

@@ -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一致缓存才可生效
});

View File

@@ -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">

View File

@@ -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 = {}) => {

View File

@@ -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) {