Browse Source

视觉盘点

master
xuhuajiao 7 months ago
parent
commit
f2cbe7e3f8
  1. 1
      package.json
  2. 27
      src/api/bookBasice/index.js
  3. 18
      src/assets/styles/archives-manage.scss
  4. 1
      src/assets/styles/index.scss
  5. 59
      src/assets/styles/manage.scss
  6. 26
      src/assets/styles/yxk-admin.scss
  7. 12
      src/router/routers.js
  8. 31
      src/utils/index.js
  9. 425
      src/views/system/dict/index2.vue
  10. 144
      src/views/system/group/index.vue
  11. 1
      src/views/system/log/search.vue
  12. 11
      src/views/system/menu/index.vue
  13. 17
      src/views/system/notify/index.vue
  14. 143
      src/views/system/role/index.vue
  15. 234
      src/views/system/user/cart.vue
  16. 13
      src/views/system/user/center.vue
  17. 102
      src/views/system/user/index.vue
  18. 372
      src/views/visualCheck/bookstore/book/index.vue
  19. 506
      src/views/visualCheck/bookstore/collection/index.vue
  20. 230
      src/views/visualCheck/bookstore/collectionLocation/index.vue
  21. 16
      src/views/visualCheck/checkManage/bookSearch/index.vue
  22. 16
      src/views/visualCheck/checkManage/bookshelfSearch/index.vue
  23. 16
      src/views/visualCheck/checkManage/checkLog/index.vue
  24. 16
      src/views/visualCheck/checkManage/checkPlan/index.vue
  25. 16
      src/views/visualCheck/checkManage/dataScreening/index.vue
  26. 2
      src/views/visualCheck/checkManage/index.vue
  27. 16
      src/views/visualCheck/checkManage/statistic/index.vue
  28. 1
      src/views/visualCheck/venueDevice/area/index.vue
  29. 1
      src/views/visualCheck/venueDevice/bookshelf/index.vue
  30. 1
      src/views/visualCheck/venueDevice/device/index.vue
  31. 170
      src/views/visualCheck/venueDevice/floor/index.vue
  32. 16
      src/views/visualCheck/venueDevice/index.vue

1
package.json

@ -58,6 +58,7 @@
"js-cookie": "2.2.0", "js-cookie": "2.2.0",
"js-md5": "^0.7.3", "js-md5": "^0.7.3",
"js-sha1": "^0.6.0", "js-sha1": "^0.6.0",
"jsbarcode": "^3.11.6",
"jsencrypt": "^3.0.0-rc.1", "jsencrypt": "^3.0.0-rc.1",
"jsrsasign": "^10.3.0", "jsrsasign": "^10.3.0",
"jszip": "^3.7.0", "jszip": "^3.7.0",

27
src/api/bookBasice/index.js

@ -0,0 +1,27 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/bookBasice/editCollectionLocation',
method: 'post',
data
})
}
export function edit(data) {
return request({
url: 'api/bookBasice/editCollectionLocation',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/bookBasice/delCollectionLocation',
method: 'post',
data: ids
})
}
export default { add, edit, del }

18
src/assets/styles/archives-manage.scss

@ -40,10 +40,6 @@
} }
} }
.crud-opts{
justify-content: space-between;
}
// 库房可删 // 库房可删
.archives-handler-btn{ .archives-handler-btn{
.el-button{ .el-button{
@ -67,14 +63,6 @@
background-color: #075E6C; background-color: #075E6C;
} }
} }
// &.warehousing-btn{
// border-color: $arcYellow;
// background-color: $arcYellow;
// &.is-disabled{
// border-color:#7E4021;
// background-color: #7E4021;
// }
// }
&.lending-btn{ &.lending-btn{
border-color: $arcRed; border-color: $arcRed;
background-color: $arcRed; background-color: $arcRed;
@ -192,11 +180,7 @@
} }
} }
} }
.screenshot{
display: block;
margin: 0 auto;
object-fit: cover;
}
.file-down, .file-down,
.packing-handle-btn, .packing-handle-btn,
.packing-recall-btn, .packing-recall-btn,

1
src/assets/styles/index.scss

@ -6,6 +6,7 @@
@import '~@/assets/iconfonts/light/iconfont.css'; @import '~@/assets/iconfonts/light/iconfont.css';
@import 'yxk-admin'; @import 'yxk-admin';
@import 'archives-manage'; @import 'archives-manage';
@import 'manage';
body { body {
height: 100%; height: 100%;

59
src/assets/styles/manage.scss

@ -0,0 +1,59 @@
@import 'variables';
@import 'mixin';
.venue-container{
display: flex;
justify-content: space-between;
}
.venue-left{
width: calc(100% / 2);
margin-right: 20px;
@include bg_color;
@include box_padding;
.head-container{
margin-bottom: 20px;
.crud-opts{
justify-content: center;
}
}
.container-left{
@include tree_height_min;
}
}
.venue-right{
flex: 1;
@include bg_color;
@include box_padding;
.head-container{
margin-bottom: 20px;
}
.container-right{
@include table_height_min;
&.tab-content{
@include tab_height_min;
}
}
}
.venue-container{
.tab-content{
position: relative;
@include row_tab_style;
.tab-nav{
margin-bottom: 0;
}
}
}
.venue-preview{
width: 100%;
height: 690px;
margin-top: 20px;
overflow: hidden;
img{
display: block;
width: 100%;
}
}

26
src/assets/styles/yxk-admin.scss

@ -1228,32 +1228,6 @@ input[type ='number'] {
.warehouse-svg { .warehouse-svg {
margin: 0 10px 1px 0; margin: 0 10px 1px 0;
} }
// .title-arrow {
// position: relative;
// display: inline-block;
// &::before {
// content: '';
// width: 36px;
// height: 12px;
// position: absolute;
// right: -60px;
// top: 50%;
// transform: translateY(-50%);
// background: url('~@/assets/images/warehouse_arrow_left.png') no-repeat;
// }
// &::after {
// content: '';
// width: 36px;
// height: 12px;
// position: absolute;
// left: -60px;
// top: 50%;
// transform: translateY(-50%);
// background: url('~@/assets/images/warehouse_arrow_right.png') no-repeat;
// }
// }
.el-switch .el-switch__core{ .el-switch .el-switch__core{
@include switch-disabled; @include switch-disabled;
} }

12
src/router/routers.js

@ -55,13 +55,13 @@ export const constantRouterMap = [
component: (resolve) => require(['@/views/system/user/center'], resolve), component: (resolve) => require(['@/views/system/user/center'], resolve),
name: '个人中心', name: '个人中心',
meta: { title: '个人中心' } meta: { title: '个人中心' }
},
{
path: 'cart',
component: (resolve) => require(['@/views/system/user/cart'], resolve),
name: '借阅车',
meta: { title: '借阅车' }
} }
// {
// path: 'cart',
// component: (resolve) => require(['@/views/system/user/cart'], resolve),
// name: '借阅车',
// meta: { title: '借阅车' }
// }
] ]
} }
// { // {

31
src/utils/index.js

@ -1,3 +1,4 @@
import { getToken } from '@/utils/auth'
/** /**
* Created by PanJiaChen on 16/11/18. * Created by PanJiaChen on 16/11/18.
*/ */
@ -424,11 +425,26 @@ export function getCurrentTime() {
return time return time
} }
// 定义时间
export function timeFormate() {
const date = new Date()
const Y = date.getFullYear()
const M =
date.getMonth() + 1 < 10
? '0' + (date.getMonth() + 1)
: date.getMonth() + 1
const D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
return Y + M + D
}
// 导出 // 导出
export function getBlob(url, cb) { export function getBlob(url, cb) {
var xhr = new XMLHttpRequest() var xhr = new XMLHttpRequest()
xhr.open('GET', url, true) xhr.open('GET', url, true)
xhr.responseType = 'blob' xhr.responseType = 'blob'
xhr.setRequestHeader('Authorization', getToken())
xhr.onload = function() { xhr.onload = function() {
if (xhr.status === 200) { if (xhr.status === 200) {
cb(xhr.response) cb(xhr.response)
@ -436,7 +452,7 @@ export function getBlob(url, cb) {
} }
xhr.send() xhr.send()
} }
// 与getBlob 配合使用
export function saveAs(blob, filename) { export function saveAs(blob, filename) {
if (window.navigator.msSaveOrOpenBlob) { if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename) navigator.msSaveBlob(blob, filename)
@ -453,18 +469,6 @@ export function saveAs(blob, filename) {
} }
} }
// 定义时间
export function timeFormate() {
const date = new Date()
const Y = date.getFullYear()
const M =
date.getMonth() + 1 < 10
? '0' + (date.getMonth() + 1)
: date.getMonth() + 1
const D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
return Y + M + D
}
// 下载文件 // 下载文件
export function saveByteArray(fileName, byte) { export function saveByteArray(fileName, byte) {
var blob = new Blob([byte], { type: 'application/pdf' }) var blob = new Blob([byte], { type: 'application/pdf' })
@ -474,4 +478,3 @@ export function saveByteArray(fileName, byte) {
link.download = fileName link.download = fileName
link.click() link.click()
} }

425
src/views/system/dict/index2.vue

@ -1,425 +0,0 @@
<template>
<div class="app-container row-container">
<!--工具栏-->
<div class="head-container">
<div class="head-search">
<!-- 搜索 -->
<el-input v-model="query.blurry" clearable size="small" placeholder="输入字典名称或字典代码搜索" prefix-icon="el-icon-search" style="width: 240px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button>
<el-button v-if="crud.optShow.reset" class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button>
</div>
<crudOperation :permission="permission">
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
<template v-slot:right>
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)">
<i class="iconfont icon-daochu" />
导出
</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">
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-form-item label="字典名称" prop="dictionaryName">
<el-input v-model="form.dictionaryName" />
</el-form-item>
<el-form-item label="字典代码" prop="dictionaryCode">
<el-input v-model="form.dictionaryCode" />
</el-form-item>
<el-form-item label="顶级节点" prop="isTop">
<el-radio-group v-model="form.isTop" @input="changeIsTop">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="dictionaryOrder">
<el-input-number
v-model.number="form.dictionaryOrder"
:min="0"
:max="999"
controls-position="right"
/>
</el-form-item>
<el-row>
<el-form-item v-if="form.isTop === '0'" label="上级节点" prop="dictionaryParents">
<treeselect
v-model="form.dictionaryParents"
style="width: 584px;"
:load-options="loadDicts"
:options="dicts"
:normalizer="normalizer"
placeholder="选择上级节点"
>
<div slot="value-label" slot-scope="{ node }">{{ getAutoNameUnknown(node.label) }}</div>
</treeselect>
</el-form-item>
</el-row>
<el-form-item label="内容说明" prop="dictionaryRemarks">
<el-input v-model="form.dictionaryRemarks" type="textarea" :rows="4" style="width: 584px;" />
</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> -->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<!-- @selection-change="selectionChangeHandler"
@row-click="clickRowHandler" -->
<!-- height="calc(100vh - 232px)" -->
<el-table
ref="table"
v-loading="crud.loading"
lazy
:load="getDictsDatas"
:data="tableData"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
:row-key="getRowKey"
style="width: 100%;"
@select-all="selectAll"
@select="selectTr"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column prop="dictionaryName" label="字典名称" />
<el-table-column prop="dictionaryCode" label="字典代码" />
<el-table-column prop="dictionaryRemarks" label="内容说明" />
<el-table-column prop="dictionaryOrder" label="排序" />
<el-table-column prop="createTime" label="创建日期" width="200px">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
</div>
</template>
<script>
import crudDict from '@/api/system/dict'
import CRUD, { presenter, header, form } 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'
import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import { mapGetters } from 'vuex'
import { exportFile } from '@/utils/index'
import qs from 'qs'
const defaultForm = { id: null, dictionaryName: null, isTop: '1', dictionaryCode: null, dictionaryOrder: 999, dictionaryRemarks: null, dictionaryParents: null }
export default {
name: 'Dicts',
components: { crudOperation, Treeselect, pagination },
cruds() {
return [
CRUD({
title: '字典', idField: 'dictionaryId || id', url: 'api/dictionary/initDictionaryList',
crudMethod: { ...crudDict },
sort: [],
optShow: {
add: true,
edit: true,
del: false,
reset: true,
download: false,
group: false
}})
]
},
mixins: [
presenter(),
header(),
form(function() {
return Object.assign({ dictionaryParents: this.dictionaryParents }, defaultForm)
})
],
props: {
activeAddBtn: {
type: Boolean
}
},
data() {
return {
dicts: [],
dictionaryParents: null,
rules: {
dictionaryName: [
{ required: true, message: '请输入字典名称', trigger: 'blur' }
],
dictionaryCode: [
{ required: true, message: '请输入字典代码', trigger: 'blur' }
],
isTop: [
{ required: true, message: '请选择是否为顶级节点', trigger: 'change' }
],
dictionaryOrder: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
]
},
permission: {
add: ['admin', 'dict:add'],
edit: ['admin', 'dict:edit'],
del: ['admin', 'dict:del']
},
deleteVisible: false,
deleteData: {},
isAllSelect: false
}
},
computed: {
...mapGetters([
'baseApi'
])
},
mounted() {
},
methods: {
// vue-treeSelectunknown
getAutoNameUnknown(name) {
if (name.lastIndexOf('unknown') > -1) {
return name.split('(')[0]
} else {
return name
}
},
getRowKey(row) {
return row.dictionaryId
},
resetQuery() {
this.crud.query.blurry = ''
this.crud.toQuery()
},
//
[CRUD.HOOK.afterToCU](crud, form) {
if (form.dictionaryParents !== null) {
form.isTop = '0'
} else if (form.dictionaryId !== null) {
form.isTop = '1'
}
this.getDictsTreeList()
},
//
[CRUD.HOOK.beforeRefresh]() {
this.tableData = []
},
[CRUD.HOOK.afterRefresh](crud) {
crud.data.forEach(function(item, index) {
if (item.sonNum !== 0) {
item.hasChildren = true
} else {
item.hasChildren = false
}
if (!item.hasChildren) {
item.children = null
}
})
this.tableData = this.crud.data
console.log('this.tableData0', this.tableData)
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
crud.form.id = form.dictionaryId
},
//
[CRUD.HOOK.afterValidateCU](crud) {
if (crud.form.isTop === '1') {
crud.form.dictionaryParents = null
}
delete crud.form.isTop
console.log(crud.form)
return true
},
changeIsTop(val) {
if (val === '0') {
this.getDictsTreeList()
}
},
selectAll() {
this.isAllSelect = !this.isAllSelect
const data = this.tableData
this.toggleSelect(data, this.isAllSelect, 'all')
console.log('selectAll', data)
},
//
selectTr(selection, row) {
this.$set(row, 'isChecked', !row.isChecked)
this.$nextTick(() => {
this.isAllSelect = row.isChecked
this.toggleSelect(row, row.isChecked, 'tr')
})
},
//
toggleSelect(data, flag, type) {
console.log('data.children', data.children)
if (type === 'all') {
if (data.length > 0) {
data.forEach((item) => {
this.toggleSelection(item, flag)
if (item.children && item.children.length > 0) {
this.toggleSelect(item.children, flag, type)
}
})
}
} else {
if (data.children && data.children.length > 0) {
data.children.forEach((item) => {
item.isChecked = flag
this.$refs.table.toggleRowSelection(item, flag)
this.toggleSelect(item, flag, type)
})
}
}
},
//
toggleSelection(row, flag) {
this.$set(row, 'isChecked', flag)
this.$nextTick(() => {
if (flag) {
this.$refs.table.toggleRowSelection(row, flag)
} else {
this.$refs.table.clearSelection()
}
})
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
getDictsDatas(tree, treeNode, resolve) {
setTimeout(() => {
console.log(treeNode)
crudDict.FetchSonDictionaryList({ pid: tree.dictionaryId }).then(res => {
const data = res.map(function(obj) {
if (obj.sonNum !== 0) {
obj.hasChildren = true
obj.children = null
} else {
obj.hasChildren = false
}
return obj
})
resolve(data)
})
}, 100)
},
getDictsTreeList() {
crudDict.FetchDictionaryTree().then(res => {
this.dicts = res.map(function(obj) {
if (obj.sonNum !== 0) {
obj.hasChildren = true
} else {
obj.hasChildren = false
}
if (obj.hasChildren) {
obj.children = null
}
return obj
})
this.crud.loading = false
})
},
//
loadDicts({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
crudDict.FetchDictionaryTree().then(res => {
parentNode.children = res.map(function(obj) {
if (obj.children) {
obj.childMenus = null
}
return obj
})
setTimeout(() => {
callback()
}, 100)
})
}
},
toDelete(datas) {
this.deleteData = datas
this.$confirm('此操作将删除当前所选' + this.crud.title + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const dictionaryIds = []
this.deleteData.forEach(val => {
dictionaryIds.push(val.dictionaryId)
})
crudDict.del(dictionaryIds).then(() => {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
this.crud.delAllLoading = false
this.crud.refresh()
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
})
}).catch(() => {
})
},
doExport(data) {
console.log(data)
this.crud.downloadLoading = true
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = []
data.forEach(val => {
ids.push(val.dictionaryId)
})
const params = {
'dictionaryIds': ids
}
exportFile(this.baseApi + '/api/dictionary/download?' + qs.stringify(params, { indices: false }))
this.crud.downloadLoading = false
}).catch(() => {
})
},
normalizer(node) {
if (node.childDictionarys == null || node.childDictionarys === 'null') {
delete node.childDictionarys
}
return {
id: node.id,
label: node.dictionaryName,
children: node.childDictionarys
}
}
}
}
</script>
<style lang="scss" scoped>
</style>

144
src/views/system/group/index.vue

@ -6,7 +6,6 @@
<div v-if="crud.props.searchToggle" class="head-search"> <div v-if="crud.props.searchToggle" class="head-search">
<!-- 搜索 --> <!-- 搜索 -->
<el-input v-model="query.blurry" size="small" clearable placeholder="输入机构名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> <el-input v-model="query.blurry" size="small" clearable placeholder="输入机构名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<!-- <date-range-picker v-model="blurryTime" class="date-item" /> -->
<el-select v-model="query.status" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery"> <el-select v-model="query.status" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery">
<i slot="prefix" class="iconfont icon-zhuangtai" /> <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-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
@ -74,7 +73,6 @@
</el-dialog> </el-dialog>
<el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" :data="crud.data" @selection-change="crud.selectionChangeHandler" @current-change="handleCurrentChange"> <el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" :data="crud.data" @selection-change="crud.selectionChangeHandler" @current-change="handleCurrentChange">
<el-table-column type="selection" align="center" width="55" /> <el-table-column type="selection" align="center" width="55" />
<!-- <el-table-column prop="fondsNo" label="全宗号" /> -->
<el-table-column prop="fondsName" label="机构名称" /> <el-table-column prop="fondsName" label="机构名称" />
<el-table-column prop="deptsCount" label="部门" align="center" /> <el-table-column prop="deptsCount" label="部门" align="center" />
<el-table-column prop="userCount" label="用户" align="center" /> <el-table-column prop="userCount" label="用户" align="center" />
@ -98,7 +96,6 @@
<script> <script>
import crudfonds from '@/api/system/fonds' import crudfonds from '@/api/system/fonds'
// import { FetchCategoryMenu, FetchCategoryMenuChildren } from '@/api/system/category/category'
import CRUD, { presenter, header, form, crud } from '@crud/crud' import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation' import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation' import crudOperation from '@crud/CRUD.operation'
@ -112,7 +109,6 @@ export default {
name: 'Group', name: 'Group',
components: { pagination, crudOperation, rrOperation }, components: { pagination, crudOperation, rrOperation },
cruds() { cruds() {
// sort: 'update_time,asc',
return CRUD({ title: '机构', idField: 'fondsId', url: 'api/fonds/initFondsList', crudMethod: { ...crudfonds }, optShow: { return CRUD({ title: '机构', idField: 'fondsId', url: 'api/fonds/initFondsList', crudMethod: { ...crudfonds }, optShow: {
add: true, add: true,
edit: true, edit: true,
@ -125,18 +121,9 @@ export default {
mixins: [presenter(), header(), form(defaultForm), crud()], mixins: [presenter(), header(), form(defaultForm), crud()],
data() { data() {
return { return {
defaultProps: {
children: 'children',
label: 'cnName',
isLeaf: (data, node) => {
if (data.isType === 2) {
return true
}
}
},
currentId: 0, categoryLoading: false, showButton: false,
categoryDatas: [], categoryIds: [], depts: [], deptDatas: [], // 使
categoryAllData: [],
currentId: 0,
depts: [],
deptDatas: [], // 使
permission: { permission: {
add: ['admin', 'fonds:add'], add: ['admin', 'fonds:add'],
edit: ['admin', 'fonds:edit'], edit: ['admin', 'fonds:edit'],
@ -164,9 +151,7 @@ export default {
{ key: '0', display_name: '停用' } { key: '0', display_name: '停用' }
], ],
blurryTime: null, blurryTime: null,
deleteData: [], // data
chooseNode: null,
categoryTreeData: []
deleteData: [] // data
} }
}, },
computed: { computed: {
@ -177,33 +162,8 @@ export default {
created() { created() {
}, },
mounted() { mounted() {
// FetchCategoryMenu().then(res => {
// this.categoryDatas = this.filterData(res)
// })
}, },
methods: { methods: {
// getCategoryDataList(node, resolve) {
// console.log('node', node)
// console.log('node.childNodes', node.childNodes)
// FetchCategoryMenuChildren(node.data.id ? node.data.id : 0).then(res => {
// if (res.length !== 0 && res[0].isType === 3) {
// return resolve([])
// }
// resolve(res)
// })
// },
filterData(data) {
return data.filter(node => {
this.$set(node, 'isChecked', false)
if (node.children && node.children.length > 0) {
node.children = this.filterData(node.children) //
}
return node.isType !== 3 // isType3
})
},
// getCategoryDataList(node, resolve) {
// resolve(this.categoryTreeData)
// },
[CRUD.HOOK.beforeRefresh]() { [CRUD.HOOK.beforeRefresh]() {
if (this.blurryTime) { if (this.blurryTime) {
this.crud.query.startTime = this.blurryTime[0] this.crud.query.startTime = this.blurryTime[0]
@ -211,7 +171,6 @@ export default {
} }
}, },
[CRUD.HOOK.afterRefresh]() { [CRUD.HOOK.afterRefresh]() {
this.$refs.category.setCheckedKeys([])
}, },
// //
[CRUD.HOOK.beforeToAdd](crud, form) { [CRUD.HOOK.beforeToAdd](crud, form) {
@ -225,34 +184,7 @@ export default {
}, },
// //
handleCurrentChange(val) { handleCurrentChange(val) {
if (val) {
const _this = this
//
this.$refs.category.setCheckedKeys([])
// id
this.currentId = val.fondsId
console.log('val', val)
console.log('this.currentId', this.currentId)
// console.log('this.categoryDatas', this.categoryDatas)
this.categoryIds = []
// this.categoryDatas.forEach(function(data) {
// _this.categoryIds.push(data.id)
// })
// console.log(_this.categoryIds)
crudfonds.FetchFondsDetail({ id: this.currentId }).then((res) => {
if (res.categorys) {
res.categorys.forEach(function(data) {
_this.categoryIds.push(data.id)
})
this.$refs.category.setCheckedKeys(_this.categoryIds)
}
console.log(_this.categoryIds)
}).catch(err => {
console.log(err)
})
this.showButton = true
}
console.log(val)
}, },
toDelete(datas) { toDelete(datas) {
this.deleteData = datas this.deleteData = datas
@ -339,68 +271,6 @@ export default {
} else { } else {
return [] return []
} }
},
// categoryChange(categorys) {
// console.log('categorys.id', categorys.id)
// // console.log(this.categoryDatas)
// // const childrenIds = this.getAllChildIds(categorys.id, this.categoryDatas)
// // console.log('childrenIds', childrenIds)
// // console.log(this.$refs.category.getCheckedKeys())
// // this.categoryIds = this.$refs.category.getCheckedKeys()
// FetchCategoryMenuChildren(categorys.id).then(childIds => {
// const i = this.categoryIds.indexOf(categorys.id)
// if (i !== -1) {
// this.categoryIds.splice(i, 1)
// for (let i = 0; i < childIds.length; i++) {
// const index = this.categoryIds.indexOf(childIds[i].id)
// if (index !== -1) {
// this.categoryIds.splice(index, 1)
// }
// }
// } else {
// this.categoryIds.push(categorys.id)
// for (let i = 0; i < childIds.length; i++) {
// const index = this.categoryIds.indexOf(childIds[i].id)
// if (index === -1) {
// this.categoryIds.push(childIds[i].id)
// }
// }
// }
// this.$refs.category.setCheckedKeys(this.categoryIds)
// })
// },
//
saveCategory() {
this.categoryLoading = true
const fonds = { id: this.currentId, categorys: [] }
// key
this.categoryIds.forEach(function(id) {
const categorys = { id: id }
fonds.categorys.push(categorys)
})
console.log(fonds)
crudfonds.FetchFondsCategory(fonds).then(() => {
this.$message({ message: '保存成功', type: 'success', offset: 8 })
this.categoryLoading = false
this.update()
}).catch(err => {
this.categoryLoading = false
console.log(err.response.data.message)
})
},
//
update() {
//
crudfonds.FetchInitFondsList().then(res => {
console.log(res)
for (let i = 0; i < this.crud.data.length; i++) {
if (res.fondsId === this.crud.data[i].fondsId) {
this.crud.data[i] = res
break
}
}
})
} }
} }
} }
@ -417,8 +287,4 @@ export default {
} }
} }
} }
.tree-tab span.role-span.role-tab-active{
border-bottom: none;
}
</style> </style>

1
src/views/system/log/search.vue

@ -37,7 +37,6 @@
</el-button> </el-button>
</template> </template>
</crudOperation> </crudOperation>
<!-- <el-button :loading="crud.downloadLoading" size="mini" icon="el-icon-download" @click="handleDownload">导出</el-button> -->
<!-- 清空 --> <!-- 清空 -->
<el-dialog class="tip-dialog" :visible.sync="delVisible" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body title="提示"> <el-dialog class="tip-dialog" :visible.sync="delVisible" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body title="提示">
<div class="setting-dialog"> <div class="setting-dialog">

11
src/views/system/menu/index.vue

@ -104,8 +104,6 @@
<div class="container-wrap"> <div class="container-wrap">
<span class="right-top-line" /> <span class="right-top-line" />
<span class="left-bottom-line" /> <span class="left-bottom-line" />
<!-- @select="crud.selectChange"
@select-all="crud.selectAllChange" -->
<el-table <el-table
ref="table" ref="table"
v-loading="crud.loading" v-loading="crud.loading"
@ -155,15 +153,6 @@
<div>{{ scope.row.createTime | parseTime }}</div> <div>{{ scope.row.createTime | parseTime }}</div>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column v-if="checkPer(['admin','menu:edit','menu:del'])" label="操作" width="130px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
msg="确定删除吗,如果存在下级节点则一并删除,此操作不能撤销!"
/>
</template>
</el-table-column> -->
</el-table> </el-table>
</div> </div>
</div> </div>

17
src/views/system/notify/index.vue

@ -41,17 +41,9 @@
<el-table-column prop="noticeTitle" :show-overflow-tooltip="true" label="标题" min-width="150" align="center" /> <el-table-column prop="noticeTitle" :show-overflow-tooltip="true" label="标题" min-width="150" align="center" />
<el-table-column prop="noticeContext" :show-overflow-tooltip="true" label="内容" align="center" min-width="200" /> <el-table-column prop="noticeContext" :show-overflow-tooltip="true" label="内容" align="center" min-width="200" />
<el-table-column :show-overflow-tooltip="true" label="发送对象" align="center" min-width="200"> <el-table-column :show-overflow-tooltip="true" label="发送对象" align="center" min-width="200">
<!-- <template slot-scope="scope">
<div class="tag-hidden">
<el-tag v-for="(item,i) in scope.row.noticeUsers" :key="i" style="margin-left:3px; ">{{ item.pushUserName }}</el-tag>
</div>
</template> -->
<template slot-scope="scope"> <template slot-scope="scope">
用户{{ scope.row.noticeUsers && scope.row.noticeUsers !== null ? (scope.row.noticeUsers.includes(',') ? scope.row.noticeUsers.split(',').length : [scope.row.noticeUsers].length) : 0 }} 用户{{ scope.row.noticeUsers && scope.row.noticeUsers !== null ? (scope.row.noticeUsers.includes(',') ? scope.row.noticeUsers.split(',').length : [scope.row.noticeUsers].length) : 0 }}
设备{{ scope.row.noticeDevices && scope.row.noticeDevices !== null ? scope.row.noticeDevices.split(',').length : 0 }} 设备{{ scope.row.noticeDevices && scope.row.noticeDevices !== null ? scope.row.noticeDevices.split(',').length : 0 }}
<!-- <div class="tag-hidden">
<el-tag v-for="(item,i) in scope.row.noticeDevices" :key="i" style="margin-left:3px; color: #fff">{{ item }}</el-tag>
</div> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createBy" label="创建人" align="center" min-width="100" /> <el-table-column prop="createBy" label="创建人" align="center" min-width="100" />
@ -72,15 +64,6 @@
<el-form ref="form" :rules="rules" :model="form" size="small" label-width="100px"> <el-form ref="form" :rules="rules" :model="form" size="small" label-width="100px">
<el-form-item label="消息类型" prop="noticeType" class="down-select"> <el-form-item label="消息类型" prop="noticeType" class="down-select">
<el-input v-model="form.noticeTypeName" disabled /> <el-input v-model="form.noticeTypeName" disabled />
<!-- <el-select v-model="noticeType" placeholder="请选择">
<el-option
v-for="item in msgTypeOptions"
:key="item.name"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
/>
</el-select> -->
</el-form-item> </el-form-item>
<el-form-item label="标题" prop="noticeTitle"> <el-form-item label="标题" prop="noticeTitle">
<el-input v-model="form.noticeTitle" placeholder="请输入" style="width: 580px;" /> <el-input v-model="form.noticeTitle" placeholder="请输入" style="width: 580px;" />

143
src/views/system/role/index.vue

@ -45,8 +45,6 @@
<el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" :data="crud.data" @selection-change="crud.selectionChangeHandler" @current-change="handleCurrentChange"> <el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" :data="crud.data" @selection-change="crud.selectionChangeHandler" @current-change="handleCurrentChange">
<el-table-column type="selection" align="center" width="55" /> <el-table-column type="selection" align="center" width="55" />
<el-table-column prop="name" label="角色名称" /> <el-table-column prop="name" label="角色名称" />
<!-- <el-table-column prop="dataScope" label="数据权限" /> -->
<!-- <el-table-column prop="level" label="角色级别" /> -->
<el-table-column :show-overflow-tooltip="true" prop="description" label="描述信息" /> <el-table-column :show-overflow-tooltip="true" prop="description" label="描述信息" />
<el-table-column prop="users" label="人数" align="center"> <el-table-column prop="users" label="人数" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
@ -58,15 +56,6 @@
<div>{{ scope.row.createTime | parseTime }}</div> <div>{{ scope.row.createTime | parseTime }}</div>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column v-if="checkPer(['admin','roles:edit','roles:del'])" label="操作" width="130px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
v-if="scope.row.level >= level"
:data="scope.row"
:permission="permission"
/>
</template>
</el-table-column> -->
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination v-if="crud.data.totalPages" /> <pagination v-if="crud.data.totalPages" />
@ -78,13 +67,8 @@
<span class="left-bottom-line" /> <span class="left-bottom-line" />
<div slot="header" class="tree-tab"> <div slot="header" class="tree-tab">
<el-tooltip class="item" effect="dark" content="选择指定角色分配菜单" placement="top"> <el-tooltip class="item" effect="dark" content="选择指定角色分配菜单" placement="top">
<!-- <span :class="['role-span', {'role-tab-active': roleTabIndex == 0}]" @click="changeActiveTab(0)">菜单分配</span> -->
<span class="role-span role-tab-active">菜单分配</span> <span class="role-span role-tab-active">菜单分配</span>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip class="item" effect="dark" content="选择指定角色分配全宗范围" placement="top">
<span :class="['role-span', {'role-tab-active': roleTabIndex == 1}]" @click="changeActiveTab(1)">全宗范围</span>
</el-tooltip> -->
<!-- v-permission="['admin','roles:edit']" -->
<el-button <el-button
:disabled="!showButton" :disabled="!showButton"
:loading="treeLoading" :loading="treeLoading"
@ -106,24 +90,6 @@
node-key="id" node-key="id"
@check="menuChange" @check="menuChange"
/> />
<!-- :load="getFondsDatas" -->
<!-- <el-tree
v-show="roleTabIndex == 1"
ref="fonds"
:data="fondsAllData"
:default-checked-keys="fondIds"
:props="defaultFondsProps"
default-expand-all
show-checkbox
node-key="id"
@check="fondsChange"
>
<template slot-scope="{ node }">
<el-tooltip :content="node.label" placement="left" :enterable="false" effect="dark">
<span>{{ node.label }}</span>
</el-tooltip>
</template>
</el-tree> -->
</el-scrollbar> </el-scrollbar>
</div> </div>
</div> </div>
@ -133,7 +99,6 @@
<script> <script>
import crudRoles from '@/api/system/role' import crudRoles from '@/api/system/role'
// import { FetchFondsAll } from '@/api/system/fonds'
import { getMenusTree, getChild } from '@/api/system/menu' import { getMenusTree, getChild } from '@/api/system/menu'
import CRUD, { presenter, header, form, crud } from '@crud/crud' import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation' import rrOperation from '@crud/RR.operation'
@ -162,11 +127,8 @@ export default {
return { return {
defaultProps: { children: 'children', label: 'label', isLeaf: 'leaf' }, defaultProps: { children: 'children', label: 'label', isLeaf: 'leaf' },
defaultFondsProps: { children: 'children', label: 'fondsName' }, defaultFondsProps: { children: 'children', label: 'fondsName' },
// dateScopes: ['', '', ''], level: 3,
currentId: 0, treeLoading: false, showButton: false, currentId: 0, treeLoading: false, showButton: false,
menus: [], menuIds: [], menus: [], menuIds: [],
// fondDatas: [], fondIds: [],
// depts: [], deptDatas: [], // 使
permission: { permission: {
add: ['admin', 'roles:add'], add: ['admin', 'roles:add'],
edit: ['admin', 'roles:edit'], edit: ['admin', 'roles:edit'],
@ -180,7 +142,6 @@ export default {
{ required: true, message: '请输入权限', trigger: 'blur' } { required: true, message: '请输入权限', trigger: 'blur' }
] ]
}, },
// roleTabIndex: 0,
blurryTime: null, blurryTime: null,
fondsAllData: [], fondsAllData: [],
getFondsChecked: [] getFondsChecked: []
@ -194,25 +155,8 @@ export default {
created() { created() {
}, },
mounted() { mounted() {
// FetchFondsAll().then(res => {
// const resArr = []
// resArr.push({ fondsName: '', id: 0, isChecked: false, children: [] })
// if (resArr[0].id === 0) {
// res.forEach(item => {
// resArr[0].children.push({
// fondsName: item.fondsName,
// id: item.id
// })
// })
// }
// this.fondsAllData = resArr
// console.log(this.fondsAllData)
// })
}, },
methods: { methods: {
// changeActiveTab(index) {
// this.roleTabIndex = index
// },
getMenuDatas(node, resolve) { getMenuDatas(node, resolve) {
setTimeout(() => { setTimeout(() => {
getMenusTree(node.data.id ? node.data.id : 0).then(res => { getMenusTree(node.data.id ? node.data.id : 0).then(res => {
@ -220,13 +164,6 @@ export default {
}) })
}, 100) }, 100)
}, },
// getFondsDatas(node, resolve) {
// if (node.level === 0) {
// return resolve([{ fondsName: '', id: 0, isChecked: false }])
// }
// if (node.level > 1) return resolve([])
// resolve(this.fondsAllData)
// },
[CRUD.HOOK.beforeRefresh]() { [CRUD.HOOK.beforeRefresh]() {
if (this.blurryTime) { if (this.blurryTime) {
this.crud.query.startTime = this.blurryTime[0] this.crud.query.startTime = this.blurryTime[0]
@ -235,18 +172,15 @@ export default {
}, },
[CRUD.HOOK.afterRefresh]() { [CRUD.HOOK.afterRefresh]() {
this.$refs.menu.setCheckedKeys([]) this.$refs.menu.setCheckedKeys([])
// this.$refs.fonds.setCheckedKeys([])
}, },
// //
[CRUD.HOOK.beforeToAdd](crud, form) { [CRUD.HOOK.beforeToAdd](crud, form) {
form.menus = null form.menus = null
// form.fondDatas = null
}, },
// //
[CRUD.HOOK.beforeToEdit](crud, form) { [CRUD.HOOK.beforeToEdit](crud, form) {
// //
form.menus = null form.menus = null
// form.fondDatas = null
}, },
// //
[CRUD.HOOK.afterValidateCU](crud) { [CRUD.HOOK.afterValidateCU](crud) {
@ -257,24 +191,13 @@ export default {
const _this = this const _this = this
// //
this.$refs.menu.setCheckedKeys([]) this.$refs.menu.setCheckedKeys([])
// this.$refs.fonds.setCheckedKeys([])
// id // id
this.currentId = val.id this.currentId = val.id
// key // key
this.menuIds = [] this.menuIds = []
// this.fondIds = []
val.menus.forEach(function(data) { val.menus.forEach(function(data) {
_this.menuIds.push(data.id) _this.menuIds.push(data.id)
}) })
// if (val.fonds) {
// // if (this.fondsAllData.length === val.fonds.length) {
// // _this.fondIds.push(0)
// // }
// val.fonds.forEach(function(data) {
// _this.fondIds.push(data.id)
// })
// }
this.showButton = true this.showButton = true
} }
}, },
@ -319,38 +242,6 @@ export default {
this.$refs.menu.setCheckedKeys(this.menuIds) this.$refs.menu.setCheckedKeys(this.menuIds)
}) })
}, },
fondsChange(fonds) {
// console.log(this.$refs.fonds.getCheckedKeys())
// this.fondIds = this.$refs.fonds.getCheckedKeys()
// if (fonds.id === 0) {
// fonds.isChecked = !fonds.isChecked
// this.fondIds.push(fonds.id)
// this.fondsAllData.forEach(childIds => {
// if (fonds.isChecked) {
// const index = this.fondIds.indexOf(childIds.id)
// if (index !== -1) {
// this.fondIds.splice(index, 1)
// }
// this.fondIds.push(childIds.id)
// } else {
// this.fondIds = []
// }
// })
// } else {
// if (this.fondIds.indexOf(fonds.id) !== -1) {
// const index = this.fondIds.indexOf(fonds.id)
// if (index !== -1) {
// this.fondIds.splice(index, 1)
// }
// } else {
// const index = this.fondIds.indexOf(fonds.id)
// if (index === -1) {
// this.fondIds.push(fonds.id)
// }
// }
// }
// this.$refs.fonds.setCheckedKeys(this.fondIds)
},
// //
saveMenu() { saveMenu() {
this.treeLoading = true this.treeLoading = true
@ -368,40 +259,6 @@ export default {
this.treeLoading = false this.treeLoading = false
console.log(err.response.data.message) console.log(err.response.data.message)
}) })
// if (this.roleTabIndex === 0) {
// const role = { id: this.currentId, menus: [] }
// // key
// this.menuIds.forEach(function(id) {
// const menu = { id: id }
// role.menus.push(menu)
// })
// crudRoles.editMenu(role).then(() => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.treeLoading = false
// this.update()
// }).catch(err => {
// this.treeLoading = false
// console.log(err.response.data.message)
// })
// } else {
// const params = { id: this.currentId, fonds: [] }
// // key
// this.fondIds.forEach(function(id, index) {
// if (id !== 0) {
// const fondsArray = { id: id }
// params.fonds.push(fondsArray)
// }
// })
// crudRoles.editFonds(params).then(() => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.treeLoading = false
// this.update()
// }).catch(err => {
// console.log(err.response.data.message)
// this.treeLoading = false
// })
// }
}, },
// //
update() { update() {

234
src/views/system/user/cart.vue

@ -1,234 +0,0 @@
<template>
<div class="app-container tab-container" style="height: calc(100vh - 140px);">
<div class="head-container" style="display: flex; justify-content: space-between; align-items: center; padding-bottom: 20px;">
<div class="head-search" style="margin-bottom: 0;">
<el-input
v-model="keyWord"
size="small"
clearable
placeholder="输入关键字可模糊检索"
style="width: 245px;"
class="filter-item"
@clear="crud.toQuery"
@keyup.enter.native="crud.toQuery"
/>
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button>
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button>
</div>
<crudOperation>
<template v-slot:right>
<el-button size="mini" :disabled="crud.selections.length === 0" @click="handleLend(crud.selections)">
<i class="iconfont icon-shengchengpandiandan" />
利用
</el-button>
<el-button size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
</crudOperation>
</div>
<el-table
ref="table"
v-loading="crud.loading"
class="archives-table"
:data="crud.data"
row-key="id"
style="width: 100%;"
height="calc(100vh - 266px)"
@row-click="clickRowHandler"
@cell-dblclick="tableDoubleClick"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" :reserve-selection="true" width="55" align="center" />
<el-table-column prop="maintitle" label="题名" />
<el-table-column prop="archiveNo" label="档号" min-width="200" />
<el-table-column prop="categoryName" label="门类" align="center" />
<el-table-column prop="archivesClassName" label="分类" align="center" />
<el-table-column prop="categoryLevel" label="层级" align="center">
<template slot-scope="scope">
<div>{{ scope.row.categoryLevel === 3 ? '文件' : '其他' }}</div>
</template>
</el-table-column>
<el-table-column prop="processStatus" label="审批锁定" align="center">
<template slot-scope="scope">
<span :class="['row-state', 'row-warehousing', scope.row.processStatus !== 1 ? 'state-active' : '' ]">{{ processedStatusText(scope.row.processStatus) }}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="加入时间" width="200">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<pagination v-if="crud.data.length !== 0" />
</div>
</template>
<script>
import CRUD, { presenter, crud } from '@crud/crud'
import pagination from '@crud/Pagination'
import crudOperation from '@crud/CRUD.operation'
// import { FetchDelBorrowCar } from '@/api/archiveUtilize/cart'
import { mapGetters } from 'vuex'
// import store from '@/store'
export default {
name: 'Cart',
components: { pagination, crudOperation },
mixins: [presenter(), crud()],
cruds() {
return CRUD({
url: 'api/archivesUtilize/initborrowCar',
title: '借阅车',
crudMethod: { },
optShow: {
add: false,
edit: false,
del: false,
download: false,
reset: false,
group: false
}
})
},
data() {
return {
isTitleType: 3,
keyWord: null,
categoryId: null,
arcId: ''
}
},
computed: {
...mapGetters([
'user',
'baseApi'
]),
processedStatusText() {
return function(status) {
let text = ''
if (status === 1) {
text = '空闲'
} else if (status === 2) {
text = '退回'
} else if (status === 3) {
text = '开放'
} else if (status === 4) {
text = '销毁'
} else if (status === 5) {
text = '利用'
} else if (status === 6) {
text = '内部移交'
} else if (status === 7) {
text = '外部移交'
}
return text
}
}
},
watch: {
},
created() {
},
methods: {
resetQuery() {
this.keyWord = null
this.crud.toQuery()
},
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.search = this.keyWord
},
toDelete(data) {
console.log(data)
this.$confirm('此操作将删除所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
// const ids = data.map(item => {
// return item.archivesId
// })
// const params = {
// 'ids': ids
// }
// FetchDelBorrowCar(params).then((res) => {
// if (res) {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.refresh()
// store.dispatch('initborrowCar').then(() => {})
// } else {
// this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.ERROR)
// }
// this.$refs.table.clearSelection()
// }).catch(err => {
// console.log(err)
// })
}).catch(() => {
})
},
handleLend(data) {
console.log('data', data)
this.$refs.lendFormRef.lendFormVisible = true
this.$nextTick(() => {
this.$refs.lendFormRef.detailArcData = []
data.forEach(item => {
item.checkedId = [1]
item.childMenu = [{
value: 1,
label: '电子查看'
},
{
value: 2,
label: '下载'
},
{
value: 3,
label: '打印'
},
{
value: 4,
label: '实体借阅'
}]
})
this.$refs.lendFormRef.detailArcData = data
})
},
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row)
},
tableDoubleClick(row) {
this.categoryId = row.categoryPid
this.arcId = row.archivesId
this.$nextTick(() => {
if (row.categoryLevel === 2) {
this.$refs.archivesInfo.isHasFile = false
this.$refs.archivesInfo.detailTitle = '案卷详情'
this.$refs.archivesInfo.getDetial(2, row.archivesId)
} else {
this.$refs.archivesInfo.isHasFile = true
this.$refs.archivesInfo.detailTitle = '文件详情'
this.$refs.archivesInfo.getDetial(3, row.archivesId)
}
// this.$refs.archivesInfo.isHasFile = true
// this.$refs.archivesInfo.detailTitle = ''
// this.$refs.archivesInfo.getDetial(3, row.archivesId)
this.$refs.archivesInfo.isFourTest = true
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
})
},
closeDialog() {
this.keyWord = null
this.crud.toQuery()
this.$refs.table.clearSelection()
}
}
}
</script>
<style lang="scss" scoped>
.el-pagination{
margin: 10px 0 !important;
}
</style>

13
src/views/system/user/center.vue

@ -23,7 +23,7 @@
<li><p><i class="iconfont icon-yonghuming" style="font-size: 13px;" />用户名</p><div class="user-right">{{ user.nickName }}</div></li> <li><p><i class="iconfont icon-yonghuming" style="font-size: 13px;" />用户名</p><div class="user-right">{{ user.nickName }}</div></li>
<li><p><i class="iconfont icon-xingbie" />性别</p><div class="user-right">{{ user.gender ? user.gender : '-' }}</div></li> <li><p><i class="iconfont icon-xingbie" />性别</p><div class="user-right">{{ user.gender ? user.gender : '-' }}</div></li>
<li><p><i class="iconfont icon-yonghujiaose" style="font-size: 12px;" />用户角色</p><div class="user-right"><span v-for="item in user.roles" :key="item.id">{{ item.name }}</span></div></li> <li><p><i class="iconfont icon-yonghujiaose" style="font-size: 12px;" />用户角色</p><div class="user-right"><span v-for="item in user.roles" :key="item.id">{{ item.name }}</span></div></li>
<li><p><i class="iconfont icon-suoshuquanzong" />所属全宗</p><div class="user-right">{{ user.fonds ? user.fonds.fondsName : '/' }}</div></li>
<li><p><i class="iconfont icon-suoshuquanzong" />所属机构</p><div class="user-right">{{ user.fonds ? user.fonds.fondsName : '/' }}</div></li>
<li><p><i class="iconfont icon-suoshubumen" />所属部门</p><div class="user-right">{{ user.dept ? user.dept.deptsName : '/' }}</div></li> <li><p><i class="iconfont icon-suoshubumen" />所属部门</p><div class="user-right">{{ user.dept ? user.dept.deptsName : '/' }}</div></li>
<li><p><i class="iconfont icon-shoujihaoma" />手机号码</p><div class="user-right">{{ user.email ? user.phone : '-' }}</div></li> <li><p><i class="iconfont icon-shoujihaoma" />手机号码</p><div class="user-right">{{ user.email ? user.phone : '-' }}</div></li>
<li><p><i class="iconfont icon-yonghuyouxiang" style="font-size: 12px;" />用户邮箱</p><div class="user-right">{{ user.email ? user.email : '-' }}</div></li> <li><p><i class="iconfont icon-yonghuyouxiang" style="font-size: 12px;" />用户邮箱</p><div class="user-right">{{ user.email ? user.email : '-' }}</div></li>
@ -91,7 +91,6 @@ import updateEmail from './center/updateEmail'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import store from '@/store' import store from '@/store'
import { isvalidPhone } from '@/utils/validate' import { isvalidPhone } from '@/utils/validate'
// import crud from '@/mixins/crud'
import { editUser } from '@/api/system/user' import { editUser } from '@/api/system/user'
import Avatar from '@/assets/images/avatar.png' import Avatar from '@/assets/images/avatar.png'
import messageCenter from './messageCenter/index' import messageCenter from './messageCenter/index'
@ -99,7 +98,6 @@ import OperateLog from '@/views/system/log/operateLog/index'
export default { export default {
name: 'Center', name: 'Center',
components: { updatePass, updateEmail, myUpload, messageCenter, OperateLog }, components: { updatePass, updateEmail, myUpload, messageCenter, OperateLog },
// mixins: [crud],
data() { data() {
// //
const validPhone = (rule, value, callback) => { const validPhone = (rule, value, callback) => {
@ -323,11 +321,7 @@ export default {
} }
} }
} }
// [data-theme=dark] .tab-item {
// height: calc(100vh - 232px);
// }
[data-theme=light] .tab-item { [data-theme=light] .tab-item {
// height: calc(100vh - 193px);
::v-deep .el-form.tab-form{ ::v-deep .el-form.tab-form{
margin-top: 40px; margin-top: 40px;
} }
@ -379,15 +373,10 @@ select:-webkit-autofill {
input { input {
background-color: transparent; background-color: transparent;
} }
// .el-pagination{
// margin: 20px 0 10px 0 !important
// }
::v-deep .vue-image-crop-upload .vicp-wrap .vicp-operate a{ ::v-deep .vue-image-crop-upload .vicp-wrap .vicp-operate a{
border: 1px solid #e6e8ed; border: 1px solid #e6e8ed;
background-color: transparent; background-color: transparent;
color: #545b65; color: #545b65;
border-radius: 3px; border-radius: 3px;
// color: #fff;
// background-color: #0348f3;
} }
</style> </style>

102
src/views/system/user/index.vue

@ -7,15 +7,6 @@
<el-input v-model="filterText" clearable size="small" placeholder="输入部门名称搜索" prefix-icon="el-icon-search" class="filter-item" /> <el-input v-model="filterText" clearable size="small" placeholder="输入部门名称搜索" prefix-icon="el-icon-search" class="filter-item" />
</div> </div>
<el-tree ref="tree" v-loading="crud.loading" :data="fondsDatas" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="defaultExpandedKeys" node-key="id" highlight-current :filter-node-method="filterNode" @node-click="handleNodeClick"> <el-tree ref="tree" v-loading="crud.loading" :data="fondsDatas" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="defaultExpandedKeys" node-key="id" highlight-current :filter-node-method="filterNode" @node-click="handleNodeClick">
<!-- <template slot-scope="{ node, data }">
<div :class="{'top-level': data.id === 0}">
<span>
{{ data.fondsName }}
<span>{{ data.deptsName }}</span>
</span>
</div>
</template> -->
<template <template
slot-scope="{node,data}" slot-scope="{node,data}"
class="custom-tree-node" class="custom-tree-node"
@ -44,7 +35,6 @@
<i slot="prefix" class="iconfont icon-zhuangtai" /> <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-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select> </el-select>
<!-- <rrOperation /> -->
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button> <el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button>
<el-button v-if="crud.optShow.reset" class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button> <el-button v-if="crud.optShow.reset" class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button>
</div> </div>
@ -84,7 +74,6 @@
<el-input v-model="form.email" /> <el-input v-model="form.email" />
</el-form-item> </el-form-item>
<el-form-item label="所属机构" prop="fonds.id"> <el-form-item label="所属机构" prop="fonds.id">
<!-- <treeselect v-model="form.fondsId" :options="fondsOptions" placeholder="选择全宗" :normalizer="fondsNormalizer" @input="changeFonds" /> -->
<el-select ref="myFondsSelect" v-model="form.fonds.id" placeholder="请选择" style="width: 225px;" @click.native="lastValue = form.fonds.id" @change="changeFondsValue($event)"> <el-select ref="myFondsSelect" v-model="form.fonds.id" placeholder="请选择" style="width: 225px;" @click.native="lastValue = form.fonds.id" @change="changeFondsValue($event)">
<el-option <el-option
v-for="(item,index) in fondsOptions" v-for="(item,index) in fondsOptions"
@ -95,7 +84,6 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="所属部门" prop="dept.id"> <el-form-item label="所属部门" prop="dept.id">
<!-- <treeselect v-model="form.deptsId" :options="depts" :load-options="loadDepts" placeholder="选择部门" /> -->
<treeselect <treeselect
v-model="form.dept.id" v-model="form.dept.id"
:options="depts" :options="depts"
@ -114,9 +102,6 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="enabled"> <el-form-item label="状态" prop="enabled">
<!-- <el-radio-group v-model="form.enabled" :disabled="form.id === user.id">
<el-radio v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key">{{ item.display_name }}</el-radio>
</el-radio-group> -->
<el-radio-group v-model="form.enabled" :disabled="form.id === user.id"> <el-radio-group v-model="form.enabled" :disabled="form.id === user.id">
<el-radio :label="1">激活</el-radio> <el-radio :label="1">激活</el-radio>
<el-radio :label="0">禁用</el-radio> <el-radio :label="0">禁用</el-radio>
@ -124,15 +109,9 @@
</el-form-item> </el-form-item>
<el-form-item style="width: 100%;" label="角色" prop="roles" class="is-required selecct-dropdown"> <el-form-item style="width: 100%;" label="角色" prop="roles" class="is-required selecct-dropdown">
<el-select v-model="roleDatas" style="width: 584px" multiple placeholder="请选择" :popper-append-to-body="false" @remove-tag="deleteTag" @change="changeRole"> <el-select v-model="roleDatas" style="width: 584px" multiple placeholder="请选择" :popper-append-to-body="false" @remove-tag="deleteTag" @change="changeRole">
<!-- :disabled="level !== 1 && item.level <= level" -->
<el-option v-for="item in roles" :key="item.name" :label="item.name" :value="item.id" /> <el-option v-for="item in roles" :key="item.name" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item style="margin-bottom: 0;" label="岗位" prop="posts" class="is-required">
<el-select ref="paramsSelect" v-model="postDatas" style="width: 584px" multiple placeholder="请选择" @remove-tag="deleteTag" @change="changePost">
<el-option v-for="item in posts" :key="item.postName" :label="item.postName" :value="item.id" />
</el-select>
</el-form-item> -->
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button> <el-button type="text" @click="crud.cancelCU">取消</el-button>
@ -159,9 +138,7 @@
<el-table-column prop="username" label="账号" /> <el-table-column prop="username" label="账号" />
<el-table-column prop="nickName" label="用户名" /> <el-table-column prop="nickName" label="用户名" />
<el-table-column prop="gender" label="性别" width="60" align="center" /> <el-table-column prop="gender" label="性别" width="60" align="center" />
<!-- <el-table-column :show-overflow-tooltip="true" prop="phone" label="电话" />
<el-table-column :show-overflow-tooltip="true" prop="email" label="邮箱" /> -->
<el-table-column prop="fondsName" label="全宗" />
<el-table-column prop="fondsName" label="机构" />
<el-table-column prop="deptsName" label="部门" /> <el-table-column prop="deptsName" label="部门" />
<el-table-column prop="job" label="岗位" /> <el-table-column prop="job" label="岗位" />
<el-table-column prop="roleIds" label="角色" /> <el-table-column prop="roleIds" label="角色" />
@ -188,15 +165,11 @@
<script> <script>
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import crudUser, { resetpassword } from '@/api/system/user' import crudUser, { resetpassword } from '@/api/system/user'
// import { isvalidPhone } from '@/utils/validate'
import { getDepts, FetchSonDepts } from '@/api/system/dept' import { getDepts, FetchSonDepts } from '@/api/system/dept'
import { FetchFondsAll } from '@/api/system/fonds' import { FetchFondsAll } from '@/api/system/fonds'
import { getAll } from '@/api/system/role' import { getAll } from '@/api/system/role'
// import { getAllJob } from '@/api/system/job'
import CRUD, { presenter, header, form, crud } from '@crud/crud' import CRUD, { presenter, header, form, crud } from '@crud/crud'
// import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation' import crudOperation from '@crud/CRUD.operation'
// import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination' import pagination from '@crud/Pagination'
import Treeselect from '@riophae/vue-treeselect' import Treeselect from '@riophae/vue-treeselect'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
@ -206,8 +179,6 @@ import Vue from 'vue'
import { exportFile } from '@/utils/index' import { exportFile } from '@/utils/index'
import qs from 'qs' import qs from 'qs'
let userRoles = [] let userRoles = []
// const userPosts = []
// posts: [],
const defaultForm = { id: null, username: null, nickName: null, gender: '男', email: null, enabled: 1, fonds: { id: null }, roles: [], dept: { id: null }, phone: null, isAdmin: false } const defaultForm = { id: null, username: null, nickName: null, gender: '男', email: null, enabled: 1, fonds: { id: null }, roles: [], dept: { id: null }, phone: null, isAdmin: false }
export default { export default {
name: 'User', name: 'User',
@ -226,16 +197,6 @@ export default {
// //
dicts: ['user_status'], dicts: ['user_status'],
data() { data() {
//
// const validPhone = (rule, value, callback) => {
// if (!value) {
// callback(new Error(''))
// } else if (!isvalidPhone(value)) {
// callback(new Error('11'))
// } else {
// callback()
// }
// }
const validateRole = (rule, value, callback) => { const validateRole = (rule, value, callback) => {
if (this.roleDatas.length > 0) { if (this.roleDatas.length > 0) {
callback() callback()
@ -243,13 +204,6 @@ export default {
callback(new Error('请选择角色')) callback(new Error('请选择角色'))
} }
} }
// const validatePost = (rule, value, callback) => {
// if (this.postDatas.length > 0) {
// callback()
// } else {
// callback(new Error(''))
// }
// }
return { return {
headers: { headers: {
Authorization: getToken() Authorization: getToken()
@ -257,7 +211,6 @@ export default {
blurryTime: null, blurryTime: null,
btnLoading: false, btnLoading: false,
resetVisible: false, resetVisible: false,
// posts: [],postDatas: [],
deptName: '', depts: [], deptDatas: [], level: 3, roles: [], deptName: '', depts: [], deptDatas: [], level: 3, roles: [],
roleDatas: [], // 使 roleDatas: [], // 使
fondsDatas: [], fondsDatas: [],
@ -333,7 +286,6 @@ export default {
mounted: function() { mounted: function() {
this.getFondsDatas() this.getFondsDatas()
this.getRoles() this.getRoles()
// this.getPosts()
}, },
methods: { methods: {
getAutoNameUnknown(name) { getAutoNameUnknown(name) {
@ -363,7 +315,6 @@ export default {
// //
[CRUD.HOOK.afterToCU](crud, form) { [CRUD.HOOK.afterToCU](crud, form) {
this.getRoles() this.getRoles()
// this.getPosts()
console.log('this.leftFondsId', this.leftFondsId) console.log('this.leftFondsId', this.leftFondsId)
if (this.leftFondsId) { if (this.leftFondsId) {
@ -374,7 +325,6 @@ export default {
}, },
// //
[CRUD.HOOK.beforeToAdd]() { [CRUD.HOOK.beforeToAdd]() {
// this.postDatas = []
this.roleDatas = [] this.roleDatas = []
}, },
// //
@ -382,7 +332,6 @@ export default {
this.lastValue = '' this.lastValue = ''
this.levelNumber = 0 this.levelNumber = 0
form.roles = [] form.roles = []
// form.posts = []
this.leftDeptsId = crud.form.deptId this.leftDeptsId = crud.form.deptId
if (this.leftFondsId) { if (this.leftFondsId) {
form.fonds.id = this.leftFondsId form.fonds.id = this.leftFondsId
@ -406,27 +355,8 @@ export default {
} }
}) })
} }
// if (form.postIds.includes(',')) {
// const arr = form.postIds.split(',')
// this.posts.map((post) => {
// arr.forEach(item => {
// if (item === String(post.postName)) {
// return form.posts.push(post)
// }
// })
// })
// } else {
// this.posts.map((post) => {
// if (form.postIds === String(post.postName)) {
// return form.posts.push(post)
// }
// })
// }
// this.postDatas = []
this.roleDatas = [] this.roleDatas = []
userRoles = [] userRoles = []
// userPosts = []
const _this = this const _this = this
form.roles.forEach(function(role, index) { form.roles.forEach(function(role, index) {
_this.roleDatas.push(role.id) _this.roleDatas.push(role.id)
@ -434,18 +364,9 @@ export default {
userRoles.push(rol) userRoles.push(rol)
}) })
crud.form.id = crud.form.userId crud.form.id = crud.form.userId
// form.posts.forEach(function(job, index) {
// _this.postDatas.push(job.id)
// const data = { id: job.id }
// userPosts.push(data)
// })
}, },
// //
[CRUD.HOOK.afterValidateCU](crud) { [CRUD.HOOK.afterValidateCU](crud) {
// else if (this.postDatas.length === 0) {
// this.$message({ message: '', type: 'warning', offset: 8 })
// return false
// }
if (!crud.form.fonds.id) { if (!crud.form.fonds.id) {
this.$message({ message: '全宗不能为空', type: 'warning', offset: 8 }) this.$message({ message: '全宗不能为空', type: 'warning', offset: 8 })
return false return false
@ -456,17 +377,10 @@ export default {
this.$message({ message: '角色不能为空', type: 'warning', offset: 8 }) this.$message({ message: '角色不能为空', type: 'warning', offset: 8 })
return false return false
} }
// if (crud.form.userId) {
// crud.form.id = crud.form.userId
// } else {
// crud.form.id = null
// }
crud.form.roles = userRoles crud.form.roles = userRoles
// crud.form.posts = userPosts
delete crud.form.deptsId delete crud.form.deptsId
delete crud.form.fondsId delete crud.form.fondsId
delete crud.form.deptId delete crud.form.deptId
// delete crud.form.postIds
delete crud.form.roleIds delete crud.form.roleIds
delete crud.form.deptsName delete crud.form.deptsName
delete crud.form.job delete crud.form.job
@ -509,13 +423,6 @@ export default {
userRoles.push(role) userRoles.push(role)
}) })
}, },
// changePost(val) {
// userPosts = []
// val.forEach(function(data, index) {
// const post = { id: data }
// userPosts.push(post)
// })
// },
deleteTag(value) { deleteTag(value) {
userRoles.forEach(function(data, index) { userRoles.forEach(function(data, index) {
if (data.id === value) { if (data.id === value) {
@ -529,17 +436,10 @@ export default {
this.roles = res this.roles = res
}).catch(() => { }) }).catch(() => { })
}, },
//
// getPosts() {
// getAllJob().then(res => {
// this.posts = res.content
// }).catch(() => { })
// },
// //
handleNodeClick(data) { handleNodeClick(data) {
console.log(data) console.log(data)
const selectedKey = this.$refs.tree.getCurrentNode() const selectedKey = this.$refs.tree.getCurrentNode()
// const selectedParentVal = this.$refs.tree.getNode(selectedKey).parent.data.id
if (data.pid === 0) { if (data.pid === 0) {
this.query.deptsId = null this.query.deptsId = null
this.query.deptsName = null this.query.deptsName = null

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

@ -0,0 +1,372 @@
<template>
<div class="app-container row-container" style="height: calc(100vh - 140px);">
<!--工具栏-->
<div class="head-container">
<div class="head-search">
<el-input
v-model="keyWord"
size="small"
clearable
placeholder="请输入输入搜索关键词"
style="width: 320px;"
class="input-prepend filter-item"
@clear="crud.toQuery"
@keyup.enter.native="crud.toQuery"
>
<el-select slot="prepend" v-model="optionVal" style="width: 140px" @change="searchChange">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-input>
<el-select v-model="query.userStatus" 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" />
</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">
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="90px">
<div style="width: 696px;">
<el-form-item label="题名" prop="title">
<el-input v-model="form.title" placeholder="请输入" />
</el-form-item>
<el-form-item label="著者" prop="author">
<el-input v-model="form.author" placeholder="请输入" />
</el-form-item>
<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>
<div>
<el-form-item label="出版社" prop="publish">
<el-input v-model="form.publish" placeholder="请输入" style="width: 586px;" />
</el-form-item>
</div>
<div>
<el-form-item class="book-cover-upload" label="图书封面" prop="cover">
<el-input v-model="form.cover" placeholder="请上传图书封面" :readonly="true" />
<!-- <p :class="['input-style', form.cover === null ? 'error-box' :'']">{{ form.cover }}</p> -->
<!-- <span v-if="form.cover === null" class="error-tip">请上传图书封面</span> -->
<div class="upload-btn">
<input id="upFile" type="file" name="upFile" @change="changeFile($event)">
<el-button size="small" type="primary"><i class="iconfont icon-shangchuan" />上传</el-button>
</div>
</el-form-item>
</div>
</div>
<div v-if="imageUrl" class="preview-cover">
<p>封面预览</p>
<img :src="imageUrl" alt="">
</div>
</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>
<!--表格渲染-->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-table
ref="table"
v-loading="crud.loading"
height="645"
:data="crud.data"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column prop="icon" label="封面" align="center">
<!-- slot-scope="scope" -->
<template>
<!-- <svg-icon :icon-class="scope.row.icon ? scope.row.icon : ''" /> -->
<img src="~@/assets/images/cover-bg.png" 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="ISBN" prop="isbn" />
<el-table-column label="索书号" prop="code" />
<el-table-column label="馆藏量" prop="num" />
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
</div>
</template>
<script>
import crudMenu from '@/api/system/menu'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import { getCurrentTime } from '@/utils/index'
const defaultForm = { id: null, title: null, author: null, isbn: null, code: null, publish: null, cover: null }
export default {
name: 'Book',
components: { crudOperation, rrOperation, pagination },
cruds() {
return CRUD({ title: '图书', url: 'api/menus', crudMethod: { ...crudMenu },
optShow: {
add: true,
edit: true,
del: true,
download: false,
group: false,
reset: true
}
})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
keyWord: null,
optionVal: 'username',
options: [
{ value: 'username', label: '题名/著者/出版社' },
{ value: 'isbn', label: 'ISBN' },
{ value: 'code', label: '索书号' }
],
permission: {
add: ['admin', 'book:add'],
edit: ['admin', 'book:edit'],
del: ['admin', 'book:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '全部' },
{ key: '0', display_name: '馆藏数量不为0' }
],
bookCover: null,
file: null, // change
fileNames: '', // - name
formatType: '', // - type
postfix: '', // -
fileSize: '', // -
filePath: '', // - path
px: '', // -
nowDate: '', //
fileJsonString: null,
imageUrl: null,
rules: {
title: [
{ required: true, message: '题名不可为空', trigger: 'blur' }
],
author: [
{ required: true, message: '著者不可为空', trigger: 'blur' }
],
isbn: [
{ required: true, message: 'ISBN不可为空', trigger: 'blur' }
],
code: [
{ required: true, message: '索书号不可为空', trigger: 'blur' }
],
publish: [
{ required: true, message: '出版社不可为空', trigger: 'blur' }
]
}
}
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
},
//
[CRUD.HOOK.afterToCU](crud, form) {
},
//
[CRUD.HOOK.beforeToAdd]() {
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
return false
},
searchChange(val) {
if (val) {
this.keyWord = ''
this.options.forEach(option => {
if (option.value !== val) {
this.crud.query[option.value] = null
}
})
}
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
//
async changeFile(e) {
const file = e.target.files[0]
if (file && file.type.startsWith('image/')) {
this.file = e.target.files[0]
this.fileSize = this.file.size
// this.formatType = this.file.type.substring(0, this.file.type.indexOf('/'))
this.fileNames = this.file.name
const fileBase64 = await this.getBase64(this.file)
const res = await this.getImgPx(fileBase64)
this.imageUrl = fileBase64
this.px = res.width + 'px*' + res.height + 'px'
//
// reDocumentUpload(this.baseApi + '/api/re-document/uploadFile', this.file, this.selectedDocument.id).then(res => {
// if (res.data.code === 200) {
// this.filePath = res.data.data
// this.uploadSave()
// }
// })
this.uploadSave()
} else {
this.$message({ message: '只可上传图片', type: 'error', offset: 8 })
this.imageUrl = null
}
},
// -
uploadSave() {
this.nowDate = getCurrentTime()
const json = {
'file_name': this.fileNames,
'file_size': this.fileSize,
'file_type': this.postfix,
'file_path': this.filePath,
'sequence': null,
'file_dpi': this.px,
'file_thumbnail': '',
'create_time': this.nowDate,
'id': null,
'is_quote': null,
'last_modified': this.file.lastModified
}
const arrayUpload = []
arrayUpload.push(json)
this.form.cover = this.fileNames
this.fileJsonString = JSON.stringify(arrayUpload)
console.log(this.fileJsonString)
},
// base64
getBase64(file) {
const reader = new FileReader()
reader.readAsDataURL(file)
return new Promise((resolve) => {
reader.onload = () => {
resolve(reader.result)
}
})
},
//
getImgPx(img) {
const image = new Image()
image.src = img
return new Promise((resolve) => {
image.onload = () => {
const width = image.width
const height = image.height
resolve({ width, height })
}
})
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .input-prepend .el-input__inner{
padding-left: 150px;
}
.auto-dialog{
::v-deep .el-dialog{
width: initial;
}
}
::v-deep .book-cover-upload {
display: flex;
justify-content: flex-start;
.el-form-item__content{
position: relative;
width: 580px !important;
display: flex;
justify-content: space-between;
.input-style{
width: 490px;
height: 34px;
line-height: 34px;
padding: 0 20px;
border: 1px solid #e6e8ed;
border-radius: 3px;
&.error-box{
border-color: #ed4a41;
}
}
.error-tip{
position: absolute;
left: 0;
bottom: -26px;
font-size: 12px;
color: #ff4949;
}
}
}
.upload-btn{
position: relative;
width: 62px;
margin-right: 0 !important;
margin-left: 10px;
overflow: initial !important;
#upFile{
position: absolute;
left: 0;
top: 0;
width: 84px;
height: 34px;
}
.el-button{
margin-top: -2px;
font-weight: bold;
border-color: #0348f3;
color: #0348f3;
}
}
.el-form{
display: flex;
justify-content: flex-start;
}
.preview-cover{
flex: 1;
padding-left: 10px;
p{
font-weight: bold;
color: #0c0e1e;
margin: -14px 0 10px 0;
}
img{
display: block;
height: 180px;
}
}
</style>

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

@ -0,0 +1,506 @@
<template>
<div class="app-container row-container" style="height: calc(100vh - 140px);">
<!--工具栏-->
<div class="head-container">
<div class="head-search">
<el-input
v-model="keyWord"
size="small"
clearable
placeholder="请输入输入搜索关键词"
style="width: 320px;"
class="input-prepend filter-item"
@clear="crud.toQuery"
@keyup.enter.native="crud.toQuery"
>
<el-select slot="prepend" v-model="optionVal" style="width: 140px" @change="searchChange">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-input>
<el-select v-model="query.userStatus" 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">
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
<template v-slot:right>
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)">
<i class="iconfont icon-daochu" />
导出
</el-button>
<el-button type="primary" class="warehousing-btn iconfont" :disabled="crud.selections.length === 0" @click="printArchivesCode(crud.selections)"><svg-icon icon-class="print" class="svg-arc-style" />批量打印条形码</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">
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="90px">
<div style="width: 696px;">
<el-form-item class="brcode-input" label="ISBN" prop="isbn">
<el-input v-model="form.isbn" placeholder="请输入" />
<div class="search-box">
<i class="iconfont icon-sousuo" @click="toIsbnSearch" />
</div>
</el-form-item>
<el-form-item label="题名" prop="title">
<el-input v-model="form.title" readonly />
</el-form-item>
<el-form-item class="brcode-input" label="条码" prop="brcode">
<el-input v-model="form.brcode" placeholder="请输入" />
<div :class="isAutoBrcode?'auto-box auto-loading':'auto-box'">
<i class="iconfont icon-zidonggengxin" @click="autoBrcode" />
</div>
</el-form-item>
<el-form-item label="馆藏地" prop="library">
<el-select v-model="form.library" placeholder="请选择" style="width: 225px;" @change="changeLibrarysValue($event)">
<el-option
v-for="(item,index) in librarysOptions"
:key="index"
:label="item.label"
:value="item.id"
/>
</el-select>
</el-form-item>
<div>
<el-form-item label="所在架位" prop="bookshelf">
<treeselect
v-model="form.bookshelf"
:options="bookshelfNum"
:load-options="loadDepts"
placeholder="选择层位架"
:normalizer="normalizer"
:default-expand-level="levelNumber"
style="width: 586px;"
>
<div slot="value-label" slot-scope="{ node }">{{ getAutoNameUnknown(node.label) }}</div>
</treeselect>
</el-form-item>
</div>
</div>
<div v-if="imageUrl" class="preview-cover">
<p>封面预览</p>
<img :src="imageUrl" alt="">
</div>
</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>
<!--表格渲染-->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-table
ref="table"
v-loading="crud.loading"
height="645"
:data="crud.data"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column label="条码" prop="brcode" />
<el-table-column label="[ISBN]题名" prop="isbn">
<template slot-scope="scope">
<p>[{{ scope.row.isbn }}]{{ scope.row.title }}</p>
</template>
</el-table-column>
<el-table-column prop="floor" label="所在楼层" />
<el-table-column prop="area" label="所在区域" />
<el-table-column prop="bookshelf" label="所在架位" />
<el-table-column prop="library" label="所属馆藏" />
<el-table-column prop="createTime" label="创建日期" :show-overflow-tooltip="true">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
<div ref="printDiv" style="display: none;">
<div v-for="item in selectedRows" :key="item.barcode" style="page-break-after:always; margin-top: 8px; margin-left: 20px;">
<div>
<img :src="item.barcode | creatBarCode(item.barcode, item.title)" style="border: 1px solid #000; width: 160px;">
</div>
</div>
</div>
<iframe ref="printIframe" frameborder="0" scrolling="no" style="margin: 0px;padding: 0px;width: 0px;height: 0px;" />
</div>
</template>
<script>
import crudMenu from '@/api/system/menu'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
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'
import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import { exportFile } from '@/utils/index'
import qs from 'qs'
import { mapGetters } from 'vuex'
import JsBarcode from 'jsbarcode'
const defaultForm = { id: null, title: null, author: null, isbn: null, code: null, publish: null, cover: null }
export default {
name: 'Collection',
components: { crudOperation, rrOperation, pagination, Treeselect },
filters: {
creatBarCode(barCodeData, codePrintData, barCodeText) {
// console.log('')
console.log('codePrintData', codePrintData)
console.log('barCodeText', barCodeText)
const canvas = document.createElement('canvas')
// 'fantasy', //
JsBarcode(canvas, barCodeData, {
format: 'CODE128',
displayValue: true,
text: barCodeText,
fontOptions: 'bold', // 使
font: 'arial',
margin: 15,
height: 120,
width: 5,
fontSize: 36,
textMargin: 6,
textPosition: 'top'
})
return canvas.toDataURL('image/png')
}
},
cruds() {
return CRUD({ title: '图书', url: 'api/menus', crudMethod: { ...crudMenu },
optShow: {
add: true,
edit: true,
del: false,
download: false,
group: false,
reset: true
}
})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
keyWord: null,
optionVal: 'brcode',
bookshelfNum: [],
levelNumber: 0,
librarysOptions: [],
options: [
{ value: 'brcode', label: '条码' },
{ value: 'username', label: '题名/著者/出版社' },
{ value: 'isbn', label: 'ISBN' }
],
permission: {
add: ['admin', 'collection:add'],
edit: ['admin', 'collection:edit'],
del: ['admin', 'collection:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '在架' },
{ key: '0', display_name: '不在架' }
],
imageUrl: require('@/assets/images/system/default-img.jpg'),
rules: {
title: [
{ required: true, message: '题名不可为空', trigger: 'blur' }
],
library: [
{ required: true, message: '馆藏地不可为空', trigger: 'blur' }
],
isbn: [
{ required: true, message: 'ISBN不可为空', trigger: 'blur' }
],
brcode: [
{ required: true, message: '条码不可为空', trigger: 'blur' }
]
},
selectedRows: [],
isAutoBrcode: false
}
},
computed: {
...mapGetters([
'baseApi'
])
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
},
//
[CRUD.HOOK.afterToCU](crud, form) {
},
//
[CRUD.HOOK.beforeToAdd]() {
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
return false
},
searchChange(val) {
if (val) {
this.keyWord = ''
this.options.forEach(option => {
if (option.value !== val) {
this.crud.query[option.value] = null
}
})
}
},
toIsbnSearch() {
if (this.form.isbn) {
console.log(this.form.isbn)
} else {
this.$refs.form.validateField(['isbn'], err => {
if (err) {
return
}
})
}
},
autoBrcode() {
this.isAutoBrcode = true
setTimeout(() => {
this.isAutoBrcode = false
}, 5000)
},
changeLibrarysValue(value) {
// this.depts = []
// var obj = {}
// obj = this.fondsOptions.find(function(item) {
// return item.id === value
// })
// this.form.deptsParentsId = null
// const params = {
// 'fondsId': obj.id,
// 'fondsName': obj.fondsName,
// 'status': 1
// }
this.getLirarys()
},
getLirarys(params) {
// crudDept.getDepts(params).then(res => {
// this.depts = res.content.map(function(obj) {
// if (obj.sonNum !== 0) {
// obj.hasChildren = true
// } else {
// obj.hasChildren = false
// }
// if (obj.hasChildren) {
// obj.children = null
// }
// return obj
// })
// })
},
// vue-treeSelectunknown
getAutoNameUnknown(name) {
if (name.lastIndexOf('unknown') > -1) {
return name.split('(')[0]
} else {
return name
}
},
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.deptsId,
label: node.deptsName,
children: node.children
}
},
//
loadDepts({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
// crudDept.FetchSonDepts({ deptsId: parentNode.deptsId }).then(res => {
// parentNode.children = res.map(function(obj) {
// if (obj.sonNum !== 0) {
// obj.hasChildren = true
// } else {
// obj.hasChildren = false
// }
// if (obj.hasChildren) {
// obj.children = null
// }
// return obj
// })
// setTimeout(() => {
// callback()
// }, 100)
// })
}
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
toDelete(datas) {
this.deleteData = datas
this.$confirm('此操作将删除当前所选图书所有馆藏信息<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
this.deleteData.forEach(val => {
ids.push(val.deptsId)
})
// crudDept.del(ids).then(() => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.delAllLoading = false
// this.crud.refresh()
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => {
})
},
doExport(data) {
crud.downloadLoading = true
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = []
data.forEach(val => {
ids.push(val.fondsId)
})
const params = {
'fondsIds': ids
}
exportFile(this.baseApi + '/api/fonds/download?' + qs.stringify(params, { indices: false }))
}).catch(() => {
})
},
//
printArchivesCode(data) {
// this.codeLoading = true
const params = data.map(item => {
return item.id
})
console.log(params)
// FetchPrintArchivesBarcode(params).then(res => {
// if (res && res.length !== 0) {
// this.selectedRows = res
// } else {
// this.selectedRows = []
// this.$message({
// message: '!',
// type: 'warning'
// })
// return false
// }
// this.$nextTick(() => {
// this.codePrintData.count = this.selectedRows.length
// var printIframe = this.$refs.printIframe
// var html = this.$refs.printDiv.innerHTML
// printIframe.setAttribute('srcdoc', html)
// printIframe.onload = function() {
// console.log(printIframe.contentWindow)
// // iframedombodypadding margin
// printIframe.contentWindow.document.body.style.padding = '0px'
// printIframe.contentWindow.document.body.style.margin = '0px'
// //
// printIframe.contentWindow.focus()
// printIframe.contentWindow.print()
// }
// })
// // this.crud.refresh()
// this.codeLoading = false
// })
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .input-prepend .el-input__inner{
padding-left: 150px;
}
.auto-dialog{
::v-deep .el-dialog{
width: initial;
}
}
.el-form{
display: flex;
justify-content: flex-start;
}
.brcode-input{
::v-deep .el-form-item__content{
position: relative;
}
.auto-box{
position: absolute;
right: -30px;
top: 0;
i::before{
margin-right:0;
}
}
.auto-loading{
animation: rotates 3s linear infinite;
}
.search-box{
position: absolute;
right: 6px;
top: -2px;
}
}
@keyframes rotates {
0% {transform: rotate(0deg) }
100% {transform: rotate(-360deg) }
}
.preview-cover{
flex: 1;
padding-left: 10px;
p{
font-weight: bold;
color: #0c0e1e;
margin: -14px 0 10px 0;
}
img{
display: block;
height: 120px;
}
}
</style>

230
src/views/visualCheck/bookstore/collectionLocation/index.vue

@ -0,0 +1,230 @@
<template>
<div class="app-container row-container">
<div class="head-container">
<div class="head-search">
<!-- 搜索 -->
<el-input v-model="query.collectionName" clearable size="small" placeholder="输入馆藏名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<rrOperation />
</div>
<crudOperation :permission="permission">
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
<template v-slot:right>
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)">
<i class="iconfont icon-daochu" />
导出
</el-button>
</template>
</crudOperation>
</div>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column prop="collectionName" label="馆藏地名称" />
<el-table-column prop="collectionFloor" label="楼层" />
<el-table-column prop="collectionExplain" label="说明">
<template slot-scope="scope">
<div>{{ scope.row.collectionExplain ? scope.row.collectionExplain : '-' }}</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
<!-- form -->
<el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="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" :rules="rules" :model="form" size="small" label-width="100px">
<el-form-item label="所在楼层" prop="collectionFloor">
<el-input v-model="form.collectionFloor" style="width: 580px;" />
</el-form-item>
<el-form-item label="馆藏地名称" prop="collectionName">
<el-input v-model="form.collectionName" placeholder="请输入" style="width: 580px;" />
</el-form-item>
<el-form-item label="馆藏地编码" prop="collectionCode">
<el-input v-model="form.collectionCode" placeholder="请输入" style="width: 580px;" />
</el-form-item>
<el-form-item label="说明" prop="collectionExplain">
<el-input v-model="form.collectionExplain" placeholder="请输入" type="textarea" rows="3" style="width: 580px;" />
</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>
</div>
</template>
<script>
import crudBookBasice from '@/api/bookBasice/index'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
import { parseTime, saveAs, getBlob } from '@/utils/index'
import qs from 'qs'
import { mapGetters } from 'vuex'
const defaultForm = { id: null, fondsId: null, collectionFloor: null, collectionName: null, collectionCode: null, collectionExplain: null }
export default {
name: 'CollectionLocation',
components: { crudOperation, rrOperation, pagination },
cruds() {
return CRUD({ title: '馆藏地', url: 'api/bookBasice/initCollectionLocationList', crudMethod: { ...crudBookBasice }, sort: [], optShow: {
add: true,
edit: true,
del: false,
download: false,
group: false,
reset: true
}})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
permission: {
add: ['admin', 'collectionLocation:add'],
edit: ['admin', 'collectionLocation:edit'],
del: ['admin', 'collectionLocation:del']
},
rules: {
collectionFloor: [
{ required: true, message: '所在楼层不可为空', trigger: 'blur' }
],
collectionName: [
{ required: true, message: '馆藏名不可为空', trigger: 'blur' }
]
}
}
},
computed: {
...mapGetters([
'baseApi',
'user'
])
},
created() {
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
crud.form.fondsId = this.user.fonds.id
console.log(crud.form)
return true
},
[CRUD.HOOK.afterAddCancel]() {
},
[CRUD.HOOK.afterSubmit]() {
},
toDelete(datas) {
this.$confirm('此操作将删除当前所选机构<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.id)
})
console.log(ids)
crudBookBasice.del(ids).then(() => {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
this.crud.delAllLoading = false
this.crud.refresh()
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
})
}).catch(() => {
this.crud.delAllLoading = false
})
},
doExport(data) {
crud.downloadLoading = true
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = []
data.forEach(val => {
ids.push(val.id)
})
const params = {
'ids': ids
}
const fileName = '馆藏地-' + parseTime(new Date()) + '.xlsx'
getBlob(this.baseApi + '/api/bookBasice/exportCollectionLocation' + '?' + qs.stringify(params, { indices: false }), function(blob) {
saveAs(blob, fileName)
})
}).catch(() => {
})
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
}
}
}
</script>
<style lang="scss" scoped>
.select-btn{
display: inline-block;
padding: 4px 11px 4px 14px;
font-size: 18px;
color: #fff;
background: #0348F3;
border-radius: 3px;
margin: 10px 0 0 100px;
text-align: center;
cursor: pointer;
}
.send-obj{
width: 580px;
height: 180px;
padding: 0 10px;
border-radius: 3px 3px 3px 3px;
border: 1px solid #E6E8ED;
.el-tag{
margin-right: 10px;
}
}
::v-deep .crud-opts-left{
position: relative;
}
.double-click-btn{
top: 4px !important;
right: 0;
left: -156px !important;
}
</style>

16
src/views/visualCheck/checkManage/bookSearch/index.vue

@ -0,0 +1,16 @@
<template>
<div class="app-container">
图书检索
</div>
</template>
<script>
export default {
name: 'BookSearch',
data() {
return {
}
}
}
</script>
<style scoped>
</style>

16
src/views/visualCheck/checkManage/bookshelfSearch/index.vue

@ -0,0 +1,16 @@
<template>
<div class="app-container">
图架检索
</div>
</template>
<script>
export default {
name: 'BookshelfSearch',
data() {
return {
}
}
}
</script>
<style scoped>
</style>

16
src/views/visualCheck/checkManage/checkLog/index.vue

@ -0,0 +1,16 @@
<template>
<div class="app-container">
盘点日志
</div>
</template>
<script>
export default {
name: 'CheckLog',
data() {
return {
}
}
}
</script>
<style scoped>
</style>

16
src/views/visualCheck/checkManage/checkPlan/index.vue

@ -0,0 +1,16 @@
<template>
<div class="app-container">
盘点计划
</div>
</template>
<script>
export default {
name: 'CheckPlan',
data() {
return {
}
}
}
</script>
<style scoped>
</style>

16
src/views/visualCheck/checkManage/dataScreening/index.vue

@ -0,0 +1,16 @@
<template>
<div class="app-container">
数据总览
</div>
</template>
<script>
export default {
name: 'DataScreening',
data() {
return {
}
}
}
</script>
<style scoped>
</style>

2
src/views/visualCheck/checkManage/index.vue

@ -5,7 +5,7 @@
</template> </template>
<script> <script>
export default { export default {
name: 'Test1',
name: 'CheckManage',
data() { data() {
return { return {
} }

16
src/views/visualCheck/checkManage/statistic/index.vue

@ -0,0 +1,16 @@
<template>
<div class="app-container">
统计分析
</div>
</template>
<script>
export default {
name: 'Statistic',
data() {
return {
}
}
}
</script>
<style scoped>
</style>

1
src/views/visualCheck/venueDevice/area/index.vue

@ -8,7 +8,6 @@ export default {
name: 'Area', name: 'Area',
data() { data() {
return { return {
input: ''
} }
} }
} }

1
src/views/visualCheck/venueDevice/bookshelf/index.vue

@ -8,7 +8,6 @@ export default {
name: 'Bookshelf', name: 'Bookshelf',
data() { data() {
return { return {
input: ''
} }
} }
} }

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

@ -8,7 +8,6 @@ export default {
name: 'Device', name: 'Device',
data() { data() {
return { return {
input: ''
} }
} }
} }

170
src/views/visualCheck/venueDevice/floor/index.vue

@ -1,14 +1,176 @@
<template> <template>
<div class="app-container">
楼层管理
<div class="app-container venue-container">
<div class="venue-left">
<div class="head-container">
<div class="head-search">
<!-- 搜索 -->
<el-input v-model="query.collectionName" clearable size="small" placeholder="输入馆藏名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<rrOperation />
</div>
<crudOperation :permission="permission">
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
<template v-slot:right>
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0">
<i class="iconfont icon-paixu" />
排序
</el-button>
</template>
</crudOperation>
</div>
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
style="width: 100%;"
height="590"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column prop="collectionName" label="馆藏地名称" />
<el-table-column prop="collectionFloor" label="楼层" />
<el-table-column prop="collectionExplain" label="说明">
<template slot-scope="scope">
<div>{{ scope.row.collectionExplain ? scope.row.collectionExplain : '-' }}</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
<div class="venue-right">
<div class="container-right tab-content">
<span class="right-top-line" />
<span class="left-bottom-line" />
<ul class="tab-nav">
<li class="active-tab-nav">楼层预览<i /></li>
<!-- 最右侧装饰img -->
<span class="tab-right-img" />
</ul>
<div class="venue-preview">
<img src="~@/assets/images/system/default-img.jpg" alt="">
</div>
</div>
</div>
<!-- form -->
<el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="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" :rules="rules" :model="form" size="small" label-width="100px">
<el-form-item label="楼层名称" prop="collectionFloor">
<el-input v-model="form.collectionFloor" style="width: 580px;" />
</el-form-item>
<el-form-item label="描述信息" prop="collectionExplain">
<el-input v-model="form.collectionExplain" placeholder="请输入" type="textarea" rows="3" style="width: 580px;" />
</el-form-item>
<div>
<el-form-item class="book-cover-upload" label="楼层地图" prop="cover">
<el-input v-model="form.cover" placeholder="请上传" :readonly="true" />
<!-- <p :class="['input-style', form.cover === null ? 'error-box' :'']">{{ form.cover }}</p> -->
<!-- <span v-if="form.cover === null" class="error-tip">请上传图书封面</span> -->
<div class="upload-btn">
<input id="upFile" type="file" name="upFile" @change="changeFile($event)">
<el-button size="small" type="primary"><i class="iconfont icon-shangchuan" />上传</el-button>
</div>
</el-form-item>
</div>
</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>
</div> </div>
</template> </template>
<script> <script>
import crudBookBasice from '@/api/bookBasice/index'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
const defaultForm = { id: null, fondsId: null, collectionFloor: null, collectionName: null, collectionCode: null, collectionExplain: null }
export default { export default {
name: 'One',
name: 'Floor',
components: { crudOperation, rrOperation, pagination },
cruds() {
return CRUD({ title: '楼层', url: 'api/bookBasice/initCollectionLocationList', crudMethod: { ...crudBookBasice }, sort: [], optShow: {
add: true,
edit: true,
del: false,
download: false,
group: false,
reset: true
}})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() { data() {
return { return {
input: ''
permission: {
add: ['admin', 'floor:add'],
edit: ['admin', 'floor:edit'],
del: ['admin', 'floor:del']
},
rules: {
collectionFloor: [
{ required: true, message: '所在楼层不可为空', trigger: 'blur' }
],
collectionName: [
{ required: true, message: '馆藏名不可为空', trigger: 'blur' }
]
}
}
},
method: {
[CRUD.HOOK.beforeRefresh]() {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
crud.form.fondsId = this.user.fonds.id
console.log(crud.form)
return true
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
toDelete(datas) {
this.$confirm('此操作将删除当前所选机构<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.id)
})
console.log(ids)
crudBookBasice.del(ids).then(() => {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
this.crud.delAllLoading = false
this.crud.refresh()
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
})
}).catch(() => {
this.crud.delAllLoading = false
})
} }
} }
} }

16
src/views/visualCheck/venueDevice/index.vue

@ -0,0 +1,16 @@
<template>
<div>
<router-view />
</div>
</template>
<script>
export default {
name: 'VenueDevice',
data() {
return {
}
}
}
</script>
<style scoped>
</style>
Loading…
Cancel
Save