| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- <template>
- <div class="form-wrap">
- <el-form
- class="search-box"
- ref="form"
- :model="form"
- :inline="true"
- >
- <div class="block-title">
- 查询条件
- </div>
- <el-form-item
- label="名称"
- prop="name">
- <el-input v-model="form.name" clearable></el-input>
- </el-form-item>
- <el-form-item
- label="设备编号"
- prop="uniqueKey">
- <el-input v-model="form.uniqueKey" clearable></el-input>
- </el-form-item>
- <div class="btn-wrap">
- <el-button
- @click="reset">
- 重置
- </el-button>
- <el-button
- type="primary"
- @click="getList(true)">
- 搜索
- </el-button>
- <el-button
- type="primary"
- @click="setBatchScenic(true)">
- 批量绑定景点
- </el-button>
- </div>
- </el-form>
- <div class="table-box">
- <el-tabs v-model="activeName">
- <el-tab-pane
- label="设备列表"
- name="allList">
- <span slot="label">
- 全部设备列表
- </span>
- <el-table
- border
- v-loading="loading"
- :data="tableData">
- <el-table-column
- type="index"
- width="50px"
- label="#">
- </el-table-column>
- <el-table-column
- prop="name"
- label="名称">
- </el-table-column>
- <el-table-column
- prop="uniqueKey"
- label="设备编号">
- </el-table-column>
- <el-table-column
- prop="type"
- label="设备类型">
- <template slot-scope="scope">
- <span v-if="scope.row.type === 1">手持设备</span>
- <span v-else-if="scope.row.type === 2">闸机</span>
- <span v-else>{{ scope.row.type }}</span>
- </template>
- </el-table-column>
- <el-table-column
- prop="status"
- label="状态">
- <template slot-scope="scope">
- <el-switch
- @change="handelStatusChange($event,scope.row)"
- v-model="scope.row.status"
- active-text="启用"
- inactive-text="禁用"
- :active-value="1"
- :inactive-value="0">
- </el-switch>
- </template>
- </el-table-column>
- <el-table-column
- prop="ip"
- label="IP">
- </el-table-column>
- <el-table-column
- width="80"
- prop="dayEnter"
- label="当日进">
- </el-table-column>
- <el-table-column
- width="80"
- prop="dayOut"
- label="当日出">
- </el-table-column>
- <el-table-column
- label="绑定的景点">
- <template slot-scope="props">
- <span>{{ props.row.scenicList | getSceneNames }}</span>
- </template>
- </el-table-column>
- <el-table-column
- label="最后在线时间">
- <template slot-scope="props">
- <span>{{ props.row.lastOnlineTime | formatTime }}</span>
- </template>
- </el-table-column>
- <el-table-column
- label="创建时间">
- <template slot-scope="props">
- <span>{{ props.row.createTime | formatTime }}</span>
- </template>
- </el-table-column>
- <el-table-column
- width="150px"
- label="操作">
- <template slot-scope="scope">
- <el-link
- type="primary"
- v-if="scope.row.online ===1"
- @click="openConfigDialog(scope.row)">
- 配置
- </el-link>
- <el-link
- type="primary"
- @click="openDialog(scope.row)"
- >
- 编辑
- </el-link>
- <el-link
- type="primary"
- @click="deleteChecker(scope.row.id)">
- 删除
- </el-link>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination
- background
- layout="total, sizes, prev, pager, next, jumper"
- :current-page.sync="form.pageNum"
- :page-sizes="[10, 20, 50, 100]"
- :page-size="form.pageSize"
- @size-change="handleSizeChange"
- @current-change="getList()"
- :total="total"
- >
- </el-pagination>
- </el-tab-pane>
- <el-tab-pane
- label="设备配置"
- name="noScenic">
- <span slot="label">
- 景点未配置
- </span>
- <el-table
- border
- v-loading="loading"
- :data="tableData">
- <el-table-column
- type="index"
- width="50px"
- label="#">
- </el-table-column>
- <el-table-column
- prop="name"
- label="名称">
- </el-table-column>
- <el-table-column
- prop="uniqueKey"
- label="设备编号">
- </el-table-column>
- <el-table-column
- prop="status"
- label="状态">
- <template slot-scope="scope">
- <el-switch
- @change="handelStatusChange($event,scope.row)"
- v-model="scope.row.status"
- active-text="启用"
- inactive-text="禁用"
- :active-value="1"
- :inactive-value="0">
- </el-switch>
- </template>
- </el-table-column>
- <el-table-column
- prop="ip"
- label="IP">
- </el-table-column>
- <el-table-column
- width="80"
- prop="dayEnter"
- label="当日进">
- </el-table-column>
- <el-table-column
- width="80"
- prop="dayOut"
- label="当日出">
- </el-table-column>
- <el-table-column
- label="绑定的景点">
- <template slot-scope="props">
- <span>{{ props.row.scenicList | getSceneNames }}</span>
- </template>
- </el-table-column>
- <el-table-column
- label="最后在线时间">
- <template slot-scope="props">
- <span>{{ props.row.lastOnlineTime | formatTime }}</span>
- </template>
- </el-table-column>
- <el-table-column
- label="创建时间">
- <template slot-scope="props">
- <span>{{ props.row.createTime | formatTime }}</span>
- </template>
- </el-table-column>
- <el-table-column
- width="150px"
- label="操作">
- <template slot-scope="scope">
- <el-link
- type="primary"
- v-if="scope.row.online ===1"
- @click="openConfigDialog(scope.row)">
- 配置
- </el-link>
- <el-link
- type="primary"
- @click="openDialog(scope.row)"
- >
- 编辑
- </el-link>
- <el-link
- type="primary"
- @click="deleteChecker(scope.row.id)">
- 删除
- </el-link>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination
- background
- layout="total, sizes, prev, pager, next, jumper"
- :current-page.sync="form.pageNum"
- :page-sizes="[10, 20, 50, 100]"
- :page-size="form.pageSize"
- @size-change="handleSizeChange"
- @current-change="getList()"
- :total="total"
- >
- </el-pagination>
- </el-tab-pane>
- </el-tabs>
- </div>
- <!-- 弹框 -->
- <ElDialog
- title="编辑设备"
- width="760px"
- v-model="dialogVisible"
- >
- <DialogEdit
- ref="editDialog"
- :scene-list="scenicList"
- :current-item="currentItem"
- @updateList="getList"
- style="margin-top: 20px"
- ></DialogEdit>
- </ElDialog>
- <ElDialog
- title="批量绑定景点"
- width="500px"
- v-model="batchUpdateDialogVisible"
- >
- <el-form
- inline
- :model="batchUpdateInfo"
- ref="form"
- class="form-wrap"
- label-width="150px"
- style="margin-top: 20px">
- <el-form-item
- label="设备"
- prop="checkerIdList">
- <el-select
- v-model="batchUpdateInfo.checkerIdList"
- filterable
- multiple
- placeholder="请选择">
- <el-option
- v-for="(item, idx) in tableData"
- :key="`checker-${idx}`"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- <el-form-item
- label="景点"
- prop="scenicIdList">
- <el-select
- v-model="batchUpdateInfo.scenicIdList"
- filterable
- multiple
- placeholder="请选择">
- <el-option
- v-for="(item, idx) in scenicList"
- :key="`scene-${idx}`"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-form>
- <div style="margin: 20px; float: right;">
- <el-button @click="batchUpdateDialogVisible = false">取消</el-button>
- <el-button type="primary" @click="updateBatchScenic">确定</el-button>
- </div>
- </ElDialog>
- </div>
- </template>
- <script>
- import { getDeviceList, batchUpdateDeviceScene, updateDevice, deleteChecker } from '@/api/checker'
- import ElDialog from '@/components/Dialog'
- import DialogEdit from './deviceManage/DialogEdit'
- // import ConfigSetting from './deviceManage/ConfigSetting'
- export default {
- data () {
- return {
- activeName: 'allList', // 当前选中的tab
- form: {
- name: '', // 名称
- uniqueKey: '', // 设备编号
- withoutScenicFlag: 0, // 是否无景点
- pageNum: 1,
- pageSize: 10
- },
- loading: false,
- tableData: [],
- total: 0,
- dialogVisible: false,
- configDialogVisible: false,
- batchUpdateDialogVisible: false,
- batchUpdateInfo: {
- checkerIdList: [],
- scenicIdList: []
- },
- currentItem: {}
- }
- },
- computed: {
- scenicList () {
- return this.$store.state.app.scenicList
- }
- },
- created () {
- this.getList()
- },
- components: {
- ElDialog,
- DialogEdit
- },
- filters: {
- filterOnline (n) {
- return n === 1 ? '在线' : '离线'
- },
- filterInOut (n) {
- switch (n) {
- case 1:
- return '进口'
- case 2:
- return '出口'
- case 3:
- return '双向'
- }
- },
- getSceneNames (list) {
- return list.map(item => item.scenicName).join(',')
- }
- },
- methods: {
- reset () {
- this.$refs.form.resetFields()
- },
- handleSizeChange (size) {
- this.form.pageSize = size
- this.getList()
- },
- // 获取通道列表
- getList (goFirst) {
- let params = { ...this.form }
- goFirst && (params.pageNum = 1)
- this.loading = true
- getDeviceList(params).then(res => {
- const list = res.data?.records || []
- this.total = res.data?.total || 0
- this.tableData = list
- this.loading = false
- })
- },
- // 打开弹框
- openDialog (item) {
- this.currentItem = {
- id: item.id,
- name: item.name,
- scenicIdList: item.scenicList.map(item => item.scenicId)
- }
- this.dialogVisible = true
- this.updateSceneList()
- },
- // 打开配置弹框
- openConfigDialog (item) {
- this.configDialogVisible = true
- this.updateSceneList()
- },
- deleteChecker (id, index) {
- this.$confirm('确定删除吗?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- deleteChecker(id).then(res => {
- this.$message.success('操作成功')
- this.getList()
- })
- }).catch(() => {})
- },
- updateSceneList () {
- this.$store.dispatch('getScenicList')
- },
- setBatchScenic () {
- this.batchUpdateDialogVisible = true
- this.batchUpdateInfo.scenicIdList = []
- this.batchUpdateInfo.checkerIdList = []
- this.updateSceneList()
- },
- updateBatchScenic () {
- batchUpdateDeviceScene(this.batchUpdateInfo).then(res => {
- this.$message.success('操作成功')
- this.batchUpdateDialogVisible = false
- this.getList()
- })
- },
- handelStatusChange (value, item) {
- const newItem = {
- id: item.id,
- status: value,
- name: item.name,
- url: item.url || '',
- scenicIdList: (item.scenicList || []).map(i => i.scenicId)
- }
- updateDevice(newItem).then(res => {
- this.$message.success('操作成功')
- this.getList()
- })
- }
- },
- watch: {
- activeName (val) {
- this.form.withoutScenicFlag = val === 'noScenic' ? 1 : 0
- this.form.name = ''
- this.getList(true)
- }
- }
- }
- </script>
- <style scoped>
- </style>
|