This commit is contained in:
GGJ
2025-01-09 19:02:44 +08:00
commit 92e7a7a5eb
2943 changed files with 1152283 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
<template>
<div class="agreement" style="height:calc(100vh - 190px)">
<div style="margin-top: 5px;right: 10px;position: absolute;z-index: 9999999;">
<el-button type="primary" @click="submit" icon="el-icon-s-claim">保存</el-button>
</div>
<WangEditor v-model="value" style="height:100%;"/>
<!-- <div > -->
<!-- <el-button type="primary" @click="submit" style="z-index: 1000000;">保存</el-button> -->
<!-- </div> -->
</div>
</template>
<script>
import {addAppInfo, queryAppInfo} from '@/api/app/setting'
export default {
name: '',
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 60;
},
},
components: {},
data() {
return {
value: '',
id: ''
}
},
created() {
let dictypeData = localStorage.getItem('dictypeData')
if (dictypeData) {
dictypeData = JSON.parse(dictypeData)
dictypeData.forEach(item => {
if (item.code === 'appInformationType') {
item.children.forEach(item2 => {
if (item2.code === 'User_Agreement') {
this.id = item2.id
queryAppInfo(item2.id).then(res => {
this.value = res.data.content
})
}
})
}
})
}
},
methods: {
submit() {
addAppInfo({
type: this.id,
content: this.value,
}).then((res) => {
if (res.code === 'A0000') {
this.$message.success('保存成功')
}
})
}
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,64 @@
<template>
<div class="agreement" style="height:calc(100vh - 190px)">
<div style="margin-top: 5px;right: 10px;position: absolute;z-index: 9999999;">
<el-button type="primary" @click="submit" icon="el-icon-s-claim">保存</el-button>
</div>
<WangEditor v-model="value" style="height:100%"/>
<!-- <div class="mt10">
<el-button type="primary" @click="submit">保存</el-button>
</div> -->
</div>
</template>
<script>
import {addAppInfo, queryAppInfo} from '@/api/app/setting'
export default {
name: '',
components: {},
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 60;
},
},
data() {
return {
value: '',
id: ''
}
},
created() {
let dictypeData = localStorage.getItem('dictypeData')
if (dictypeData) {
dictypeData = JSON.parse(dictypeData)
dictypeData.forEach(item => {
if (item.code === 'appInformationType') {
item.children.forEach(item2 => {
if (item2.code === 'Company_Profile') {
this.id = item2.id
queryAppInfo(item2.id).then(res => {
this.value = res.data.content
})
}
})
}
})
}
},
methods: {
submit() {
addAppInfo({
type: this.id,
content: this.value,
}).then((res) => {
if (res.code === 'A0000') {
this.$message.success('保存成功')
}
})
}
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,64 @@
<template>
<div class="agreement" style="height:calc(100vh - 190px)">
<div style="margin-top: 5px;right: 10px;position: absolute;z-index: 9999999;">
<el-button type="primary" @click="submit" icon="el-icon-s-claim">保存</el-button>
</div>
<WangEditor v-model="value" style="height:100%"/>
<!-- <div class="mt10">
<el-button type="primary" @click="submit">保存</el-button>
</div> -->
</div>
</template>
<script>
import {addAppInfo, queryAppInfo} from '@/api/app/setting'
export default {
name: '',
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 60;
},
},
components: {},
data() {
return {
value: '',
id: ''
}
},
created() {
let dictypeData = localStorage.getItem('dictypeData')
if (dictypeData) {
dictypeData = JSON.parse(dictypeData)
dictypeData.forEach(item => {
if (item.code === 'appInformationType') {
item.children.forEach(item2 => {
if (item2.code === 'Data_base') {
this.id = item2.id
queryAppInfo(item2.id).then(res => {
this.value = res.data.content
})
}
})
}
})
}
},
methods: {
submit() {
addAppInfo({
type: this.id,
content: this.value,
}).then((res) => {
if (res.code === 'A0000') {
this.$message.success('保存成功')
}
})
}
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,70 @@
<template>
<Page :loading="loading">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" >
<el-tab-pane lazy label="用户协议" name="first">
<Agreement/>
</el-tab-pane>
<el-tab-pane lazy label="个人信息保护政策" name="six">
<Policy/>
</el-tab-pane>
<el-tab-pane lazy label="系统介绍" name="second">
<Introduce/>
</el-tab-pane>
<el-tab-pane lazy label="使用手册" name="three">
<Specification/>
</el-tab-pane>
<!-- <el-tab-pane lazy label="资料库" name="four">
<DataBank/>
</el-tab-pane> -->
<el-tab-pane lazy label="公司介绍" name="five">
<Company/>
</el-tab-pane>
</el-tabs>
</Page>
</template>
<script>
import Agreement from './agreement.vue'
import DataBank from "./dataBank.vue"
import Introduce from "./introduce.vue"
import Specification from "./specification.vue";
import Company from "./company.vue";
import Policy from "./policy.vue";
import {queryPersonSet} from '@/api/app/setting'
export default {
name: 'GovernManageApp',
components: {
Agreement,
DataBank,
Introduce,
Specification,
Company,
Policy
},
data() {
return {
activeName: 'first',
personSet: "",
loading: false
}
},
created() {
//
// queryPersonSet().then(res => {
// console.log(res)
// this.personSet = res.data
// this.loading = false
// })
},
methods: {
handleClick(tab, event) {
console.log(tab, event)
},
changeTab(e) {
this.activeName = e
},
},
}
</script>
<style lang="scss"></style>

View File

@@ -0,0 +1,64 @@
<template>
<div class="agreement" style="height:calc(100vh - 190px)">
<div style="margin-top: 5px;right: 10px;position: absolute;z-index: 9999999;">
<el-button type="primary" @click="submit" icon="el-icon-s-claim">保存</el-button>
</div>
<WangEditor v-model="value" style="height:100%"/>
<!-- <div class="mt10">
<el-button type="primary" @click="submit">保存</el-button>
</div> -->
</div>
</template>
<script>
import {addAppInfo, queryAppInfo} from '@/api/app/setting'
export default {
name: '',
components: {},
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 60;
},
},
data() {
return {
value: '',
id: ''
}
},
created() {
let dictypeData = localStorage.getItem('dictypeData')
if (dictypeData) {
dictypeData = JSON.parse(dictypeData)
dictypeData.forEach(item => {
if (item.code === 'appInformationType') {
item.children.forEach(item2 => {
if (item2.code === 'introduction') {
this.id = item2.id
queryAppInfo(item2.id).then(res => {
this.value = res.data.content
})
}
})
}
})
}
},
methods: {
submit() {
addAppInfo({
type: this.id,
content: this.value,
}).then((res) => {
if (res.code === 'A0000') {
this.$message.success('保存成功')
}
})
}
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,64 @@
<template>
<div class="agreement" style="height:calc(100vh - 190px)">
<div style="margin-top: 5px;right: 10px;position: absolute;z-index: 9999999;">
<el-button type="primary" @click="submit" icon="el-icon-s-claim">保存</el-button>
</div>
<WangEditor v-model="value" style="height:100%"/>
<!-- <div > -->
<!-- <el-button type="primary" @click="submit" style="z-index: 1000000;">保存</el-button> -->
<!-- </div> -->
</div>
</template>
<script>
import {addAppInfo, queryAppInfo} from '@/api/app/setting'
export default {
name: 'Policy',
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 60;
},
},
components: {},
data() {
return {
value: '',
id: ''
}
},
created() {
let dictypeData = localStorage.getItem('dictypeData')
if (dictypeData) {
dictypeData = JSON.parse(dictypeData)
dictypeData.forEach(item => {
if (item.code === 'appInformationType') {
item.children.forEach(item2 => {
if (item2.code === 'Personal_Infor_Protect') {
this.id = item2.id
queryAppInfo(item2.id).then(res => {
this.value = res.data.content
})
}
})
}
})
}
},
methods: {
submit() {
addAppInfo({
type: this.id,
content: this.value,
}).then((res) => {
if (res.code === 'A0000') {
this.$message.success('保存成功')
}
})
}
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,64 @@
<template>
<div class="agreement" style="height:calc(100vh - 190px)">
<div style="margin-top: 5px;right: 10px;position: absolute;z-index: 9999999;">
<el-button type="primary" @click="submit" icon="el-icon-s-claim">保存</el-button>
</div>
<WangEditor v-model="value" style="height:100%"/>
<!-- <div class="mt10">
<el-button type="primary" @click="submit">保存</el-button>
</div> -->
</div>
</template>
<script>
import {addAppInfo, queryAppInfo} from '@/api/app/setting'
export default {
name: '',
components: {},
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 60;
},
},
data() {
return {
value: '',
id: ''
}
},
created() {
let dictypeData = localStorage.getItem('dictypeData')
if (dictypeData) {
dictypeData = JSON.parse(dictypeData)
dictypeData.forEach(item => {
if (item.code === 'appInformationType') {
item.children.forEach(item2 => {
if (item2.code === 'User_Manual') {
this.id = item2.id
queryAppInfo(item2.id).then(res => {
this.value = res.data.content
})
}
})
}
})
}
},
methods: {
submit() {
addAppInfo({
type: this.id,
content: this.value,
}).then((res) => {
if (res.code === 'A0000') {
this.$message.success('保存成功')
}
})
}
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,692 @@
<template>
<div class="page" >
<el-form :inline="true" :model="formInline" ref="formInline" class="demo-form-inline" style="height: auto;">
<el-form-item label="数据分类:">
<el-select v-model="formInline.dataType" multiple filterable collapse-tags clearable
placeholder="请选择数据分类"
@change="formInlineChange">
<el-option v-for="item in dataTypeSelect" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据存储:">
<el-select v-model="formInline.classId" multiple filterable collapse-tags clearable placeholder="请选择数据存储"
@change="formInlineChange">
<el-option v-for="item in dataSelect" :key="item.code" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="过滤筛选:">
<el-input v-model="formInline.searchValue" placeholder="数据名称、别名、名称"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="queryCsDictDataPage" icon="el-icon-search">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetFormInline" icon="el-icon-setting">重置</el-button>
</el-form-item>
<el-form-item style="float: right;">
<el-button type="primary" @click="add" icon="el-icon-plus">新增字典</el-button>
</el-form-item>
</el-form>
<el-table
stripe
style="width: 100%;"
:data="tableData"
height="calc(100vh - 280px)"
border
v-loading="loading"
highlight-current-row
header-cell-class-name="table_header"
>
<el-table-column align="center" show-overflow-tooltip min-width="120" prop="classId" label="数据分类">
<template slot-scope="scope">
<span>{{
dataTypeSelect.find((item) => item.value == scope.row.dataType) &&
dataTypeSelect.find((item) => item.value == scope.row.dataType).label
}}</span>
</template>
</el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="180" prop="name"
label="数据名称"></el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="180" prop="otherName"
label="别名"></el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="150" prop="showName"
label="展示名称"></el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="100" prop="phase" label="相别"
width="80px">
<template slot-scope="scope"> {{ scope.row.phase === 'M' ? '-' : scope.row.phase }}</template>
</el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="100" prop="unit" label="单位"
width="80px">
<template slot-scope="scope"> {{ scope.row.unit == null ? '-' : scope.row.unit }}</template>
</el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="130" prop="type"
label="基础数据类型">
<template slot-scope="scope"> {{ scope.row.type == '' ? '-' : scope.row.type }}</template>
</el-table-column>
<el-table-column align="center" show-overflow-tooltip min-width="150" prop="harmStart"
label="数据谐波次数">
<template slot-scope="scope"> {{ scope.row.harmStart }} - {{ scope.row.harmEnd }}</template>
</el-table-column>
<!-- <el-table-column min-width='80' prop="harmEnd" label="数据结束谐波次数"> </el-table-column> -->
<el-table-column align="center" min-width="180" prop="statMethod" show-overflow-tooltip
label="数据统计方法">
<template slot-scope="scope"> {{ scope.row.statMethod == null ? '-' : scope.row.statMethod }}</template>
</el-table-column>
<el-table-column align="center" min-width="120" prop="classId" label="数据存储" show-overflow-tooltip
:formatter="formFilter"></el-table-column>
<el-table-column align="center" min-width="110" prop="resourcesId" label="数据来源"
show-overflow-tooltip :formatter="formFilter">
<template slot-scope="scope"> {{
scope.row.resourcesId == null ? '-' : scope.row.resourcesId
}}
</template>
</el-table-column>
<!-- <el-table-column align="center" min-width="100" prop="sort" label="排序" width="80px"></el-table-column>-->
<el-table-column align="center" min-width="200" label="操作">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="edit(scope.row)" icon="el-icon-edit">编辑</el-button>
<el-button size="mini" type="danger" @click="del(scope.row.id)" icon="el-icon-delete">删除
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="pageChange"
:current-page="formInline.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
<el-dialog :title="dialogTitle" :visible.sync="drawer" size="80%" custom-class="dictionary-draw" class="Cn-page" :before-close="closeDialog"
width="1000px">
<el-divider content-position="center">基础数据</el-divider>
<el-form :model="form" :label-width="formLabelWidth" :rules="rules" ref="form">
<el-form-item label="数据分类:" prop="dataType">
<el-select v-model="form.dataType" filterable clearable placeholder="请选择数据分类">
<el-option v-for="item in dataTypeSelect" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="数据名称:" prop="name">
<el-input v-model="form.name" autocomplete="off" placeholder="请输入数据名称"></el-input>
</el-form-item>
<el-form-item label="别名:" prop="otherName" >
<el-input v-model="form.otherName" autocomplete="off" placeholder="请输入别名"></el-input>
</el-form-item>
<el-form-item label="展示名称:" prop="showName" >
<el-input v-model="form.showName" autocomplete="off" placeholder="请输入展示名称"></el-input>
</el-form-item>
<el-form-item label="相别:" prop="phase" >
<el-select v-model="form.phase" filterable clearable placeholder="请选择相别">
<el-option v-for="item in phaseSelect" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="单位:" prop="unit" >
<el-input v-model="form.unit" autocomplete="off" placeholder="请输入单位"></el-input>
</el-form-item>
<el-form-item label="基础数据类型:" prop="type" >
<el-input v-model="form.type" autocomplete="off" placeholder="请输入基础数据类型"></el-input>
</el-form-item>
<el-form-item label="开始结束次数:" prop="harmStart" >
<div class="input-2">
<el-input type="number" v-model="form.harmStart" autocomplete="off"></el-input>
<div style="margin-left: 10px;">-</div>
<el-input style="margin-left: 10px;" type="number" v-model="form.harmEnd"
autocomplete="off"></el-input>
</div>
</el-form-item>
<el-form-item label="统计方法:" prop="statMethod" >
<el-select v-model="form.statMethod" multiple filterable clearable placeholder="请选择统计方法">
<el-option v-for="item in statMethodSelect" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="数据存储:" prop="classId" >
<el-select v-model="form.classId" filterable clearable placeholder="请选择数据存储">
<el-option v-for="item in dataSelect" :key="item.code" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="报表数据来源:" prop="resourcesId" >
<el-select v-model="form.resourcesId" filterable clearable placeholder="请选择报表数据来源">
<el-option v-for="item in resourcesIdSelect" :key="item.code" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="序号:" prop="sort" >
<el-input type="number" v-model="form.sort" autocomplete="off" placeholder="请输入序号"></el-input>
</el-form-item>
<el-form-item label="限值名称:" prop="limitName" >
<el-input type="text" v-model="form.limitName" autocomplete="off" placeholder="请输入限值名称"></el-input>
</el-form-item>
<el-form-item label="限值表名:" prop="limitTable" >
<el-input type="text" v-model="form.limitTable" autocomplete="off"
placeholder="请输入限值表名"></el-input>
</el-form-item>
<el-form-item label="超标判断方式:" prop="formula" >
<el-select v-model="form.formula" filterable clearable placeholder="请选择超标判断方式">
<el-option v-for="item in formulaSelect" :key="item.code" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
<el-divider content-position="center">拓展数据</el-divider>
<el-form :model="form" :label-width="formLabelWidth" :rules="rules2" ref="form2">
<el-form-item label="参数缺省值:" prop="defaultValue">
<el-input v-model="form.defaultValue" autocomplete="off" placeholder="请输入参数缺省值"></el-input>
</el-form-item>
<el-form-item label="事件类别:" prop="eventType">
<el-input v-model="form.eventType" autocomplete="off" placeholder="请输入事件类别"></el-input>
</el-form-item>
<el-form-item label="设置最大值:" prop="maxNum" >
<el-input type="number" v-model="form.maxNum" autocomplete="off" placeholder="请输入设置最大值"></el-input>
</el-form-item>
<el-form-item label="设置最小值:" prop="minNum" >
<el-input type="number" v-model="form.minNum" autocomplete="off" placeholder="请输入设置最小值"></el-input>
</el-form-item>
<el-form-item label="枚举序列:" prop="setValue" >
<el-input v-model="form.setValue" autocomplete="off" placeholder="请输入枚举序列"></el-input>
</el-form-item>
<el-form-item label="字符串长度上限:" prop="strlen" >
<el-input type="number" v-model="form.strlen" autocomplete="off" placeholder="请输入字符串长度上限"></el-input>
</el-form-item>
<el-form-item label="上送规则:" prop="tranRule" >
<el-input v-model="form.tranRule" autocomplete="off" placeholder="请输入上送规则"></el-input>
</el-form-item>
<el-form-item label="是否可远程控制:" prop="ctlSts">
<el-radio v-model="form.ctlSts" :label="1"></el-radio>
<el-radio v-model="form.ctlSts" :label="0"></el-radio>
</el-form-item>
<el-form-item label="是否需遥控校验:" prop="curSts">
<el-radio v-model="form.curSts" :label="1"></el-radio>
<el-radio v-model="form.curSts" :label="0"></el-radio>
</el-form-item>
<el-form-item label="是否存储:" prop="storeFlag">
<el-radio v-model="form.storeFlag" :label="1"></el-radio>
<el-radio v-model="form.storeFlag" :label="0"></el-radio>
</el-form-item>
<el-form-item label="是否加密:" prop="storeFlag">
<el-radio v-model="form.storeFlag" :label="1"></el-radio>
<el-radio v-model="form.storeFlag" :label="0"></el-radio>
</el-form-item>
<el-form-item label="数据是否上送:" prop="tranFlag">
<el-radio v-model="form.tranFlag" :label="1"></el-radio>
<el-radio v-model="form.tranFlag" :label="0"></el-radio>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="addCsDictData"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addCsDictData, queryCsDictDataPage, delCsDictData, updateCsDictData} from '@/api/app/setting.js'
import {dicData} from "@/assets/commjs/dictypeData";
export default {
data() {
return {
loading: true,
drawer: false,
dialogTitle: '新增字典数据',
form: {
classId: null,
ctlSts: null,
curSts: null,
dataType: null,
defaultValue: null,
eventType: null,
harmEnd: null,
harmStart: null,
maxNum: null,
minNum: null,
name: null,
otherName: null,
phase: null,
resourcesId: null,
setValue: null,
showName: null,
sort: null,
statMethod: null,
storeFlag: null,
strlen: null,
systemType: null,
tranFlag: null,
tranRule: null,
type: null,
unit: null,
formula: null,
limitName: null,
limitTable: "pq_overlimit",
},
dataTypeSelect: [],
systemTypeSelect: [],
resourcesIdSelect: [],
formulaSelect: [],
dataSelect: [],
typeSelect: [],
// A、B、C、T、M
phaseSelect: [
{
label: 'A相',
value: 'A',
},
{
label: 'B相',
value: 'B',
},
{
label: 'C相',
value: 'C',
},
{
label: 'T相',
value: 'T',
},
],
statMethodSelect: [
{
label: '平均值',
value: 'avg',
},
{
label: '最大值',
value: 'max',
},
{
label: '最小值',
value: 'min',
},
{
label: 'CP95值',
value: 'cp95',
},
],
formLabelWidth: '140px',
formInline: {
pageNum: 1,
pageSize: 20,
searchValue: '',
dataType: [],
classId: [],
},
total: 0,
tableData: [],
tabHeight: 'calc(100vh - 255px)',
rules: {
dataType: [
{required: true, message: '请输入数据分类', trigger: 'blur'},
{min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur'}
],
name: [
{required: true, message: '请输入数据名称', trigger: 'blur'}
],
otherName: [
{type: 'date', required: true, message: '请输入别名', trigger: 'blur'}
],
showName: [
{type: 'date', required: true, message: '请输入展示名称', trigger: 'blur'}
],
phase: [
{type: 'array', required: true, message: '请选择相别', trigger: 'blur'}
],
unit: [
{required: true, message: '请输入单位', trigger: 'blur'}
],
type: [
{required: true, message: '请输入基础数据类型', trigger: 'blur'}
],
harmStart: [
{required: true, message: '请填写开始结束次数', trigger: 'blur'}
],
statMethod: [
{required: true, message: '请选择统计方法', trigger: 'blur'}
],
classId: [
{required: true, message: '请选择数据存储', trigger: 'blur'}
],
resourcesId: [
{required: true, message: '请选择报表数据来源', trigger: 'blur'}
],
sort: [
{required: true, message: '请填写序号', trigger: 'blur'}
],
},
rules2: {
defaultValue: [
{required: true, message: '请输入参数缺省值', trigger: 'blur'},
{min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur'}
],
eventType: [
{required: true, message: '请输入事件类别', trigger: 'blur'}
],
maxNum: [
{type: 'date', required: true, message: '请设置最大值', trigger: 'blur'}
],
minNum: [
{type: 'date', required: true, message: '请设置最小值', trigger: 'blur'}
],
setValue: [
{type: 'array', required: true, message: '请输入枚举序列', trigger: 'blur'}
],
strlen: [
{required: true, message: '请输入字符串长度上限', trigger: 'blur'}
],
tranRule: [
{required: true, message: '请填写上送规则', trigger: 'blur'}
],
ctlSts: [
{required: true, message: '请选择是否可远程控制', trigger: 'blur'}
],
storeFlag: [
{required: true, message: '请选择是否需遥控校验', trigger: 'blur'}
],
tranFlag: [
{required: true, message: '请选择是否存储||是否加密', trigger: 'blur'}
],
}
}
},
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 145;
},
},
created() {
this.queryCsDictDataPage()
},
mounted() {
const dictypeData = JSON.parse(localStorage.getItem('dictypeData'))
if (dictypeData) {
dictypeData.forEach((item) => {
let arr = [
{
code: 'Data',
key: 'dataSelect',
},
{
code: 'Cs_Data_Type',
key: 'dataTypeSelect',
},
{
code: 'System_Type',
key: 'systemTypeSelect',
},
{
code: 'Data_Day',
key: 'resourcesIdSelect',
},
{
code: 'Type',
key: 'typeSelect',
},
{
code: 'Limit_Value_Judgment',
key: 'formulaSelect',
},
]
arr.forEach((item2) => {
if (item.code == item2.code) {
this[item2.key] = item.children.map((item3) => {
return {
label: item3.name,
value: item3.id,
code: item3.code,
}
})
}
})
})
}
this.loading = false
},
methods: {
closeDialog(){
this.drawer=false
this.resetForm()
},
resetForm() {
if (this.$refs["form"]) {
this.$refs["form"].resetFields();
this.$refs["form2"].resetFields();
}
},
// 数据过滤
formFilter(row, column) {
if (column.property == "classId") {
let title = "";
dicData("Data", []).forEach((item) => {
if (item.id == row.classId) {
title = item.name;
}
});
return title;
} else if (column.property == "resourcesId") {
let title = "";
this.resourcesIdSelect.forEach((item) => {
if (item.value == row.resourcesId) {
title = item.label;
}
});
return title;
}
},
formInlineChange() {
setTimeout(() => {
const formInlineHeight = this.$refs.formInline.$el.offsetHeight
console.log(formInlineHeight)
this.tabHeight = 'calc(100vh - ' + (213 + formInlineHeight) + 'px)'
}, 20)
},
pageChange(e) {
console.log('pageChange!')
console.log(e)
this.formInline.pageNum = e
this.queryCsDictDataPage()
},
handleSizeChange(val) {
// console.log(`每页 ${val} 条`);
this.formInline.pageNum = 1
this.formInline.pageSize = val
this.queryCsDictDataPage()
},
onSearch() {
this.formInline.pageNum = 1
this.queryCsDictDataPage()
},
addCsDictData() {
if (this.form.id) {
this.editSave()
return
}
addCsDictData(this.form).then((res) => {
console.warn(res)
if (res.code == 'A0000') {
this.$message({
type: 'success',
message: '添加成功!',
})
this.drawer = false
this.onSearch()
} else {
this.$message({
type: 'error',
message: res.message,
})
}
})
},
queryCsDictDataPage() {
queryCsDictDataPage(this.formInline).then((res) => {
console.warn(res)
this.tableData = res.data.records
this.total = res.data.total
})
},
resetFormInline() {
this.formInline.searchValue = ''
this.formInline.dataType = []
this.formInline.classId = []
},
onSubmit() {
console.log('submit!')
},
del(id) {
this.$confirm('确定删除该字段吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
delCsDictData(id).then((res) => {
console.warn(res)
if (res.code == 'A0000') {
this.$message({
type: 'success',
message: '删除成功!',
})
this.onSearch()
} else {
this.$message({
type: 'error',
message: res.message,
})
}
})
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消删除',
})
})
},
add() {
const obj = {
classId: null,
ctlSts: null,
curSts: null,
dataType: null,
defaultValue: null,
eventType: null,
harmEnd: null,
harmStart: null,
maxNum: null,
minNum: null,
name: null,
otherName: null,
phase: null,
resourcesId: null,
setValue: null,
showName: null,
sort: null,
statMethod: null,
storeFlag: null,
strlen: null,
systemType: null,
tranFlag: null,
tranRule: null,
type: null,
unit: null,
formula: null,
limitName: null,
limitTable: "pq_overlimit",
}
this.dialogTitle = '新增字典数据'
for (let key in this.form) {
this.form[key] = obj[key]
}
delete this.form.id
this.drawer = true
},
edit(item) {
console.log(item)
for (let key in this.form) {
this.form[key] = item[key]
if (key === 'statMethod' && item[key]) {
this.form[key] = item[key].split(',')
} else if (key === 'phase') {
this.form[key] = ''
}
}
this.form.id = item.id
this.dialogTitle = '编辑字典数据'
this.drawer = true
},
editSave() {
updateCsDictData(this.form).then((res) => {
console.warn(res)
if (res.code == 'A0000') {
this.$message({
type: 'success',
message: '修改成功!',
})
this.drawer = false
this.onSearch()
} else {
this.$message({
type: 'error',
message: res.message,
})
}
})
},
},
}
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
</style>
<style lang="scss" scoped>
::v-deep .Cn-page .el-dialog__body .el-form {
display: grid;
padding-right: 30px;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
grid-gap: 10px 20px !important;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.page {
.el-form-item {
height: auto !important;
}
.dictionary-draw {
.el-dialog__body {
padding-top: 0;
}
}
.input-2 {
display: flex;
width: 245px;
.el-input {
flex: 1;
}
}
}
</style>

View File

@@ -0,0 +1,43 @@
<template>
<page>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" >
<el-tab-pane lazy label="数据字典" name="first">
<Dictionary @changeTab="changeTab" v-if="activeName == 'first'" />
</el-tab-pane>
<el-tab-pane lazy label="程序版本" name="second">
<Version @changeTab="changeTab" v-if="activeName == 'second'" />
</el-tab-pane>
<el-tab-pane lazy label="模版" name="three">
<Temp @changeTab="changeTab" v-if="activeName == 'three'" />
</el-tab-pane>
</el-tabs>
</page>
</template>
<script>
import Dictionary from './dictionary.vue'
import Version from './version.vue'
import Temp from './template.vue'
export default {
name: 'GovernManageBasic',
components: {
Dictionary,
Version,
Temp,
},
data() {
return {
activeName: 'first',
}
},
methods: {
handleClick(tab, event) {
console.log(tab, event)
},
changeTab(e) {
this.activeName = e
},
},
}
</script>
<style lang="scss"></style>

View File

@@ -0,0 +1,336 @@
<template>
<div >
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="模版名称:">
<el-input v-model="formInline.name" clearable placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item label="装置型号:">
<el-select v-model="formInline.devType" placeholder="请选择" style="width: 100%" clearable>
<el-option v-for="item in devTypeOptions" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSearch" icon="el-icon-search">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetFormInline" icon="el-icon-setting">重置</el-button>
</el-form-item>
<el-form-item style="float: right">
<!-- <el-button type="primary" icon="el-icon-plus" @click="add"
v-if="userInfo.role.indexOf('工程')>-1 || userInfo.role.indexOf('运维管理员')>-1">
新增模版
</el-button> -->
<el-button type="primary" icon="el-icon-plus" @click="add">
新增模版
</el-button>
</el-form-item>
</el-form>
<el-table
stripe
style="width: 100%"
:data="tableData"
border
header-cell-class-name="table_header"
highlight-current-row
height="calc(100vh - 280px)"
>
<el-table-column prop="devTypeName" label="装置型号" align="center"></el-table-column>
<el-table-column prop="name" label="模板名称" align="center"></el-table-column>
<el-table-column prop="versionNo" label="版本号" align="center"></el-table-column>
<el-table-column prop="versionDate" label="版本时间" align="center"></el-table-column>
<el-table-column label="操作" width="220px" align="center">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="del(scope.row)" icon="el-icon-delete">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="pageChange"
:current-page="formInline.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible">
<el-form :model="form" :label-width="formLabelWidth">
<el-form-item label="升级文件:">
<el-upload
class="upload-demo"
action="123"
:limit="1"
:auto-upload="false"
:on-change="fileChange"
:on-exceed="fileExceed"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="addDevModel"> </el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="lookDialog">
<el-tabs v-model="activeName">
<el-tab-pane label="测量数据" name="first">
<el-table
stripe
:cell-style="{ textAlign: 'center' }"
:header-cell-style="{ textAlign: 'center' }"
:data="tableData"
height="50vh"
v-if="activeName == 'first'"
>
<el-table-column prop="date" label="数据名称" width="180"></el-table-column>
<el-table-column prop="name" label="数据类型" width="180"></el-table-column>
<el-table-column prop="address" label="单位"></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="电能量数据" name="second">
<el-table
stripe
:cell-style="{ textAlign: 'center' }"
:header-cell-style="{ textAlign: 'center' }"
:data="tableData"
height="50vh"
v-if="activeName == 'second'"
>
<el-table-column prop="date" label="数据名称" width="180"></el-table-column>
<el-table-column prop="name" label="数据类型" width="180"></el-table-column>
<el-table-column prop="address" label="单位"></el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-dialog>
</div>
</template>
<script>
import {queryDevModelPage, addDevModel, AuditDevModel, queryByid, queryByCode} from '@/api/app/setting.js'
export default {
data() {
return {
loading: true,
dialogFormVisible: false,
activeName: 'second',
lookDialog: false,
dialogTitle: '新增字典数据',
form: {
devType: '',
devTypeName: '',
filePath: '',
// softInfoId: '',
// versionDate: '',
// versionNo: '',
},
formLabelWidth: '120px',
formInline: {
devType: '',
pageNum: 1,
pageSize: 20,
versionStartDate: '',
versionendDate: '',
date: [],
name: '',
},
file: '',
fileList: [], // 回显‰
tableData: [],
total: 0,
options: [
{
value: '选项1',
label: '黄金糕',
},
{
value: '选项2',
label: '双皮奶',
},
{
value: '选项3',
label: '蚵仔煎',
},
{
value: '选项4',
label: '龙须面',
},
{
value: '选项5',
label: '北京烤鸭',
},
],
// tabHeight: 'calc(100vh - 255px)',
devTypeOptions: [],
typeOptions: [],
userInfo: {},
}
},
computed: {
vth() {
return window.sessionStorage.getItem("appheight") - 145;
}
},
created() {
this.userInfo = sessionStorage.getItem('Info')
queryByCode('Direct_Connected_Device').then((res) => {
queryByid(res.data.id).then((res) => {
this.devTypeOptions = res.data.map((item) => {
return {
value: item.id,
label: item.name,
}
})
})
})
},
mounted() {
this.onSearch()
this.loading = false
},
methods: {
devTypeChange(e) {
console.log(e)
this.form.devTypeName = this.devTypeOptions.filter((item) => item.value == e)[0].label
},
fileChange(e) {
console.log('fileChange!')
console.log(e)
this.file = e.raw
},
fileExceed(e) {
console.log('fileExceed!')
console.log(e)
this.$message({
message: '最多只能上传一个文件,如若替换请先删除',
type: 'error',
})
},
onSearch() {
console.log('submit!')
queryDevModelPage(this.formInline).then((res) => {
console.log(res)
this.tableData = res.data.records
this.total = res.data.total
})
},
resetFormInline() {
this.formInline.devType = ''
this.formInline.name = ''
this.formInline.versionStartDate = ''
this.formInline.versionendDate = ''
this.formInline.date = []
},
addDevModel() {
if (!this.file) {
return this.$message({
message: '请上传文件',
type: 'error',
})
}
addDevModel(this.file).then((res) => {
if (res.code == 'A0000') {
this.onSearch()
this.$message({
message: '添加成功',
type: 'success',
})
this.dialogFormVisible = false
}
})
},
AuditDevModel() {
for (let key in this.form) {
if (!this.form[key]) {
this.$message({
message: '请完善表单信息',
type: 'error',
})
return
}
}
AuditDevModel(this.form).then((res) => {
if (res.code == 'A0000') {
this.onSearch()
this.$message({
message: '编辑成功',
type: 'success',
})
this.dialogFormVisible = false
}
})
},
pageChange(e) {
console.log('pageChange!')
console.log(e)
this.formInline.pageNum = e
this.onSearch()
},
handleSizeChange(val) {
// console.log(`每页 ${val} 条`);
this.formInline.pageNum = 1
this.formInline.pageSize = val
this.onSearch()
},
dateChange(e) {
console.log(e)
if (e.length > 0) {
this.formInline.versionStartDate = e[0]
this.formInline.versionendDate = e[1]
}
},
del(item) {
this.$confirm('确定删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
AuditDevModel({
id: item.id,
status: 0,
}).then((res) => {
console.log(res)
if (res.code == 'A0000') {
this.onSearch()
this.$message({
message: '删除成功',
type: 'success',
})
this.dialogFormVisible = false
}
})
})
},
edit(item) {
this.form.id = item.id
for (let key in this.form) {
this.form[key] = item[key]
}
this.dialogTitle = '设备数据模版编辑'
this.dialogFormVisible = true
},
look() {
this.lookDialog = true
},
add() {
for (let key in this.form) {
this.form[key] = ''
}
delete this.form.id
this.dialogTitle = '设备数据模版新增'
this.dialogFormVisible = true
},
},
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,466 @@
<template>
<div class="page" >
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="装置型号:">
<el-select
clearable
filterable
v-model="formInline.devType"
placeholder="请选择"
style="width: 100%"
@change="devTypeChange"
>
<el-option v-for="item in devTypeAllOptions" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="日期:">
<el-date-picker
v-model="formInline.date"
type="daterange"
value-format="yyyy-MM-dd"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="dateChange"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSearch" icon="el-icon-search">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetFormInline" icon="el-icon-setting">重置</el-button>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" icon="el-icon-plus" @click="add">新增版本</el-button>
</el-form-item>
</el-form>
<el-table
stripe
style="width: 100%"
:data="tableData"
border
header-cell-class-name="table_header"
highlight-current-row
height="calc(100vh - 280px)"
>
<el-table-column prop="devTypeName" label="装置型号" align="center"></el-table-column>
<el-table-column prop="versionNo" label="版本号" align="center"></el-table-column>
<el-table-column prop="versionAgreement" label="版本协议" align="center"></el-table-column>
<el-table-column prop="versionDate" label="版本日期" align="center"></el-table-column>
<!-- <el-table-column prop="updateBy" label="修改人员"> </el-table-column> -->
<el-table-column prop="updateTime" label="归档日期" align="center"></el-table-column>
<el-table-column prop="description" label="描述" show-overflow-tooltip align="center"></el-table-column>
<el-table-column label="状态" align="center">
<template slot-scope="scope">
{{ scope.row.status == 1 ? '启用' : '禁用' }}
</template>
</el-table-column>
<el-table-column label="操作" width="220px" fixed="right" align="center">
<template slot-scope="scope">
<!-- <div class="table-operation"> -->
<el-button size="mini" type="primary" @click="edit(scope.row)" icon="el-icon-edit">编辑</el-button>
<el-button icon="el-icon-warning" size="mini" type="danger" @click="del(scope.row)" v-if="scope.row.status == 1" >禁用
</el-button>
<el-button icon="el-icon-success" size="mini" type="success" @click="start(scope.row)" v-if="scope.row.status == 0">
启用
</el-button>
<!-- </div> -->
</template>
</el-table-column>
</el-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="pageChange"
:current-page="formInline.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
<el-form :model="form" :label-width="formLabelWidth">
<el-form-item label="装置类型:">
<el-select v-model="form.type" placeholder="请选择" style="width: 100%" @change="typeChange">
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="装置型号:">
<el-select v-model="form.devType" placeholder="请选择" style="width: 100%" @change="devTypeChange">
<el-option v-for="item in devTypeOptions" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="版本号:">
<el-input v-model="form.versionNo" autocomplete="off" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="版本类型:">
<el-input v-model="form.versionType" autocomplete="off" placeholder="填写特殊类型(不填默认通用类型)"></el-input>
</el-form-item>
<el-form-item label="版本协议:">
<el-input v-model="form.versionAgreement" autocomplete="off" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="版本日期:">
<el-date-picker
v-model="form.versionDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期时间"
align="right"
style="width: 100%"
:picker-options="pickerOptions"
>
</el-date-picker>
</el-form-item>
<el-form-item label="描述:">
<el-input v-model="form.description" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="CRC校验:">
<el-input v-model="form.crcInfo" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="升级文件:">
<el-upload
class="upload-demo"
action="123"
:limit="1"
:auto-upload="false"
:on-change="fileChange"
:on-exceed="fileExceed"
:file-list="fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="addEdData"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {queryEdDataPage, addEdData, auditEdData, queryCsDictTree, queryByCode, queryByid} from '@/api/app/setting.js'
export default {
data() {
return {
loading: false,
dialogFormVisible: false,
dialogTitle: '新增字典数据',
pickerOptions: {
shortcuts: [
{
text: '今天',
onClick(picker) {
picker.$emit('pick', new Date())
},
},
{
text: '昨天',
onClick(picker) {
const date = new Date()
date.setTime(date.getTime() - 3600 * 1000 * 24)
picker.$emit('pick', date)
},
},
{
text: '一周前',
onClick(picker) {
const date = new Date()
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
picker.$emit('pick', date)
},
},
],
},
form: {
devType: null,
devTypeName: null,
// versionAgreement: null,
// versionNo: null,
// versionType: null,
// crcInfo: null,
// description: null,
// versionDate: null,
type: null,
},
file: '',
fileList: [], // 回显
formInline: {
pageNum: 1,
pageSize: 20,
versionStartDate: '',
versionendDate: '',
date: [],
},
formLabelWidth: '120px',
tableData: [],
total: 0,
devTypeOptions: [],
devTypeAllOptions: [],
typeOptions: [],
tabHeight: 'calc(100vh - 255px)',
}
},
computed: {
vth() {
return window.sessionStorage.getItem("appheight") -145;
}
},
created() {
this.onSearch()
queryByCode('Direct_Connected_Device').then((res) => {
queryCsDictTree(res.data.id).then((res) => {
this.typeOptions = res.data.map((item) => {
return {
value: item.id,
label: item.name,
}
})
})
queryByid(res.data.id).then((res) => {
this.devTypeAllOptions = res.data.map((item) => {
return {
value: item.id,
label: item.name,
}
})
})
})
},
methods: {
typeChange() {
this.form.devType = null
this.form.devTypeName = null
queryCsDictTree(this.form.type).then((res) => {
this.devTypeOptions = res.data.map((item) => {
return {
value: item.id,
label: item.name,
}
})
})
},
devTypeChange(e) {
console.log(e)
this.form.devTypeName = this.devTypeOptions.filter((item) => item.value == e)[0].label
},
fileChange(e) {
console.log('fileChange!')
console.log(e)
this.file = e.raw
},
fileExceed(e) {
console.log('fileExceed!')
console.log(e)
this.$message({
message: '最多只能上传一个文件,如若替换请先删除',
type: 'error',
})
},
addEdData() {
let form = new FormData()
for (let key in this.form) {
if (!this.form[key]) {
this.$message({
message: '请完善表单信息',
type: 'error',
})
return
}
form.append(key, this.form[key])
}
if (this.form.id) {
if (this.file) {
form.append('file', this.file)
}
auditEdData(form).then((res) => {
console.log(res)
if (res.code == 'A0000') {
this.onSearch()
this.$message({
type: 'success',
message: '修改成功!',
})
this.dialogFormVisible = false
for (let key in this.form) {
this.form[key] = ''
}
delete this.form.id
this.fileList = []
this.file = ''
}
})
} else {
if (!this.file) {
this.$message({
message: '请上传升级文件',
type: 'error',
})
return
}
form.append('file', this.file)
addEdData(form).then((res) => {
console.log(res)
if (res.code == 'A0000') {
this.onSearch()
this.$message({
message: '添加成功',
type: 'success',
})
this.dialogFormVisible = false
for (let key in this.form) {
this.form[key] = ''
}
this.file = ''
}
})
}
},
onSearch() {
console.log('submit!')
queryEdDataPage(this.formInline).then((res) => {
console.log(res)
this.tableData = res.data.records
this.total = res.data.total
})
},
resetFormInline() {
this.formInline.devType = ''
this.formInline.versionendDate = ''
this.formInline.versionStartDate = ''
this.formInline.date = []
},
pageChange(e) {
console.log('pageChange!')
console.log(e)
this.formInline.pageNum = e
this.onSearch()
},
handleSizeChange(val) {
// console.log(`每页 ${val} 条`);
this.formInline.pageNum = 1
this.formInline.pageSize = val
this.onSearch()
},
dateChange(e) {
console.log(e)
if (e && e.length > 0) {
this.formInline.versionStartDate = e[0]
this.formInline.versionendDate = e[1]
} else {
this.formInline.versionStartDate = ''
this.formInline.versionendDate = ''
}
},
start(item) {
console.log(item)
this.confirmPassWord().then(() => {
this.$confirm('确定启用吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
auditEdData({
id: item.id,
status: 1,
}).then((res) => {
console.log(res)
if (res.code == 'A0000') {
this.onSearch()
this.$message({
type: 'success',
message: '启用成功!',
})
}
})
})
})
},
del(item) {
console.log(item)
this.confirmPassWord().then(() => {
this.$confirm('确定禁用吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
auditEdData({
id: item.id,
status: 0,
}).then((res) => {
console.log(res)
if (res.code == 'A0000') {
this.onSearch()
this.$message({
type: 'success',
message: '禁用成功!',
})
}
})
})
})
},
add() {
this.confirmPassWord().then(() => {
this.dialogTitle = '新增版本'
this.dialogFormVisible = true
})
},
confirmPassWord() {
return new Promise((resolve, reject) => {
if (localStorage.getItem('password')) {
resolve()
} else {
this.$prompt('密码确认', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputType: 'password',
}).then(({value}) => {
localStorage.setItem('password', value)
resolve()
})
}
})
},
edit(item) {
this.confirmPassWord().then(() => {
for (let key in this.form) {
this.form[key] = item[key]
}
this.fileList = [
{
name: item.filePath,
url: item.filePath,
},
]
this.form.id = item.id
console.log(this.form)
this.dialogTitle = '修改终端版本'
this.dialogFormVisible = true
})
},
},
}
</script>
<style lang="scss">
.dictionary {
.el-input {
width: 100%;
}
}
</style>

View File

@@ -0,0 +1,85 @@
<template>
<Page>
<div class="engineering">
<el-table
stripe
style="width: 100%"
:data="tableData"
height="calc(100vh - 136px)"
border
highlight-current-row
v-loading="loading"
:header-cell-style="{
//background:'#5E95E8',
//color:'#FFFFFF',
height: '25px',
padding: '0px'
}"
header-cell-class-name="table_header"
:row-style="{ height: '28px' }"
:cell-style="{ padding: '0px' }"
row-key="id"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table-column align="left" prop="name" label="名称"></el-table-column>
<el-table-column align="center" prop="area" label="区域">
<template slot-scope="scope">
{{ scope.row.area || '/' }}
</template>
</el-table-column>
<el-table-column align="center" prop="remark" label="备注">
<template slot-scope="scope">
{{ scope.row.remark || '/' }}
</template>
</el-table-column>
<!-- <el-table-column align="center" label="操作" width="260">-->
<!-- <template slot-scope="scope">-->
<!-- <div class="table-operation">-->
<!-- <el-button size="mini" type="primary" @click="edit(scope.row)" icon="el-icon-edit" >编辑</el-button>-->
<!-- <el-button size="mini" type="primary" @click="jumpProject(scope.row)" icon="el-icon-search">项目</el-button>-->
<!-- <el-button size="mini" type="danger" @click="del(scope.row)" icon="el-icon-delete">删除</el-button> -->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</div>
</Page>
</template>
<script>
import { engineeringTree } from '@/api/app/engineering'
export default {
name: 'GovernManageEngineering',
data() {
return {
loading: false,
total: 0,
tableData: [],
tabHeight: 'calc(100vh - 116px)'
}
},
computed: {
vth() {
return window.sessionStorage.getItem('appheight') - 10
}
},
created() {
this.search()
},
methods: {
search() {
engineeringTree().then(res => {
console.warn(res)
this.tableData = res.data
this.loading = false
})
}
}
}
</script>
<style lang="scss">
.project {
}
</style>

View File

@@ -0,0 +1,763 @@
<template>
<Page>
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="设备类型:">
<el-select
v-model="formInline.devType"
placeholder="请选择设备类型"
style="width: 100%"
@change="devTypeChange"
clearable
>
<el-option
v-for="item in devTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备型号:">
<el-select v-model="formInline.devModel" placeholder="请选择设备型号" style="width: 100%" clearable>
<el-option
v-for="item in devModelOptionsFilter"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="通讯协议:">
<el-select
v-model="formInline.devAccessMethod"
placeholder="请选择通讯协议"
style="width: 100%"
clearable
@change="devModelChange"
>
<el-option label="MQTT" value="mqtt"></el-option>
<el-option label="CLD" value="cloud"></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态:">
<el-select
v-model="formInline.status"
placeholder="请选择状态"
style="width: 100%"
clearable
@change="devModelChange"
>
<el-option label="未注册" :value="1"></el-option>
<el-option label="注册" :value="2"></el-option>
<el-option label="接入" :value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="search" icon="el-icon-search">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetFormInline" icon="el-icon-setting">重置</el-button>
</el-form-item>
<el-form-item style="display: flex; float: right">
<el-button type="primary" @click="downLoadFile" icon="el-icon-download">模版下载</el-button>
<el-upload
style="display: inline-block"
action=""
accept=".xlsx"
class="upload-demo"
:show-file-list="false"
:auto-upload="false"
:on-change="bulkImport"
>
<el-button type="primary" icon="el-icon-tickets">批量导入</el-button>
</el-upload>
<el-button type="primary" @click="add" icon="el-icon-plus">新增设备</el-button>
</el-form-item>
</el-form>
<el-table
stripe
style="width: 100%"
:data="tableData"
height="calc(100vh - 224px)"
border
v-loading="loading"
highlight-current-row
header-cell-class-name="table_header"
>
<el-table-column align="center" prop="name" label="设备名称"></el-table-column>
<el-table-column align="center" prop="devType" label="设备类型">
<template slot-scope="scope">
{{
devTypeOptions.filter(item => item.value == scope.row.devType)[0] &&
devTypeOptions.filter(item => item.value == scope.row.devType)[0].label
}}
</template>
</el-table-column>
<el-table-column align="center" prop="devModel" label="设备型号">
<template slot-scope="scope">
{{
devModelOptions.filter(item => item.value == scope.row.devModel)[0] &&
devModelOptions.filter(item => item.value == scope.row.devModel)[0].label
}}
</template>
</el-table-column>
<el-table-column align="center" prop="devAccessMethod" label="通讯协议">
<template slot-scope="scope">
{{
scope.row.devAccessMethod === 'MQTT'
? 'MQTT'
: scope.row.devAccessMethod === 'cloud'
? 'CLD'
: scope.row.devAccessMethod
}}
</template>
</el-table-column>
<el-table-column align="center" prop="createTime" label="录入时间" min-width="150"></el-table-column>
<!-- <el-table-column align="center" prop="programVersion" label="程序版本" min-width="130">-->
<!-- <template slot-scope="scope">-->
<!-- {{-->
<!-- versionOptions.filter((item) => item.value == scope.row.programVersion)[0] &&-->
<!-- versionOptions.filter((item) => item.value == scope.row.programVersion)[0].label-->
<!-- }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column align="center" prop="ndid" label="网络设备ID" min-width="120"></el-table-column>
<el-table-column align="center" prop="status" label="状态" min-width="70">
<template slot-scope="scope">
{{ scope.row.status == 1 ? '未注册' : scope.row.status == 2 ? '注册' : '接入' }}
</template>
</el-table-column>
<el-table-column align="center" label="操作" min-width="340">
<template slot-scope="scope">
<!-- <div class="table-operation"> -->
<el-button size="mini" type="primary" @click="edit(scope.row)" icon="el-icon-edit">编辑</el-button>
<el-button size="mini" type="primary" @click="qrCode(scope.row)" icon="el-icon-s-grid">
二维码
</el-button>
<el-button size="mini" type="primary" @click="reset(scope.row.ndid)" icon="el-icon-setting">
出厂恢复
</el-button>
<el-button
size="mini"
type="danger"
@click="deleteEquipmentDelivery(scope.row.id)"
icon="el-icon-delete"
>
删除
</el-button>
<!-- </div> -->
</template>
</el-table-column>
</el-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="pageChange"
:current-page="formInline.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible" width="30%" :before-close="closeDialog">
<el-form :model="form" :label-width="formLabelWidth" :rules="rules" ref="form">
<el-form-item label="设备名称:" prop="name">
<el-input
v-model="form.name"
autocomplete="off"
clearable
placeholder="请输入(项目名称+设备名称)"
></el-input>
</el-form-item>
<el-form-item label="网络设备ID:" prop="ndid" class="top">
<el-input v-model="form.ndid" autocomplete="off" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="设备类型:" prop="devType" class="top">
<el-select
v-model="form.devType"
placeholder="请选择"
style="width: 100%"
@change="formDevTypeChange"
clearable
>
<el-option
v-for="item in devTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备型号:" prop="devModel" class="top">
<el-select
v-model="form.devModel"
placeholder="请选择"
style="width: 100%"
clearable
@change="formDevModelChange"
>
<el-option
v-for="item in formDevModelOptionsFilter"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="通讯协议:" prop="devAccessMethod" class="top">
<el-select v-model="form.devAccessMethod" placeholder="请选择" style="width: 100%" clearable>
<el-option label="MQTT" value="MQTT"></el-option>
<el-option label="CLD" value="cloud"></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="程序版本:" prop="programVersion">-->
<!-- <el-select v-model="form.programVersion" placeholder="请选择" style="width: 100%">-->
<!-- <el-option v-for="item in versionOptionsFilter" :key="item.value" :label="item.label"-->
<!-- :value="item.value">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="MAC地址:" prop="mac">-->
<!-- <el-input v-model="form.mac" autocomplete="off" placeholder="请输入"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="调试人员:" prop="debugPerson">-->
<!-- <el-input v-model="form.debugPerson" autocomplete="off" placeholder="请输入"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="设备出厂日期:" prop="producteTime">-->
<!-- <el-date-picker value-format="yyyy-MM-dd" v-model="form.producteTime" type="date" style="width: 100%"-->
<!-- placeholder="选择日期时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="检修日期:" prop="checkTime">-->
<!-- <el-date-picker value-format="yyyy-MM-dd" v-model="form.checkTime" type="date" style="width: 100%"-->
<!-- placeholder="选择日期时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="调试日期:" prop="debugTime">-->
<!-- <el-date-picker value-format="yyyy-MM-dd" v-model="form.debugTime" type="date" style="width: 100%"-->
<!-- placeholder="选择日期时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label="合同号:" prop="cntractNo" class="top">
<el-input v-model="form.cntractNo" autocomplete="off" placeholder="请输入"></el-input>
</el-form-item>
<!-- <el-form-item label="营销经理:" prop="salesManager">-->
<!-- <el-input v-model="form.salesManager" autocomplete="off" placeholder="请输入"></el-input>-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="onSubmit"> </el-button>
</div>
</el-dialog>
<div class="qrcode-label">
<div class="qrcode-label-title">{{ deivce.mac }}</div>
<img class="qrcode-label-img" alt="二维码加载失败" :src="deivce.qrPath" />
</div>
</Page>
</template>
<script>
import {
getDeviceLeavesFactoryList,
addEquipmentDelivery,
deleteEquipmentDelivery,
editEquipmentDelivery,
uploadTopo,
batchImportDevice,
resetEquipmentDelivery
} from '@/api/app/device'
import { queryByCode, queryCsDictTree, queryByid, queryEdDataPage } from '@/api/app/setting'
import html2canvas from 'html2canvas'
export default {
name: 'GovernManageFactory',
data() {
return {
loading: true,
dialogFormVisible: false,
dialogTitle: '新增设备',
form: {
// checkTime: '',
cntractNo: '',
// debugPerson: '',
// debugTime: '',
devAccessMethod: 'mqtt',
devModel: '',
devType: '',
// mac: '',
name: '',
ndid: ''
// producteTime: '',
// programVersion: '',
// salesManager: '',
},
deivce: {},
dialogImageUrl: '',
dialogVisible: false,
formLabelWidth: '120px',
formInline: {
devAccessMethod: '',
devModel: '',
devType: '',
orderBy: '',
pageNum: 1,
pageSize: 20,
searchBeginTime: '',
searchEndTime: '',
searchState: '',
searchValue: '',
sortBy: '',
status: ''
},
// 设备类型
devTypeOptions: [],
// 设备型号
devModelOptions: [],
// 程序版本
versionOptions: [],
total: 0,
tableData: [],
engineeringList: [],
tabHeight: 'calc(100vh - 205px)',
rules: {
name: [
{ required: true, message: '设备名不能为空', trigger: 'blur' }
// {
// pattern: /[^\u4E00-\u9FA5]/,
// message: "请输入中文字符",
// trigger: "blur",
// },
],
ndid: [{ required: true, message: '网络设备id不能为空', trigger: 'blur' }],
devType: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
devModel: [{ required: true, message: '设备型号不能为空', trigger: 'blur' }],
devAccessMethod: [{ required: true, message: '接入方式不能为空', trigger: 'blur' }],
// programVersion: [{ required: true, message: '程序版本不能为空', trigger: 'blur' }],
mac: [
{
required: true,
trigger: 'blur',
validator: (rule, value, callback) => {
if (value) {
// MAC地址正则表达式
let reg = /^([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})$/
// IP4地址正则表达式
let reg2 =
/^((([0-9]|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3})([0-9]|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))$/
if (reg.test(this.form.mac) || reg2.test(this.form.mac)) {
callback()
} else {
callback(new Error('请输入正确的MAC地址'))
}
} else {
callback(new Error('请输入正确的MAC地址'))
}
}
}
],
debugPerson: [{ required: true, message: '调试人员不能为空', trigger: 'blur' }],
producteTime: [
{ required: false, message: '设备出场日期不能为空', trigger: 'blur' }
// {
// type: "email",
// message: "'请输入正确的邮箱地址",
// trigger: ["blur", "change"],
// },
],
checkTime: [
{ required: false, message: '检修日期不能为空', trigger: 'blur' }
// {
// pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
// message: "请输入正确的手机号码",
// trigger: "blur",
// },
],
debugTime: [{ required: true, message: '调试日期不能为空', trigger: 'blur' }],
cntractNo: [
{ required: true, message: '合同号不能为空', trigger: 'blur' }
// {
// required: true,
// validator: (rule, value, callback) => {
// let regexp =
// /^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/;
// let isCorrect = regexp.test(value);
// if (value == "") {
// return callback(new Error("请输入IP地址"));
// } else if (!isCorrect) {
// callback(new Error("请输入正确的IP地址"));
// } else {
// callback();
// }
// },
// trigger: "blur",
// },
],
salesManager: [
{ required: true, message: '销售经理不能为空', trigger: 'blur' }
// {
// required: true,
// validator: (rule, value, callback) => {
// let regexp =
// /^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/;
// let isCorrect = regexp.test(value);
// if (value == "") {
// return callback(new Error("请输入IP地址"));
// } else if (!isCorrect) {
// callback(new Error("请输入正确的IP地址"));
// } else {
// callback();
// }
// },
// trigger: "blur",
// },
]
}
}
},
computed: {
vth() {
return window.sessionStorage.getItem('appheight') - 95
},
devModelOptionsFilter() {
return this.devModelOptions.filter(item => {
if (this.formInline.devType) {
return item.pid == this.formInline.devType
} else {
return true
}
})
},
formDevModelOptionsFilter() {
return this.devModelOptions.filter(item => {
if (this.form.devType) {
return item.pid == this.form.devType
} else {
return true
}
})
},
versionOptionsFilter() {
return this.versionOptions.filter(item => {
if (this.form.devModel) {
return item.devType == this.form.devModel
} else {
return true
}
})
}
},
created() {
this.search()
queryByCode('Device_Type').then(res => {
queryCsDictTree(res.data.id).then(res => {
this.devTypeOptions = res.data.map(item => {
return {
value: item.id,
label: item.name,
...item
}
})
})
queryByid(res.data.id).then(res => {
this.devModelOptions = res.data.map(item => {
return {
value: item.id,
label: item.name,
...item
}
})
})
})
queryEdDataPage({
pageNum: 1,
pageSize: 1000
}).then(res => {
console.log(res)
this.versionOptions = res.data.records.map(item => {
return {
value: item.id,
label: item.versionNo,
...item
}
})
})
},
methods: {
closeDialog() {
this.resetForm()
this.dialogFormVisible = false
},
// 表单重置
resetForm() {
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
downLoadFile() {
window.open(window.location.origin + '/api/cs-device-boot/EquipmentDelivery/getExcelTemplate')
},
bulkImport(e) {
console.warn(e)
batchImportDevice(e.raw).then(res => {
console.log(res)
if (res.type === 'application/json') {
const reader = new FileReader()
reader.readAsText(res)
reader.onload = e => {
console.log(e)
let data = JSON.parse(e.target.result)
if (data.code === 'A0000') {
this.$message({
type: 'success',
message: data.message
})
this.search()
} else {
this.$message({
type: 'error',
message: data.message
})
}
}
} else {
let url = window.URL.createObjectURL(res)
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', '导入失败.xlsx')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
})
},
qrCode(item) {
this.deivce = item
this.deivce.qrPath = localStorage.getItem('STATIC_URL') + this.deivce.qrPath
this.$nextTick(() => {
html2canvas(document.querySelector('.qrcode-label'), {
useCORS: true
}).then(canvas => {
let url = canvas.toDataURL('image/png')
// 下载图片
let a = document.createElement('a')
let event = new MouseEvent('click')
a.href = url
a.download = item.mac + '.png'
a.dispatchEvent(event)
})
})
},
deleteEquipmentDelivery(id) {
this.$confirm('确定删除该设备吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteEquipmentDelivery(id).then(res => {
console.log(res)
if (res.code === 'A0000') {
this.$message({
type: 'success',
message: '删除成功!'
})
this.search()
}
})
})
},
reset(id) {
this.$confirm('确定该设备恢复出厂吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
resetEquipmentDelivery(id).then(res => {
console.log(res)
if (res.code === 'A0000') {
this.$message({
type: 'success',
message: '恢复成功!'
})
this.search()
}
})
})
},
devTypeChange(e) {
console.log(e)
if (!e) {
return
}
this.formInline.devModel = ''
},
formDevTypeChange(e) {
console.log(e)
if (!e) {
return
}
this.form.devModel = ''
},
formDevModelChange(e) {
console.log(e)
if (!e) {
return
}
// this.form.programVersion = ''
},
devModelChange(e) {
console.log(e)
},
imageChange(e) {
console.log(e)
this.form.files.push(e)
},
handleRemove(file, fileList) {
console.log(file, fileList)
if (file.id) {
delAppTopologyDiagram(file.id).then(res => {
console.log(res)
})
}
this.form.files = fileList
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
},
pageChange(e) {
console.log('pageChange!')
console.log(e)
this.formInline.pageNum = e
this.search()
},
handleSizeChange(val) {
console.log(`每页 ${val}`)
this.formInline.pageNum = 1
this.formInline.pageSize = val
this.search()
},
search() {
this.loading = true
getDeviceLeavesFactoryList(this.formInline).then(res => {
console.warn(res)
this.tableData = res.data.records
this.total = res.data.total
this.loading = false
})
},
resetFormInline() {
for (let key in this.formInline) {
if (key !== 'pageNum' && key !== 'pageSize') {
this.formInline[key] = ''
}
}
},
reload() {
for (let key in this.formInline) {
this.formInline[key] = ''
}
this.formInline.pageNum = 1
this.formInline.pageSize = 20
this.search()
},
onSubmit() {
console.log(this.form)
for (let key in this.form) {
if (this.form[key] === '') {
this.$message.error('请填写完整信息')
return
}
}
if (this.dialogTitle == '新增设备') {
addEquipmentDelivery(this.form).then(res => {
console.log(res)
if (res.code === 'A0000') {
this.$message({
message: '新增成功',
type: 'success'
})
this.dialogFormVisible = false
this.reload()
}
})
} else {
editEquipmentDelivery(this.form).then(res => {
if (res.code === 'A0000') {
this.$message({
message: '修改成功',
type: 'success'
})
this.dialogFormVisible = false
this.reload()
}
})
}
},
add() {
for (let key in this.form) {
if (key == 'files') {
this.form[key] = []
continue
}
this.form[key] = ''
}
delete this.form.id
this.dialogTitle = '新增设备'
this.dialogFormVisible = true
},
edit(item) {
console.log(item)
this.dialogTitle = '编辑设备'
for (let key in this.form) {
this.form[key] = item[key]
}
this.form.id = item.id
this.dialogFormVisible = true
},
dialogClose() {
this.form.id = ''
this.form.name = ''
this.dialogFormVisible = false
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../styles/comStyle.less');
</style>
<style lang="scss">
.qrcode-label {
position: absolute;
top: 0;
right: 0;
z-index: -99;
display: flex;
align-items: center;
justify-content: center;
width: 180px;
height: 180px;
padding: 10px;
background: #fff;
flex-direction: column;
.qrcode-label-title {
margin-bottom: 10px;
font-size: 14px;
font-weight: bold;
}
.qrcode-label-img {
width: 140px;
height: 140px;
}
}
</style>

View File

@@ -0,0 +1,157 @@
<template>
<Page>
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="关键词">
<el-input v-model="formInline.searchValue" placeholder="请输入关键词" clearable></el-input>
</el-form-item>
<el-form-item>
<timepicker ref="timepk" :interval="interval" :dataTree="dataTree"></timepicker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="queryData" icon="el-icon-search">查询</el-button>
</el-form-item>
</el-form>
<el-table
stripe
highlight-current-row
header-cell-class-name="table_header"
border
style="width: 100%"
:data="tableData"
height="calc(100vh - 224px)"
>
<el-table-column prop="title" label="问题标题" align="center"></el-table-column>
<el-table-column prop="description" label="问题描述" align="center"></el-table-column>
<el-table-column prop="status" label="问题状态" align="center">
<template slot-scope="scope">
<el-tag v-if="scope.row.status == 2">处理中</el-tag>
<el-tag v-if="scope.row.status == 0" type="success">已解决</el-tag>
<el-tag v-if="scope.row.status == 1" type="warning">待处理</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="发布时间" align="center"></el-table-column>
<el-table-column label="操作" width="240px" align="center">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
icon="el-icon-finished"
@click="solve(scope.row)"
v-if="scope.row.status != 0"
>
解决
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="pageChange"
:current-page="formInline.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</Page>
</template>
<script>
import { queryFeedBackPage, updateFeedBackStatus } from '@/api/app/manage'
import timepicker from '@/views/components/TimePicker/index4'
export default {
name: 'GovernLogOperation',
components: {
timepicker
},
data() {
return {
interval: 3,
total: 0,
formInline: {
pageNum: 1,
pageSize: 20,
searchValue: ''
},
loading: false,
tableData: []
//tabHeight: 'calc(100vh - 255px)',
}
},
computed: {
vth() {
return window.sessionStorage.getItem('appheight') - 101
}
},
mounted() {
this.queryData()
},
methods: {
solve(row) {
console.log(row)
this.$confirm('该问题是否已解决?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
updateFeedBackStatus({
id: row.id,
status: 0
}).then(res => {
console.log(res)
if (res.code == 'A0000') {
this.$message({
type: 'success',
message: '操作成功!'
})
this.queryData()
} else {
this.$message({
type: 'error',
message: '操作失败!'
})
}
})
})
},
queryData() {
this.loading = true
this.formInline.searchBeginTime = this.$refs.timepk.timeValue[0]
this.formInline.searchEndTime = this.$refs.timepk.timeValue[1]
queryFeedBackPage(this.formInline).then(res => {
console.log(res)
if (res.code == 'A0000') {
this.total = res.data.total
this.tableData = res.data.records
}
this.loading = false
})
},
onSubmit() {
console.log('submit!')
},
pageChange(e) {
console.log('pageChange!')
console.log(e)
this.formInline.pageNum = e
this.queryData()
},
handleSizeChange(val) {
console.log(`每页 ${val}`)
this.formInline.pageNum = 1
this.formInline.pageSize = val
this.queryData()
}
}
}
</script>
<style lang="scss" scoped>
::v-deep.el-table--enable-row-hover .el-table__body tr:hover > td {
color: #000 !important;
background-color: $hoverf !important;
}
</style>

View File

@@ -0,0 +1,58 @@
<template>
<Page :loading="false">
<div >
<el-form :inline="true" class="demo-form-inline">
<el-form-item style="float: right;">
<el-button type="primary" @click="refreshReferralCode">刷新推荐码</el-button>
</el-form-item>
</el-form>
<el-table
stripe :cell-style="{ textAlign: 'center' }"
:header-cell-style="{ textAlign: 'center' }"
:data="tableData"
height="calc(100vh - 185px)"
border
header-cell-class-name="table_header"
algin="center"
style="width: 100%;">
<el-table-column
prop="roleName"
label="角色名称"
>
</el-table-column>
<el-table-column
prop="roleReferralCode"
label="推荐码"
>
</el-table-column>
</el-table>
</div>
</page>
</template>
<script>
import {findReferralCode, refreshReferralCode} from '@/api/app/setting'
export default {
name: 'GovernManageReferral',
data() {
return {
tableData: []
}
},
created() {
findReferralCode().then(res => {
console.log(res)
this.tableData = res.data
})
},
methods: {
refreshReferralCode() {
refreshReferralCode().then(res => {
console.log(res)
this.tableData = res.data
})
}
}
}
</script>