Commit d178de9b by 温丽香

数据列表修改

1 parent b8a5458d
Pipeline #3855 passed
in 1 minute 51 seconds
...@@ -56,7 +56,7 @@ module.exports = { ...@@ -56,7 +56,7 @@ module.exports = {
'no-unneeded-ternary': 2, // 禁止不必要的嵌套 'no-unneeded-ternary': 2, // 禁止不必要的嵌套
'no-nested-ternary': 2, // 禁用嵌套的三目运算符 'no-nested-ternary': 0, // 禁用嵌套的三目运算符
'no-const-assign': 2, // 禁止修改 const 变量 'no-const-assign': 2, // 禁止修改 const 变量
......
...@@ -17,7 +17,9 @@ const TABLE = '/table' ...@@ -17,7 +17,9 @@ const TABLE = '/table'
export const getTable = data => axios(GET, FRONT + TABLE + '/query_list', data) export const getTable = data => axios(GET, FRONT + TABLE + '/query_list', data)
export const createTable = data => axios(POST, FRONT + TABLE + '/create', data) export const createTable = data => axios(POST, FRONT + TABLE + '/create', data)
export const deleteTable = data => axios(GET, FRONT + TABLE + '/delete', data) export const deleteTable = data => axios(GET, FRONT + TABLE + '/delete', data)
export const insertTable = data => axios(POST, FRONT + TABLE + '/insert', data) export const addData = data => axios(POST, FRONT + TABLE + '/data/insert', data)
export const getData = data => axios(GET, FRONT + TABLE + '/data/query_list', data)
export const deleteData = data => axios(POST, FRONT + TABLE + '/data/delete', data)
const APPID = '/appid' const APPID = '/appid'
export const getApp = data => axios(GET, FRONT + APPID + '/query_list', data) export const getApp = data => axios(GET, FRONT + APPID + '/query_list', data)
......
...@@ -36,8 +36,9 @@ export const stringToBase64 = str => { ...@@ -36,8 +36,9 @@ export const stringToBase64 = str => {
export const base64ToString = base64 => { export const base64ToString = base64 => {
// 对base64转编码 // 对base64转编码
const decode = atob(base64) const decode = atob(base64)
const temp = decode.replace(/%/g, '%25')
// 编码转字符串 // 编码转字符串
const str = decodeURI(decode) const str = decodeURI(temp)
return str return str
} }
......
...@@ -44,7 +44,8 @@ ...@@ -44,7 +44,8 @@
:data="{ :data="{
list: tokenList, list: tokenList,
total: total, total: total,
}"> }"
:outerLoading="loadingStatus">
<div slot="operate" slot-scope="row"> <div slot="operate" slot-scope="row">
<span class="operate" @click="handleEdit(row)">编辑</span> <span class="operate" @click="handleEdit(row)">编辑</span>
<span class="operate operate-delete" @click="handleDelete(row)">删除</span> <span class="operate operate-delete" @click="handleDelete(row)">删除</span>
......
...@@ -12,15 +12,16 @@ ...@@ -12,15 +12,16 @@
:data="{ :data="{
list: tokenList, list: tokenList,
total: total, total: total,
}"> }"
:outerLoading="loadingStatus">
<div slot="secret" slot-scope="row"> <div slot="secret" slot-scope="row">
<span v-if="showSecret === row.number" class="secret-box">{{row.desc}}</span> <span v-if="showSecret === row.appid" class="secret-box">{{row.secret}}</span>
<span v-else class="secret-box">********</span> <span v-else class="secret-box">********</span>
<i class="el-icon-view eye-btn" @mousedown="showSecret = row.number" @mouseup="showSecret = ''"></i> <i class="el-icon-view eye-btn" @mousedown="showSecret = row.appid" @mouseup="showSecret = ''"></i>
</div> </div>
<div slot="operate" slot-scope="row"> <div slot="operate" slot-scope="row">
<span class="operate" v-if="row.number === 1" @click="setHostApp">设置为主应用</span> <span class="operate" v-if="row.number === 1" @click="setHostApp(row)">设置为主应用</span>
<span class="operate" v-else @click="cancelHostApp">取消设置为主应用</span> <span class="operate" v-else @click="setHostApp(row)">取消设置为主应用</span>
<span class="operate operate-delete" @click="handleDelete(row)">删除</span> <span class="operate operate-delete" @click="handleDelete(row)">删除</span>
</div> </div>
</st-table> </st-table>
...@@ -31,16 +32,17 @@ ...@@ -31,16 +32,17 @@
</template> </template>
<script> <script>
import { getApp } from '@/axios' import { getApp, deleteApp, setApp } from '@/axios'
import Dialog from '@/helpers/dialog' import Dialog from '@/helpers/dialog'
export default { export default {
data() { data() {
return { return {
showSecret: '', showSecret: '',
loadingStatus: false,
definitions: [ definitions: [
{ {
label: 'APPID', label: 'APPID',
render: 'number' render: 'appid'
}, },
{ {
label: 'Secret', label: 'Secret',
...@@ -49,15 +51,15 @@ export default { ...@@ -49,15 +51,15 @@ export default {
}, },
{ {
label: '创建时间', label: '创建时间',
render: 'type' render: 'create_date'
}, },
{ {
label: '设备数量', label: '设备数量',
render: 'desc' render: 'devices'
}, },
{ {
label: '说明', label: '说明',
render: 'desc' render: 'description'
}, },
{ {
label: '操作', label: '操作',
...@@ -67,7 +69,7 @@ export default { ...@@ -67,7 +69,7 @@ export default {
}, },
], ],
tokenList: [], tokenList: [],
total: 34 total: 0
} }
}, },
mounted() { mounted() {
...@@ -75,24 +77,31 @@ export default { ...@@ -75,24 +77,31 @@ export default {
}, },
methods: { methods: {
async getData() { async getData() {
this.loadingStatus = true
const res = await getApp({ pages: 0, pagesize: 10 }) const res = await getApp({ pages: 0, pagesize: 10 })
if (res && res.data && res.data.code === 0) { if (res && res.data && res.data.code === 0) {
this.tokenList = res.data.data.apps this.tokenList = res.data.data.apps
this.total = res.data.data.total this.total = res.data.data.total
} }
this.loadingStatus = false
}, },
async handleDelete(row) { async handleDelete(row) {
console.log(row)
const confirmDelete = await Dialog.confirm('提示', { message: '是否删除此应用?' }) const confirmDelete = await Dialog.confirm('提示', { message: '是否删除此应用?' })
if (!confirmDelete) return if (!confirmDelete) return
const res = await this.getData() const res = await deleteApp({ appid: row.appid })
if (res) { if (res && res.data && res.data.code === 0) {
Toast.success('操作成功')
this.getData()
}
},
async setHostApp(row) {
const res = await setApp({ appid: row.appid, mainapp: 1, username: 'test' })
if (res && res.data && res.data.code === 0) {
Toast.success('操作成功') Toast.success('操作成功')
this.getData() this.getData()
} }
}, },
setHostApp() {},
cancelHostApp() {} cancelHostApp() {}
} }
} }
......
...@@ -28,22 +28,23 @@ ...@@ -28,22 +28,23 @@
<div class="list-content"> <div class="list-content">
<el-table :max-height="flexHeight" <el-table :max-height="flexHeight"
ref="singleTable" ref="singleTable"
:data="tableData" :data="tableData.concat(insertData)"
highlight-current-row highlight-current-row
@current-change="currentChange" @current-change="currentChange"
@row-click="rowClick" @row-click="rowClick"
@cell-click="cellClick" @cell-click="cellClick"
style="width: 100%"> style="width: 100%"
v-loading="loadingStatus">
<el-table-column label="序号" width="100px"> <el-table-column label="序号" width="100px">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 12px">{{scope.row.field}}</span> <span style="margin-left: 12px">{{scope.row.id}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-for="(column, index) in tableData[0].columns" :key="index" :label="`列${index + 1}`" :min-width="index + 1 === columnIndex ? '220px' : ''"> <el-table-column v-for="index of totalColumns" :key="index" :label="`列${index}`" :min-width="index === columnIndex ? '220px' : ''">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- <div class="column-box"> -->
<div style="display: flex"> <div style="display: flex">
<pack-select v-model="scope.row.columns[index].type" @blur="handleBlur" @change="value => handleTypeChange(value, scope.row.columns[index])" placeholder="请选择" class="none-display" style="margin-right: 10px"> <span type="text" v-if="scope.row.id !== ''" class="cell-span">{{scope.row.binary[index - 1]}}</span>
<pack-select v-if="scope.row.id === ''" v-model="scope.row.binary[index - 1].type" @blur="handleBlur" @change="value => handleTypeChange(value, scope.row.binary[index - 1])" placeholder="请选择" class="none-display" style="margin-right: 10px">
<el-option <el-option
v-for="item in typeOptions" v-for="item in typeOptions"
:key="item.value" :key="item.value"
...@@ -51,24 +52,16 @@ ...@@ -51,24 +52,16 @@
:value="item.value"> :value="item.value">
</el-option> </el-option>
</pack-select> </pack-select>
<input type="text" v-model="scope.row.columns[index].value" @blur="handleBlur" placeholder="请输入" class="cell-value" <input type="text" v-if="scope.row.id === ''" v-model="scope.row.binary[index - 1].value" @blur="handleBlur" placeholder="请输入" class="cell-value"
:style="{border: scope.row.columns[index].type === 'base64' && !base64Pattern.test(scope.row.columns[index].value) ? '1px solid #F56C6C' : 'none'}" :style="{border: scope.row.binary[index - 1].type === 'base64' && !base64Pattern.test(scope.row.binary[index - 1]) ? '1px solid #F56C6C' : 'none'}"
@input="event => checkBase64(event.target, scope.row.columns[index])" @input="event => checkBase64(event.target, scope.row.binary[index - 1])"
@focus="event => handleFocus(event.target, scope.row.columns[index])"> @focus="event => handleFocus(event.target, scope.row.binary[index - 1])">
<!-- <el-select v-model="scope.row.columns[index].type" placeholder="请选择">
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select> -->
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<span @click="handleDelete(scope.row)" class="delete-btn">删除</span> <span @click="handleDelete(scope.row, scope.$index)" class="delete-btn">删除</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -77,30 +70,33 @@ ...@@ -77,30 +70,33 @@
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handlePageChange" @current-change="handlePageChange"
:current-page="1" :current-page="1"
:page-sizes="[100, 200, 300, 400]" :page-sizes="[10, 20, 50, 100]"
:page-size="100" :page-size="10"
layout="total, prev, pager, next, sizes, jumper" layout="total, prev, pager, next, sizes, jumper"
:total="400"> :total="total">
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
</div> </div>
<div class="buttons"> <div class="buttons">
<st-button @click="cancel"><span class="text">{{'取消'}}</span></st-button> <st-button @click="cancel" :disabled="!insertData.length"><span class="text">{{'取消'}}</span></st-button>
<st-button type="primary" @click="save"><span class="text">{{'保存'}}</span></st-button> <st-button type="primary" @click="save" :disabled="!insertData.length"><span class="text">{{'保存'}}</span></st-button>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { insertTable } from '@/axios' import { addData, getData, deleteData } from '@/axios'
import Dialog from '@/helpers/dialog' import Dialog from '@/helpers/dialog'
import { base64ToString, stringToBase64, isASCII } from '@/utils/typeConversion'
export default { export default {
data() { data() {
return { return {
inputVal: '', inputVal: '',
isBase64: false, isBase64: false,
loadingStatus: false,
totalColumns: Number(this.$route.query.columns),
typeOptions: [{ typeOptions: [{
value: 'base64', value: 'base64',
label: 'base64' label: 'base64'
...@@ -109,52 +105,11 @@ export default { ...@@ -109,52 +105,11 @@ export default {
label: 'string' label: 'string'
}], }],
orderOptions: [], orderOptions: [],
tableData: [{ currentPage: 1,
field: '1', currentSize: 10,
columns: [ tableData: [],
{ type: 'base64', value: '1222' }, insertData: [],
{ type: 'string', value: '1222' }, total: 0,
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' }
]
}, {
field: '2',
columns: [
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' }
]
}, {
field: '3',
columns: [
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'base64', value: '1222' }
]
}, {
field: '4',
columns: [
{ type: 'string', value: '上海市普陀上海市普陀' },
{ type: 'string', value: '上海市普陀上海市普陀' },
{ type: 'base64', value: '1222' },
{ type: 'base64', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'string', value: '1222' },
{ type: 'string', value: '上海市普陀上海市普陀' }
]
}],
total: 34,
agoCell: null, agoCell: null,
currentInput: null, currentInput: null,
base64Pattern: /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/, base64Pattern: /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,
...@@ -172,8 +127,25 @@ export default { ...@@ -172,8 +127,25 @@ export default {
this.setFlexHeight() this.setFlexHeight()
}, 10) }, 10)
} }
this.getData()
}, },
methods: { methods: {
async getData() {
this.loadingStatus = true
const res = await getData({ name: this.$route.query.name, pages: this.currentPage - 1, pagesize: this.currentSize })
if (res && res.data && res.data.code === 0) {
this.tableData = res.data.table.data.map(item => {
item.binary = item.binary.map(base64 => {
const decode = base64ToString(base64)
const str = decode.length > 64 ? 'blob' : isASCII(decode) ? decode : 'blob'
return str
})
return item
})
this.total = res.data.table.total
}
this.loadingStatus = false
},
handleTypeChange(value, param) { handleTypeChange(value, param) {
this.checkBase64(this.currentInput, param) this.checkBase64(this.currentInput, param)
}, },
...@@ -186,30 +158,47 @@ export default { ...@@ -186,30 +158,47 @@ export default {
target.style.border = 'none' target.style.border = 'none'
return return
} }
if (!this.base64Pattern.test(param.value)) { if (param.type === 'base64' && param.value && !this.base64Pattern.test(param.value)) {
target.style.border = '1px solid #F56C6C' target.style.border = '1px solid #F56C6C'
} else { } else {
target.style.border = 'none' target.style.border = 'none'
} }
}, },
cancel() { cancel() {
// this.getData() 取消后所有修改都撤销 this.getData() // 取消后所有修改都撤销
this.insertData = [] // 取消后所有修改都撤销
this.clearCell(this.agoCell) this.clearCell(this.agoCell)
this.setCurrent() this.setCurrent()
}, },
async save() { async save() {
this.clearCell(this.agoCell) this.clearCell(this.agoCell)
this.setCurrent() this.setCurrent()
const res = await insertTable({ const binaryData = []
name: 'demo', const insertData = this.insertData.map(item => {
binary: [ return item.binary
['dGhpcyBpcyBhIHRlc3Qy', 'emhhbmc='],
['dGhpcyBpcyBhIHRlc3Qz', 'c2FuY2h1'],
['dGhpcyBpcyBhIHRlc3Qx', 'c2FuY2g1'],
]
}) })
if (res && res.data) { insertData.map(item => {
const binaryItem = []
item.map(ite => {
if (ite.type === 'string') {
binaryItem.push(stringToBase64(ite.value))
}
if (ite.type === 'base64') {
binaryItem.push(ite.value)
}
})
if (binaryItem.length === Number(this.$route.query.columns)) {
binaryData.push(binaryItem)
}
})
const res = await addData({
name: this.$route.query.name,
binary: binaryData
})
if (res && res.data && res.data.code === 0) {
this.insertData = []
Toast.success('操作成功')
this.getData()
} }
}, },
setFlexHeight() { setFlexHeight() {
...@@ -217,34 +206,29 @@ export default { ...@@ -217,34 +206,29 @@ export default {
this.flexHeight = ele && ele.clientHeight this.flexHeight = ele && ele.clientHeight
}, },
addTableData() { addTableData() {
this.tableData.push({ const binary = []
field: '5', for (let i = 0; i < Number(this.$route.query.columns); i++) {
columns: [ binary.push({ type: '', value: '' })
{ type: 'base64', value: '' }, }
{ type: 'string', value: '' }, this.insertData.push({
{ type: 'base64', value: '' }, id: '',
{ type: 'base64', value: '' }, binary
{ type: 'string', value: '' },
{ type: 'string', value: '' },
{ type: 'base64', value: '' }
]
}) })
}, },
async handleDelete(row) { async handleDelete(row, index) {
console.log(row) if (!row.id) {
this.insertData.splice(index - this.tableData.length, 1)
return
}
const confirmDelete = await Dialog.confirm('提示', { message: '是否删除此数据?' }) const confirmDelete = await Dialog.confirm('提示', { message: '是否删除此数据?' })
if (!confirmDelete) return if (!confirmDelete) return
const res = await this.getData() const res = await deleteData({ name: this.$route.query.name, id: [row.id] })
if (res) { if (res && res.data && res.data.code === 0) {
Toast.success('操作成功') Toast.success('操作成功')
this.getData() this.getData()
} }
}, },
// handleBlur(event) {
// this.setCurrent()
// event.target && event.target.classList && event.target.classList.remove('write')
// },
handleBlur(event) { handleBlur(event) {
event.path.map(item => { event.path.map(item => {
if (item.classList && Array.from(item.classList).includes('cell')) { if (item.classList && Array.from(item.classList).includes('cell')) {
...@@ -261,19 +245,13 @@ export default { ...@@ -261,19 +245,13 @@ export default {
input && input[0] && input[0].classList.remove('write') input && input[0] && input[0].classList.remove('write')
input && input[1] && input[1].classList.remove('write') input && input[1] && input[1].classList.remove('write')
}, },
// cellClick(row, column, cell, event) {
// if (cell.getElementsByTagName('input')[0]) {
// cell.getElementsByTagName('input')[0].classList.add('write')
// cell.getElementsByTagName('input')[0].focus()
// }
// },
cellClick(row, column, cell, event) { cellClick(row, column, cell, event) {
if (column.label === '序号' || column.label === '操作') return if (column.label === '序号' || column.label === '操作') return
if (this.agoCell !== cell) { if (this.agoCell !== cell) {
this.clearCell(this.agoCell) this.clearCell(this.agoCell)
} }
this.columnIndex = Number(column.label.substring(1)) this.columnIndex = Number(column.label.substring(1))
cell.getElementsByClassName('el-select')[0].classList.remove('none-display') cell.getElementsByClassName('el-select')[0] && cell.getElementsByClassName('el-select')[0].classList.remove('none-display')
if (cell.getElementsByTagName('input')[0] && cell.getElementsByTagName('input')[1]) { if (cell.getElementsByTagName('input')[0] && cell.getElementsByTagName('input')[1]) {
cell.getElementsByTagName('input')[0].classList.add('write') cell.getElementsByTagName('input')[0].classList.add('write')
cell.getElementsByTagName('input')[1].classList.add('write') cell.getElementsByTagName('input')[1].classList.add('write')
...@@ -296,8 +274,14 @@ export default { ...@@ -296,8 +274,14 @@ export default {
this.setCurrent() this.setCurrent()
} }
}, },
handleSizeChange() {}, handleSizeChange(val) {
handlePageChange() {} this.currentSize = val
this.getData()
},
handlePageChange(val) {
this.currentPage = val
this.getData()
}
} }
} }
</script> </script>
...@@ -455,6 +439,11 @@ export default { ...@@ -455,6 +439,11 @@ export default {
font-family: PingFangSC-Regular, PingFang SC font-family: PingFangSC-Regular, PingFang SC
font-weight: 400 font-weight: 400
color:#999999!important color:#999999!important
.cell-span
display: inline-block
height: 32px
line-height: 32px
padding-left: 10px
.buttons .buttons
position: absolute position: absolute
bottom: 0 bottom: 0
......
...@@ -20,9 +20,10 @@ ...@@ -20,9 +20,10 @@
:data="{ :data="{
list: tokenList, list: tokenList,
total: total, total: total,
}"> }"
:outerLoading="loadingStatus">
<div slot="operate" slot-scope="row"> <div slot="operate" slot-scope="row">
<span class="operate" @click="$router.push({ path: '/data/edit' })">编辑</span> <span class="operate" @click="$router.push({ path: '/data/edit', query: { name: row.name, columns: row.columns } })">编辑</span>
<span class="operate operate-delete" @click="handleDelete(row)">删除</span> <span class="operate operate-delete" @click="handleDelete(row)">删除</span>
</div> </div>
</st-table> </st-table>
...@@ -66,6 +67,7 @@ export default { ...@@ -66,6 +67,7 @@ export default {
return { return {
inputVal: '', inputVal: '',
showDialog: false, showDialog: false,
loadingStatus: false,
form: {}, form: {},
definitions: [ definitions: [
{ {
...@@ -126,11 +128,13 @@ export default { ...@@ -126,11 +128,13 @@ export default {
}, },
methods: { methods: {
async getData() { async getData() {
this.loadingStatus = true
const res = await getTable({ pages: this.currentPage - 1, pagesize: this.currentSize }) const res = await getTable({ pages: this.currentPage - 1, pagesize: this.currentSize })
if (res && res.data && res.data.code === 0) { if (res && res.data && res.data.code === 0) {
this.tokenList = res.data.data.tables this.tokenList = res.data.data.tables
this.total = res.data.data.total this.total = res.data.data.total
} }
this.loadingStatus = false
}, },
cancelSubmit() { cancelSubmit() {
this.form = {} this.form = {}
......
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
:data="{ :data="{
list: tokenList, list: tokenList,
total: total, total: total,
}"> }"
:outerLoading="loadingStatus">
<div slot="value" slot-scope="row"> <div slot="value" slot-scope="row">
<span v-if="row.type === 'number' || row.type === 'string'">{{row.value}}</span> <span v-if="row.type === 'number' || row.type === 'string'">{{row.value}}</span>
<span v-if="row.type === 'blob'" style="line-height: 28px"> <span v-if="row.type === 'blob'" style="line-height: 28px">
...@@ -54,6 +55,7 @@ export default { ...@@ -54,6 +55,7 @@ export default {
data() { data() {
return { return {
form: {}, form: {},
loadingStatus: false,
definitions: [ definitions: [
{ {
label: '字段', label: '字段',
...@@ -74,6 +76,7 @@ export default { ...@@ -74,6 +76,7 @@ export default {
} }
}, },
async mounted() { async mounted() {
this.loadingStatus = true
const res = await detailParameter({ name: this.$route.query.name }) const res = await detailParameter({ name: this.$route.query.name })
if (res && res.data && res.data.code === 0) { if (res && res.data && res.data.code === 0) {
this.form = res.data this.form = res.data
...@@ -90,6 +93,7 @@ export default { ...@@ -90,6 +93,7 @@ export default {
this.tokenList.push({ field: key, type: 'table', value: tableObj[key] }) this.tokenList.push({ field: key, type: 'table', value: tableObj[key] })
} }
} }
this.loadingStatus = false
}, },
methods: { methods: {
calculateByte: base64 => calculateByte(base64), calculateByte: base64 => calculateByte(base64),
......
...@@ -62,7 +62,8 @@ ...@@ -62,7 +62,8 @@
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
@row-click="rowClick" @row-click="rowClick"
@cell-click="cellClick" @cell-click="cellClick"
style="width: 100%"> style="width: 100%"
v-loading="loadingStatus">
<el-table-column label="字段"> <el-table-column label="字段">
<template slot-scope="scope"> <template slot-scope="scope">
<input type="text" v-model="scope.row.field" @blur="handleBlur" placeholder="请输入"> <input type="text" v-model="scope.row.field" @blur="handleBlur" placeholder="请输入">
...@@ -134,6 +135,7 @@ export default { ...@@ -134,6 +135,7 @@ export default {
form: {}, form: {},
rules: [], rules: [],
file: '', file: '',
loadingStatus: false,
typeOptions: [{ typeOptions: [{
value: 'number', value: 'number',
label: 'number' label: 'number'
...@@ -184,6 +186,7 @@ export default { ...@@ -184,6 +186,7 @@ export default {
} }
}, },
async getData() { async getData() {
this.loadingStatus = true
const res = await detailParameter({ name: this.$route.query.name }) const res = await detailParameter({ name: this.$route.query.name })
if (res && res.data && res.data.code === 0) { if (res && res.data && res.data.code === 0) {
this.form = res.data this.form = res.data
...@@ -200,6 +203,7 @@ export default { ...@@ -200,6 +203,7 @@ export default {
this.tableData.push({ field: key, type: 'table', value: tableObj[key] }) this.tableData.push({ field: key, type: 'table', value: tableObj[key] })
} }
} }
this.loadingStatus = false
}, },
cancel() { cancel() {
this.$router.push({ path: '/params' }) this.$router.push({ path: '/params' })
......
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
}" }"
:pagination="false" :pagination="false"
highlight-current-row highlight-current-row
@row-click="handleClickRow"> @row-click="handleClickRow"
:outerLoading="loadingOne">
<div slot="operate" slot-scope="row"> <div slot="operate" slot-scope="row">
<span class="operate" @click="$router.push({ path: '/params/detail', query: { name: row.name }})">详情</span> <span class="operate" @click="$router.push({ path: '/params/detail', query: { name: row.name }})">详情</span>
<span class="operate" @click="$router.push({ path: '/params/edit', query: { name: row.name, level: 1 } })">编辑</span> <span class="operate" @click="$router.push({ path: '/params/edit', query: { name: row.name, level: 1 } })">编辑</span>
...@@ -58,7 +59,8 @@ ...@@ -58,7 +59,8 @@
:data="{ :data="{
list: twoList, list: twoList,
total: twoTotal, total: twoTotal,
}"> }"
:outerLoading="loadingTwo">
<div slot="operate" slot-scope="row"> <div slot="operate" slot-scope="row">
<span class="operate" @click="$router.push({ path: '/params/detail', query: { name: row.name } })">详情</span> <span class="operate" @click="$router.push({ path: '/params/detail', query: { name: row.name } })">详情</span>
<span class="operate" @click="$router.push({ path: '/params/edit', query: { name: row.name, level: 2 } })">编辑</span> <span class="operate" @click="$router.push({ path: '/params/edit', query: { name: row.name, level: 2 } })">编辑</span>
...@@ -91,6 +93,9 @@ export default { ...@@ -91,6 +93,9 @@ export default {
twoTotal: 0, twoTotal: 0,
oneCurrentPage: 1, oneCurrentPage: 1,
twoCurrentPage: 1, twoCurrentPage: 1,
loadingOne: false,
loadingTwo: false,
parentLevel: '',
definitions: [ definitions: [
{ {
label: '序号', label: '序号',
...@@ -123,18 +128,22 @@ export default { ...@@ -123,18 +128,22 @@ export default {
}, },
methods: { methods: {
async getOneData() { async getOneData() {
this.loadingOne = true
const oneLevel = await getParameter({ base: 1, pages: this.oneCurrentPage - 1, pagesize: 10 }) const oneLevel = await getParameter({ base: 1, pages: this.oneCurrentPage - 1, pagesize: 10 })
if (oneLevel && oneLevel.data && oneLevel.data.code === 0) { if (oneLevel && oneLevel.data && oneLevel.data.code === 0) {
this.oneList = oneLevel.data.parameters.datas this.oneList = oneLevel.data.parameters.datas
this.oneTotal = oneLevel.data.parameters.total this.oneTotal = oneLevel.data.parameters.total
} }
this.loadingOne = false
}, },
async getTwoData() { async getTwoData() {
const twoLevel = await getParameter({ base: 0, pages: this.twoCurrentPage - 1, pagesize: 10 }) this.loadingTwo = true
const twoLevel = await getParameter({ base: 0, parent: this.parentLevel, pages: this.twoCurrentPage - 1, pagesize: 10 })
if (twoLevel && twoLevel.data && twoLevel.data.code === 0) { if (twoLevel && twoLevel.data && twoLevel.data.code === 0) {
this.twoList = twoLevel.data.parameters.datas this.twoList = twoLevel.data.parameters.datas
this.twoTotal = twoLevel.data.parameters.total this.twoTotal = twoLevel.data.parameters.total
} }
this.loadingTwo = false
}, },
async handleDelete(row, level) { async handleDelete(row, level) {
const confirmDelete = await Dialog.confirm('提示', { message: '是否删除此模板?' }) const confirmDelete = await Dialog.confirm('提示', { message: '是否删除此模板?' })
...@@ -148,7 +157,8 @@ export default { ...@@ -148,7 +157,8 @@ export default {
} }
}, },
handleClickRow(row, column, event) { handleClickRow(row, column, event) {
console.log(row) this.parentLevel = row.name
this.getTwoData()
}, },
handleOneCurrentChange(val) { handleOneCurrentChange(val) {
this.oneCurrentPage = val this.oneCurrentPage = val
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!