完成 谐波监测 稳态统计报表 联调 全局对话框添加可移动属性

This commit is contained in:
GGJ
2024-04-01 11:16:28 +08:00
parent fd71466b22
commit fe60893e89
58 changed files with 984 additions and 1209 deletions

View File

@@ -69,11 +69,10 @@ export function addTemplate(data) {
}) })
} }
//模板对应指标替换 //模板对应指标替换
export function getCustomReport(data) { export function getCustomReport(data: any) {
return createAxios({ return createAxios({
url: '/harmonic-boot/customReport/getCustomReport', url: '/harmonic-boot/customReport/getCustomReport',
method: 'post', method: 'POST',
resposeType: 'blob',
data data
}) })
} }

BIN
src/assets/img/jss.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@@ -395,7 +395,7 @@ const setTime = (flag = 0, e = 0) => {
let dd = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'dd') let dd = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'dd')
let data = '' let data = ''
if (dd < 4 && dd == 0) { if (dd < 4 || dd == 0) {
data = window.XEUtils.toDateString(new Date().getTime() - (e + dd) * 3600 * 1000 * 24, 'yyyy-MM-dd') data = window.XEUtils.toDateString(new Date().getTime() - (e + dd) * 3600 * 1000 * 24, 'yyyy-MM-dd')
} else { } else {
data = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'yyyy-MM-dd') data = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'yyyy-MM-dd')

View File

@@ -80,10 +80,6 @@ const loadData = () => {
item4.icon = 'fa-solid fa-tower-observation' item4.icon = 'fa-solid fa-tower-observation'
item4.color = config.getColorVal('elementUiPrimary') item4.color = config.getColorVal('elementUiPrimary')
item4.children.forEach((item5: anyObj) => { item4.children.forEach((item5: anyObj) => {
if (!attrs['current-node-key'] && !nodeKey) {
nodeKey = item5.id
emit('init', item5)
}
item5.alias = `${item.name}>${item2.name}>${item3.name}>${item4.name}>${item5.name}` item5.alias = `${item.name}>${item2.name}>${item3.name}>${item4.name}>${item5.name}`
item5.icon = 'fa-solid fa-location-dot' item5.icon = 'fa-solid fa-location-dot'
item5.color = config.getColorVal('elementUiPrimary') item5.color = config.getColorVal('elementUiPrimary')
@@ -99,6 +95,10 @@ const loadData = () => {
}) })
}) })
}) })
nodeKey = res.data[0].children[0].children[0].children[0].children[0].id
emit('init', res.data[0].children[0].children[0].children[0].children[0])
tree.value = res.data tree.value = res.data
if (nodeKey) { if (nodeKey) {
nextTick(() => { nextTick(() => {

View File

@@ -1,35 +1,34 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title'> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px'> <el-form :inline="false" :model="form" label-width="120px">
<el-form-item label='用户名称:'> <el-form-item label="用户名称:">
<el-input v-model='form.name' :disabled='true'></el-input> <el-input v-model="form.name" :disabled="true"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='登录名称:' class='top'> <el-form-item label="登录名称:" class="top">
<el-input v-model='form.loginName' :disabled='true'></el-input> <el-input v-model="form.loginName" :disabled="true"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='归属部门名称:' class='top'> <el-form-item label="归属部门名称:" class="top">
<el-input v-model='form.deptName' :disabled='true'></el-input> <el-input v-model="form.deptName" :disabled="true"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='拥有的角色:' class='top'> <el-form-item label="拥有的角色:" class="top">
<el-input v-model='form.role' :disabled='true'></el-input> <el-input v-model="form.role" :disabled="true"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='电话号码:' class='top'> <el-form-item label="电话号码:" class="top">
<el-input v-model='form.phone' :disabled='true'></el-input> <el-input v-model="form.phone" :disabled="true"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='电子邮箱:' class='top'> <el-form-item label="电子邮箱:" class="top">
<el-input v-model='form.email' :disabled='true'></el-input> <el-input v-model="form.email" :disabled="true"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject } from 'vue' import { ref, inject } from 'vue'
import { reactive } from 'vue' import { reactive } from 'vue'
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('用户信息') const title = ref('用户信息')
const adminInfo = useAdminInfo() const adminInfo = useAdminInfo()
@@ -43,7 +42,6 @@ const form = reactive({
loginName: '' loginName: ''
}) })
const open = () => { const open = () => {
dialogVisible.value = true dialogVisible.value = true
for (const key in form) { for (const key in form) {

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="校验密码:" prop="password"> <el-form-item label="校验密码:" prop="password">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="角色名称"> <el-form-item label="角色名称">

View File

@@ -95,6 +95,7 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
if ( if (
response.data.code === 'A0000' || response.data.code === 'A0000' ||
response.data.type === 'application/json' || response.data.type === 'application/json' ||
Array.isArray(response.data) ||
response.data.type === 'application/octet-stream' || response.data.type === 'application/octet-stream' ||
response.data.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' response.data.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
) { ) {

View File

@@ -83,6 +83,9 @@ export default class TableStore {
this.table.data = [] this.table.data = []
this.table.total = 0 this.table.total = 0
} }
if (Array.isArray(res)) {
this.table.data = res
}
if (this.isWebPaging) { if (this.isWebPaging) {
this.table.webPagingData = window.XEUtils.chunk(this.table.data, this.table.params.pageSize) this.table.webPagingData = window.XEUtils.chunk(this.table.data, this.table.params.pageSize)
this.table.data = this.table.webPagingData[this.table.params.pageNum - 1] this.table.data = this.table.webPagingData[this.table.params.pageNum - 1]
@@ -110,8 +113,8 @@ export default class TableStore {
'reset', 'reset',
() => { () => {
delete this.initData.pageSize delete this.initData.pageSize
console.log(this.table.params) // console.log(this.table.params)
console.log(this.initData) // console.log(this.initData)
Object.assign(this.table.params, this.initData) Object.assign(this.table.params, this.initData)
this.index() this.index()
this.table.resetCallback && this.table.resetCallback() this.table.resetCallback && this.table.resetCallback()

View File

@@ -171,7 +171,7 @@
</el-button> </el-button>
</div> </div>
<el-dialog v-model="dialogVisible" title="新增干扰源类型" width="70%"> <el-dialog draggable v-model="dialogVisible" title="新增干扰源类型" width="70%">
<vxe-table v-bind="defaultAttribute" height="400px" ref="xTable" :data="userData"> <vxe-table v-bind="defaultAttribute" height="400px" ref="xTable" :data="userData">
<vxe-column type="checkbox" width="60"></vxe-column> <vxe-column type="checkbox" width="60"></vxe-column>
<vxe-column field="userName" title="用户名称"></vxe-column> <vxe-column field="userName" title="用户名称"></vxe-column>

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog v-model="Views" title="承载能力评估策略" width="1400" :before-close="handleClose"> <el-dialog draggable v-model="Views" title="承载能力评估策略" width="1400" :before-close="handleClose">
<div style="display: flex; justify-content: end"> <div style="display: flex; justify-content: end">
<el-button icon="el-icon-Refresh" type="primary" @click="restores">一键还原</el-button> <el-button icon="el-icon-Refresh" type="primary" @click="restores">一键还原</el-button>
</div> </div>
@@ -82,7 +82,7 @@
</vxe-column> </vxe-column>
</vxe-table> </vxe-table>
<!-- 修改 --> <!-- 修改 -->
<el-dialog v-model="dialogVisible" title="安全等级配置" width="500"> <el-dialog draggable v-model="dialogVisible" title="安全等级配置" width="500">
<el-form :model="form" label-width="auto"> <el-form :model="form" label-width="auto">
<el-form-item label="运算符号:"> <el-form-item label="运算符号:">
<el-radio-group v-model="form.comparisonOperators" @change="groupChang"> <el-radio-group v-model="form.comparisonOperators" @change="groupChang">

View File

@@ -1,50 +1,49 @@
<template> <template>
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" title="设备">
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" title="设备"> <el-button icon="el-icon-Plus" type="primary" @click="add" class="mb10">新增</el-button>
<el-button icon="el-icon-Plus" type="primary" @click="add" class="mb10">新增</el-button> <vxe-table v-bind="defaultAttribute" v-loading="loading" height="auto" ref="xTable" :data="userData">
<vxe-table v-bind="defaultAttribute" v-loading="loading" height="auto" ref="xTable" :data="userData"> <vxe-column field="devName" title="设备名称"></vxe-column>
<vxe-column field="devName" title="设备名称"></vxe-column> <vxe-column field="devScale" title="电压等级" :formatter="formatter"></vxe-column>
<vxe-column field="devScale" title="电压等级" :formatter="formatter"></vxe-column> <vxe-column field="protocolCapacity" title="设备容量(MVA)"></vxe-column>
<vxe-column field="protocolCapacity" title="设备容量(MVA)"></vxe-column> <vxe-column title="操作" width="120px">
<vxe-column title="操作" width="120px"> <template #default="{ row }">
<template #default="{ row }"> <el-button type="primary" size="small" link @click="revise(row)">修改</el-button>
<el-button type="primary" size="small" link @click="revise(row)">修改</el-button>
<el-popconfirm @confirm="deleteD(row)" title="确认删除设备?"> <el-popconfirm @confirm="deleteD(row)" title="确认删除设备?">
<template #reference> <template #reference>
<el-button type="danger" size="small" link>删除</el-button> <el-button type="danger" size="small" link>删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</vxe-column> </vxe-column>
</vxe-table> </vxe-table>
</el-dialog> </el-dialog>
<el-dialog v-model="addShow" width="400px" :title="title" :before-close="handleClose"> <el-dialog draggable v-model="addShow" width="400px" :title="title" :before-close="handleClose">
<el-form :model="form" ref="formRef" :rules="rules" label-width="auto"> <el-form :model="form" ref="formRef" :rules="rules" label-width="auto">
<el-form-item label="设备名称" prop="devName"> <el-form-item label="设备名称" prop="devName">
<el-input v-model="form.devName" placeholder="请输入设备名称" /> <el-input v-model="form.devName" placeholder="请输入设备名称" />
</el-form-item> </el-form-item>
<el-form-item label="电压等级" prop="devScale"> <el-form-item label="电压等级" prop="devScale">
<el-select v-model="form.devScale" clearable placeholder="请选择电压等级"> <el-select v-model="form.devScale" clearable placeholder="请选择电压等级">
<el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备容量" prop="protocolCapacity"> <el-form-item label="设备容量" prop="protocolCapacity">
<el-input-number <el-input-number
v-model="form.protocolCapacity" v-model="form.protocolCapacity"
style="width: 100%" style="width: 100%"
:min="0" :min="0"
placeholder="请选择设备容量" placeholder="请选择设备容量"
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="handleClose">取消</el-button> <el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button> <el-button type="primary" @click="submitForm">确定</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from 'vue' import { ref } from 'vue'

View File

@@ -14,7 +14,7 @@
</template> </template>
</TableHeader> </TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
<el-dialog v-model="dialogVisible" :title="title" width="600" :before-close="handleClose"> <el-dialog draggable v-model="dialogVisible" :title="title" width="600" :before-close="handleClose">
<el-form ref="ruleFormRef" :model="form" label-width="180px" :disabled="disabled" :rules="rules"> <el-form ref="ruleFormRef" :model="form" label-width="180px" :disabled="disabled" :rules="rules">
<el-form-item label="用户名称:" prop="userName"> <el-form-item label="用户名称:" prop="userName">
<el-input v-model="form.userName" clearable placeholder="请输入用户名称" /> <el-input v-model="form.userName" clearable placeholder="请输入用户名称" />

View File

@@ -19,6 +19,7 @@
</TableHeader> </TableHeader>
<Table ref="tableRef"></Table> <Table ref="tableRef"></Table>
<el-dialog <el-dialog
draggable
:title="dialogTitle" :title="dialogTitle"
v-model="dialogFormVisible" v-model="dialogFormVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
@@ -200,7 +201,7 @@ const tableStore = new TableStore({
], ],
beforeSearchFun: () => { beforeSearchFun: () => {
for (let key in tableStore.table.params) { for (let key in tableStore.table.params) {
if (tableStore.table.params[key] === '' && key !== 'nodeGrade'&& key !== 'searchState') { if (tableStore.table.params[key] === '' && key !== 'nodeGrade' && key !== 'searchState') {
delete tableStore.table.params[key] delete tableStore.table.params[key]
} }
} }

View File

@@ -43,7 +43,11 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选">
<el-input v-model="tableStore.table.params.filterName" @keyup="searchEvent" placeholder="输入关键字筛选" /> <el-input
v-model="tableStore.table.params.filterName"
@keyup="searchEvent"
placeholder="输入关键字筛选"
/>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
@@ -70,48 +74,23 @@
<vxe-column field="versionDate" title="版本日期"></vxe-column> <vxe-column field="versionDate" title="版本日期"></vxe-column>
<vxe-column field="runFlag" title="终端状态"> <vxe-column field="runFlag" title="终端状态">
<template #default="{ row }"> <template #default="{ row }">
<el-tag <el-tag v-if="row.runFlag === 0" style="color: #fff; background: #0099cc" size="small">
v-if="row.runFlag === 0"
style="color: #fff; background: #0099cc"
size="small"
>
投运 投运
</el-tag> </el-tag>
<el-tag <el-tag v-if="row.runFlag === 1" style="color: #fff; background: #996600" size="small">
v-if="row.runFlag === 1"
style="color: #fff; background: #996600"
size="small"
>
热备用 热备用
</el-tag> </el-tag>
<el-tag <el-tag v-if="row.runFlag === 2" style="color: #fff; background: #cc0000" size="small">
v-if="row.runFlag === 2"
style="color: #fff; background: #cc0000"
size="small"
>
停运 停运
</el-tag> </el-tag>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="comFlag" title="通讯状态"> <vxe-column field="comFlag" title="通讯状态">
<template #default="{ row }"> <template #default="{ row }">
<el-tag <el-tag v-if="row.comFlag === 0" style="color: #fff; background: #cc0000" size="small">
v-if="row.comFlag === 0"
style="color: #fff; background: #cc0000"
size="small"
>
中断 中断
</el-tag> </el-tag>
<el-tag <el-tag v-if="row.comFlag === 1" style="color: #fff; background: #2e8b57" size="small">
v-if="row.comFlag === 1"
style="color: #fff; background: #2e8b57"
size="small"
>
正常 正常
</el-tag> </el-tag>
</template> </template>
@@ -125,13 +104,10 @@
<vxe-column field="updateTime" title="最新升级时间"></vxe-column> <vxe-column field="updateTime" title="最新升级时间"></vxe-column>
<vxe-column title="操作" min-width="100"> <vxe-column title="操作" min-width="100">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-if="row.level == 4" size="small" link @click="updateprogram(row)"> <el-button v-if="row.level == 4" size="small" link @click="updateprogram(row)">升级</el-button>
升级
</el-button>
<el-button <el-button
v-if="row.level == 4" v-if="row.level == 4"
:disabled="row.state == 1 ? true : false" :disabled="row.state == 1 ? true : false"
size="small" size="small"
link link
@click="queryview(row)" @click="queryview(row)"
@@ -143,6 +119,7 @@
</vxe-table> </vxe-table>
</div> </div>
<el-dialog <el-dialog
draggable
v-model="dialogVisible" v-model="dialogVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
:title="protitle + '#终端升级日志查看'" :title="protitle + '#终端升级日志查看'"
@@ -154,32 +131,20 @@
<vxe-column field="versionId" align="center" title="版本序号"></vxe-column> <vxe-column field="versionId" align="center" title="版本序号"></vxe-column>
<vxe-column field="flag" align="center" title="版本状态" width="100"> <vxe-column field="flag" align="center" title="版本状态" width="100">
<template #default="{ row }"> <template #default="{ row }">
<el-tag v-if="row.flag == true" style="color: #fff; background: #fc0"> <el-tag v-if="row.flag == true" style="color: #fff; background: #fc0">前期版本</el-tag>
前期版本 <el-tag v-if="row.flag == false" style="color: #fff; background: #0c0">当前版本</el-tag>
</el-tag>
<el-tag v-if="row.flag == false" style="color: #fff; background: #0c0">
当前版本
</el-tag>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="result" align="center" title="升级结果" width="100"> <vxe-column field="result" align="center" title="升级结果" width="100">
<template #default="{ row }"> <template #default="{ row }">
<el-tag v-if="row.result == false" style="color: #fff; background: #f30"> <el-tag v-if="row.result == false" style="color: #fff; background: #f30">升级失败</el-tag>
升级失败 <el-tag v-if="row.result == true" style="color: #fff; background: #093">升级成功</el-tag>
</el-tag>
<el-tag v-if="row.result == true" style="color: #fff; background: #093">
升级成功
</el-tag>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="state" align="center" title="状态" width="100"> <vxe-column field="state" align="center" title="状态" width="100">
<template #default="{ row }"> <template #default="{ row }">
<el-tag v-if="row.state == false" style="color: #fff; background: #f30"> <el-tag v-if="row.state == false" style="color: #fff; background: #f30">删除</el-tag>
删除 <el-tag v-if="row.state == true" style="color: #fff; background: #093">正常</el-tag>
</el-tag>
<el-tag v-if="row.state == true" style="color: #fff; background: #093">
正常
</el-tag>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="createBy" align="center" title="创建用户"></vxe-column> <vxe-column field="createBy" align="center" title="创建用户"></vxe-column>
@@ -191,6 +156,7 @@
</el-dialog> </el-dialog>
<!-- 升级 --> <!-- 升级 -->
<el-dialog <el-dialog
draggable
v-model="prodialogVisible" v-model="prodialogVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
:title="protitle + '#终端程序升级'" :title="protitle + '#终端程序升级'"
@@ -283,11 +249,11 @@ const tableStore = new TableStore({
}, 0) }, 0)
} }
}) })
tableStore.table.params.teriminal='' tableStore.table.params.teriminal = ''
tableStore.table.params.state='' tableStore.table.params.state = ''
tableStore.table.params.program='' tableStore.table.params.program = ''
tableStore.table.params.searchEvent='' tableStore.table.params.searchEvent = ''
tableStore.table.params.filterName='' tableStore.table.params.filterName = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
const tree2List = (list: any) => { const tree2List = (list: any) => {
//存储结果的数组 //存储结果的数组

View File

@@ -34,7 +34,11 @@
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="筛选">
<el-input v-model="tableStore.table.params.filterName" @keyup="searchEvent" placeholder="输入关键字筛选" /> <el-input
v-model="tableStore.table.params.filterName"
@keyup="searchEvent"
placeholder="输入关键字筛选"
/>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
@@ -94,48 +98,23 @@
</vxe-column> </vxe-column>
<vxe-column field="runFlag" title="终端状态"> <vxe-column field="runFlag" title="终端状态">
<template #default="{ row }"> <template #default="{ row }">
<el-tag <el-tag v-if="row.runFlag === 0" style="color: #fff; background: #0099cc" size="small">
v-if="row.runFlag === 0"
style="color: #fff; background: #0099cc"
size="small"
>
投运 投运
</el-tag> </el-tag>
<el-tag <el-tag v-if="row.runFlag === 1" style="color: #fff; background: #996600" size="small">
v-if="row.runFlag === 1"
style="color: #fff; background: #996600"
size="small"
>
热备用 热备用
</el-tag> </el-tag>
<el-tag <el-tag v-if="row.runFlag === 2" style="color: #fff; background: #cc0000" size="small">
v-if="row.runFlag === 2"
style="color: #fff; background: #cc0000"
size="small"
>
停运 停运
</el-tag> </el-tag>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="comFlag" title="通讯状态"> <vxe-column field="comFlag" title="通讯状态">
<template #default="{ row }"> <template #default="{ row }">
<el-tag <el-tag v-if="row.comFlag === 0" style="color: #fff; background: #cc0000" size="small">
v-if="row.comFlag === 0"
style="color: #fff; background: #cc0000"
size="small"
>
中断 中断
</el-tag> </el-tag>
<el-tag <el-tag v-if="row.comFlag === 1" style="color: #fff; background: #2e8b57" size="small">
v-if="row.comFlag === 1"
style="color: #fff; background: #2e8b57"
size="small"
>
正常 正常
</el-tag> </el-tag>
</template> </template>
@@ -170,6 +149,7 @@
</div> </div>
<!-- 终端使用详情 --> <!-- 终端使用详情 -->
<el-dialog <el-dialog
draggable
v-model="dialogVisiblexq" v-model="dialogVisiblexq"
v-if="dialogVisiblexq" v-if="dialogVisiblexq"
title="终端使用详情" title="终端使用详情"
@@ -263,10 +243,10 @@ const tableStore = new TableStore({
}, 0) }, 0)
} }
}) })
tableStore.table.params.devType='' tableStore.table.params.devType = ''
tableStore.table.params.runFlag='' tableStore.table.params.runFlag = ''
tableStore.table.params.comFlag='' tableStore.table.params.comFlag = ''
tableStore.table.params.filterName='' tableStore.table.params.filterName = ''
// 处理大数据卡顿 // 处理大数据卡顿
const tree2List = (list: any) => { const tree2List = (list: any) => {
//存储结果的数组 //存储结果的数组

View File

@@ -1,349 +0,0 @@
// import { createCellPos } from './translateNumToLetter'
import Excel from 'exceljs'
import FileSaver from 'file-saver'
const exportExcel = function(luckysheet, value) {
// 参数为luckysheet.getluckysheetfile()获取的对象
// 1.创建工作簿,可以为工作簿添加属性
const workbook = new Excel.Workbook()
// 2.创建表格,第二个参数可以配置创建什么样的工作表
if (Object.prototype.toString.call(luckysheet) === '[object Object]') {
luckysheet = [luckysheet]
}
luckysheet.forEach(function(table) {
if (table.data.length === 0) return true
// ws.getCell('B2').fill = fills.
const worksheet = workbook.addWorksheet(table.name)
const merge = (table.config && table.config.merge) || {}
const borderInfo = (table.config && table.config.borderInfo) || {}
// 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
setStyleAndValue(table.data, worksheet)
setMerge(merge, worksheet)
setBorder(borderInfo, worksheet)
return true
})
// return
// 4.写入 buffer
const buffer = workbook.xlsx.writeBuffer().then(data => {
// console.log('data', data)
const blob = new Blob([data], {
type: 'application/vnd.ms-excel;charset=utf-8'
})
console.log("导出成功!")
FileSaver.saveAs(blob, `${value}.xlsx`)
})
return buffer
}
var setMerge = function(luckyMerge = {}, worksheet) {
const mergearr = Object.values(luckyMerge)
mergearr.forEach(function(elem) {
// elem格式{r: 0, c: 0, rs: 1, cs: 2}
// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12
worksheet.mergeCells(
elem.r + 1,
elem.c + 1,
elem.r + elem.rs,
elem.c + elem.cs
)
})
}
var setBorder = function(luckyBorderInfo, worksheet) {
if (!Array.isArray(luckyBorderInfo)) return
// console.log('luckyBorderInfo', luckyBorderInfo)
luckyBorderInfo.forEach(function(elem) {
// 现在只兼容到borderType 为range的情况
// console.log('ele', elem)
if (elem.rangeType === 'range') {
let border = borderConvert(elem.borderType, elem.style, elem.color)
let rang = elem.range[0]
// console.log('range', rang)
let row = rang.row
let column = rang.column
for (let i = row[0] + 1; i < row[1] + 2; i++) {
for (let y = column[0] + 1; y < column[1] + 2; y++) {
worksheet.getCell(i, y).border = border
}
}
}
if (elem.rangeType === 'cell') {
// col_index: 2
// row_index: 1
// b: {
// color: '#d0d4e3'
// style: 1
// }
const { col_index, row_index } = elem.value
const borderData = Object.assign({}, elem.value)
delete borderData.col_index
delete borderData.row_index
let border = addborderToCell(borderData, row_index, col_index)
// console.log('bordre', border, borderData)
worksheet.getCell(row_index + 1, col_index + 1).border = border
}
// console.log(rang.column_focus + 1, rang.row_focus + 1)
// worksheet.getCell(rang.row_focus + 1, rang.column_focus + 1).border = border
})
}
var setStyleAndValue = function(cellArr, worksheet) {
if (!Array.isArray(cellArr)) return
cellArr.forEach(function(row, rowid) {
row.every(function(cell, columnid) {
if (!cell) return true
let fill = fillConvert(cell.bg)
let font = fontConvert(
cell.ff,
cell.fc,
cell.bl,
cell.it,
cell.fs,
cell.cl,
cell.ul
)
let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr)
let value = ''
if (cell.f) {
value = { formula: cell.f, result: cell.v }
} else if (!cell.v && cell.ct && cell.ct.s) {
// xls转为xlsx之后内部存在不同的格式都会进到富文本里即值不存在与cell.v而是存在于cell.ct.s之后
// value = cell.ct.s[0].v
cell.ct.s.forEach(arr => {
value += arr.v
})
} else {
value = cell.v
}
// style 填入到_value中可以实现填充色
let letter = createCellPos(columnid)
let target = worksheet.getCell(letter + (rowid + 1))
// console.log('1233', letter + (rowid + 1))
for (const key in fill) {
target.fill = fill
break
}
target.font = font
target.alignment = alignment
target.value = value
return true
})
})
}
var fillConvert = function(bg) {
if (!bg) {
return {}
}
// const bgc = bg.replace('#', '')
let fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: bg.replace('#', '') }
}
return fill
}
var fontConvert = function(
ff = 0,
fc = '#000000',
bl = 0,
it = 0,
fs = 10,
cl = 0,
ul = 0
) {
// luckysheetff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)
const luckyToExcel = {
0: '微软雅黑',
1: '宋体Song',
2: '黑体ST Heiti',
3: '楷体ST Kaiti',
4: '仿宋ST FangSong',
5: '新宋体ST Song',
6: '华文新魏',
7: '华文行楷',
8: '华文隶书',
9: 'Arial',
10: 'Times New Roman ',
11: 'Tahoma ',
12: 'Verdana',
num2bl: function(num) {
return num === 0 ? false : true
}
}
// 出现Bug导入的时候ff为luckyToExcel的val
let font = {
name: typeof ff === 'number' ? luckyToExcel[ff] : ff,
family: 1,
size: fs,
color: { argb: fc.replace('#', '') },
bold: luckyToExcel.num2bl(bl),
italic: luckyToExcel.num2bl(it),
underline: luckyToExcel.num2bl(ul),
strike: luckyToExcel.num2bl(cl)
}
return font
}
var alignmentConvert = function(
vt = 'default',
ht = 'default',
tb = 'default',
tr = 'default'
) {
// luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转)
const luckyToExcel = {
vertical: {
0: 'middle',
1: 'top',
2: 'bottom',
default: 'top'
},
horizontal: {
0: 'center',
1: 'left',
2: 'right',
default: 'left'
},
wrapText: {
0: false,
1: false,
2: true,
default: false
},
textRotation: {
0: 0,
1: 45,
2: -45,
3: 'vertical',
4: 90,
5: -90,
default: 0
}
}
let alignment = {
vertical: luckyToExcel.vertical[vt],
horizontal: luckyToExcel.horizontal[ht],
wrapText: luckyToExcel.wrapText[tb],
textRotation: luckyToExcel.textRotation[tr]
}
return alignment
}
var borderConvert = function(borderType, style = 1, color = '#000') {
// 对应luckysheet的config中borderinfo的的参数
if (!borderType) {
return {}
}
const luckyToExcel = {
type: {
'border-all': 'all',
'border-top': 'top',
'border-right': 'right',
'border-bottom': 'bottom',
'border-left': 'left'
},
style: {
0: 'none',
1: 'thin',
2: 'hair',
3: 'dotted',
4: 'dashDot', // 'Dashed',
5: 'dashDot',
6: 'dashDotDot',
7: 'double',
8: 'medium',
9: 'mediumDashed',
10: 'mediumDashDot',
11: 'mediumDashDotDot',
12: 'slantDashDot',
13: 'thick'
}
}
let template = {
style: luckyToExcel.style[style],
color: { argb: color.replace('#', '') }
}
let border = {}
if (luckyToExcel.type[borderType] === 'all') {
border['top'] = template
border['right'] = template
border['bottom'] = template
border['left'] = template
} else {
border[luckyToExcel.type[borderType]] = template
}
// console.log('border', border)
return border
}
function addborderToCell(borders, row_index, col_index) {
let border = {}
const luckyExcel = {
type: {
l: 'left',
r: 'right',
b: 'bottom',
t: 'top'
},
style: {
0: 'none',
1: 'thin',
2: 'hair',
3: 'dotted',
4: 'dashDot', // 'Dashed',
5: 'dashDot',
6: 'dashDotDot',
7: 'double',
8: 'medium',
9: 'mediumDashed',
10: 'mediumDashDot',
11: 'mediumDashDotDot',
12: 'slantDashDot',
13: 'thick'
}
}
// console.log('borders', borders)
for (const bor in borders) {
// console.log(bor)
if (borders[bor].color.indexOf('rgb') === -1) {
border[luckyExcel.type[bor]] = {
style: luckyExcel.style[borders[bor].style],
color: { argb: borders[bor].color.replace('#', '') }
}
} else {
border[luckyExcel.type[bor]] = {
style: luckyExcel.style[borders[bor].style],
color: { argb: borders[bor].color }
}
}
}
return border
}
function createCellPos(n) {
let ordA = 'A'.charCodeAt(0)
let ordZ = 'Z'.charCodeAt(0)
let len = ordZ - ordA + 1
let s = ''
while (n >= 0) {
s = String.fromCharCode((n % len) + ordA) + s
n = Math.floor(n / len) - 1
}
return s
}
export {
exportExcel
}

View File

@@ -1,26 +1,146 @@
<template> <template>
<div class="default-main"> <div class="default-main" :style="height">
<div id="luckysheet" :style="{ height: height }"></div> <splitpanes style="height: 100%" class="default-theme" id="navigation-splitpanes">
<pane :size="size">
<PointTree
:default-expand-all="false"
@node-click="handleNodeClick"
@init="handleNodeClick"
></PointTree>
</pane>
<pane style="background: #fff" :style="height">
<TableHeader ref="TableHeaderRef" datePicker>
<template v-slot:select>
<el-form-item label="模板策略">
<el-select v-model="Template" @change="changetype" placeholder="请选择模版" value-key="id">
<el-option
v-for="item in templatePolicy"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="报表类型:">
<el-select
:disabled="true"
v-model="reportForm"
:popper-append-to-body="false"
placeholder="请选择报表类型"
>
<el-option
v-for="item in reportFormList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">导出excel</el-button>
</template>
</TableHeader>
<div class="box">
<div id="luckysheet" :style="`height: calc(${tableStore.table.height} + 45px)`"></div>
</div>
</pane>
</splitpanes>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import LuckyExcel from 'luckyexcel' import { onMounted, ref, provide } from 'vue'
import { exportExcel } from './export.js' import 'splitpanes/dist/splitpanes.css'
import { Splitpanes, Pane } from 'splitpanes'
import TableStore from '@/utils/tableStore'
import PointTree from '@/components/tree/pqs/pointTree.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
import { ref, onMounted } from 'vue' import { getTemplateByDept } from '@/api/harmonic-boot/luckyexcel'
const height = mainHeight(20).height import { exportExcel } from '@/views/system/reportForms/export.js'
const options = ref({
container: 'luckysheet', defineOptions({
title: '测试Excel', // 表 头名 name: 'harmonic-boot/xieboReport'
lang: 'zh', // 中文
showtoolbar: true, // 是否显示工具栏
showinfobar: false, // 是否显示顶部信息栏
showsheetbar: true // 是否显示底部sheet按钮
}) })
// LuckyExcel.destroy() const height = mainHeight(20)
const size = ref(0)
const dictData = useDictData()
const TableHeaderRef = ref()
const dotList: any = ref({})
const Template: any = ref({})
const reportForm: any = ref('')
const templatePolicy: any = ref([])
const reportFormList: any = ref([
{
value: '1',
label: '分析报表'
},
{
value: '2',
label: '统计报表'
},
{
value: '3',
label: '自定义报表'
}
])
const tableStore = new TableStore({
url: '/harmonic-boot/customReport/getCustomReport',
method: 'POST',
column: [],
beforeSearchFun: () => {
tableStore.table.params.tempId = Template.value.id
tableStore.table.params.lineId = dotList.value.id
},
loadCallback: () => {
console.log(tableStore.table.data)
luckysheet.create({
container: 'luckysheet',
title: '', // 表 头名
lang: 'zh', // 中文
showtoolbar: false, // 是否显示工具栏
showinfobar: false, // 是否显示顶部信息栏
showsheetbar: true, // 是否显示底部sheet按钮
data: tableStore.table.data
})
}
})
provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
luckysheet.create(options.value) const dom = document.getElementById('navigation-splitpanes')
if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100)
}
}) })
getTemplateByDept({ id: dictData.state.area[0].id }).then((res: any) => {
templatePolicy.value = res.data
Template.value = res.data[0]
reportForm.value = res.data[0]?.reportForm
})
const changetype = (val: any) => {
reportForm.value = val.reportForm
}
const handleNodeClick = (data: any, node: any) => {
if (data.level == 6) {
dotList.value = data
tableStore.index()
}
}
const exportEvent = () => {
exportExcel(luckysheet.getAllSheets(), '统计报表下载')
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss">
.splitpanes.default-theme .splitpanes__pane {
background: #eaeef1;
}
.box {
padding: 10px;
}
</style>

View File

@@ -0,0 +1,122 @@
<template>
<div class="default-main" :style="height">
<splitpanes style="height: 100%" class="default-theme" id="navigation-splitpanes">
<pane :size="size">
<PointTree
:default-expand-all="false"
@node-click="handleNodeClick"
@init="handleNodeClick"
></PointTree>
</pane>
<pane style="background: #fff" :style="height">
<TableHeader ref="TableHeaderRef" datePicker>
<template v-slot:select>
<el-form-item label="模板策略">
<el-select v-model="Template" @change="changetype" placeholder="请选择模版" value-key="id">
<el-option
v-for="item in templatePolicy"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="报表类型:">
<el-select
:disabled="true"
v-model="reportForm"
:popper-append-to-body="false"
placeholder="请选择报表类型"
>
<el-option
v-for="item in reportFormList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">导出excel</el-button>
</template>
</TableHeader>
<div class="box">
<div id="luckysheet">
<img
width="100%"
:style="`height: calc(${tableStore.table.height} + 40px)`"
src="@/assets/img/jss.png"
/>
</div>
</div>
</pane>
</splitpanes>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref, provide } from 'vue'
import 'splitpanes/dist/splitpanes.css'
import { Splitpanes, Pane } from 'splitpanes'
import TableStore from '@/utils/tableStore'
import PointTree from '@/components/tree/pqs/pointTree.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import { mainHeight } from '@/utils/layout'
import { getTemplateByDept } from '@/api/harmonic-boot/luckyexcel'
defineOptions({
name: 'harmonic-boot/xieboReport'
})
const height = mainHeight(20)
const size = ref(0)
const dictData = useDictData()
const TableHeaderRef = ref()
const dotList: any = ref({})
const Template: any = ref({})
const reportForm: any = ref('')
const templatePolicy: any = ref([])
const tableStore = new TableStore({
url: '/harmonic-boot/customReport/getCustomReport',
method: 'POST',
column: [],
beforeSearchFun: () => {},
loadCallback: () => {}
})
provide('tableStore', tableStore)
onMounted(() => {
const dom = document.getElementById('navigation-splitpanes')
if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100)
}
})
getTemplateByDept({ id: dictData.state.area[0].id }).then((res: any) => {
templatePolicy.value = res.data
Template.value = res.data[0]
reportForm.value = res.data[0]?.reportForm
})
const changetype = (val: any) => {
reportForm.value = val.reportForm
}
const handleNodeClick = (data: any, node: any) => {
if (data.level == 6) {
dotList.value = data
tableStore.index()
}
}
const exportEvent = () => {}
</script>
<style lang="scss">
.splitpanes.default-theme .splitpanes__pane {
background: #eaeef1;
}
.box {
padding: 10px;
}
</style>

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog v-model="add" title="问题新增" width="50%" :before-close="handleClose"> <el-dialog draggable v-model="add" title="问题新增" width="50%" :before-close="handleClose">
<el-divider content-position="left">第一步 基本信息填报</el-divider> <el-divider content-position="left">第一步 基本信息填报</el-divider>
<el-form :inline="true" ref="ruleForm" :rules="rules" :model="addData"> <el-form :inline="true" ref="ruleForm" :rules="rules" :model="addData">
<el-form-item label="所属单位"> <el-form-item label="所属单位">
@@ -29,7 +29,7 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 新增第二步(在线监测超标问题新增) --> <!-- 新增第二步(在线监测超标问题新增) -->
<el-dialog title="在线监测超标问题新增" v-model="onlineAdd" width="70%" :before-close="handleClose"> <el-dialog draggable title="在线监测超标问题新增" v-model="onlineAdd" width="70%" :before-close="handleClose">
<el-divider content-position="left">第二步 选择问题测点</el-divider> <el-divider content-position="left">第二步 选择问题测点</el-divider>
<el-form :inline="true" class="form"> <el-form :inline="true" class="form">
<el-form-item label="告警时间"> <el-form-item label="告警时间">
@@ -55,7 +55,7 @@
</el-dialog> </el-dialog>
<!-- 新增第二步(普测超标问题新增) --> <!-- 新增第二步(普测超标问题新增) -->
<el-dialog title="普测超标问题新增" v-model="ordinaryAdd" width="70%" :before-close="handleClose"> <el-dialog draggable title="普测超标问题新增" v-model="ordinaryAdd" width="70%" :before-close="handleClose">
<el-divider content-position="left">第二步 选择普测计划及问题类型</el-divider> <el-divider content-position="left">第二步 选择普测计划及问题类型</el-divider>
<el-form :model="ordinaryA" :inline="true" class="form"> <el-form :model="ordinaryA" :inline="true" class="form">
<el-form-item> <el-form-item>
@@ -126,7 +126,7 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 新增第二步(运维异常问题新增) --> <!-- 新增第二步(运维异常问题新增) -->
<el-dialog title="运维异常问题新增" v-model="operationAdd" width="70%" :before-close="handleClose"> <el-dialog draggable title="运维异常问题新增" v-model="operationAdd" width="70%" :before-close="handleClose">
<el-divider content-position="left">第二步 选择普测计划及问题类型</el-divider> <el-divider content-position="left">第二步 选择普测计划及问题类型</el-divider>
<el-form :model="operationAdddata" ref="operationAddRef" :inline="true" :rules="rules"> <el-form :model="operationAdddata" ref="operationAddRef" :inline="true" :rules="rules">
<el-form-item label="异常设备名称:" prop="abnormalDevName"> <el-form-item label="异常设备名称:" prop="abnormalDevName">
@@ -182,7 +182,7 @@
</el-dialog> </el-dialog>
<!-- 新增第二步(用户投诉问题新增) --> <!-- 新增第二步(用户投诉问题新增) -->
<el-dialog title="用户投诉问题新增" v-model="userAdd" width="70%" :before-close="handleClose"> <el-dialog draggable title="用户投诉问题新增" v-model="userAdd" width="70%" :before-close="handleClose">
<el-divider content-position="left">第二步 选择投诉用户</el-divider> <el-divider content-position="left">第二步 选择投诉用户</el-divider>
<el-form :model="userA" :inline="true" :rules="rules"> <el-form :model="userA" :inline="true" :rules="rules">
<el-form-item label="用户类型:"> <el-form-item label="用户类型:">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog title="详情" v-model="dialogVisible" width="70%" :before-close="handleClose"> <el-dialog draggable title="详情" v-model="dialogVisible" width="70%" :before-close="handleClose">
<el-divider content-position="left" style="font-size: 18px; font-weight: bolder">问题基本信息</el-divider> <el-divider content-position="left" style="font-size: 18px; font-weight: bolder">问题基本信息</el-divider>
<el-form :model="addData" :inline="true" disabled label-width="120px"> <el-form :model="addData" :inline="true" disabled label-width="120px">
<el-form-item label="所属单位:"> <el-form-item label="所属单位:">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog title="填报" v-model="dialogVisible" width="70%" :before-close="handleClose"> <el-dialog draggable title="填报" v-model="dialogVisible" width="70%" :before-close="handleClose">
<el-divider content-position="left" style="font-size: 18px; font-weight: bolder">问题基本信息</el-divider> <el-divider content-position="left" style="font-size: 18px; font-weight: bolder">问题基本信息</el-divider>
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="所属单位:"> <el-form-item label="所属单位:">
@@ -44,7 +44,14 @@
</el-steps> </el-steps>
<!-- 原因分析 0 --> <!-- 原因分析 0 -->
<el-form :model="causeAnalysisData" v-if="control == 0" :rules="rules" ref="form" label-width="140px" class="form"> <el-form
:model="causeAnalysisData"
v-if="control == 0"
:rules="rules"
ref="form"
label-width="140px"
class="form"
>
<el-form-item label="电网侧原因:" prop="reportProcessContentYyfx"> <el-form-item label="电网侧原因:" prop="reportProcessContentYyfx">
<el-checkbox-group v-model="causeAnalysisData.reportProcessContentYyfx"> <el-checkbox-group v-model="causeAnalysisData.reportProcessContentYyfx">
<el-checkbox v-for="(item, ind) in CauseList" :key="ind" :label="item.code"> <el-checkbox v-for="(item, ind) in CauseList" :key="ind" :label="item.code">
@@ -150,7 +157,7 @@ const open = (row: any) => {
} }
const step = (e: number) => { const step = (e: number) => {
if (active.value >= e) { if (active.value >= e) {
control.value=e control.value = e
} }
} }

View File

@@ -23,7 +23,7 @@
></vxe-table-column> ></vxe-table-column>
</vxe-table> </vxe-table>
</div> </div>
<el-dialog v-model="dialogVisible" title="年限设置" width="500" :before-close="handleClose"> <el-dialog draggable v-model="dialogVisible" title="年限设置" width="500" :before-close="handleClose">
<el-input-number v-model="num" :min="0" :max="1000" /> <el-input-number v-model="num" :min="0" :max="1000" />
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">

View File

@@ -16,7 +16,7 @@
</TableHeader> </TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
<!-- 上传弹窗 --> <!-- 上传弹窗 -->
<el-dialog title="上传" v-model="addUpload" width="500px"> <el-dialog draggable title="上传" v-model="addUpload" width="500px">
<el-upload <el-upload
multiple multiple
action="" action=""
@@ -35,7 +35,7 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 文件查看 --> <!-- 文件查看 -->
<el-dialog title="文件查看" v-model="dataShow" width="600px"> <el-dialog draggable title="文件查看" v-model="dataShow" width="600px">
<vxe-table height="400" auto-resize :data="uploadList" v-bind="defaultAttribute"> <vxe-table height="400" auto-resize :data="uploadList" v-bind="defaultAttribute">
<vxe-column field="minFileName" title="文件名称"></vxe-column> <vxe-column field="minFileName" title="文件名称"></vxe-column>

View File

@@ -1,6 +1,6 @@
. .
<template> <template>
<el-dialog :title="title" v-model="planAddition" width="950px" :before-close="cancelFn"> <el-dialog draggable :title="title" v-model="planAddition" width="950px" :before-close="cancelFn">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="10"> <el-col :span="10">
<el-divider content-position="left">基本信息</el-divider> <el-divider content-position="left">基本信息</el-divider>

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- 上传 --> <!-- 上传 -->
<el-dialog :title="title" v-model="uploadConclusions" width="800px" :before-close="cancel"> <el-dialog draggable :title="title" v-model="uploadConclusions" width="800px" :before-close="cancel">
<el-divider content-position="left">基本信息</el-divider> <el-divider content-position="left">基本信息</el-divider>
<el-form <el-form
:inline="true" :inline="true"

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- 新增 --> <!-- 新增 -->
<el-dialog title="未建档干扰用户新增" v-model="userAdd" width="50%" :before-close="cancel"> <el-dialog draggable title="未建档干扰用户新增" v-model="userAdd" width="50%" :before-close="cancel">
<el-divider content-position="left" style="font-weight: bolder; font-size: 18px">基本信息</el-divider> <el-divider content-position="left" style="font-weight: bolder; font-size: 18px">基本信息</el-divider>
<el-form :inline="true" ref="formRef" :model="addData" label-width="130px" :rules="rules"> <el-form :inline="true" ref="formRef" :model="addData" label-width="130px" :rules="rules">
<el-form-item label="区域:"> <el-form-item label="区域:">

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- 上传 --> <!-- 上传 -->
<el-dialog :title="title" v-model="uploadConclusions" width="70%" :before-close="cancel"> <el-dialog draggable :title="title" v-model="uploadConclusions" width="70%" :before-close="cancel">
<el-divider content-position="left">基本信息</el-divider> <el-divider content-position="left">基本信息</el-divider>
<el-form <el-form
:inline="true" :inline="true"

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog v-model="dialogVisible" :title="title" style="width: 800px" :before-close="handleClose"> <el-dialog draggable v-model="dialogVisible" :title="title" style="width: 800px" :before-close="handleClose">
<el-form :model="form" :rules="rules" class="form-style" ref="elform" label-width="120px"> <el-form :model="form" :rules="rules" class="form-style" ref="elform" label-width="120px">
<el-form-item label="终端编号:" prop="id"> <el-form-item label="终端编号:" prop="id">
<el-input <el-input

View File

@@ -70,6 +70,7 @@
<Table ref="tableRef" /> <Table ref="tableRef" />
<!-- 上传检测报告 --> <!-- 上传检测报告 -->
<el-dialog <el-dialog
draggable
title="上传检测报告__支持批量上传" title="上传检测报告__支持批量上传"
v-model="showBatchUpload" v-model="showBatchUpload"
width="30%" width="30%"

View File

@@ -75,6 +75,7 @@
<newlyIncreased ref="addRef" @onsubmit="tableStore.index()" /> <newlyIncreased ref="addRef" @onsubmit="tableStore.index()" />
<!-- 上传原始报告 --> <!-- 上传原始报告 -->
<el-dialog <el-dialog
draggable
title="上传原始报告__支持批量上传" title="上传原始报告__支持批量上传"
v-model="showBatchUpload" v-model="showBatchUpload"
width="30%" width="30%"

View File

@@ -18,7 +18,7 @@
</TableHeader> </TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
<!-- 分析记录管理 --> <!-- 分析记录管理 -->
<el-dialog v-model="dialogAnalysis" title="分析记录管理" width="60%"> <el-dialog draggable v-model="dialogAnalysis" title="分析记录管理" width="60%">
<vxe-table height="500" auto-resize :data="AnalysisData" v-bind="defaultAttribute"> <vxe-table height="500" auto-resize :data="AnalysisData" v-bind="defaultAttribute">
<vxe-column field="timeId" title="策略名称"></vxe-column> <vxe-column field="timeId" title="策略名称"></vxe-column>
<vxe-column field="timeId" title="操作时间"></vxe-column> <vxe-column field="timeId" title="操作时间"></vxe-column>
@@ -203,8 +203,6 @@ const details = (row: any) => {
}) })
} }
const backbxlb = () => { const backbxlb = () => {
view.value = true view.value = true
view2.value = false view2.value = false

View File

@@ -12,7 +12,7 @@
</TableHeader> </TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
<!-- 波形分析 --> <!-- 波形分析 -->
<el-dialog v-model="dialogAnalysis" title="波形分析" width="70%"> <el-dialog draggable v-model="dialogAnalysis" title="波形分析" width="70%">
<div class="mb10" style="display: flex; justify-content: space-between"> <div class="mb10" style="display: flex; justify-content: space-between">
<span>事件关联编号为{{ AssociationNumber }}</span> <span>事件关联编号为{{ AssociationNumber }}</span>
<div> <div>
@@ -153,7 +153,7 @@ const tableStore = new TableStore({
loadCallback: () => {} loadCallback: () => {}
}) })
tableStore.table.params.searchValue='' tableStore.table.params.searchValue = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
tableStore.index() tableStore.index()
@@ -172,8 +172,7 @@ const bxcontrast = () => {
message: '请选择数据!', message: '请选择数据!',
type: 'warning' type: 'warning'
}) })
}else{ } else {
} }
} }
// 波形分析 // 波形分析

View File

@@ -12,7 +12,7 @@
</TableHeader> </TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
<!-- 暂降源定位 --> <!-- 暂降源定位 -->
<el-dialog v-model="dialogAnalysis" title="暂降源定位" width="70%"> <el-dialog draggable v-model="dialogAnalysis" title="暂降源定位" width="70%">
<div class="mb10" style="display: flex; justify-content: space-between"> <div class="mb10" style="display: flex; justify-content: space-between">
<span>事件关联编号为{{ AssociationNumber }}</span> <span>事件关联编号为{{ AssociationNumber }}</span>
<el-button icon="el-icon-Download" type="primary" @click="positioningexport">导出</el-button> <el-button icon="el-icon-Download" type="primary" @click="positioningexport">导出</el-button>
@@ -154,11 +154,9 @@ const tableStore = new TableStore({
} }
], ],
loadCallback: () => { loadCallback: () => {}
}
}) })
tableStore.table.params.searchValue='' tableStore.table.params.searchValue = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
tableStore.index() tableStore.index()

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" title="暂降事件列表"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" title="暂降事件列表">
<vxe-table v-loading="loading" height="auto" auto-resize :data="tableData" v-bind="defaultAttribute"> <vxe-table v-loading="loading" height="auto" auto-resize :data="tableData" v-bind="defaultAttribute">
<vxe-column type="seq" title="序号" width="60px"></vxe-column> <vxe-column type="seq" title="序号" width="60px"></vxe-column>
<vxe-column field="startTime" title="发生时间" width="200"></vxe-column> <vxe-column field="startTime" title="发生时间" width="200"></vxe-column>
@@ -24,7 +24,7 @@ import { getNoDealEventsByLineId } from '@/api/event-boot/areaInfo'
const dialogVisible = ref(false) const dialogVisible = ref(false)
const tableData = ref([]) const tableData = ref([])
const loading = ref(true) const loading = ref(true)
const open = (params:any) => { const open = (params: any) => {
dialogVisible.value = true dialogVisible.value = true
loading.value = true loading.value = true
getNoDealEventsByLineId(params).then(res => { getNoDealEventsByLineId(params).then(res => {

View File

@@ -140,6 +140,9 @@ import { mainHeight } from '@/utils/layout'
import { getLineExport, getList, selectReleation } from '@/api/event-boot/report' import { getLineExport, getList, selectReleation } from '@/api/event-boot/report'
import { useMonitoringPoint } from '@/stores/monitoringPoint' import { useMonitoringPoint } from '@/stores/monitoringPoint'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
defineOptions({
name: 'TransientReport/monitoringpointReport'
})
const monitoringPoint = useMonitoringPoint() const monitoringPoint = useMonitoringPoint()
const height = mainHeight(20) const height = mainHeight(20)
const size = ref(0) const size = ref(0)

View File

@@ -191,7 +191,7 @@ const list = ref([
]) ])
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '', url: '',
method: 'post', method: 'POST',
column: [] column: []
}) })

View File

@@ -1,61 +1,60 @@
<!--上传暂降数据--> <!--上传暂降数据-->
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='eventDataUploadVisible' :title='title' <el-dialog
style='width: 415px;height: 380px' draggable
top='25vh'> class="cn-operate-dialog"
v-model="eventDataUploadVisible"
:title="title"
style="width: 415px; height: 380px"
top="25vh"
>
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' ref='formRef'> <el-form :inline="false" :model="form" label-width="120px" ref="formRef">
<el-form-item label='业务用户'> <el-form-item label="业务用户">
<el-select v-model='form.userId' filterable @change='changeUser'> <el-select v-model="form.userId" filterable @change="changeUser">
<el-option <el-option
v-for='item in userListData' v-for="item in userListData"
:key='item.id' :key="item.id"
:label='item.userName' :label="item.userName"
:value='item.id' :value="item.id"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='生产线'> <el-form-item label="生产线">
<el-select v-model='form.productLineId' filterable @change='changeProductLine'> <el-select v-model="form.productLineId" filterable @change="changeProductLine">
<el-option <el-option v-for="item in productLineData" :key="item.id" :label="item.name" :value="item.id" />
v-for='item in productLineData'
:key='item.id'
:label='item.name'
:value='item.id'
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='进线'> <el-form-item label="进线">
<el-input v-model='form.incomingLineName' readonly /> <el-input v-model="form.incomingLineName" readonly />
</el-form-item> </el-form-item>
<el-form-item label='暂降数据文件'> <el-form-item label="暂降数据文件">
<el-upload <el-upload
v-model:file-list='fileList' v-model:file-list="fileList"
ref='uploadEventData' ref="uploadEventData"
action='' action=""
:limit='1' :limit="1"
:on-exceed='handleExceed' :on-exceed="handleExceed"
:auto-upload='false' :auto-upload="false"
:on-change='choose' :on-change="choose"
> >
<template #trigger> <template #trigger>
<el-button type='primary'>选择数据文件</el-button> <el-button type="primary">选择数据文件</el-button>
</template> </template>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='eventDataUploadVisible = false'>取消</el-button> <el-button @click="eventDataUploadVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { ref, reactive, inject } from 'vue' import { ref, reactive, inject } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
@@ -85,7 +84,6 @@ const form = reactive({
file: null file: null
}) })
//弹出界面,默认选择用户的第一个生产线的第一条进线进行数据导入 //弹出界面,默认选择用户的第一个生产线的第一条进线进行数据导入
const open = async (text: string, userId: string) => { const open = async (text: string, userId: string) => {
title.value = text title.value = text
@@ -191,7 +189,7 @@ const changeProductLine = () => {
const choose = (e: any) => { const choose = (e: any) => {
form.file = e.raw form.file = e.raw
} }
const handleExceed: UploadProps['onExceed'] = (files) => { const handleExceed: UploadProps['onExceed'] = files => {
uploadEventData.value!.clearFiles() uploadEventData.value!.clearFiles()
const file = files[0] as UploadRawFile const file = files[0] as UploadRawFile
file.uid = genFileId() file.uid = genFileId()
@@ -199,7 +197,6 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
fileList.value = [{ name: file.name, url: '' }] fileList.value = [{ name: file.name, url: '' }]
} }
/** /**
* 提交用户表单数据 * 提交用户表单数据
*/ */
@@ -223,7 +220,6 @@ const submit = async () => {
} }
}) })
} }
} }
}) })
} else { } else {
@@ -231,13 +227,11 @@ const submit = async () => {
} }
} }
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style scoped> <style scoped>
.el-form-item__content div { .el-form-item__content div {
width: 100% !important; width: 100% !important;
} }
</style> </style>

View File

@@ -1,115 +1,115 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='incomingDialogVisible' :title='title' <el-dialog
style='width: 415px;height: 300px' top='30vh'> draggable
<el-scrollbar> class="cn-operate-dialog"
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> v-model="incomingDialogVisible"
<el-form-item label='进线名称' prop='name'> :title="title"
<el-input v-model='form.name' placeholder='请输入进线名称'/> style="width: 415px; height: 300px"
</el-form-item> top="30vh"
<el-form-item label='关联监测点' prop='lineId'> >
<el-select v-model='form.lineId' placeholder='请选择关联监测点' :filterable='true'> <el-scrollbar>
<el-option <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
v-for='line in lineList' <el-form-item label="进线名称" prop="name">
:key='line.id' <el-input v-model="form.name" placeholder="请输入进线名称" />
:label='line.name' </el-form-item>
:value='line.id' <el-form-item label="关联监测点" prop="lineId">
/> <el-select v-model="form.lineId" placeholder="请选择关联监测点" :filterable="true">
</el-select> <el-option v-for="line in lineList" :key="line.id" :label="line.name" :value="line.id" />
</el-form-item> </el-select>
</el-form> </el-form-item>
</el-scrollbar> </el-form>
<template #footer> </el-scrollbar>
<span class='dialog-footer'> <template #footer>
<el-button @click='incomingDialogVisible = false'>取消</el-button> <span class="dialog-footer">
<el-button type='primary' @click='submit'>确认</el-button> <el-button @click="incomingDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject, reactive} from 'vue' import { ref, inject, reactive } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import { addSgIncomingLine,updateSgIncomingLine } from '@/api/advance-boot/sgGroven/incomingLine' // 若不是列表页面弹框可删除 import { addSgIncomingLine, updateSgIncomingLine } from '@/api/advance-boot/sgGroven/incomingLine' // 若不是列表页面弹框可删除
const incomingDialogVisible = ref(false) const incomingDialogVisible = ref(false)
const title = ref('') const title = ref('')
const tableStore = inject('tableStore') as TableStore const tableStore = inject('tableStore') as TableStore
const formRef = ref() const formRef = ref()
const lineList = reactive([ const lineList = reactive([
{ {
'id': '123456', id: '123456',
'name': '测试1号线' name: '测试1号线'
}, },
{ {
'id': '01e796a4ffbd8de00c4ee9f34b49d7cb', id: '01e796a4ffbd8de00c4ee9f34b49d7cb',
'name': '测试2号线' name: '测试2号线'
}, },
{ {
'id': '1223456', id: '1223456',
'name': '测试3号线' name: '测试3号线'
} }
]) ])
// 注意不要和表单ref的命名冲突 // 注意不要和表单ref的命名冲突
const form = reactive({ const form = reactive({
id: '', id: '',
userId: '', userId: '',
name: '', name: '',
lineId: '' lineId: ''
}) })
//form表单校验规则 //form表单校验规则
const rules = { const rules = {
name: [{ required: true, message: '进线名不能为空', trigger: 'blur' }], name: [{ required: true, message: '进线名不能为空', trigger: 'blur' }],
lineId: [{ required: true, message: '监测点不能为空', trigger: 'change' }] lineId: [{ required: true, message: '监测点不能为空', trigger: 'change' }]
} }
const resetForm = () => { const resetForm = () => {
if (formRef.value) { if (formRef.value) {
formRef.value.resetFields() formRef.value.resetFields()
} }
} }
const open = (text: string, data: any) => { const open = (text: string, data: any) => {
title.value = text title.value = text
//默认选中第一个tab //默认选中第一个tab
incomingDialogVisible.value = true incomingDialogVisible.value = true
if (data.id) { if (data.id) {
// 表单赋值 // 表单赋值
for (let key in form) { for (let key in form) {
form[key] = data[key] form[key] = data[key]
}
} else {
resetForm()
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
} }
} else { form.userId = data.userId
resetForm()
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
}
form.userId = data.userId
} }
const submit = () => { const submit = () => {
formRef.value.validate(async (valid:any) => { formRef.value.validate(async (valid: any) => {
if (valid) { if (valid) {
if (form.id) { if (form.id) {
await updateSgIncomingLine(form) await updateSgIncomingLine(form)
} else { } else {
await addSgIncomingLine(form) await addSgIncomingLine(form)
} }
ElMessage.success('保存进线成功') ElMessage.success('保存进线成功')
tableStore.index() tableStore.index()
incomingDialogVisible.value = false incomingDialogVisible.value = false
} }
}) })
} }
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style scoped> <style scoped>
.el-select { .el-select {
min-width: 180px; min-width: 180px;
} }
</style> </style>

View File

@@ -1,57 +1,51 @@
<!--设备的新增编辑弹出框--> <!--设备的新增编辑弹出框-->
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='machineVisible' :title='title' style='width: 415px;height: 400px' <el-dialog
top='30vh'> draggable
class="cn-operate-dialog"
v-model="machineVisible"
:title="title"
style="width: 415px; height: 400px"
top="30vh"
>
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label='设备名' prop='name'> <el-form-item label="设备名" prop="name">
<el-input v-model='form.name' placeholder='请输入设备名' clearable /> <el-input v-model="form.name" placeholder="请输入设备名" clearable />
</el-form-item> </el-form-item>
<el-form-item label='型号'> <el-form-item label="型号">
<el-input v-model='form.type' placeholder='请输入型号' clearable /> <el-input v-model="form.type" placeholder="请输入型号" clearable />
</el-form-item> </el-form-item>
<el-form-item label='设备损失' prop='machineLoss'> <el-form-item label="设备损失" prop="machineLoss">
<el-input <el-input v-model="form.machineLoss" placeholder="请输入设备损失" clearable>
v-model='form.machineLoss'
placeholder='请输入设备损失'
clearable
>
<template #append>万元</template> <template #append>万元</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label='原料损失' prop='materialLoss'> <el-form-item label="原料损失" prop="materialLoss">
<el-input <el-input v-model="form.materialLoss" placeholder="请输入原料损失" clearable>
v-model='form.materialLoss'
placeholder='请输入原料损失'
clearable
>
<template #append>万元</template> <template #append>万元</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label='功率' prop='machinePower'> <el-form-item label="功率" prop="machinePower">
<el-input <el-input v-model="form.machinePower" placeholder="请输入功率" clearable>
v-model='form.machinePower'
placeholder='请输入功率'
clearable
>
<template #append>kW</template> <template #append>kW</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='machineVisible = false'>取消</el-button> <el-button @click="machineVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, reactive, inject } from 'vue' import { ref, reactive, inject } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import { addSgMachine,updateSgMachine } from '@/api/advance-boot/sgGroven/sgMachine' import { addSgMachine, updateSgMachine } from '@/api/advance-boot/sgGroven/sgMachine'
const tableStore = inject('tableStore') as TableStore const tableStore = inject('tableStore') as TableStore
const machineVisible = ref(false) const machineVisible = ref(false)
@@ -84,7 +78,7 @@ const rules = {
machinePower: [ machinePower: [
{ required: true, message: '功率不能为空', trigger: 'blur' }, { required: true, message: '功率不能为空', trigger: 'blur' },
{ pattern: regex, message: '请输入有效的数值', trigger: 'blur' } { pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
], ]
} }
const open = (text: string, data?: any) => { const open = (text: string, data?: any) => {
@@ -112,7 +106,6 @@ const resetForm = () => {
} }
} }
/** /**
* 提交用户表单数据 * 提交用户表单数据
*/ */
@@ -133,7 +126,6 @@ const submit = () => {
/************针对tab切换*************/ /************针对tab切换*************/
defineExpose({ open }) defineExpose({ open })
</script> </script>
@@ -145,5 +137,4 @@ defineExpose({ open })
.el-select { .el-select {
min-width: 180px; min-width: 180px;
} }
</style>
</style>

View File

@@ -1,62 +1,64 @@
<!--生产线的新增编辑弹出框--> <!--生产线的新增编辑弹出框-->
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='productLineVisible' :title='title' style='width: 415px;height: 380px' <el-dialog
top='30vh'> draggable
<el-scrollbar> class="cn-operate-dialog"
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> v-model="productLineVisible"
<el-form-item label='生产线名' prop='name'> :title="title"
<el-input v-model='form.name' placeholder='请输入生产线名' clearable /> style="width: 415px; height: 380px"
</el-form-item> top="30vh"
<el-form-item label='关联进线' prop='incomingLineId'> >
<el-select v-model='form.incomingLineId'> <el-scrollbar>
<el-option <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
v-for='item in incomingLineList' <el-form-item label="生产线名" prop="name">
:key='item.id' <el-input v-model="form.name" placeholder="请输入生产线名" clearable />
:label='item.name' </el-form-item>
:value='item.id' <el-form-item label="关联进线" prop="incomingLineId">
/> <el-select v-model="form.incomingLineId">
</el-select> <el-option
</el-form-item> v-for="item in incomingLineList"
<el-form-item label='计算模式' prop='calcMode'> :key="item.id"
<el-radio-group v-model='form.calcMode'> :label="item.name"
<el-tooltip :value="item.id"
class='box-item' />
effect='light' </el-select>
content='单次中断不计算设备、原料损失' </el-form-item>
placement='bottom-start' <el-form-item label="计算模式" prop="calcMode">
> <el-radio-group v-model="form.calcMode">
<el-radio border label='0'>模式一</el-radio> <el-tooltip
</el-tooltip> class="box-item"
<el-tooltip effect="light"
class='box-item' content="单次中断不计算设备、原料损失"
effect='light' placement="bottom-start"
content='单次中断计算设备、原料损失' >
placement='bottom-start' <el-radio border label="0">模式一</el-radio>
> </el-tooltip>
<el-radio border label='1'>模式二</el-radio> <el-tooltip
</el-tooltip> class="box-item"
</el-radio-group> effect="light"
</el-form-item> content="单次中断计算设备、原料损失"
<el-form-item label='产能损失' prop='capacityLoss'> placement="bottom-start"
<el-input >
v-model='form.capacityLoss' <el-radio border label="1">模式二</el-radio>
placeholder='请输入产能损失' </el-tooltip>
clearable </el-radio-group>
> </el-form-item>
<template #append>万元</template> <el-form-item label="产能损失" prop="capacityLoss">
</el-input> <el-input v-model="form.capacityLoss" placeholder="请输入产能损失" clearable>
</el-form-item> <template #append>万元</template>
</el-form> </el-input>
</el-scrollbar> </el-form-item>
<template #footer> </el-form>
<span class='dialog-footer'> </el-scrollbar>
<el-button @click='productLineVisible = false'>取消</el-button> <template #footer>
<el-button type='primary' @click='submit'>确认</el-button> <span class="dialog-footer">
<el-button @click="productLineVisible = false">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, reactive, inject } from 'vue' import { ref, reactive, inject } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { querySgIncomingLineByUserId } from '@/api/advance-boot/sgGroven/incomingLine' import { querySgIncomingLineByUserId } from '@/api/advance-boot/sgGroven/incomingLine'
@@ -72,96 +74,91 @@ let incomingLineList: any = reactive([])
// 注意不要和表单ref的命名冲突 // 注意不要和表单ref的命名冲突
const form = reactive({ const form = reactive({
id: '', id: '',
userId: '', userId: '',
incomingLineId: '', incomingLineId: '',
name: '', name: '',
calcMode: '', calcMode: '',
capacityLoss: 0 capacityLoss: 0
}) })
//form表单校验规则 //form表单校验规则
const rules = { const rules = {
name: [{ required: true, message: '生产线名不能为空', trigger: 'blur' }], name: [{ required: true, message: '生产线名不能为空', trigger: 'blur' }],
incomingLineId: [{ required: true, message: '请关联进线', trigger: 'change' }], incomingLineId: [{ required: true, message: '请关联进线', trigger: 'change' }],
calcMode: [ calcMode: [{ required: true, message: '请选择计算模式', trigger: 'change' }],
{ required: true, message: '请选择计算模式', trigger: 'change' } capacityLoss: [
], { required: true, message: '产能损失不能为空', trigger: 'blur' },
capacityLoss: [ { pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
{ required: true, message: '产能损失不能为空', trigger: 'blur' }, ]
{ pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
]
} }
const open = async (text: string, data?: any) => { const open = async (text: string, data?: any) => {
title.value = text title.value = text
if (data.name) { if (data.name) {
// 表单赋值 // 表单赋值
for (let key in form) { for (let key in form) {
form[key] = data[key] form[key] = data[key]
}
form.calcMode = String(data.calcMode)
} else {
resetForm()
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
form.calcMode = '0'
} }
form.calcMode = String(data.calcMode) form.userId = data.userId
} else { await initIncomingLine()
resetForm() productLineVisible.value = true
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
form.calcMode = '0'
}
form.userId = data.userId
await initIncomingLine()
productLineVisible.value = true
} }
//重置表单内容 //重置表单内容
const resetForm = () => { const resetForm = () => {
if (formRef.value) { if (formRef.value) {
formRef.value.resetFields() formRef.value.resetFields()
} }
} }
//初始化进线下拉框 //初始化进线下拉框
const initIncomingLine = async () => { const initIncomingLine = async () => {
//根据业务用户id去查找 //根据业务用户id去查找
await querySgIncomingLineByUserId(form.userId).then(res => { await querySgIncomingLineByUserId(form.userId).then(res => {
//将进线数据赋值到下来框中 //将进线数据赋值到下来框中
incomingLineList = res.data incomingLineList = res.data
}) })
} }
/** /**
* 提交用户表单数据 * 提交用户表单数据
*/ */
const submit = () => { const submit = () => {
formRef.value.validate(async (valid: any) => { formRef.value.validate(async (valid: any) => {
if (valid) { if (valid) {
if (form.id) { if (form.id) {
await updateSgProductLine(form) await updateSgProductLine(form)
} else { } else {
await addSgProductLine(form) await addSgProductLine(form)
} }
ElMessage.success('保存成功') ElMessage.success('保存成功')
tableStore.index() tableStore.index()
productLineVisible.value = false productLineVisible.value = false
} }
}) })
} }
/************针对tab切换*************/ /************针对tab切换*************/
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style scoped> <style scoped>
.el-upload-list__item { .el-upload-list__item {
transition: none !important; transition: none !important;
} }
.el-select { .el-select {
min-width: 180px; min-width: 180px;
} }
</style>
</style>

View File

@@ -1,65 +1,65 @@
<!--设备详情页面包含设备基础信息元器件列表信息--> <!--设备详情页面包含设备基础信息元器件列表信息-->
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='machineDetailVisible' :title='title' style='width: 900px;'> <el-dialog draggable class="cn-operate-dialog" v-model="machineDetailVisible" :title="title" style="width: 900px">
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' ref='formRef'> <el-form :inline="false" :model="form" label-width="120px" ref="formRef">
<el-form-item label='设备名称'> <el-form-item label="设备名称">
<el-input v-model='form.name' readonly /> <el-input v-model="form.name" readonly />
</el-form-item> </el-form-item>
<el-row> <el-row>
<el-col :span='12'> <el-col :span="12">
<el-form-item label='设备型号'> <el-form-item label="设备型号">
<el-input v-model='form.type' readonly /> <el-input v-model="form.type" readonly />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span='12'> <el-col :span="12">
<el-form-item label='设备损失'> <el-form-item label="设备损失">
<el-input v-model='form.machineLoss' readonly> <el-input v-model="form.machineLoss" readonly>
<template #append>万元</template> <template #append>万元</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span='12'> <el-col :span="12">
<el-form-item label='原料损失'> <el-form-item label="原料损失">
<el-input v-model='form.materialLoss' readonly> <el-input v-model="form.materialLoss" readonly>
<template #append>万元</template> <template #append>万元</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span='12'> <el-col :span="12">
<el-form-item label='功率'> <el-form-item label="功率">
<el-input v-model='form.machinePower' readonly> <el-input v-model="form.machinePower" readonly>
<template #append>kW</template> <template #append>kW</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<!--元器件表格--> <!--元器件表格-->
<unit-table ref='unitTable' /> <unit-table ref="unitTable" />
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='machineDetailVisible = false'>关闭</el-button> <el-button @click="machineDetailVisible = false">关闭</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, reactive, nextTick } from 'vue' import { ref, reactive, nextTick } from 'vue'
import UnitTable from '@/views/pqs/voltageSags/sagGovern/businessUser/sensitiveUnit/unitTable.vue' import UnitTable from '@/views/pqs/voltageSags/sagGovern/businessUser/sensitiveUnit/unitTable.vue'
// 注意不要和表单ref的命名冲突 // 注意不要和表单ref的命名冲突
const form = reactive<any>({ const form = reactive<any>({
id: '', id: '',
name: '', name: '',
type: '', type: '',
machineLoss: '', machineLoss: '',
materialLoss: '', materialLoss: '',
machinePower: '' machinePower: ''
}) })
const unitTable = ref() const unitTable = ref()
const machineDetailVisible = ref(false) const machineDetailVisible = ref(false)
@@ -67,27 +67,25 @@ const title = ref('')
//回显设备基础信息 //回显设备基础信息
const open = (text: string, data?: any) => { const open = (text: string, data?: any) => {
title.value = text title.value = text
machineDetailVisible.value = true machineDetailVisible.value = true
if (data) { if (data) {
// 表单赋值 // 表单赋值
for (let key in form) { for (let key in form) {
form[key] = data[key] form[key] = data[key]
}
} }
} //查询元器件数据 todo...
//查询元器件数据 todo... //待子组件渲染完毕
//待子组件渲染完毕 nextTick(() => {
nextTick(() => { unitTable.value.getTableData(form.id)
unitTable.value.getTableData(form.id) })
})
} }
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style scoped> <style scoped>
.el-form-item { .el-form-item {
margin-bottom: 10px !important; margin-bottom: 10px !important;
} }
</style>
</style>

View File

@@ -1,202 +1,185 @@
<!--元器件的新增编辑弹出框--> <!--元器件的新增编辑弹出框-->
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='unitVisible' :title='title' style='width: 415px;height: 500px' <el-dialog
top='10vh'> draggable
<el-scrollbar> class="cn-operate-dialog"
<el-form :inline='false' :model='form' label-width='135px' :rules='rules' ref='formRef'> v-model="unitVisible"
<el-form-item label='元器件名' prop='name'> :title="title"
<el-input v-model='form.name' placeholder='请输入元器件名' clearable /> style="width: 415px; height: 500px"
</el-form-item> top="10vh"
<el-form-item label='灵敏度' prop='sensitivity'> >
<el-select v-model='form.sensitivity'> <el-scrollbar>
<el-option <el-form :inline="false" :model="form" label-width="135px" :rules="rules" ref="formRef">
v-for='item in sensitivityList' <el-form-item label="元器件名" prop="name">
:key='item.value' <el-input v-model="form.name" placeholder="请输入元器件名" clearable />
:label='item.name' </el-form-item>
:value='item.value' <el-form-item label="灵敏度" prop="sensitivity">
/> <el-select v-model="form.sensitivity">
</el-select> <el-option
</el-form-item> v-for="item in sensitivityList"
<el-form-item label='耐受能力是否标准' prop='standardFlag'> :key="item.value"
<el-radio-group v-model='form.standardFlag'> :label="item.name"
<el-radio border label='1'></el-radio> :value="item.value"
<el-radio border label='0'></el-radio> />
</el-radio-group> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='上限-持续时间' prop='vtcTimeUpper'> <el-form-item label="耐受能力是否标准" prop="standardFlag">
<el-input <el-radio-group v-model="form.standardFlag">
v-model='form.vtcTimeUpper' <el-radio border label="1"></el-radio>
placeholder='请输入持续时间' <el-radio border label="0"></el-radio>
clearable </el-radio-group>
> </el-form-item>
<template #append>ms</template> <el-form-item label="上限-持续时间" prop="vtcTimeUpper">
</el-input> <el-input v-model="form.vtcTimeUpper" placeholder="请输入持续时间" clearable>
</el-form-item> <template #append>ms</template>
</el-input>
</el-form-item>
<el-form-item label='上限-暂降幅值' prop='vtcAmpUpper'> <el-form-item label="上限-暂降幅值" prop="vtcAmpUpper">
<el-input <el-input v-model="form.vtcAmpUpper" placeholder="请输入暂降幅值" clearable>
v-model='form.vtcAmpUpper' <template #append>p.u.</template>
placeholder='请输入暂降幅值' </el-input>
clearable </el-form-item>
>
<template #append>p.u.</template>
</el-input>
</el-form-item>
<el-form-item label='下限-持续时间' prop='vtcTimeLower'> <el-form-item label="下限-持续时间" prop="vtcTimeLower">
<el-input <el-input v-model="form.vtcTimeLower" placeholder="请输入持续时间" clearable>
v-model='form.vtcTimeLower' <template #append>ms</template>
placeholder='请输入持续时间' </el-input>
clearable </el-form-item>
>
<template #append>ms</template>
</el-input>
</el-form-item>
<el-form-item label='下限-暂降幅值' prop='vtcAmpLower'> <el-form-item label="下限-暂降幅值" prop="vtcAmpLower">
<el-input <el-input v-model="form.vtcAmpLower" placeholder="请输入暂降幅值" clearable>
v-model='form.vtcAmpLower' <template #append>p.u.</template>
placeholder='请输入暂降幅值' </el-input>
clearable </el-form-item>
> </el-form>
<template #append>p.u.</template> </el-scrollbar>
</el-input> <template #footer>
</el-form-item> <span class="dialog-footer">
</el-form> <el-button @click="unitVisible = false">取消</el-button>
</el-scrollbar> <el-button type="primary" @click="submit">确认</el-button>
<template #footer>
<span class='dialog-footer'>
<el-button @click='unitVisible = false'>取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, reactive, inject } from 'vue' import { ref, reactive, inject } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import { addSgSensitiveUnit,updateSgSensitiveUnit } from '@/api/advance-boot/sgGroven/sgSensitiveUnit' import { addSgSensitiveUnit, updateSgSensitiveUnit } from '@/api/advance-boot/sgGroven/sgSensitiveUnit'
const tableStore = inject('tableStore') as TableStore const tableStore = inject('tableStore') as TableStore
const unitVisible = ref(false) const unitVisible = ref(false)
const title = ref('') const title = ref('')
const formRef = ref() const formRef = ref()
const sensitivityList = ref( const sensitivityList = ref([
[ {
{
name: '平均', name: '平均',
value: '0' value: '0'
}, },
{ {
name: '高', name: '高',
value: '1' value: '1'
}, },
{ {
name: '中', name: '中',
value: '2' value: '2'
}, },
{ {
name: '低', name: '低',
value: '3' value: '3'
} }
] ])
)
const regex = /^[+]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/ const regex = /^[+]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/
// 注意不要和表单ref的命名冲突 // 注意不要和表单ref的命名冲突
const form = reactive({ const form = reactive({
id: '', id: '',
machineId: '', machineId: '',
name: '', name: '',
sensitivity: '', sensitivity: '',
standardFlag: '', standardFlag: '',
vtcTimeUpper: 0, vtcTimeUpper: 0,
vtcAmpUpper: 0, vtcAmpUpper: 0,
vtcTimeLower: 0, vtcTimeLower: 0,
vtcAmpLower: 0 vtcAmpLower: 0
}) })
//form表单校验规则 //form表单校验规则
const rules = { const rules = {
name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }], name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }],
sensitivity: [{ required: true, message: '灵敏度不能为空', trigger: 'change' }], sensitivity: [{ required: true, message: '灵敏度不能为空', trigger: 'change' }],
standardFlag: [{ required: true, message: '耐受能力不能为空', trigger: 'change' }], standardFlag: [{ required: true, message: '耐受能力不能为空', trigger: 'change' }],
vtcTimeUpper: [ vtcTimeUpper: [
{ required: true, message: '持续时间不能为空', trigger: 'blur' }, { required: true, message: '持续时间不能为空', trigger: 'blur' },
{ pattern: regex, message: '请输入有效的数值', trigger: 'blur' } { pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
], ],
vtcAmpUpper: [ vtcAmpUpper: [
{ required: true, message: '暂降幅值不能为空', trigger: 'blur' }, { required: true, message: '暂降幅值不能为空', trigger: 'blur' },
{ pattern: regex, message: '请输入有效的数值', trigger: 'blur' } { pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
], ],
vtcTimeLower: [ vtcTimeLower: [
{ required: true, message: '持续时间不能为空', trigger: 'blur' }, { required: true, message: '持续时间不能为空', trigger: 'blur' },
{ pattern: regex, message: '请输入有效的数值', trigger: 'blur' } { pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
], ],
vtcAmpLower: [ vtcAmpLower: [
{ required: true, message: '暂降幅值不能为空', trigger: 'blur' }, { required: true, message: '暂降幅值不能为空', trigger: 'blur' },
{ pattern: regex, message: '请输入有效的数值', trigger: 'blur' } { pattern: regex, message: '请输入有效的数值', trigger: 'blur' }
] ]
} }
const open = (text: string, data?: any) => { const open = (text: string, data?: any) => {
title.value = text title.value = text
if (data.name) { if (data.name) {
// 表单赋值 // 表单赋值
for (let key in form) { for (let key in form) {
form[key] = data[key] form[key] = data[key]
}
form.sensitivity = String(data.sensitivity)
form.standardFlag = String(data.standardFlag)
} else {
resetForm()
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
form.sensitivity = '0'
form.standardFlag = '1'
} }
form.sensitivity = String(data.sensitivity) form.machineId = data.machineId
form.standardFlag = String(data.standardFlag) unitVisible.value = true
} else {
resetForm()
// 在此处恢复默认表单
for (let key in form) {
form[key] = ''
}
form.sensitivity = '0'
form.standardFlag = '1'
}
form.machineId = data.machineId
unitVisible.value = true
} }
//重置表单内容 //重置表单内容
const resetForm = () => { const resetForm = () => {
if (formRef.value) { if (formRef.value) {
formRef.value.resetFields() formRef.value.resetFields()
} }
} }
/** /**
* 提交用户表单数据 * 提交用户表单数据
*/ */
const submit = () => { const submit = () => {
formRef.value.validate(async (valid: any) => { formRef.value.validate(async (valid: any) => {
if (valid) { if (valid) {
if (form.id) { if (form.id) {
await updateSgSensitiveUnit(form) await updateSgSensitiveUnit(form)
} else { } else {
await addSgSensitiveUnit(form) await addSgSensitiveUnit(form)
} }
ElMessage.success('保存成功') ElMessage.success('保存成功')
tableStore.index() tableStore.index()
unitVisible.value = false unitVisible.value = false
} }
}) })
} }
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style scoped> <style scoped>
.cn-operate-dialog .el-form { .cn-operate-dialog .el-form {
width: calc(100% - 10px) width: calc(100% - 10px);
} }
</style> </style>

View File

@@ -1,77 +1,76 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title' style='max-width: 750px'> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title" style="max-width: 750px">
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-tabs tab-position='left' style='height: 100%' :before-leave='checkUserId' v-model='tab'> <el-tabs tab-position="left" style="height: 100%" :before-leave="checkUserId" v-model="tab">
<el-tab-pane label='基本信息' name='user'> <el-tab-pane label="基本信息" name="user">
<el-form-item label='用户名' prop='userName'> <el-form-item label="用户名" prop="userName">
<el-input v-model='form.userName' /> <el-input v-model="form.userName" />
</el-form-item> </el-form-item>
<el-row> <el-row>
<el-col :span='12'> <el-col :span="12">
<el-form-item label='重点用户'> <el-form-item label="重点用户">
<el-select v-model='form.keyUser'> <el-select v-model="form.keyUser">
<el-option label='重要' value='1' /> <el-option label="重要" value="1" />
<el-option label='不重要' value='0' /> <el-option label="不重要" value="0" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span='12'> <el-col :span="12">
<el-form-item label='所属行业' prop='industry'> <el-form-item label="所属行业" prop="industry">
<el-input v-model='form.industry' /> <el-input v-model="form.industry" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item label='所在地区' prop='addr'> <el-form-item label="所在地区" prop="addr">
<area-cascard <area-cascard v-model="form.addr" @change="reValueAddr" ref="areaRef" />
v-model='form.addr'
@change='reValueAddr'
ref='areaRef'
/>
</el-form-item> </el-form-item>
<el-form-item label='详细地址'> <el-form-item label="详细地址">
<el-input v-model='form.addrDetail' /> <el-input v-model="form.addrDetail" />
</el-form-item> </el-form-item>
<el-form-item label='联系方式'> <el-form-item label="联系方式">
<el-input v-model='form.concact' /> <el-input v-model="form.concact" />
</el-form-item> </el-form-item>
<el-form-item label='用户描述'> <el-form-item label="用户描述">
<el-input v-model='form.remark' :rows='2' type='textarea' placeholder='请输入描述' /> <el-input v-model="form.remark" :rows="2" type="textarea" placeholder="请输入描述" />
</el-form-item> </el-form-item>
<el-form-item label='企业照片'> <el-form-item label="企业照片">
<div> <div>
<el-image style='width: 200px;height: 200px;' :src='userLogo.url' <el-image
:preview-src-list='[userLogo.url]' v-if='userLogo.url'></el-image> style="width: 200px; height: 200px"
:src="userLogo.url"
:preview-src-list="[userLogo.url]"
v-if="userLogo.url"
></el-image>
<el-upload <el-upload
action='' action=""
:show-file-list='false' :show-file-list="false"
:auto-upload='false' :auto-upload="false"
accept='.png,.jpg' accept=".png,.jpg"
:on-change='chooseImage' :on-change="chooseImage"
> >
<el-button type='primary'>上传图片</el-button> <el-button type="primary">上传图片</el-button>
</el-upload> </el-upload>
</div> </div>
</el-form-item> </el-form-item>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label='进线' name='incomingLine'> <el-tab-pane label="进线" name="incomingLine">
<IncomingTable ref='incomingTable'></IncomingTable> <IncomingTable ref="incomingTable"></IncomingTable>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='dialogVisible = false'>取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject, reactive, nextTick } from 'vue' import { ref, inject, reactive, nextTick } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import type { UploadProps, UploadUserFile } from 'element-plus' import type { UploadProps, UploadUserFile } from 'element-plus'
@@ -123,7 +122,6 @@ const resetForm = () => {
if (formRef.value) { if (formRef.value) {
formRef.value.resetFields() formRef.value.resetFields()
} }
} }
const open = (text: string, data?: anyObj) => { const open = (text: string, data?: anyObj) => {
@@ -154,10 +152,8 @@ const open = (text: string, data?: anyObj) => {
} }
form.keyUser = '1' form.keyUser = '1'
} }
} }
/** /**
* 将联级选择的区域数组转为字符串 * 将联级选择的区域数组转为字符串
*/ */
@@ -172,7 +168,6 @@ const reValueAddr = () => {
*/ */
const chooseImage = (e: any) => { const chooseImage = (e: any) => {
uploadFile(e.raw, 'sgGovern/').then(res => { uploadFile(e.raw, 'sgGovern/').then(res => {
userLogo.name = res.data.name userLogo.name = res.data.name
userLogo.url = res.data.url userLogo.url = res.data.url
form.userLogo = res.data.name form.userLogo = res.data.name
@@ -180,7 +175,6 @@ const chooseImage = (e: any) => {
}) })
} }
/** /**
* 删除文件操作,此操作应在提交表单的时候操作,删除的图片可能有多张 * 删除文件操作,此操作应在提交表单的时候操作,删除的图片可能有多张
*/ */
@@ -199,7 +193,6 @@ const handlePictureCardPreview = () => {
dialogVisibleLogo.value = true dialogVisibleLogo.value = true
} }
/** /**
* 提交用户表单数据 * 提交用户表单数据
*/ */
@@ -236,7 +229,6 @@ const checkUserId = (tab: any, event: any) => {
} }
} }
defineExpose({ open }) defineExpose({ open })
</script> </script>
@@ -248,4 +240,4 @@ defineExpose({ open })
.el-select { .el-select {
min-width: 180px; min-width: 180px;
} }
</style> </style>

View File

@@ -1,51 +1,44 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title'> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label='名称:' class='top' prop='name'> <el-form-item label="名称:" class="top" prop="name">
<el-input v-model='form.name'></el-input> <el-input v-model="form.name"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='计算值:' class='top'> <el-form-item label="计算值:" class="top">
<el-input v-model='form.value'></el-input> <el-input v-model="form.value"></el-input>
</el-form-item> </el-form-item>
<el-form-item class='top' label='对应算法:' prop='algoDescribe' v-if='form.openDescribe == 1'> <el-form-item class="top" label="对应算法:" prop="algoDescribe" v-if="form.openDescribe == 1">
<el-input v-model='form.algoDescribe' placeholder='请输入数字'></el-input> <el-input v-model="form.algoDescribe" placeholder="请输入数字"></el-input>
</el-form-item> </el-form-item>
<el-form-item class='top' <el-form-item class="top" label="编码:" prop="code">
label='编码:' <el-input v-model="form.code"></el-input>
prop='code'
>
<el-input v-model='form.code'></el-input>
</el-form-item> </el-form-item>
<el-form-item label='排序:' prop='sort' class='top'> <el-form-item label="排序:" prop="sort" class="top">
<el-input-number v-model='form.sort' :min='0' /> <el-input-number v-model="form.sort" :min="0" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item v-if="form.openLevel === 1" label="事件等级:">
v-if='form.openLevel === 1' <el-select v-model="form.level" placeholder="选择开启等级">
label='事件等级:'
>
<el-select v-model='form.level' placeholder='选择开启等级'>
<el-option <el-option
v-for='item in EventOpenLevel' v-for="item in EventOpenLevel"
:key='item.value' :key="item.value"
:label='item.label' :label="item.label"
:value='item.value' :value="item.value"
> ></el-option>
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='dialogVisible = false'>取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject } from 'vue' import { ref, inject } from 'vue'
import { reactive } from 'vue' import { reactive } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
@@ -88,15 +81,9 @@ const rules = {
trigger: 'blur' trigger: 'blur'
} }
], ],
name: [ name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
{ required: true, message: '名称不能为空', trigger: 'blur' } code: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
], sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }]
code: [
{ required: true, message: '编码不能为空', trigger: 'blur' }
],
sort: [
{ required: true, message: '排序不能为空', trigger: 'blur' }
]
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('新增') const title = ref('新增')

View File

@@ -1,64 +1,52 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title'> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label='名称' prop='name'> <el-form-item label="名称" prop="name">
<el-input v-model='form.name'></el-input> <el-input v-model="form.name"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='编码' class='top' prop='code'> <el-form-item label="编码" class="top" prop="code">
<el-input v-model='form.code'></el-input> <el-input v-model="form.code"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='排序' class='top' prop='sort'> <el-form-item label="排序" class="top" prop="sort">
<el-input-number v-model="form.sort" :min="0" /> <el-input-number v-model="form.sort" :min="0" />
</el-form-item> </el-form-item>
<el-form-item label='开启等级' class='top'> <el-form-item label="开启等级" class="top">
<el-select <el-select v-model="form.openLevel" placeholder="选择开启等级">
v-model='form.openLevel'
placeholder='选择开启等级'
>
<el-option <el-option
v-for='item in OpenLevel' v-for="item in OpenLevel"
:key='item.value' :key="item.value"
:label='item.label' :label="item.label"
:value='item.value' :value="item.value"
> ></el-option>
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='开启算法' class='top'> <el-form-item label="开启算法" class="top">
<el-select <el-select v-model="form.openDescribe" placeholder="选择开启算法">
v-model='form.openDescribe'
placeholder='选择开启算法'
>
<el-option <el-option
v-for='item in OpenDescribe' v-for="item in OpenDescribe"
:key='item.value' :key="item.value"
:label='item.label' :label="item.label"
:value='item.value' :value="item.value"
> ></el-option>
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='字典描述' class='top'> <el-form-item label="字典描述" class="top">
<el-input <el-input v-model="form.remark" type="textarea" :rows="2"></el-input>
v-model='form.remark'
type='textarea'
:rows='2'
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='dialogVisible = false'>取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject } from 'vue' import { ref, inject } from 'vue'
import { reactive } from 'vue' import { reactive } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules">
<el-form-item label="字典名称:" prop="name"> <el-form-item label="字典名称:" prop="name">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="部门编号:" prop="code"> <el-form-item label="部门编号:" prop="code">
@@ -59,7 +59,7 @@ import { ref, inject } from 'vue'
import { reactive } from 'vue' import { reactive } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除 import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
import { getAreaTree, getPidAreaByAreaId,addDept,updateDept } from '@/api/user-boot/dept' import { getAreaTree, getPidAreaByAreaId, addDept, updateDept } from '@/api/user-boot/dept'
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('') const title = ref('')
@@ -75,7 +75,7 @@ const form = reactive<anyObj>({
type: 0, type: 0,
code: '', code: '',
specialType: 0, specialType: 0,
id:'' id: ''
}) })
const originForm = { ...form } const originForm = { ...form }
const rules = { const rules = {

View File

@@ -1,5 +1,6 @@
<template> <template>
<el-dialog <el-dialog
draggable
class="cn-operate-dialog statistical-type-binding" class="cn-operate-dialog statistical-type-binding"
v-model="dialogVisible" v-model="dialogVisible"
title="绑定监测点" title="绑定监测点"

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :mode="form" :inline="false" :model="form" label-width="120px" :rules="rules"> <el-form :mode="form" :inline="false" :model="form" label-width="120px" :rules="rules">
<el-form-item prop="name" label="接口/按钮名称"> <el-form-item prop="name" label="接口/按钮名称">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px"> <el-form :inline="false" :model="form" label-width="120px">
<el-form-item label="上级菜单"> <el-form-item label="上级菜单">
@@ -20,7 +20,10 @@
<el-input v-model="form.path" placeholder="请输入菜单名称" /> <el-input v-model="form.path" placeholder="请输入菜单名称" />
</el-form-item> </el-form-item>
<el-form-item label="组件路径"> <el-form-item label="组件路径">
<el-input v-model="form.routeName" placeholder="请输入组件路径,如/src/views/auth/audit/index.vue或auth/audit" /> <el-input
v-model="form.routeName"
placeholder="请输入组件路径,如/src/views/auth/audit/index.vue或auth/audit"
/>
</el-form-item> </el-form-item>
<el-form-item label="排序"> <el-form-item label="排序">
<el-input-number v-model="form.sort" :min="0" /> <el-input-number v-model="form.sort" :min="0" />

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules">
<el-form-item label="角色名称"> <el-form-item label="角色名称">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="true" :model="form" label-width="120px" :rules="rules"> <el-form :inline="true" :model="form" label-width="120px" :rules="rules">
<el-form-item label="用户名" prop="name"> <el-form-item label="用户名" prop="name">
@@ -12,12 +12,7 @@
<el-input v-model="form.password" placeholder="请输入密码" disabled /> <el-input v-model="form.password" placeholder="请输入密码" disabled />
</el-form-item> </el-form-item>
<el-form-item label="权限类型" prop="type"> <el-form-item label="权限类型" prop="type">
<el-select <el-select v-model="form.type" @change="changeValue" disabled placeholder="请选择权限类型">
v-model="form.type"
@change="changeValue"
disabled
placeholder="请选择权限类型"
>
<el-option <el-option
v-for="(item, index) in UserTypeOption" v-for="(item, index) in UserTypeOption"
:label="item.label" :label="item.label"
@@ -27,7 +22,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="用户类型" prop="casualUser"> <el-form-item label="用户类型" prop="casualUser">
<el-select v-model="form.casualUser" placeholder="请选择用户类型类型"> <el-select v-model="form.casualUser" placeholder="请选择用户类型类型">
<el-option <el-option
v-for="(item, index) in TypeOptions" v-for="(item, index) in TypeOptions"
:label="item.label" :label="item.label"
@@ -40,7 +35,7 @@
<Area style="width: 100%" v-model="form.deptId" /> <Area style="width: 100%" v-model="form.deptId" />
</el-form-item> </el-form-item>
<el-form-item label="角色" prop="role"> <el-form-item label="角色" prop="role">
<el-select v-model="form.role" placeholder="请选择角色" multiple collapse-tags> <el-select v-model="form.role" placeholder="请选择角色" multiple collapse-tags>
<el-option <el-option
v-for="(item, index) in roleOptions" v-for="(item, index) in roleOptions"
:label="item.label" :label="item.label"
@@ -135,7 +130,7 @@ const form = reactive({
emailNotice: 0, emailNotice: 0,
type: 0 type: 0
}) })
const rules:Partial<Record<string, Array<FormItemRule>>> = { const rules: Partial<Record<string, Array<FormItemRule>>> = {
name: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], name: [{ required: true, message: '用户名不能为空', trigger: 'blur' }],
role: [{ required: true, message: '角色不能为空', trigger: 'blur' }], role: [{ required: true, message: '角色不能为空', trigger: 'blur' }],
password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }], password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" title="修改密码"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" title="修改密码">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="新密码" prop="newPwd"> <el-form-item label="新密码" prop="newPwd">

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog v-model="dialogVisible" title="模板绑定" width="500px" :before-close="handleClose"> <el-dialog draggable v-model="dialogVisible" title="模板绑定" width="500px" :before-close="handleClose">
<el-tree <el-tree
default-expand-all default-expand-all
show-checkbox show-checkbox
@@ -82,9 +82,8 @@ const gettreeData = (mdata, ids) => {
}) })
} }
// 绑定 // 绑定
const bind=()=>{ const bind = () => {
updateBindTemplate().then(res => {
updateBindTemplate().then(res=>{
// ElMessage.success('绑定成功') // ElMessage.success('绑定成功')
}) })
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog :title="title" v-model="formVisible" width="30%" :before-close="closeDialog"> <el-dialog draggable :title="title" v-model="formVisible" width="30%" :before-close="closeDialog">
<el-form :model="formdata" label-width="100px" :rules="rules" ref="ruleForm"> <el-form :model="formdata" label-width="100px" :rules="rules" ref="ruleForm">
<el-form-item label="模板名称:" prop="name"> <el-form-item label="模板名称:" prop="name">
<el-input placeholder="模板名称" v-model="formdata.name" style="width: 100%"></el-input> <el-input placeholder="模板名称" v-model="formdata.name" style="width: 100%"></el-input>

View File

@@ -12,7 +12,7 @@
<!-- 查看 --> <!-- 查看 -->
<look ref="lookRef" v-if="!lookShow" @shutDown="shutDown" /> <look ref="lookRef" v-if="!lookShow" @shutDown="shutDown" />
<!-- 绑定 --> <!-- 绑定 -->
<department ref="departmentRef" /> <department ref="departmentRef" />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@@ -27,7 +27,7 @@ import luckysheet from './luckysheet.vue'
import look from './look.vue' import look from './look.vue'
import department from './department.vue' import department from './department.vue'
defineOptions({ defineOptions({
name: 'estimate/photovoltaic' name: 'Distributedphotovoltaic/templateConfiguration'
}) })
const luckysheetRef = ref() const luckysheetRef = ref()
const lookRef = ref() const lookRef = ref()

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="新密码:" prop="newPwd" style="margin-top: 20px"> <el-form-item label="新密码:" prop="newPwd" style="margin-top: 20px">