8 changed files with 543 additions and 1 deletions
-
1README.md
-
10src/api/storeManage/tagManage/bindTagList.js
-
4src/views/components/BindingTagDlg.vue
-
177src/views/storeManage/deviceManage/dictDetail.vue
-
171src/views/storeManage/deviceManage/index.vue
-
74src/views/storeManage/tagManage/bindTagList/index.vue
-
54src/views/storeManage/tagManage/index.vue
-
53src/views/storeManage/tagManage/tagLog/index.vue
@ -0,0 +1,10 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
|
||||
|
export function initTagList(parameter) { |
||||
|
return request({ |
||||
|
url: 'api/tag/initTagList', |
||||
|
method: 'get', |
||||
|
params: parameter |
||||
|
}) |
||||
|
} |
||||
|
export default { initTagList } |
@ -0,0 +1,177 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!--工具栏--> |
||||
|
<div class="head-container"> |
||||
|
<crudOperation :permission="permission"> |
||||
|
<template v-slot:left> |
||||
|
<el-button v-permission="permission.add" size="mini" type="primary" icon="el-icon-plus" :disabled="!activeAddBtn" @click="crud.toAdd">新增</el-button> |
||||
|
</template> |
||||
|
<template v-slot:right> |
||||
|
<el-button v-permission="permission.del" icon="el-icon-delete" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">删除</el-button> |
||||
|
</template> |
||||
|
</crudOperation> |
||||
|
</div> |
||||
|
<!--表单组件--> |
||||
|
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title"> |
||||
|
<span class="dialog-right-top" /> |
||||
|
<span class="dialog-left-bottom" /> |
||||
|
<div class="setting-dialog"> |
||||
|
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px"> |
||||
|
<el-form-item label="字典名称" prop="dicName"> |
||||
|
<el-input v-model="form.dicName" style="width: 370px;" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="字典代码" prop="dicCode"> |
||||
|
<el-input v-model="form.dicCode" style="width: 370px;" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="内容说明" prop="dicExplain"> |
||||
|
<el-input v-model="form.dicExplain" style="width: 370px;" type="textarea" :rows="4" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="text" @click="crud.cancelCU">取消</el-button> |
||||
|
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
<el-dialog title="删除字典内容" :visible.sync="deleteVisible" :before-close="handleClose"> |
||||
|
<span class="dialog-right-top" /> |
||||
|
<span class="dialog-left-bottom" /> |
||||
|
<div class="setting-dialog"> |
||||
|
<div class="dialog-delt"> |
||||
|
<p><span>确定删除当前字典内容吗?</span></p> |
||||
|
</div> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click.native="handleConfirm">确定</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
<!--表格渲染--> |
||||
|
<el-table ref="table" v-loading="crud.loading" :data="crud.data" highlight-current-row style="width: 100%;" @selection-change="selectionChangeHandler" @row-click="clickRowHandler"> |
||||
|
<el-table-column type="selection" width="55" /> |
||||
|
<el-table-column prop="dicName" label="字典名称" /> |
||||
|
<el-table-column prop="dicCode" label="字典代码" /> |
||||
|
<el-table-column prop="dicExplain" label="内容说明" /> |
||||
|
</el-table> |
||||
|
<!--分页组件--> |
||||
|
<pagination /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import crudDictDetail from '@/api/archivesConfig/dictDetail' |
||||
|
import CRUD, { presenter, header, form } from '@crud/crud' |
||||
|
import crudOperation from '@crud/CRUD.operation' |
||||
|
import pagination from '@crud/Pagination' |
||||
|
|
||||
|
const defaultForm = { id: null, dicName: null, dicCode: null, dicExplain: null, dicType: false } |
||||
|
|
||||
|
export default { |
||||
|
components: { crudOperation, pagination }, |
||||
|
cruds() { |
||||
|
return [ |
||||
|
CRUD({ |
||||
|
title: '字典内容', url: 'api/dictrionary/findSubsetById', query: { id: '' }, |
||||
|
crudMethod: { ...crudDictDetail }, |
||||
|
optShow: { |
||||
|
add: false, |
||||
|
edit: true, |
||||
|
del: false, |
||||
|
reset: false, |
||||
|
download: false, |
||||
|
group: false |
||||
|
}, |
||||
|
queryOnPresenterCreated: false, |
||||
|
confirmDeleteMsg: '确认删除当前字典内容么?', |
||||
|
sort: ['dicSequence,asc'] |
||||
|
}) |
||||
|
] |
||||
|
}, |
||||
|
mixins: [ |
||||
|
presenter(), |
||||
|
header(), |
||||
|
form(function() { |
||||
|
return Object.assign({ dicPid: this.dicPid }, defaultForm) |
||||
|
}) |
||||
|
], |
||||
|
props: { |
||||
|
activeAddBtn: { |
||||
|
type: Boolean |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
dicPid: null, |
||||
|
needRefreshTree: false, |
||||
|
rules: { |
||||
|
dicName: [ |
||||
|
{ required: true, message: '请输入字典名称', trigger: 'blur' } |
||||
|
], |
||||
|
dicCode: [ |
||||
|
{ required: true, message: '请输入字典代码', trigger: 'blur' } |
||||
|
] |
||||
|
}, |
||||
|
permission: { |
||||
|
add: ['admin', 'dict:add'], |
||||
|
edit: ['admin', 'dict:edit'], |
||||
|
del: ['admin', 'dict:del'] |
||||
|
}, |
||||
|
deleteVisible: false, |
||||
|
deleteData: {} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
[CRUD.HOOK.afterSubmit]() { |
||||
|
this.needRefreshTree = true |
||||
|
}, |
||||
|
[CRUD.HOOK.afterDelete]() { |
||||
|
this.needRefreshTree = true |
||||
|
}, |
||||
|
// 获取数据前设置默认参数 |
||||
|
[CRUD.HOOK.beforeRefresh]() { |
||||
|
this.crud.query.id = this.dicPid |
||||
|
}, |
||||
|
[CRUD.HOOK.afterRefresh](crud) { |
||||
|
if (this.needRefreshTree) { |
||||
|
this.needRefreshTree = false |
||||
|
this.$emit('treeRefresh', crud.data) |
||||
|
} |
||||
|
}, |
||||
|
clickRowHandler(row) { |
||||
|
this.$refs.table.clearSelection() |
||||
|
this.$refs.table.toggleRowSelection(row) |
||||
|
}, |
||||
|
selectionChangeHandler(val) { |
||||
|
if (val.length > 1) { |
||||
|
// 取出最后val的最后一个返回出来 |
||||
|
const finalVal = val.pop() |
||||
|
// 清除所有选中 |
||||
|
this.$refs.table.clearSelection() |
||||
|
// 给最后一个加上选中 |
||||
|
this.$refs.table.toggleRowSelection(finalVal) |
||||
|
this.crud.selectionChangeHandler([finalVal]) |
||||
|
} else { |
||||
|
this.crud.selectionChangeHandler(val) |
||||
|
} |
||||
|
}, |
||||
|
toDelete(data) { |
||||
|
this.deleteData = data |
||||
|
this.deleteVisible = true |
||||
|
}, |
||||
|
handleConfirm() { |
||||
|
this.deleteVisible = false |
||||
|
this.crud.delAllLoading = true |
||||
|
this.crud.doDelete(this.deleteData) |
||||
|
}, |
||||
|
handleClose(done) { |
||||
|
this.deleteData = {} |
||||
|
done() |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style rel="stylesheet/scss" lang="scss" scoped> |
||||
|
::v-deep thead .el-table-column--selection .cell { |
||||
|
display: none; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,171 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<!--表单组件--> |
||||
|
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title"> |
||||
|
<span class="dialog-right-top" /> |
||||
|
<span class="dialog-left-bottom" /> |
||||
|
<div class="setting-dialog"> |
||||
|
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px"> |
||||
|
<el-form-item label="字典名称" prop="dicName"> |
||||
|
<el-input v-model="form.dicName" style="width: 370px;" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="字典代码" prop="dicCode"> |
||||
|
<el-input v-model="form.dicCode" style="width: 370px;" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="内容说明"> |
||||
|
<el-input v-model="form.dicExplain" style="width: 370px;" type="textarea" :rows="4" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="text" @click="crud.cancelCU">取消</el-button> |
||||
|
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
<el-dialog title="删除字典" :visible.sync="deleteVisible" :before-close="handleClose"> |
||||
|
<span class="dialog-right-top" /> |
||||
|
<span class="dialog-left-bottom" /> |
||||
|
<div class="setting-dialog"> |
||||
|
<div class="dialog-delt"> |
||||
|
<p><span>确定要删除当前字典吗?</span></p> |
||||
|
<p class="delt-tip"><span>提示:如果删除当前字典,此字典内所属内容会一并删除</span></p> |
||||
|
</div> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click.native="handleConfirm">确定</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
<!-- 字典列表 --> |
||||
|
<el-row class="container-main" :gutter="20"> |
||||
|
<el-col class="container-left curd-in-out" :xs="10" :sm="8" :md="5" :lg="6" :xl="4"> |
||||
|
<span class="right-top-line" /> |
||||
|
<span class="left-bottom-line" /> |
||||
|
<crudOperation :permission="permission"> |
||||
|
<template v-slot:right> |
||||
|
<el-button v-permission="permission.del" icon="el-icon-delete" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">删除</el-button> |
||||
|
</template> |
||||
|
</crudOperation> |
||||
|
<!--字典树状结构--> |
||||
|
<el-tree ref="tree" v-loading="crud.loading" :data="crud.data" :props="defaultProps" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick" /> |
||||
|
</el-col> |
||||
|
<!-- 字典详情列表 --> |
||||
|
<el-col class="container-right" :xs="14" :sm="16" :md="19" :lg="18" :xl="20"> |
||||
|
<span class="right-top-line" /> |
||||
|
<span class="left-bottom-line" /> |
||||
|
<dictDetail ref="dictDetail" :permission="permission" :active-add-btn="activeAddBtn" @treeRefresh="updateKeyChildren" /> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import dictDetail from './dictDetail' |
||||
|
import crudDict from '@/api/archivesConfig/dict' |
||||
|
import CRUD, { presenter, header, form } from '@crud/crud' |
||||
|
import crudOperation from '@crud/CRUD.operation' |
||||
|
|
||||
|
const defaultForm = { id: null, dicName: null, dicCode: null, dicExplain: null, dicType: true } |
||||
|
|
||||
|
export default { |
||||
|
name: 'Dict', |
||||
|
components: { crudOperation, dictDetail }, |
||||
|
cruds() { |
||||
|
return [ |
||||
|
CRUD({ |
||||
|
title: '字典', url: 'api/dictrionary/menu', |
||||
|
crudMethod: { ...crudDict }, |
||||
|
optShow: { |
||||
|
add: true, |
||||
|
edit: true, |
||||
|
del: false, |
||||
|
download: false, |
||||
|
group: false |
||||
|
}, |
||||
|
confirmDeleteMsg: '确定要删除当前字典吗', |
||||
|
sort: ['dicSequence,asc'] |
||||
|
}) |
||||
|
] |
||||
|
}, |
||||
|
mixins: [presenter(), header(), form(defaultForm)], |
||||
|
data() { |
||||
|
return { |
||||
|
rules: { |
||||
|
dicName: [ |
||||
|
{ required: true, message: '请输入字典名称', trigger: 'blur' } |
||||
|
], |
||||
|
dicCode: [ |
||||
|
{ required: true, message: '请输入字典代码', trigger: 'blur' } |
||||
|
] |
||||
|
}, |
||||
|
permission: { |
||||
|
add: ['admin', 'dict:add'], |
||||
|
edit: ['admin', 'dict:edit'], |
||||
|
del: ['admin', 'dict:del'] |
||||
|
}, |
||||
|
defaultProps: { |
||||
|
children: 'childMenus', |
||||
|
label: 'dicName' |
||||
|
}, |
||||
|
activeAddBtn: false, |
||||
|
deleteVisible: false, |
||||
|
deleteData: {} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
// 获取数据前设置好接口地址 |
||||
|
[CRUD.HOOK.beforeRefresh]() { |
||||
|
if (this.$refs.dictDetail) { |
||||
|
this.$refs.dictDetail.query.id = '' |
||||
|
} |
||||
|
return true |
||||
|
}, |
||||
|
// 选中字典后,设置字典详情数据 |
||||
|
handleNodeClick(val) { |
||||
|
if (val) { |
||||
|
if (val.dicType === 'true') { |
||||
|
this.crud.selectionChangeHandler([val]) |
||||
|
} else { |
||||
|
this.crud.selectionChangeHandler([]) |
||||
|
} |
||||
|
this.$refs.dictDetail.query.id = val.id |
||||
|
this.$refs.dictDetail.dicPid = val.id |
||||
|
this.$refs.dictDetail.crud.toQuery() |
||||
|
this.activeAddBtn = true |
||||
|
} |
||||
|
}, |
||||
|
// 编辑前将字典明细临时清空,避免日志入库数据过长 |
||||
|
[CRUD.HOOK.beforeToEdit](crud, form) { |
||||
|
// 将角色的菜单清空,避免日志入库数据过长 |
||||
|
form.dictDetails = null |
||||
|
}, |
||||
|
updateKeyChildren(data) { |
||||
|
const oldDatas = this.$refs.tree.getCurrentNode().childMenus |
||||
|
if (oldDatas) { |
||||
|
for (let i = 0; i < data.length; i++) { |
||||
|
const oldData = oldDatas.find((d) => { return d.id === data[i].id }) |
||||
|
if (oldData) { |
||||
|
data[i].childMenus = oldData.childMenus |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
this.$refs.tree.updateKeyChildren(this.$refs.tree.getCurrentKey(), data) |
||||
|
}, |
||||
|
toDelete(data) { |
||||
|
this.deleteData = data |
||||
|
this.deleteVisible = true |
||||
|
}, |
||||
|
handleConfirm() { |
||||
|
this.deleteVisible = false |
||||
|
this.crud.delAllLoading = true |
||||
|
this.crud.doDelete(this.deleteData) |
||||
|
}, |
||||
|
handleClose(done) { |
||||
|
this.deleteData = {} |
||||
|
done() |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
</style> |
@ -0,0 +1,74 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<div class="head-container"> |
||||
|
<div class="archives-handler-btn"> |
||||
|
<!-- iconfont icon-weibiaoti-2 --> |
||||
|
<el-button class="lending-btn" type="primary" @click="unbind()">解除绑定</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
<el-table ref="table" v-loading="loading" :data="bindTagList" style="width: 100%;" height="calc(100vh - 463px)" @row-click="clickRowHandler"> |
||||
|
<el-table-column type="selection" width="55" align="center" /> |
||||
|
<el-table-column type="index" label="序号" width="55" align="center" /> |
||||
|
<el-table-column prop="tid" label="TID" align="center" /> |
||||
|
<el-table-column prop="depositNum" label="绑定对象" align="center" /> |
||||
|
<el-table-column prop="caseName" label="标签名称" align="center" /> |
||||
|
<el-table-column prop="update_time" width="175" label="操作时间" align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<div>{{ scope.row.update_time | parseTime }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<el-pagination :page-size.sync="page.size" :total="page.total" :current-page.sync="page.page" style="margin-top: 8px;" layout="total, prev, pager, next, sizes" @size-change="sizeChangeHandler($event)" @current-change="pageChangeHandler" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { initTagList } from '@/api/storeManage/tagManage/bindTagList' |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
bindTagList: [{}], |
||||
|
loading: false, |
||||
|
page: { |
||||
|
total: 0, |
||||
|
size: 10, |
||||
|
page: 1 |
||||
|
}, |
||||
|
query: {} |
||||
|
} |
||||
|
}, |
||||
|
created() { |
||||
|
this.initData() |
||||
|
}, |
||||
|
methods: { |
||||
|
initData() { |
||||
|
initTagList(this.getQueryParams()).then((res) => { |
||||
|
console.log(res) |
||||
|
}) |
||||
|
}, |
||||
|
getQueryParams() { |
||||
|
Object.keys(this.query).length !== 0 && Object.keys(this.query).forEach(item => { |
||||
|
if (this.query[item] === null || this.query[item] === '') this.query[item] = undefined |
||||
|
}) |
||||
|
return { |
||||
|
page: this.page.page - 1, |
||||
|
size: this.page.size, |
||||
|
...this.query |
||||
|
} |
||||
|
}, |
||||
|
clickRowHandler(row) { |
||||
|
this.$refs.table.toggleRowSelection(row) |
||||
|
}, |
||||
|
unbind() { |
||||
|
}, |
||||
|
sizeChangeHandler() { |
||||
|
}, |
||||
|
pageChangeHandler() { |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
@import "~@/assets/styles/archives-manage.scss"; |
||||
|
</style> |
@ -0,0 +1,54 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<el-row> |
||||
|
<div class="tab-content"> |
||||
|
<span class="right-top-line" /> |
||||
|
<span class="left-bottom-line" /> |
||||
|
<ul class="tab-nav"> |
||||
|
<li :class="{ 'active-tab-nav': activeIndex == 0 }" @click="changeActiveTab(0)">绑定标签列表<i /></li> |
||||
|
<li :class="{ 'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">标签使用记录<i /></li> |
||||
|
<!-- 最右侧装饰img --> |
||||
|
<span class="tab-right-img" /> |
||||
|
</ul> |
||||
|
<!-- <component :is="comName" :record-form-visible="recordFormVisible" /> --> |
||||
|
<component :is="comName" /> |
||||
|
</div> |
||||
|
</el-row> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import bindTagList from './bindTagList/index.vue' |
||||
|
import tagLog from './tagLog/index.vue' |
||||
|
|
||||
|
export default { |
||||
|
name: 'TagManage', |
||||
|
components: { |
||||
|
bindTagList, |
||||
|
tagLog |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
activeIndex: 0 |
||||
|
} |
||||
|
}, |
||||
|
computed: { |
||||
|
comName: function() { |
||||
|
if (this.activeIndex === 0) { |
||||
|
return 'bindTagList' |
||||
|
} else if (this.activeIndex === 1) { |
||||
|
return 'tagLog' |
||||
|
} |
||||
|
return 'bindTagList' |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
changeActiveTab(data) { |
||||
|
this.activeIndex = data |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
</style> |
@ -0,0 +1,53 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<div class="content-container"> |
||||
|
<div class="state-radio"> |
||||
|
<p> |
||||
|
<label> |
||||
|
<input v-model="lineStateVal" type="radio" name="lineState" value="在线"><span>在线(直接完成借阅操作)</span> |
||||
|
</label> |
||||
|
</p> |
||||
|
<p> |
||||
|
<label> |
||||
|
<input v-model="lineStateVal" type="radio" name="lineState" value="离线"><span>离线(发起借阅操作后,将借阅的档案放在读写器上进行识别,将带有电子标签的档案的报警位进行解绑或绑定)</span> |
||||
|
</label> |
||||
|
</p> |
||||
|
<!-- <button @click="btn">测试按钮</button> --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
|
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
lineStateVal: '' |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
// btn() { |
||||
|
// console.log(this.lineStateVal) |
||||
|
// } |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
h2{ |
||||
|
color: #fff; |
||||
|
} |
||||
|
p{ |
||||
|
height: 32px; |
||||
|
line-height: 32px; |
||||
|
input{ |
||||
|
margin-right: 10px; |
||||
|
} |
||||
|
} |
||||
|
.content-container{ |
||||
|
height:636px; |
||||
|
color: #fff; |
||||
|
padding: 0 20px; |
||||
|
} |
||||
|
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue