Browse Source

设备/图书

master
xuhuajiao 6 months ago
parent
commit
1d1dc50bc0
  1. 43
      src/api/book/index.js
  2. 11
      src/api/deviceVI/index.js
  3. 9
      src/api/shelf/index.js
  4. 75
      src/views/visualCheck/bookstore/book/index.vue
  5. 2
      src/views/visualCheck/bookstore/collection/index.vue
  6. 27
      src/views/visualCheck/venueDevice/bookshelfPosition/index.vue
  7. 301
      src/views/visualCheck/venueDevice/device/index.vue

43
src/api/book/index.js

@ -0,0 +1,43 @@
import request from '@/utils/request'
import qs from 'qs'
export function FetchInitBookBasiceList(params) {
return request({
url: 'api/bookBasice/initBookBasiceList' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export function add(data) {
return request({
url: 'api/bookBasice/editBookBasice',
method: 'post',
data
})
}
export function edit(data) {
return request({
url: 'api/bookBasice/editBookBasice',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/bookBasice/delBookBasice',
method: 'post',
data: ids
})
}
// 通过isbn获取图书详情信息
export function FetchBookBasiceByISBN(params) {
return request({
url: 'api/bookBasice/getBookBasiceByISBN' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default { add, edit, del, FetchInitBookBasiceList, FetchBookBasiceByISBN }

11
src/api/deviceVI/index.js

@ -42,6 +42,15 @@ export function del(data) {
})
}
// 通过设备id获取设备详情
export function FetchDeviceById(params) {
return request({
url: 'api/device/getDeviceById',
method: 'get',
params
})
}
// 摄像头绑定书架
export function FetchDeviceShelfGridBinding(data) {
return request({
@ -69,4 +78,4 @@ export function FetchUnboundGrid(params) {
})
}
export default { add, edit, del, FetchRegionTree, FetchinitDeviceInfoList, FetchDeviceShelfGridBinding, FetchBoundGridByDevice, FetchUnboundGrid }
export default { add, edit, del, FetchRegionTree, FetchinitDeviceInfoList, FetchDeviceById, FetchDeviceShelfGridBinding, FetchBoundGridByDevice, FetchUnboundGrid }

9
src/api/shelf/index.js

@ -1,6 +1,13 @@
import request from '@/utils/request'
import qs from 'qs'
export function FetchInitBookShelfList(params) {
return request({
url: 'api/bookShelf/initBookShelfList' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export function add(data) {
return request({
url: 'api/bookShelf/editBookShelf',
@ -77,4 +84,4 @@ export function FetchChangeCheckByGrid(parameter) {
})
}
export default { add, edit, del, FetchBookShelfDetails, saveBookShelfSignPoint, FetchInitShelfGridByShelfId, FetcheEditSortmarkByGrid, FetchChangeOrderByGrid, FetchChangeCheckByGrid }
export default { add, edit, del, FetchInitBookShelfList, FetchBookShelfDetails, saveBookShelfSignPoint, FetchInitShelfGridByShelfId, FetcheEditSortmarkByGrid, FetchChangeOrderByGrid, FetchChangeCheckByGrid }

75
src/views/visualCheck/bookstore/book/index.vue

@ -23,13 +23,20 @@
</el-select>
</el-input>
<el-select v-model="query.userStatus" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery">
<el-select v-model="status" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery">
<i slot="prefix" class="iconfont icon-zhuangtai" />
<el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select>
<rrOperation />
</div>
<crudOperation :permission="permission" />
<crudOperation :permission="permission">
<!-- <template v-slot:middle>
<el-button v-permission="permission.edit" size="mini" :disabled="crud.selections.length !== 1" @click="toEdit()">
<i class="iconfont icon-bianji" />
编辑
</el-button>
</template> -->
</crudOperation>
</div>
<!--表单渲染-->
<el-dialog class="auto-dialog" append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
@ -45,12 +52,12 @@
<el-form-item label="ISBN" prop="isbn">
<el-input v-model="form.isbn" placeholder="请输入" />
</el-form-item>
<el-form-item label="索书号" prop="code">
<el-input v-model="form.code" placeholder="请输入" />
<el-form-item label="分类号" prop="classNo">
<el-input v-model="form.classNo" placeholder="请输入" />
</el-form-item>
<div>
<el-form-item label="出版社" prop="publish">
<el-input v-model="form.publish" placeholder="请输入" style="width: 586px;" />
<el-form-item label="出版社" prop="publisher">
<el-input v-model="form.publisher" placeholder="请输入" style="width: 586px;" />
</el-form-item>
</div>
<UploadCover :label-name="labelName" :form="form" @childCover="handleCover" />
@ -80,18 +87,18 @@
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column prop="icon" label="封面" align="center">
<!-- slot-scope="scope" -->
<template>
<template slot-scope="scope">
<!-- <svg-icon :icon-class="scope.row.icon ? scope.row.icon : ''" /> -->
<img src="~@/assets/images/cover-bg.png" alt="" style="height: 100px;">
<img v-if="!scope.row.bookCover" src="~@/assets/images/cover-bg.png" alt="" style="height: 100px;">
<img v-else :src="baseApi + '/api/fileRelevant/getImg?imgId=' + scope.row.bookCover" alt="" style="height: 100px;">
</template>
</el-table-column>
<el-table-column label="题名" prop="title" width="300px" :show-overflow-tooltip="true" />
<el-table-column label="著者" prop="author" />
<el-table-column label="出版社" prop="publish" />
<el-table-column label="出版社" prop="publisher" />
<el-table-column label="ISBN" prop="isbn" />
<el-table-column label="索书号" prop="code" />
<el-table-column label="馆藏量" prop="num" />
<el-table-column label="分类号" prop="classNo" />
<el-table-column label="馆藏量" prop="detailsCount" />
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
@ -100,7 +107,7 @@
</template>
<script>
import crudMenu from '@/api/system/menu'
import crudBook from '@/api/book/index'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
@ -109,12 +116,12 @@ import pagination from '@crud/Pagination'
import UploadCover from '@/views/components/upload.vue'
import { mapGetters } from 'vuex'
const defaultForm = { id: null, title: null, author: null, isbn: null, code: null, publish: null, cover: null }
const defaultForm = { id: null, title: null, author: null, isbn: null, classNo: null, publisher: null, bookCover: null, bookRecNo: null }
export default {
name: 'Book',
components: { crudOperation, rrOperation, pagination, UploadCover },
cruds() {
return CRUD({ title: '图书', url: 'api/menus', crudMethod: { ...crudMenu },
return CRUD({ title: '图书', idField: 'id || bookRecNo', url: 'api/bookBasice/initBookBasiceList', crudMethod: { ...crudBook },
optShow: {
add: true,
edit: true,
@ -128,13 +135,14 @@ export default {
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
status: null,
labelName: '图书封面',
keyWord: null,
optionVal: 'username',
optionVal: 'search',
options: [
{ value: 'username', label: '题名/著者/出版社' },
{ value: 'search', label: '题名/著者/出版社' },
{ value: 'isbn', label: 'ISBN' },
{ value: 'code', label: '索书号' }
{ value: 'classNo', label: '分类号' }
],
permission: {
add: ['admin', 'book:add'],
@ -142,8 +150,8 @@ export default {
del: ['admin', 'book:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '全部' },
{ key: '0', display_name: '馆藏数量不为0' }
{ key: null, display_name: '全部' },
{ key: 1, display_name: '馆藏数量不为0' }
],
bookCover: null,
rules: {
@ -156,10 +164,10 @@ export default {
isbn: [
{ required: true, message: 'ISBN不可为空', trigger: 'blur' }
],
code: [
{ required: true, message: '索书号不可为空', trigger: 'blur' }
classNo: [
{ required: true, message: '分类号不可为空', trigger: 'blur' }
],
publish: [
publisher: [
{ required: true, message: '出版社不可为空', trigger: 'blur' }
]
}
@ -172,6 +180,11 @@ export default {
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
if (this.status === null) {
this.crud.query.status = null
} else {
this.crud.query.status = this.status
}
},
//
[CRUD.HOOK.afterToCU](crud, form) {
@ -181,11 +194,16 @@ export default {
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
// crudBook.FetchBookBasiceByISBN({ 'isbn': this.crud.selections[0].isbn }).then(res => {
// console.log(res)
// this.crud.form.bookRecNo = res.bookRecNo
// this.crud.form.id = res.bookRecNo
// })
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
return false
return true
},
searchChange(val) {
if (val) {
@ -200,10 +218,10 @@ export default {
handleCover(value) {
console.log(value)
if (value) {
this.form.cover = value
this.form.bookCover = value
this.bookCover = this.baseApi + '/api/fileRelevant/getImg?imgId=' + value
} else {
this.form.cover = null
this.form.bookCover = null
this.bookCover = null
}
},
@ -226,6 +244,11 @@ export default {
}
}
.el-form{
display: flex;
justify-content: flex-start;
}
.preview-cover{
flex: 1;
padding-left: 10px;

2
src/views/visualCheck/bookstore/collection/index.vue

@ -189,7 +189,7 @@ export default {
}
},
cruds() {
return CRUD({ title: '图书', url: 'api/menus', crudMethod: { ...crudMenu },
return CRUD({ title: '图书馆藏', url: 'api/bookBasice/initBookDetailsList', crudMethod: { ...crudMenu },
optShow: {
add: true,
edit: true,

27
src/views/visualCheck/venueDevice/bookshelfPosition/index.vue

@ -17,7 +17,7 @@
<li><p>前端测试用-层号顺序</p><span>{{ bookShelfDetails && bookShelfDetails.floorType === 1 ? '最顶层为第一层(从上至下)' :'最底层为第一层(从下至上)' }}</span></li> -->
</ul>
<div class="bookshelf-button">
<el-button size="mini" @click="doExport(crud.selections)">
<el-button size="mini" @click="doExport">
<i class="iconfont icon-daochu" />
导出层位编码
</el-button>
@ -156,6 +156,8 @@ import { FetchInitShelfGridByShelfId, FetcheEditSortmarkByGrid, FetchChangeOrder
import { mapGetters } from 'vuex'
import { swiper, swiperSlide } from 'vue-awesome-swiper'
import 'swiper/dist/css/swiper.css'
import { parseTime, saveAs, getBlob } from '@/utils/index'
import qs from 'qs'
export default {
name: 'BookshelfPosition',
@ -479,24 +481,23 @@ export default {
return false
}
},
doExport(data) {
console.log(data)
// this.crud.downloadLoading = true
doExport() {
console.log(this.bookShelfDetails)
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
// const ids = []
// data.forEach(val => {
// ids.push(val.deptsId)
// })
// const params = {
// 'deptsIds': ids
// }
// console.log(params)
// exportFile(this.baseApi + '/api/depts/download?' + qs.stringify(params, { indices: false }))
const params = {
'shelfId': this.bookShelfDetails.id,
'toward': this.bookShelfDetails.toward
}
console.log(params)
const fileName = '层位编码-' + parseTime(new Date()) + '.xlsx'
getBlob(this.baseApi + '/api/bookShelf/exportShelfGridLabel' + '?' + qs.stringify(params, { indices: false }), function(blob) {
saveAs(blob, fileName)
})
}).catch(() => {
})
}

301
src/views/visualCheck/venueDevice/device/index.vue

@ -50,6 +50,10 @@
<i class="iconfont icon-xinzeng" />
新增
</el-button>
<el-button v-permission="permission.edit" size="mini" :disabled="crud.selections.length !== 1" @click="toEdit(crud.selections)">
<i class="iconfont icon-bianji" />
编辑
</el-button>
</template>
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
@ -58,7 +62,7 @@
</el-button>
</template>
<template v-slot:right>
<el-button type="primary" size="mini" :disabled="crud.selections.length !== 1" @click="openBindShelf"><i class="iconfont icon-bangding" />书架绑定</el-button>
<el-button type="primary" size="mini" :disabled="activeRightBtn" @click="openBindShelf('')"><i class="iconfont icon-bangding" />书架绑定</el-button>
</template>
</crudOperation>
</div>
@ -69,32 +73,37 @@
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" @row-click="clickRowHandler" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" align="center" width="55" />
<el-table-column prop="deviceTypeId.name" label="设备类型" />
<el-table-column prop="deviceType" label="设备类型">
<template slot-scope="scope">
<span v-if="scope.row.deviceType === 1">球型摄像机</span>
<span v-else>盘点机器人</span>
</template>
</el-table-column>
<el-table-column prop="deviceName" label="设备名称" />
<el-table-column prop="deviceCode" label="设备编号" />
<el-table-column prop="ipv4" label="接口IP" />
<el-table-column label="接口IP" prop="ipv4" show-overflow-tooltip>
<el-table-column prop="deviveCode" label="设备编号" />
<!-- <el-table-column prop="ipv4" label="接口IP" /> -->
<el-table-column prop="ipv4" label="接口IP" show-overflow-tooltip>
<template slot-scope="scope">
<span v-if="scope.row.ipv4"> {{ scope.row.ipv4 }} </span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="端口" prop="devicePort">
<el-table-column label="端口" prop="rtsp">
<template slot-scope="scope">
<span v-if="scope.row.devicePort"> {{ scope.row.devicePort }} </span>
<span v-if="scope.row.rtsp"> {{ scope.row.rtsp }} </span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="状态" prop="categoryName" align="center">
<el-table-column label="状态" prop="deviceState" align="center">
<template slot-scope="scope">
<span :class="{ 'spk-a': scope.row.deviceState === 1, 'off-line': scope.row.deviceState !== 1 }" />
</template>
</el-table-column>
<el-table-column prop="bindShelfNum" label="已绑架位" />
<el-table-column prop="fondsId" label="所属机构" />
<el-table-column prop="shelfCount" label="已绑架位" />
<el-table-column prop="fondsName" label="所属机构" />
<el-table-column prop="floorName" label="所属楼层" />
<el-table-column prop="areaName" label="所属区域" />
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期">
<el-table-column prop="regionName" label="所属区域" />
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期" width="160">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
@ -163,8 +172,8 @@
<el-form-item label="密码" prop="password" style="margin-right: 0; margin-left: 30px;">
<el-input v-model="form.password" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" :rows="4" style="width: 585px;" />
<el-form-item label="备注" prop="remarks">
<el-input v-model="form.remarks" type="textarea" :rows="4" style="width: 585px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -185,18 +194,13 @@
title="书架绑定"
>
<div class="setting-dialog">
<!-- @input="changePid" :load-options="loadMenus" -->
<treeselect
v-model="floorTreeValue"
:options="menus"
<el-select v-model="selectShelf" class="filter-item" placeholder="请选择指定架" style="width: 320px; margin-bottom: 20px;" @change="changeShelfBind">
<el-option v-for="(item,index) in bindReigonsTree" :key="index" :label="item.shelfName" :value="item.shelfId" />
</el-select>
style="width: 320px; margin-bottom: 20px;"
placeholder="请选择楼层区域"
/>
<div class="transfer-bookshelf">
<!-- :filter-method="filterMethod" -->
<el-transfer
v-model="value4"
v-model="bindGirdData"
style="text-align: left; display: inline-block"
filterable
filter-placeholder="请输入关键字检索"
@ -208,15 +212,15 @@
noChecked: '${total}',
hasChecked: '${checked}/${total}'
}"
:data="data"
:data="unBindGirdData"
@change="handleChange"
>
<div slot-scope="{ option }" style="display: flex;">
<span style="display:block; width: 50px; text-align: center;">{{ option.key }}</span>
<!-- <span style="display:block; width: 50px; text-align: center;">{{ option.key }}</span> -->
<span style="display:block; width: 150px;">{{ option.label }}</span>
</div>
</el-transfer>
<el-button class="transfer-footer" :disabled="value4.length===0" size="small" @click="rightCheckedClear"><i class="iconfont icon-shanchu" />清空</el-button>
<el-button class="transfer-footer" :disabled="bindGirdData.length===0" size="small" @click="rightCheckedClear"><i class="iconfont icon-shanchu" />清空</el-button>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="handleCloseDialog">取消</el-button>
@ -233,14 +237,10 @@
<script>
import crudDevice from '@/api/deviceVI/index'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
// import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import { FetchInitBookShelfList } from '@/api/shelf/index'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
// import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
const defaultForm = {
'account': null,
@ -260,11 +260,11 @@ const defaultForm = {
}
export default {
name: 'Device',
components: { Treeselect, crudOperation, pagination },
components: { crudOperation, pagination },
cruds() {
return CRUD({ title: '设备', url: 'api/device/initDeviceInfoList', sort: [], crudMethod: { ...crudDevice }, optShow: {
return CRUD({ title: '设备', url: 'api/device/initDeviceInfoList', idField: 'id || deviceId', sort: [], crudMethod: { ...crudDevice }, optShow: {
add: false,
edit: true,
edit: false,
del: false,
reset: true,
download: false,
@ -275,17 +275,6 @@ export default {
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
const generateData = _ => {
// disabled: i % 4 === 0
const data = []
for (let i = 1; i <= 20; i++) {
data.push({
key: i,
label: `001排A面01架${i}`
})
}
return data
}
return {
regionTreeData: null,
defaultProps: {
@ -322,20 +311,19 @@ export default {
],
selectedDeviceType: '球型摄像机',
levelNumber: 0,
btn: 'add',
unBindGirdData: [],
bindGirdData: [],
leftDefaultChecked: [],
rightDefaultChecked: [],
permission: {
add: ['admin', 'device:add'],
edit: ['admin', 'device:edit'],
del: ['admin', 'device:del']
},
floorTreeValue: null,
menus: [],
data: generateData(),
value4: [],
leftDefaultChecked: [],
rightDefaultChecked: [],
filterMethod(query, item) {
// return item.pinyin.indexOf(query) > -1
}
bindReigonsTree: [],
selectShelf: null
}
},
computed: {
@ -381,6 +369,14 @@ export default {
mounted() {
},
methods: {
normalizer(node) {
return {
id: node.id,
label: node.label,
children: node.children,
isDisabled: !node.regionId
}
},
// tree
transformData(data) {
return {
@ -400,6 +396,9 @@ export default {
}))
}
},
treeSelectInput(value) {
console.log('treeSelectInput', value)
},
renderContent(h, { node, data, store }) {
return h('span', [
h('el-tooltip', {
@ -427,14 +426,6 @@ export default {
},
[CRUD.HOOK.afterRefresh](crud) {
console.log('data', this.crud.data)
// this.crud.data = [
// { id: 1, deviceTypeId: { name: 'NVR' }},
// { id: 2, deviceTypeId: { name: '' }},
// { id: 3, deviceTypeId: { name: '' }},
// { id: 4, deviceTypeId: { name: '' }},
// { id: 5, deviceTypeId: { name: 'RFID' }},
// { id: 6, deviceTypeId: { name: 'RFID' }}
// ]
},
handleNodeClick(data) {
this.$nextTick(() => {
@ -459,17 +450,21 @@ export default {
}
this.crud.toQuery()
const params = {
'floorId': this.crud.query.floorId,
'regionId': this.crud.query.regionId
}
FetchInitBookShelfList(params).then(res => {
this.bindReigonsTree = res.content
console.log('this.bindReigonsTree', this.bindReigonsTree)
}).catch(() => {
})
}
})
},
searchChange(val) {
if (val) {
this.search = ''
// this.options.forEach(option => {
// if (option.value !== val) {
// this.crud.query[option.value] = null
// }
// })
}
},
resetQuery() {
@ -477,18 +472,45 @@ export default {
this.crud.query.search = ''
this.crud.toQuery()
},
//
[CRUD.HOOK.beforeToAdd](crud, form) {
this.crud.form.fondsId = this.regionTreeData[0].id
this.crud.form.deviceType = this.selectedDeviceType
if (this.selectedTreeKey.hasOwnProperty('floorId')) {
this.crud.query.floorId = this.selectedTreeKey.id
} else if (this.selectedTreeKey.hasOwnProperty('regionId')) {
this.crud.query.floorId = this.selectedTreeKey.parentFloorId
} else {
this.crud.query.floorId = null
}
this.crud.form.regionId = this.selectedTreeKey.hasOwnProperty('regionId') ? this.selectedTreeKey.id : null
},
toEdit(row) {
crudDevice.FetchDeviceById({ 'deviceId': row[0].deviceId }).then(res => {
if (res) {
crud.form = res
this.crud.toEdit(crud.form)
}
})
},
[CRUD.HOOK.beforeToEdit](crud, form, btn) {
// form.deviceTypeId.name
this.selectedDeviceType = 1
this.btn = 'edit'
this.addDeviceTitle = '编辑设备 - ' + '球形摄像机'
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log('form', crud.form)
this.crud.form.deviceType = this.selectedDeviceType
this.crud.form.floorId = this.selectedTreeKey.parentFloorId
this.crud.form.fondsId = this.regionTreeData[0].id
this.crud.form.regionId = this.selectedTreeKey.id
if (this.btn === 'add') {
this.crud.form.deviceType = this.selectedDeviceType
this.crud.form.floorId = this.selectedTreeKey.parentFloorId
this.crud.form.fondsId = this.regionTreeData[0].id
this.crud.form.regionId = this.selectedTreeKey.id
}
delete crud.form.fondsName
delete crud.form.floorName
delete crud.form.deviceState
delete crud.form.shelfCount
delete crud.form.regionName
return true
},
clickRowHandler(row) {
@ -506,16 +528,16 @@ export default {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.id)
ids.push(val.deviceId)
})
crudDevice.del(ids).then(() => {
this.crud.notify('删除成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.delAllLoading = false
this.crud.refresh()
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
})
// crudDevice.del(ids).then(() => {
// this.crud.notify('', CRUD.NOTIFICATION_TYPE.SUCCESS)
// this.crud.delAllLoading = false
// this.crud.refresh()
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => {
})
},
@ -523,6 +545,7 @@ export default {
this.$refs.deviceForm.validate((valid) => {
console.log('valid', valid)
if (valid) {
this.btn = 'add'
this.deviceSelectVisible = false
this.selectedDeviceType = this.deviceForm.deviceType.id
this.addDeviceTitle = '新增设备 - ' + this.deviceForm.deviceType.name
@ -547,58 +570,86 @@ export default {
//
// done()
},
openBindShelf() {
this.value4 = []
this.bindBookShelfVisible = true
changeShelfBind(val) {
console.log('val', val)
this.openBindShelf(val)
},
openBindShelf(shelfId) {
if (this.crud.selections.length !== 1) {
this.$message({ message: '请选择需要绑定的设备', type: 'error', offset: 8 })
return false
}
crudDevice.FetchDeviceById({ 'deviceId': this.crud.selections[0].deviceId }).then(res => {
this.bindBookShelfVisible = true
const params = {
'fondsId': res.fondsId,
'floorId': res.floorId,
'regionId': res.regionId,
'shelfId': shelfId
}
const params2 = {
'deviceId': res.id
}
Promise.all([
crudDevice.FetchUnboundGrid(params),
crudDevice.FetchBoundGridByDevice(params2)
]).then(results => {
console.log('FetchUnboundGrid result:', results[0])
console.log('FetchBoundGridByDevice result:', results[1])
this.unBindGirdData = results[0].map((item, index) => {
return {
id: item.gridId,
label: item.gridName,
key: item.gridId,
shelfId: item.shelfId
}
})
if (results[1].length !== 0) {
this.unBindGirdData = [
...this.unBindGirdData,
...results[1].map((item, index) => {
return {
id: item.gridId,
label: item.gridName,
key: item.gridId,
shelfId: item.shelfId
}
})
]
const movedKeys = results[1].map(item => item.gridId)
this.bindGirdData = movedKeys
} else {
this.bindGirdData = []
}
}).catch(error => {
console.error('Error fetching grids:', error)
})
})
},
handleChange(value, direction, movedKeys) {
console.log(value, direction, movedKeys)
console.log(value + direction + movedKeys)
},
dialogSaveSeting() {
// https://www.cnblogs.com/liujiajiablog/p/15818056.html
this.bindBookShelfVisible = false
console.log(this.value4)
const movedIds = this.bindGirdData.map(key => {
const item = this.unBindGirdData.find(item => item.key === key)
return item ? item.id : null
})
const params = {
'deviceId': this.crud.selections[0].deviceId,
'shelfGridIds': movedIds
}
crudDevice.FetchDeviceShelfGridBinding(params).then(res => {
if (res) {
this.$message({ message: res, type: 'success', offset: 8 })
this.crud.refresh()
}
this.bindBookShelfVisible = false
})
},
rightCheckedClear() {
this.value4 = []
},
changePid() {
// this.$refs.form.validateField('pid')
this.bindGirdData = []
}
// getMenus(tree, treeNode, resolve) {
// const params = { pid: tree.id }
// setTimeout(() => {
// crudMenu.getMenus(params).then(res => {
// resolve(res.content)
// })
// }, 100)
// },
// getSupDepts(id) {
// crudMenu.getMenuSuperior(id).then(res => {
// const children = res.map(function(obj) {
// if (!obj.leaf && !obj.children) {
// obj.children = null
// }
// return obj
// })
// this.menus = [{ id: 0, label: '', children: children }]
// })
// },
// loadMenus({ action, parentNode, callback }) {
// if (action === LOAD_CHILDREN_OPTIONS) {
// crudMenu.getMenusTree(parentNode.id).then(res => {
// parentNode.children = res.map(function(obj) {
// if (!obj.leaf) {
// obj.children = null
// }
// return obj
// })
// setTimeout(() => {
// callback()
// }, 100)
// })
// }
// },
}
}
</script>

Loading…
Cancel
Save