Browse Source

资产提交

develop
18512435990 11 months ago
parent
commit
387e3ae392
  1. 9
      package.json
  2. 53
      src/api/model/asset/info.js
  3. 53
      src/api/model/asset/params.js
  4. BIN
      src/assets/icons/png/simple.png
  5. 1
      src/assets/icons/svg/wifi-green.svg
  6. 1
      src/assets/icons/svg/wifi-red.svg
  7. 101
      src/components/CustomMonitorView/index.vue
  8. 375
      src/components/luckysheet/index.vue
  9. 341
      src/views/model/asset/index.vue
  10. 285
      src/views/model/asset/params.vue
  11. 2
      src/views/model/params/index.vue

9
package.json

@ -31,19 +31,22 @@
"jsencrypt": "3.3.1", "jsencrypt": "3.3.1",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"pinia": "2.0.22", "pinia": "2.0.22",
"splitpanes": "^3.1.5",
"vee-validate": "4.5.8", "vee-validate": "4.5.8",
"vkbeautify": "^0.99.3", "vkbeautify": "^0.99.3",
"vue": "3.2.45", "vue": "3.2.45",
"vue-baidu-map-3x": "^1.0.34", "vue-baidu-map-3x": "^1.0.34",
"vue-cropper": "1.0.3", "vue-cropper": "1.0.3",
"vue-router": "4.1.4" "vue-draggable-plus": "^0.3.0",
"vue-router": "4.1.4",
"vuedraggable": "^2.24.3"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "3.1.0", "@vitejs/plugin-vue": "3.1.0",
"@vue/compiler-sfc": "3.2.45", "@vue/compiler-sfc": "3.2.45",
"sass": "1.56.1", "sass": "1.56.1",
"unplugin-auto-import": "0.11.4", "unplugin-auto-import": "^0.11.5",
"vite": "3.2.3", "vite": "^3.2.3",
"vite-plugin-compression": "0.5.1", "vite-plugin-compression": "0.5.1",
"vite-plugin-svg-icons": "2.0.1", "vite-plugin-svg-icons": "2.0.1",
"vite-plugin-vue-setup-extend": "0.4.0" "vite-plugin-vue-setup-extend": "0.4.0"

53
src/api/model/asset/info.js

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询资产信息列表
export function listInfo(query) {
return request({
url: '/model/dcBaseAssetInfo/list',
method: 'get',
params: query
})
}
// 查询资产信息详细
export function getInfo(id) {
return request({
url: '/model/dcBaseAssetInfo/' + id,
method: 'get'
})
}
// 新增资产信息
export function addInfo(data) {
return request({
url: '/model/dcBaseAssetInfo',
method: 'post',
data: data
})
}
// 修改资产信息
export function updateInfo(data) {
return request({
url: '/model/dcBaseAssetInfo',
method: 'put',
data: data
})
}
// 删除资产信息
export function delInfo(id) {
return request({
url: '/model/dcBaseAssetInfo/' + id,
method: 'delete'
})
}
// 导出资产信息
export function exportInfo(query) {
return request({
url: '/${baseUrl}/export',
method: 'get',
params: query
})
}

53
src/api/model/asset/params.js

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询资产参数列表
export function listParams(query) {
return request({
url: '/model/dcBaseAssetParams/list',
method: 'get',
params: query
})
}
// 查询资产参数详细
export function getParams(id) {
return request({
url: '/model/dcBaseAssetParams/' + id,
method: 'get'
})
}
// 新增资产参数
export function addParams(data) {
return request({
url: '/model/dcBaseAssetParams',
method: 'post',
data: data
})
}
// 修改资产参数
export function updateParams(data) {
return request({
url: '/model/dcBaseAssetParams',
method: 'put',
data: data
})
}
// 删除资产参数
export function delParams(id) {
return request({
url: '/model/dcBaseAssetParams/' + id,
method: 'delete'
})
}
// 导出资产参数
export function exportParams(query) {
return request({
url: '/${baseUrl}/export',
method: 'get',
params: query
})
}

BIN
src/assets/icons/png/simple.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

1
src/assets/icons/svg/wifi-green.svg

@ -0,0 +1 @@
<svg t="1703061700691" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7586" width="200" height="200"><path d="M512 149.965c-199.947 0-380.965 81.039-511.994 212.077l96.02 96.019C202.474 351.582 349.542 285.723 512 285.723s309.526 65.859 415.975 172.338l96.02-96.019C892.965 231.004 711.947 149.965 512 149.965z" fill="#3EB47F" p-id="7587"></path><path d="M160.004 522.05l95.979 95.989C321.512 552.51 412.021 512 512 512s190.487 40.51 256.017 106.039l95.979-95.989C773.917 431.951 649.458 376.242 512 376.242c-137.459 0-261.896 55.709-351.996 145.808z" fill="#3EB47F" p-id="7588"></path><path d="M320.002 682.038L512 874.035l191.998-191.997c-49.13-49.14-117.02-79.529-191.998-79.529s-142.868 30.389-191.998 79.529z" fill="#3EB47F" p-id="7589"></path></svg>

After

Width:  |  Height:  |  Size: 800 B

1
src/assets/icons/svg/wifi-red.svg

@ -0,0 +1 @@
<svg t="1703120120334" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11492" width="200" height="200"><path d="M833.92 302.208c-97.152 0-176 78.848-176 176s78.848 176 176 176S1009.92 575.36 1009.92 478.208s-78.848-176-176-176z m73.728 205.568c11.904 11.904 11.904 30.976 0 42.88-5.888 5.888-13.696 8.832-21.504 8.832-7.808 0-15.488-2.944-21.504-8.832l-30.848-30.848-30.848 30.848c-5.888 5.888-13.696 8.832-21.504 8.832-7.808 0-15.488-2.944-21.504-8.832a30.208 30.208 0 0 1 0-42.88l30.848-30.848-30.848-30.848c-11.904-11.904-11.904-30.976 0-42.88s30.976-11.904 42.88 0l30.848 30.848 30.848-30.848a30.208 30.208 0 0 1 42.88 0c11.904 11.904 11.904 30.976 0 42.88l-30.848 30.848 31.104 30.848zM440.064 484.48c-77.568 0-147.968 31.232-199.296 81.792-1.28 1.152-2.432 2.432-3.584 3.584l43.392 43.392c1.152-1.28 2.432-2.432 3.584-3.584 40.32-39.424 95.232-63.744 155.904-63.744s115.584 24.32 155.904 63.744c1.28 1.152 2.432 2.432 3.584 3.584l43.392-43.392c-1.152-1.28-2.432-2.432-3.584-3.584-51.328-50.56-121.728-81.792-199.296-81.792zM356.864 682.24l83.2 83.2 83.2-83.2c-21.632-20.736-50.816-33.536-83.2-33.536s-61.568 12.8-83.2 33.536zM440.064 185.344c-160 0-305.152 64.768-410.624 169.344-1.28 1.28-2.432 2.56-3.712 3.712l43.392 43.392 3.584-3.584c94.464-93.44 224.128-151.424 367.232-151.424 86.272 0 167.552 21.12 239.36 58.368a188.032 188.032 0 0 1 64-34.56 579.9936 579.9936 0 0 0-303.232-85.248z" fill="#d81e06" p-id="11493"></path><path d="M611.968 438.144c1.28-21.632 6.016-42.24 14.08-61.312-56.448-26.88-119.296-42.496-185.984-42.496-118.912 0-226.688 48.128-305.28 125.696l-3.584 3.584 43.392 43.392c1.152-1.28 2.432-2.432 3.584-3.584 67.456-66.56 159.872-107.648 261.888-107.648 61.952 0.128 120.448 15.488 171.904 42.368z" fill="#d81e06" p-id="11494"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

101
src/components/CustomMonitorView/index.vue

@ -0,0 +1,101 @@
<template>
<MyComponent :data = "config.data" :mesh = "config.mesh" @callfun = "callfun" ></MyComponent>
</template>
<script setup>
import { ref,defineComponent,defineProps} from 'vue';
const props = defineProps({
meshObj: {
type: Object,
required: {}
}
});
const { config } = props;
const callfun = (obj) =>{
showMsg.value = '参数编码:'+ obj.code +'参数值:' + obj.value;
}
onMounted(() => {
// setTimeout(() => {
// let meshObj = getMesh()
// mesh.value = meshObj.struct
// data.value = meshObj.params
// }, 3000);
})
const MyComponent = defineComponent({
props: {
data:{
type: String,
required: true
},
mesh:{
type: Object,
required: true
}
},
emits: ['callfun'], //
setup(props,{ emit }) {
return () => {
return props.mesh != false ? h(props.mesh.type, { id: props.mesh.key, style: props.mesh.type, class: props.mesh.class }, [
// tr
props.mesh.items.map(tr => {
return h(tr.type, { style: tr.style, key: tr.rowIndex }, [
// td
tr.items.map(td => {
return td.valueType == 0 ? h(td.type, { key: td.key, style:td.style }, [ td.value ]) :
td.valueType == 1 ? h(td.type, { key: td.key, style:td.style }, [ props.data[td.code] ]) :
td.valueType == 2 ? h(td.type, { key: td.key, style:td.style }, [
//
td.items.map(content => {
return content.valueType == 1 ? h(content.type, { style:content.style } ,props.data[content.code]) :
content.valueType == 3 ? h(content.type, { style:content.style, class:content.class ,onClick: () => emit(content.fun, {code:content.param.value,value:props.data[content.param.value]} ) },content.value) : null
})
]) : h(td.type, { key: td.key, style:td.style }, ["???"])
})
])
})
]) : h('span', '正在加载!')
}
},
});
</script>
<style lang='scss' scoped>
.bg{
margin: 1rem;
}
.tw {
border-collapse: collapse;
border: 2px solid rgb(49, 47, 47) ;
:deep(td) {
border-collapse: collapse;
border: 1px solid rgb(29, 28, 28);
padding: 5px;
}
:deep(th) {
border-collapse: collapse;
border: 1px solid rgb(29, 28, 28);
background-color: cornflowerblue;
padding: 5px;
}
:deep(.btn) {
float: left;
width: 20px;
height: 20px;
margin-left: 5px;
margin-bottom: 3px;
background-image: url("../../../assets/icons/png/edit.png");
background-size: 20px;
}
}
</style>

375
src/components/luckysheet/index.vue

@ -1,16 +1,50 @@
<template> <template>
<div id="luckysheet" class="luckysheetContent"></div>
<div class="luckysheetBtn"> <div class="luckysheetBtn">
<el-button type="primary" @click="baocun">保存</el-button> <el-tooltip class="box-item" effect="dark" content="保存" placement="top-start">
<el-button link class="luckysheetBtn" @click="save" icon="CopyDocument"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="预览" placement="top-start">
<el-button link class="luckysheetBtn" icon="Monitor"></el-button>
</el-tooltip>
<el-tooltip class="box-item" effect="dark" content="主题选择" placement="top-start">
<el-select v-model="themeValue" placeholder="主题" class="themeSelect">
<el-option v-for="item in theme" :key="item.value" :label="item.label" :value="item.value">
<span style="float: left">{{ item.label }}</span>
<span style="
float: right;
color: var(--el-text-color-secondary);
font-size: 13px;
">{{ item.value }}</span>
</el-option>
</el-select>
</el-tooltip>
</div> </div>
<div id="luckysheet" class="luckysheetContent"></div>
</template> </template>
<script setup> <script setup>
import { onMounted } from 'vue';
import { onMounted, watch } from 'vue';
const props = defineProps({ const props = defineProps({
config: { config: {
type: Object, type: Object,
required: {} required: {}
},
width: {
type: Number,
required: true
},
height: {
type: String,
required: true
},
dragTargetValue: {
type: String,
required: true
},
cellData: {
type: String,
required: true
} }
}); });
@ -19,7 +53,15 @@ const emit = defineEmits(['luckysheeAlltData']);
onMounted(() => { onMounted(() => {
init(); init();
//
// luckysheet.hideGridLines()
}); });
watch(() => [props.width, props.height], () => {
// luckysheet size
luckysheet.resize();
});
const init = () => { const init = () => {
var options = { var options = {
container: 'luckysheet', //luckysheetid container: 'luckysheet', //luckysheetid
@ -42,92 +84,105 @@ const init = () => {
rowHeaderWidth: config.rowHeaderWidth, //0 rowHeaderWidth: config.rowHeaderWidth, //0
columnHeaderHeight: config.columnHeaderHeight, //0 columnHeaderHeight: config.columnHeaderHeight, //0
data: config.data, data: config.data,
hook: {}, hook: {
forceCalculation: true // //
// cellRightClickConfig: { cellDragStop(cell, position) {
// // const { r, c } = position;
// copy: true, // if (props.dragTargetValue !== null) {
// copyAs: true, // luckysheet.setCellValue(r, c, props.dragTargetValue);
// paste: true, // props.dragTargetValue = null;
// insertRow: true, // }
// insertColumn: true, // },
// deleteRow: true, // //
// deleteColumn: true, // cellMousedownBefore(cell, position) {
// deleteCell: true, // props.cellData = cell
// hideRow: true, // }
// hideColumn: true, // },
// rowHeight: true, // forceCalculation: true, //
// columnWidth: true, // cellRightClickConfig: {
// clear: true, // //
// matrix: true, // copy: true, //
// sort: true, // copyAs: true, //
// filter: true, // paste: true, //
// chart: true, // insertRow: true, //
// image: true, // insertColumn: true, //
// link: true, // deleteRow: true, //
// data: true, // deleteColumn: true, //
// cellFormat: true // deleteCell: true, //
// }, hideRow: true, //
// showstatisticBarConfig: { hideColumn: true, //
// // rowHeight: true, //
// count: false, // columnWidth: true, //
// view: false, // clear: true, //
// zoom: false // matrix: true, //
// }, sort: true, //
// sheetRightClickConfig: { filter: true, //
// //sheet chart: true, //
// delete: true, // image: true, //
// copy: true, // link: true, //
// rename: true, // data: true, //
// color: true, // cellFormat: true //
// hide: true, // },
// move: true // showstatisticBarConfig: {
// } //
// showtoolbarConfig: { count: true, //
// // view: true, //
// undoRedo: true, // zoom: true //
// paintFormat: true, // },
// currencyFormat: true, // sheetRightClickConfig: {
// percentageFormat: true, // //sheet
// numberDecrease: true, // '' delete: true, //
// numberIncrease: true, // ' copy: true, //
// moreFormats: true, // '' rename: true, //
// font: true, // '' color: true, //
// fontSize: true, // '' hide: true, //
// bold: true, // ' (Ctrl+B)' move: true //
// italic: true, // ' (Ctrl+I)' },
// strikethrough: true, // '线 (Alt+Shift+5)' showtoolbarConfig: {
// underline: true, // '线 (Alt+Shift+6)' //
// textColor: true, // '' undoRedo: true, //
// fillColor: true, // '' paintFormat: true, //
// border: true, // '' currencyFormat: true, //
// mergeCell: true, // '' percentageFormat: true, //
// horizontalAlignMode: true, // '' numberDecrease: true, // ''
// verticalAlignMode: true, // '' numberIncrease: true, // '
// textWrapMode: true, // '' moreFormats: true, // ''
// textRotateMode: true, // '' font: true, // ''
// image: true, // '' fontSize: true, // ''
// link: true, // '' bold: true, // ' (Ctrl+B)'
// chart: true, // ''chart italic: true, // ' (Ctrl+I)'
// postil: true, //'' strikethrough: true, // '线 (Alt+Shift+5)'
// pivotTable: true, //'' underline: true, // '线 (Alt+Shift+6)'
// function: true, // '' textColor: true, // ''
// frozenMode: true, // '' fillColor: true, // ''
// sortAndFilter: true, // '' border: true, // ''
// conditionalFormat: true, // '' mergeCell: true, // ''
// dataVerification: true, // '' horizontalAlignMode: true, // ''
// splitColumn: true, // '' verticalAlignMode: true, // ''
// screenshot: true, // '' textWrapMode: true, // ''
// findAndReplace: true, // '' textRotateMode: true, // ''
// protection: true, // '' image: true, // ''
// print: true // '' link: true, // ''
// }, chart: true, // ''chart
// showsheetbarConfig: { postil: true, //''
// //sheet pivotTable: true, //''
// add: true, //sheet function: true, // ''
// menu: true, //sheet frozenMode: true, // ''
// sheet: true //sheet sortAndFilter: true, // ''
// }, conditionalFormat: true, // ''
dataVerification: true, // ''
splitColumn: true, // ''
screenshot: true, // ''
findAndReplace: true, // ''
protection: true, // ''
print: true // ''
},
showsheetbarConfig: {
//sheet
add: false, //sheet
menu: false, //sheet
sheet: false //sheet
},
// data: [ // data: [
// { // {
// name: 'report', // // name: 'report', //
@ -172,11 +227,129 @@ const init = () => {
}; };
luckysheet.create(options); luckysheet.create(options);
}; };
function baocun() {
const allSheets = luckysheet.getAllSheets(); function save() {
emit('luckysheeAlltData', allSheets); const activeSheet = luckysheet.getAllSheets()[0];
console.log(allSheets); getMesh(activeSheet)
emit('getSheetData', activeSheet);
// console.log(allSheets);
}
//
function getMesh(sheet) {
let { celldata, config } = sheet
let structData = {
struct: {
key: sheet.name,
type: 'table',
class: 'tw', //themeValue.value,
items: []
},
params: {}
}
let { struct, params } = structData
const maxRow = Math.max(...celldata.map(obj => obj.r));
const maxColumn = Math.max(...celldata.map(obj => obj.c));
const map = new Map()
for (let i = 0; i <= maxRow; i++) {
let tr = { type: "tr", key: i, rowIndex: i, style: `height:${config.rowlen[i.toString()]}px`, items: [] }
for (let j = 0; j <= maxColumn; j++) {
let cell = celldata.find(item => i === item.r && j === item.c)
let trElement = {}
trElement.colIndex = j
if (i === 0) {
trElement.type = "th"
} else {
trElement.type = "td"
} }
trElement.key = `${i}-${j}`
trElement.style = `width:${config.columnlen[j.toString()]}px;`
trElement.valueType = 0
trElement.value = ``
trElement.rowspan = 1
trElement.colspan = 1
trElement.delTag = false
if (cell !== undefined) {
// cell.m ${
trElement.value = cell.v.v === undefined || cell.v.v === null ? "" : cell.v.v
if (trElement.value.indexOf("#{") === 0) {
let value = trElement.value.substring(2, trElement.value.length - 1).trim().split("_")[1]
let code = value.split("-")[0]
if (value.split("-")[1] == 0) {
trElement.valueType = 1
trElement.code = code
} else if (value.split("-")[1] == 1) {
trElement.valueType = 2
trElement.items = [
{type: "div",style: "margin-left: 3px;float: left;margin-top: 3px;",valueType: 1,code: code},
{type: "span",class: "btn",valueType: 3,event: 'onClick',fun: "callfun",param: {value: code}}
]
}
map.set(code, 0)
}
if (trElement.value.indexOf("${") === 0) {
let item = trElement.value.substring(2, trElement.value.length - 1).trim().split("_")[0]
let value = item.split(".")[1]
trElement.valueType = 4
trElement.items = [
{type: "span",class: "img red",valueType: 5},
{type: "div",style: "margin-left: 3px;float: left;margin-top: 3px;",valueType: 0,value: value}
]
// map.set(code, 0)
}
trElement.style += cell.v.fc === undefined ? `` : `color: ${cell.v.fc};` //
trElement.style += cell.v.bg === null ? `` : `background-color: ${cell.v.bg};` //
trElement.style += cell.v.ht === null ? `` : cell.v.ht === 0 ? `text-align: center;` : `` //
trElement.rowspan = cell.v.mc === undefined ? 1 : cell.v.mc.rs === undefined ? 1 : cell.v.mc.rs
trElement.colspan = cell.v.mc === undefined ? 1 : cell.v.mc.cs === undefined ? 1 : cell.v.mc.cs
}
tr.items.push(trElement)
}
struct.items.push(tr)
}
let delElement = []
const keys = Object.keys(config.merge)
for (const key of keys) {
for (let index = 1; index < config.merge[key].rs; index++) {
delElement.push(`${config.merge[key].r + index}-${config.merge[key].c}`)
}
for (let index = 1; index < config.merge[key].cs; index++) {
delElement.push(`${config.merge[key].r}-${config.merge[key].c + index}`)
}
}
for (let index = 0; index < delElement.length; index++) {
for (let i = 0; i < struct.items.length; i++) {
let rows = struct.items[i].items
for (let j = rows.length - 1; j >= 0; j--) {
if (rows[j].key === delElement[index]) {
rows[j].delTag = true
break;
}
}
}
}
structData.params = Object.fromEntries(map)
console.log(structData)
}
const themeValue = ref("")
const theme = [
{
value: 'simple',
label: '简约',
},
{
value: 'fashion',
label: '时尚',
}
]
</script> </script>
<style> <style>
.luckysheetContent { .luckysheetContent {
@ -185,7 +358,7 @@ function baocun() {
position: relative; position: relative;
width: 100%; width: 100%;
height: 82vh; height: 82vh;
z-index: 99999; /* z-index: 99999; */
/* left: 0px; /* left: 0px;
top: 40px; */ top: 40px; */
/* bottom: 0px; */ /* bottom: 0px; */
@ -197,7 +370,17 @@ function baocun() {
} }
.luckysheetBtn { .luckysheetBtn {
margin-top: 15px;
text-align: right; /* margin: .2rem; */
.el-button {
margin: .4rem;
width: 18px;
}
/* text-align: right; */
}
.themeSelect {
width: 8rem;
} }
</style> </style>

341
src/views/model/asset/index.vue

@ -0,0 +1,341 @@
<template>
<div class="app-container">
<el-row>
<el-col :span="4" class="card-box">
<div class="head-container">
<el-input v-model="deptName" placeholder="请输入部门名称" clearable prefix-icon="Search" style="margin-bottom: 20px" />
</div>
<div class="head-container">
<el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }" :expand-on-click-node="false"
:filter-node-method="filterNode" ref="deptTreeRef" node-key="id" highlight-current default-expand-all
@node-click="handleNodeClick" />
</div>
</el-col>
<el-col :span="20" class="card-box">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="编码" prop="assetCode">
<el-input v-model="queryParams.assetCode" placeholder="请输入编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="是否有效" prop="flagEnabled">
<el-input v-model="queryParams.flagEnabled" placeholder="请输入是否有效" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="名称" prop="assetName">
<el-input v-model="queryParams.assetName" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="类别" prop="assetType">
<el-select v-model="queryParams.assetType" placeholder="请选择类别" clearable>
<el-option v-for="dict in dc_asset_attr" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" icon="Edit" @click="handleUpdate">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" icon="Delete" @click="handleDelete">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="Download" @click="handleExport">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键" align="center" prop="id" /> -->
<el-table-column label="编码" align="center" prop="assetCode" />
<el-table-column label="名称" align="center" prop="assetName" />
<el-table-column label="类别" align="center" prop="assetType">
<template #default="scope">
<dict-tag :options="dc_asset_attr" :value="scope.row.assetType" />
</template>
</el-table-column>
<el-table-column label="组织" align="center" prop="orgName" />
<el-table-column label="操作" align="center" width="350" class-name="small-padding fixed-width">
<template #default="scope">
<el-button type="text" icon="Edit" @click="handleParams(scope.row)">参数</el-button>
<!-- <el-button type="text" icon="Edit" @click="handleDevices(scope.row)">关联设备</el-button> -->
<el-button type="text" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button type="text" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-col>
</el-row>
<!-- 添加或修改资产信息对话框 -->
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
<el-form ref="infoRef" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="组织" prop="orgName">
<el-tree-select v-model="form.orgName" :data="deptOptions"
:props="{ value: 'label', label: 'label', children: 'children' }" value-key="id" placeholder="请选择"
check-strictly :default-expand-all="true" @node-click="selectDept" />
</el-form-item>
</el-col>
<el-col :span="12" v-show="false">
<el-form-item label="所属组织编码" prop="orgCode">
<el-input v-model="form.orgCode" placeholder="请选择组织名称" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="assetCode">
<el-input v-model="form.assetCode" placeholder="请输入编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否可用" prop="flagEnabled">
<el-select v-model="form.flagEnabled" placeholder="请选择是否可用">
<el-option v-for="dict in enabledFlag" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="名称" prop="assetName">
<el-input v-model="form.assetName" placeholder="请输入名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类别" prop="assetType">
<el-select v-model="form.assetType" placeholder="请选择类别">
<el-option v-for="dict in dc_asset_attr" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="AssetInfo">
import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/model/asset/info";
import { deptTreeSelect } from "@/api/system/user";
const { proxy } = getCurrentInstance();
const { dc_asset_attr } = proxy.useDict('dc_asset_attr');
const router = useRouter();
const infoList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const enabledFlag = ref([
{ label: '可用', value: 1, elTagType: 'default', elTagClass: null },
{ label: '不可用', value: 0, elTagType: 'default', elTagClass: null }
]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
tentantId: null,
assetCode: null,
flagEnabled: null,
assetName: null,
assetType: null,
orgCode: null,
orgName: null
},
rules: {
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询资产信息列表 */
function getList() {
loading.value = true;
listInfo(queryParams.value).then(response => {
infoList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
//
function cancel() {
open.value = false;
reset();
}
//
function reset() {
form.value = {
tentantId: null,
version: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
deptId: null,
userId: null,
deleteBy: null,
deleteTime: null,
id: null,
assetCode: null,
flagEnabled: null,
assetName: null,
assetType: null,
orgCode: null,
orgName: null
};
proxy.resetForm("infoRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
//
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 跳转参数 */
function handleParams(row) {
router.push({
path: "AssetParams",
query: {
id: row.id,
assetCode: row.assetCode
}
});
}
/** 跳转关联设备 */
function handleDevice(row) {
router.push({
path: "params",
query: {
id: row.id,
assetCode: row.assetCode
}
});
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加资产信息";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const _id = row.id || ids.value
getInfo(_id).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改资产信息";
});
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["infoRef"].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateInfo(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addInfo(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认删除资产信息编号为"' + _ids + '"的数据项?').then(function () {
return delInfo(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('model.asset/info/export', {
...queryParams.value
}, `info_${new Date().getTime()}.xlsx`)
}
getList();
/** 部门树 */
getDeptTree();
const deptOptions = ref([]);
const deptName = ref(null);
function getDeptTree() {
deptTreeSelect().then(response => {
deptOptions.value = response.data;
});
};
/** 通过条件过滤节点 */
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.orgCode = data.id;
handleQuery();
};
function selectDept(val) {
form.value.orgCode = val.id;
}
/** 根据名称筛选部门树 */
watch(deptName, val => {
proxy.$refs["deptTreeRef"].filter(val);
});
</script>

285
src/views/model/asset/params.vue

@ -0,0 +1,285 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="资产编号" prop="assetCode">
<el-input v-model="queryParams.assetCode" placeholder="请输入资产编号" disabled = false clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备uuid" prop="deviceUuid">
<el-input v-model="queryParams.deviceUuid" placeholder="请输入设备uuid" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备参数编码" prop="paramCode">
<el-input v-model="queryParams.paramCode" placeholder="请输入设备参数编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="参数模版" prop="paramClassName">
<el-input v-model="queryParams.paramClassName" placeholder="请输入参数模版" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" icon="Edit" @click="handleUpdate">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" icon="Delete" @click="handleDelete">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="Download" @click="handleExport">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="paramsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="资产编码" align="center" prop="assetCode" />
<el-table-column label="设备uuid" align="center" prop="deviceUuid" />
<el-table-column label="设备参数编码" align="center" prop="paramCode" />
<!-- <el-table-column label="参数模版编码" align="center" prop="paramClassName" /> -->
<el-table-column label="名称" align="center" prop="paramName" />
<el-table-column label="分区" align="center" prop="partion" />
<el-table-column label="是否有效" align="center" prop="flagEnabled" />
<el-table-column label="是否可控" align="center" prop="contrlFlag" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button type="text" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button type="text" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改资产参数对话框 -->
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
<el-form ref="paramsRef" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="资产编号" prop="assetCode">
<el-input v-model="form.assetCode" placeholder="" disabled=false />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备uuid" prop="deviceUuid">
<el-input v-model="form.deviceUuid" placeholder="请输入设备uuid" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参数编码" prop="paramCode">
<el-input v-model="form.paramCode" placeholder="请输入参数编码" />
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="参数模版" prop="paramClassName">
<el-input v-model="form.paramClassName" placeholder="请输入参数模版" />
</el-form-item>
</el-col> -->
<!-- <el-col :span="12">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入名称" />
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="是否有效">
<el-checkbox v-model="form.flagEnabled"></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否可控">
<el-checkbox v-model="form.contrlFlag"></el-checkbox>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="AssetParams">
import { listParams, getParams, delParams, addParams, updateParams } from "@/api/model/asset/params";
import { useRouter } from 'vue-router'
const { proxy } = getCurrentInstance();
const router = useRouter();
const paramsList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const assetCode = router.currentRoute.value.query.assetCode;
const contrlFlag = ref([
{label: '可控', value: true, elTagType: 'default', elTagClass: null},
{label: '不可控', value: false, elTagType: 'default', elTagClass: null}
]);
const enabled = ref([
{label: '有效', value: true, elTagType: 'default', elTagClass: null},
{label: '无效', value: false, elTagType: 'default', elTagClass: null}
]);
const contrlFlagTable = ref([
{label: '可控', value: 'true', elTagType: 'default', elTagClass: null},
{label: '不可控', value: 'false', elTagType: 'default', elTagClass: null}
]);
const enabledTable = ref([
{label: '有效', value: 'true', elTagType: 'default', elTagClass: null},
{label: '无效', value: 'false', elTagType: 'default', elTagClass: null}
]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
tentantId: null,
assetCode: null,
deviceUuid: null,
paramCode: null,
paramClassName: null,
name: null,
flagEnabled: null,
contrlFlag: null
},
rules: {
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询资产参数列表 */
function getList() {
console.log(assetCode)
queryParams.value.assetCode = assetCode;
loading.value = true;
listParams(queryParams.value).then(response => {
paramsList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
//
function cancel() {
open.value = false;
reset();
}
//
function reset() {
form.value = {
tentantId: null,
version: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
deptId: null,
userId: null,
deleteBy: null,
deleteTime: null,
id: null,
assetCode: null,
deviceUuid: null,
paramCode: null,
paramClassName: null,
name: null,
flagEnabled: null,
contrlFlag: null
};
proxy.resetForm("paramsRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
//
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset();
form.value.assetCode = assetCode
open.value = true;
title.value = "添加资产参数";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const _id = row.id || ids.value
getParams(_id).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改资产参数";
});
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["paramsRef"].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateParams(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addParams(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认删除资产参数编号为"' + _ids + '"的数据项?').then(function () {
return delParams(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('asset/params/export', {
...queryParams.value
}, `params_${new Date().getTime()}.xlsx`)
}
getList();
</script>

2
src/views/model/params/index.vue

@ -418,6 +418,7 @@ const sortItemMap = ref({});
const queryParamFilter = ref({}); const queryParamFilter = ref({});
const sortProps = ref([]); const sortProps = ref([]);
const names = ref([]); const names = ref([]);
const contrlFlag = ref([ const contrlFlag = ref([
{label: '可控', value: true, elTagType: 'default', elTagClass: null}, {label: '可控', value: true, elTagType: 'default', elTagClass: null},
{label: '不可控', value: false, elTagType: 'default', elTagClass: null} {label: '不可控', value: false, elTagType: 'default', elTagClass: null}
@ -426,6 +427,7 @@ const enabled = ref([
{label: '有效', value: true, elTagType: 'default', elTagClass: null}, {label: '有效', value: true, elTagType: 'default', elTagClass: null},
{label: '无效', value: false, elTagType: 'default', elTagClass: null} {label: '无效', value: false, elTagType: 'default', elTagClass: null}
]); ]);
const contrlFlagTable = ref([ const contrlFlagTable = ref([
{label: '可控', value: 'true', elTagType: 'default', elTagClass: null}, {label: '可控', value: 'true', elTagType: 'default', elTagClass: null},
{label: '不可控', value: 'false', elTagType: 'default', elTagClass: null} {label: '不可控', value: 'false', elTagType: 'default', elTagClass: null}

Loading…
Cancel
Save