|
|
@ -9,11 +9,11 @@ |
|
|
|
<div class="head-container"> |
|
|
|
<div class="head-search"> |
|
|
|
<!-- 搜索 --> |
|
|
|
<el-select v-model="query.floorId" clearable size="small" placeholder="楼层" class="filter-item" style="width: 80px" @change="crud.toQuery"> |
|
|
|
<el-option v-for="item in floorOptions" :key="item.key" :label="item.floorName" :value="item.key" /> |
|
|
|
<el-select v-model="selectFloorVal" clearable size="small" placeholder="楼层" class="filter-item" style="width: 80px" value-key="id" @change="changeBeforeFloor"> |
|
|
|
<el-option v-for="(item,index) in floorOptions" :key="index" :label="item.floorName" :value="item" /> |
|
|
|
</el-select> |
|
|
|
<el-select v-model="query.floorId" clearable size="small" placeholder="区域" class="filter-item" style="width: 80px" @change="crud.toQuery"> |
|
|
|
<el-option v-for="item in floorOptions" :key="item.key" :label="item.floorName" :value="item.key" /> |
|
|
|
<el-select v-model="selectRegionVal" clearable size="small" placeholder="区域" class="filter-item" style="width: 120px" value-key="id" @change="changeBeforeRegion"> |
|
|
|
<el-option v-for="(item,index) in regionOptions" :key="index" :label="item.regionName" :value="item" /> |
|
|
|
</el-select> |
|
|
|
<!-- <el-input v-model="query.search" clearable size="small" placeholder="输入关键字搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @clear="crud.toQuery" @keyup.enter.native="crud.toQuery" /> --> |
|
|
|
<!-- <rrOperation /> --> |
|
|
@ -34,19 +34,27 @@ |
|
|
|
:data="crud.data" |
|
|
|
style="width: 100%;" |
|
|
|
height="540" |
|
|
|
@selection-change="crud.selectionChangeHandler" |
|
|
|
@selection-change="selectionChangeHandler" |
|
|
|
@row-click="clickRowHandler" |
|
|
|
> |
|
|
|
<el-table-column type="selection" align="center" width="55" /> |
|
|
|
<!-- <el-table-column type="index" label="排序" /> --> |
|
|
|
<el-table-column prop="shelfName" label="书架名称" /> |
|
|
|
<el-table-column prop="collectionFloor" label="书架规格" /> |
|
|
|
<el-table-column prop="floorName" label="单/双面" /> |
|
|
|
<el-table-column prop="shelfShelf" label="书架规格"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<span>{{ scope.row.shelfShelf + ' X ' + scope.row.shelfFloor }}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column prop="rowType" label="单/双面"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<span>{{ scope.row.rowType === 1 ? '单面' :'双面' }}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column prop="floorName" label="所属楼层" /> |
|
|
|
<el-table-column prop="floorName" label="所属区域" /> |
|
|
|
<el-table-column prop="floorMap" label="标注"> |
|
|
|
<el-table-column prop="regionName" label="所属区域" /> |
|
|
|
<el-table-column prop="signPoint" label="标注"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<span :class="['row-state', scope.row.floorMap ? 'end-state' : 'cancel-state' ]">{{ scope.row.floorMap ? '已标注': '未标注' }}</span> |
|
|
|
<span :class="['row-state', scope.row.signPoint ? 'end-state' : 'cancel-state' ]">{{ scope.row.signPoint ? '已标注': '未标注' }}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
</el-table> |
|
|
@ -62,13 +70,18 @@ |
|
|
|
<li class="active-tab-nav">区域书架<i /></li> |
|
|
|
<!-- 最右侧装饰img --> |
|
|
|
<span class="tab-right-img" /> |
|
|
|
<el-button size="mini" class="venue-mark" :disabled="crud.selections.length === 0" @click="markVisible = true"> |
|
|
|
<el-button size="mini" class="venue-mark" :disabled="crud.selections.length !== 1" @click="handleMark"> |
|
|
|
<i class="el-icon-edit" /> |
|
|
|
书架标注 |
|
|
|
</el-button> |
|
|
|
</ul> |
|
|
|
<div class="venue-preview"> |
|
|
|
<img :src="imageUrl" :onerror="defaultImg" alt=""> |
|
|
|
<!-- <img :src="imageUrl" :onerror="defaultImg" alt=""> --> |
|
|
|
<div v-show="currentMarkData && currentMarkData.signPoint"> |
|
|
|
<canvas id="canvasPreview" :width="width" :height="height" /> |
|
|
|
</div> |
|
|
|
<img v-if="currentMarkData && !currentMarkData.signPoint" :src="imageUrl" :onerror="defaultImg" alt=""> |
|
|
|
<img v-if="!currentMarkData" :src="imageUrl" :onerror="defaultImg" alt=""> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -80,49 +93,49 @@ |
|
|
|
<span class="dialog-left-bottom" /> |
|
|
|
<div class="setting-dialog"> |
|
|
|
<el-form ref="form" :rules="rules" :model="form" inline size="small" label-width="90px"> |
|
|
|
<el-form-item label="所属楼层" prop="floorId"> |
|
|
|
<el-input v-model="form.floorId" disabled /> |
|
|
|
<el-form-item label="所属楼层" prop="floorName"> |
|
|
|
<el-input v-model="form.floorName" disabled /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="所属区域" prop="areaName"> |
|
|
|
<el-input v-model="form.areaName" disabled /> |
|
|
|
<el-form-item label="所属区域" prop="regionName"> |
|
|
|
<el-input v-model="form.regionName" disabled /> |
|
|
|
</el-form-item> |
|
|
|
<el-row> |
|
|
|
<el-form-item label="单/双排" prop="singleOrDouble"> |
|
|
|
<el-radio-group v-model="form.singleOrDouble" v-removeAriaHidden size="mini" @change="changeSingleOrDouble($event)"> |
|
|
|
<el-form-item label="单/双排" prop="rowType"> |
|
|
|
<el-radio-group v-model="form.rowType" v-removeAriaHidden size="mini" @change="changeSingleOrDouble($event)"> |
|
|
|
<el-radio :label="1">单排</el-radio> |
|
|
|
<el-radio :label="2">双排</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item v-if="form.singleOrDouble===1" label="A/B面" prop="ab"> |
|
|
|
<el-select v-model="form.ab" placeholder="请选择" style="width: 225px;" @change="changeAB($event)"> |
|
|
|
<el-form-item v-if="form.rowType===1" label="A/B面" prop="toward"> |
|
|
|
<el-select v-model="form.toward" placeholder="请选择" style="width: 225px;" @change="changeAB($event)"> |
|
|
|
<el-option |
|
|
|
v-for="(item,index) in abOptions" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.key" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
</el-row> |
|
|
|
<el-row> |
|
|
|
<el-form-item label="书架排号" prop="rackNum"> |
|
|
|
<el-input v-model="form.rackNum" /> |
|
|
|
<el-form-item label="书架排号" prop="shelfRow"> |
|
|
|
<el-input v-model="form.shelfRow" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="书架名称" prop="rackName"> |
|
|
|
<el-input v-model="form.rackName" disabled /> |
|
|
|
<el-form-item label="书架名称" prop="shelfName"> |
|
|
|
<el-input v-model="computedShelfName" disabled /> |
|
|
|
</el-form-item> |
|
|
|
</el-row> |
|
|
|
<el-form-item label="书架规格" prop="rackSpecs"> |
|
|
|
<el-input-number v-model.number="form.rackSpecsMin" :min="0" :max="999" controls-position="right" style="width: 90px;" /> |
|
|
|
<el-input-number v-model.number="form.shelfShelf" :min="1" :max="999" controls-position="right" style="width: 90px;" /> |
|
|
|
<span style="padding:0 12px;">✕</span> |
|
|
|
<el-input-number v-model.number="form.rackSpecsMax" :min="0" :max="999" controls-position="right" style="width: 90px;" /> |
|
|
|
<el-input-number v-model.number="form.shelfFloor" :min="1" :max="999" controls-position="right" style="width: 90px;" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="架起始标" prop="rackStartNum"> |
|
|
|
<el-input-number v-model.number="form.rackStartNum" :min="0" :max="999" controls-position="right" /> |
|
|
|
<el-form-item label="架起始标" prop="startShelf"> |
|
|
|
<el-input-number v-model.number="form.startShelf" :min="0" :max="999" controls-position="right" /> |
|
|
|
</el-form-item> |
|
|
|
<el-row> |
|
|
|
<el-form-item label="架号顺序" prop="rackOrder"> |
|
|
|
<el-select v-model="form.rackOrder" placeholder="请选择" style="width: 586px;" @change="changeOrder($event)"> |
|
|
|
<el-form-item label="架号顺序" prop="shelfType"> |
|
|
|
<el-select v-model="form.shelfType" placeholder="请选择" style="width: 586px;" @change="changeOrder($event)"> |
|
|
|
<el-option |
|
|
|
v-for="(item,index) in rackOrderOptions" |
|
|
|
:key="index" |
|
|
@ -133,8 +146,8 @@ |
|
|
|
</el-form-item> |
|
|
|
</el-row> |
|
|
|
<el-row> |
|
|
|
<el-form-item label="层号顺序" prop="layerSeq"> |
|
|
|
<el-select v-model="form.layerSeq" placeholder="请选择" style="width: 586px;" @change="changeLayerSeq($event)"> |
|
|
|
<el-form-item label="层号顺序" prop="floorType"> |
|
|
|
<el-select v-model="form.floorType" placeholder="请选择" style="width: 586px;" @change="changeLayerSeq($event)"> |
|
|
|
<el-option |
|
|
|
v-for="(item,index) in layerSeqOptions" |
|
|
|
:key="index" |
|
|
@ -144,14 +157,14 @@ |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
</el-row> |
|
|
|
<el-form-item label="倒架规则" prop="invRules"> |
|
|
|
<el-radio-group v-model="form.invRules" v-removeAriaHidden size="mini"> |
|
|
|
<el-form-item label="倒架规则" prop="shelfRule"> |
|
|
|
<el-radio-group v-model="form.shelfRule" v-removeAriaHidden size="mini"> |
|
|
|
<el-radio :label="1">无序</el-radio> |
|
|
|
<el-radio :label="2">有序</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="错架判断" prop="wrongJudge"> |
|
|
|
<el-radio-group v-model="form.wrongJudge" v-removeAriaHidden size="mini"> |
|
|
|
<el-form-item label="错架判断" prop="shelfErrorJudge"> |
|
|
|
<el-radio-group v-model="form.shelfErrorJudge" v-removeAriaHidden size="mini"> |
|
|
|
<el-radio :label="1">书架</el-radio> |
|
|
|
<el-radio :label="2">格子</el-radio> |
|
|
|
</el-radio-group> |
|
|
@ -165,160 +178,279 @@ |
|
|
|
</el-dialog> |
|
|
|
|
|
|
|
<!-- 标注 --> |
|
|
|
<el-dialog class="mark-dialog" :close-on-click-modal="false" :append-to-body="true" title="001排A面-书架标注" :visible.sync="markVisible"> |
|
|
|
<el-dialog class="mark-dialog" :close-on-click-modal="false" :append-to-body="true" :title="titleMark" :visible.sync="markVisible" :before-close="handleCloseDialog"> |
|
|
|
<span class="dialog-right-top" /> |
|
|
|
<span class="dialog-left-bottom" /> |
|
|
|
<div class="setting-dialog mark-handle"> |
|
|
|
<div class="mark-img"> |
|
|
|
<img :src="imageUrl" :onerror="defaultImg" alt=""> |
|
|
|
</div> |
|
|
|
<div class="mark-right"> |
|
|
|
<ul class="mark-info"> |
|
|
|
<li> |
|
|
|
<p>所属机构</p> |
|
|
|
<span>机构A</span> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<p>所属楼层</p> |
|
|
|
<span>五楼</span> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<p>所属区域</p> |
|
|
|
<span>A楼</span> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<p>单/双面</p> |
|
|
|
<span>单面</span> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<p>书架规格</p> |
|
|
|
<span>6✕8</span> |
|
|
|
</li> |
|
|
|
<li><span :class="['row-state', true ? 'end-state' : 'cancel-state' ]">{{ true ? '已标注': '未标注' }}</span></li> |
|
|
|
</ul> |
|
|
|
<div class="mark-button"> |
|
|
|
<el-button type="primary" disabled><i class="iconfont icon-shanchu" />清空</el-button> |
|
|
|
<el-button type="primary"><i class="el-icon-edit" style="font-weight: bold; padding-right: 4px; font-size: 16px;" />标注</el-button> |
|
|
|
<el-button type="primary" disabled><i class="el-icon-folder-checked" style="font-weight: bold; padding-right: 4px; font-size: 16px;" />保存</el-button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="setting-dialog"> |
|
|
|
<MarkCover ref="markRefs" :is-book-shelf="true" :current-mark-data="currentMarkData" :image-url="imageUrl" @handleCloseDialog="handleCloseDialog" /> |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
|
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import crudFloor from '@/api/floor/index' |
|
|
|
import { FetchLibraryFloorListAll } from '@/api/floor/index' |
|
|
|
import { FetchInitLibraryRegionList } from '@/api/area/index' |
|
|
|
import crudShelf from '@/api/shelf/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 UploadCover from '@/views/components/upload.vue' |
|
|
|
import { mapGetters } from 'vuex' |
|
|
|
import defaultImg from '@/assets/images/system/default-img.jpg' |
|
|
|
import MarkCover from '@/views/components/mark.vue' |
|
|
|
import { fabric } from 'fabric' |
|
|
|
|
|
|
|
const defaultForm = { id: null, floorId: null, areaName: null, singleOrDouble: null, ab: null, rackNum: null, rackName: null, rackSpecsMin: null, rackSpecsMax: null, rackStartNum: null, rackOrder: null, layerSeq: null, invRules: null, wrongJudge: null } |
|
|
|
const defaultForm = { id: null, floorName: null, floorId: null, regionName: null, rowType: 1, toward: 1, shelfRow: '', shelfName: '', shelfShelf: null, shelfFloor: null, startShelf: null, shelfType: null, floorType: null, shelfRule: null, shelfErrorJudge: null, signPoint: '' } |
|
|
|
export default { |
|
|
|
name: 'Bookshelf', |
|
|
|
components: { crudOperation, pagination }, |
|
|
|
components: { crudOperation, pagination, MarkCover }, |
|
|
|
cruds() { |
|
|
|
return CRUD({ title: '书架', url: 'api/libraryFloor/initLibraryFloorList', crudMethod: { ...crudFloor }, sort: [], optShow: { |
|
|
|
return CRUD({ title: '书架', idField: 'shelfId', url: 'api/bookShelf/initBookShelfList', crudMethod: { ...crudShelf }, sort: [], optShow: { |
|
|
|
add: true, |
|
|
|
edit: true, |
|
|
|
del: false, |
|
|
|
download: false, |
|
|
|
group: false, |
|
|
|
reset: false |
|
|
|
}}) |
|
|
|
}, |
|
|
|
queryOnPresenterCreated: false |
|
|
|
}) |
|
|
|
}, |
|
|
|
mixins: [presenter(), header(), form(defaultForm), crud()], |
|
|
|
data() { |
|
|
|
return { |
|
|
|
permission: { |
|
|
|
add: ['admin', 'floor:add'], |
|
|
|
edit: ['admin', 'floor:edit'], |
|
|
|
del: ['admin', 'floor:del'] |
|
|
|
}, |
|
|
|
floorOptions: [], |
|
|
|
regionOptions: [], |
|
|
|
selectFloorVal: null, |
|
|
|
selectRegionVal: null, |
|
|
|
abOptions: [ |
|
|
|
{ key: '1', name: 'A面' }, |
|
|
|
{ key: '0', name: 'B面' } |
|
|
|
], |
|
|
|
floorOptions: [ |
|
|
|
{ key: '1', floorName: '一楼' }, |
|
|
|
{ key: '0', floorName: '二楼' } |
|
|
|
{ value: 1, name: 'A面' }, |
|
|
|
{ value: 2, name: 'B面' } |
|
|
|
], |
|
|
|
rackOrderOptions: [ |
|
|
|
{ key: 0, name: '始终最左边为第1架(S型排架)' }, |
|
|
|
{ key: 1, name: 'A面最左为第1架(B面最左为最后1架)' }, |
|
|
|
{ key: 2, name: 'B面最左为第1架(A面最左为最后1架)' } |
|
|
|
{ key: 1, name: '始终最左边为第1架(S型排架)' }, |
|
|
|
{ key: 2, name: 'A面最左为第1架(B面最左为最后1架)' }, |
|
|
|
{ key: 3, name: 'B面最左为第1架(A面最左为最后1架)' } |
|
|
|
], |
|
|
|
layerSeqOptions: [ |
|
|
|
{ key: 0, name: '最顶层为第一层(从上至下)' }, |
|
|
|
{ key: 1, name: '最底层为第一层(从下至上)' } |
|
|
|
{ key: 1, name: '最顶层为第一层(从上至下)' }, |
|
|
|
{ key: 2, name: '最底层为第一层(从下至上)' } |
|
|
|
], |
|
|
|
permission: { |
|
|
|
add: ['admin', 'floor:add'], |
|
|
|
edit: ['admin', 'floor:edit'], |
|
|
|
del: ['admin', 'floor:del'] |
|
|
|
}, |
|
|
|
rules: { |
|
|
|
floorId: [ |
|
|
|
floorName: [ |
|
|
|
{ required: true, message: '所属楼层不可为空', trigger: 'blur' } |
|
|
|
], |
|
|
|
areaName: [ |
|
|
|
regionName: [ |
|
|
|
{ required: true, message: '所属区域不可为空', trigger: 'blur' } |
|
|
|
], |
|
|
|
singleOrDouble: [ |
|
|
|
rowType: [ |
|
|
|
{ required: true, message: '请选择单双排', trigger: 'change' } |
|
|
|
], |
|
|
|
rackNum: [ |
|
|
|
shelfRow: [ |
|
|
|
{ required: true, message: '书架排号不可为空', trigger: 'blur' } |
|
|
|
], |
|
|
|
rackName: [ |
|
|
|
{ required: true, message: '书架名称不可为空', trigger: 'blur' } |
|
|
|
shelfName: [ |
|
|
|
{ validator: this.validateShelfName, trigger: 'blur' } |
|
|
|
], |
|
|
|
rackSpecs: [ |
|
|
|
{ required: true, message: '书架规格不可为空', trigger: 'blur' } |
|
|
|
{ validator: this.validateRackSpecs, trigger: 'blur' } |
|
|
|
], |
|
|
|
rackStartNum: [ |
|
|
|
startShelf: [ |
|
|
|
{ required: true, message: '架起始标不可为空', trigger: 'blur' } |
|
|
|
], |
|
|
|
rackOrder: [ |
|
|
|
shelfType: [ |
|
|
|
{ required: true, message: '请选择架号顺序', trigger: 'change' } |
|
|
|
], |
|
|
|
layerSeq: [ |
|
|
|
floorType: [ |
|
|
|
{ required: true, message: '请选择层号顺序', trigger: 'change' } |
|
|
|
], |
|
|
|
invRules: [ |
|
|
|
shelfRule: [ |
|
|
|
{ required: true, message: '请选择倒架规则', trigger: 'change' } |
|
|
|
], |
|
|
|
wrongJudge: [ |
|
|
|
shelfErrorJudge: [ |
|
|
|
{ required: true, message: '请选择错架判断', trigger: 'change' } |
|
|
|
] |
|
|
|
}, |
|
|
|
defaultImg: defaultImg, |
|
|
|
imageUrl: defaultImg, |
|
|
|
markVisible: false // 区域标注 |
|
|
|
markVisible: false, // 区域标注 |
|
|
|
titleMark: '书架标注', |
|
|
|
currentMarkData: null, |
|
|
|
|
|
|
|
canvasPreview: {}, |
|
|
|
width: 900, |
|
|
|
height: 600, |
|
|
|
drawWidth: 2 // 笔触宽度 |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
...mapGetters([ |
|
|
|
'user', |
|
|
|
'baseApi' |
|
|
|
]) |
|
|
|
]), |
|
|
|
computedShelfName() { |
|
|
|
const { shelfRow, rowType, toward } = this.form |
|
|
|
if (!shelfRow) { |
|
|
|
return '' |
|
|
|
} |
|
|
|
const baseName = `${shelfRow}排` |
|
|
|
if (rowType === 1 && toward !== null) { |
|
|
|
return `${baseName}${this.abOptions.find(option => option.value === toward).name}` |
|
|
|
} else if (rowType === 2) { |
|
|
|
return baseName |
|
|
|
} |
|
|
|
return '' |
|
|
|
} |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
computedShelfName(newVal) { |
|
|
|
this.form.shelfName = newVal |
|
|
|
}, |
|
|
|
width() { |
|
|
|
this.canvasPreview.setWidth(this.width) |
|
|
|
}, |
|
|
|
height() { |
|
|
|
this.canvasPreview.setHeight(this.height) |
|
|
|
} |
|
|
|
}, |
|
|
|
created() { |
|
|
|
this.getLibraryFloorListAll() |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
|
|
|
|
}, |
|
|
|
methods: { |
|
|
|
validateShelfName(rule, value, callback) { |
|
|
|
if (this.form.shelfRow) { |
|
|
|
if (!value) { |
|
|
|
callback(new Error('书架名称不能为空')) |
|
|
|
} else { |
|
|
|
callback() |
|
|
|
} |
|
|
|
} else { |
|
|
|
callback() |
|
|
|
} |
|
|
|
}, |
|
|
|
validateRackSpecs(rule, value, callback) { |
|
|
|
// 检查 shelfShelf 和 shelfFloor 是否为空 |
|
|
|
if (!this.form.shelfShelf) { |
|
|
|
callback(new Error('请输入书架规格中书架架数')) |
|
|
|
} else if (!this.form.shelfFloor) { |
|
|
|
callback(new Error('请输入书架规格中书架层数')) |
|
|
|
} else { |
|
|
|
callback() |
|
|
|
} |
|
|
|
}, |
|
|
|
[CRUD.HOOK.beforeRefresh]() { |
|
|
|
|
|
|
|
}, |
|
|
|
[CRUD.HOOK.afterRefresh](crud) { |
|
|
|
console.log(crud.data) |
|
|
|
if (crud.data.length !== 0) { |
|
|
|
// this.$nextTick(() => { |
|
|
|
// this.$refs.table.toggleRowSelection(crud.data[0], true) |
|
|
|
// }) |
|
|
|
if (this.selectRegionVal && this.selectRegionVal.regionMap) { |
|
|
|
this.imageUrl = this.baseApi + '/api/fileRelevant/getImg?imgId=' + this.selectRegionVal.regionMap |
|
|
|
} else { |
|
|
|
this.imageUrl = defaultImg |
|
|
|
} |
|
|
|
}, |
|
|
|
// 新增与编辑前做的操作 |
|
|
|
[CRUD.HOOK.afterToCU](crud, form) { |
|
|
|
console.log(form) |
|
|
|
console.log('crud.query.floorId', crud.query.floorId) |
|
|
|
console.log('selectFloorVal', this.selectFloorVal) |
|
|
|
console.log('crud.query.regionId', crud.query.regionId) |
|
|
|
console.log('selectRegionVal', this.selectRegionVal) |
|
|
|
form.floorId = this.selectFloorVal.id |
|
|
|
form.floorName = this.selectFloorVal.floorName |
|
|
|
form.regionId = this.selectRegionVal.id |
|
|
|
form.regionName = this.selectRegionVal.regionName |
|
|
|
}, |
|
|
|
// 编辑前 |
|
|
|
[CRUD.HOOK.beforeToEdit](crud, form) { |
|
|
|
const params = { |
|
|
|
'shelfId': this.crud.selections[0].shelfId |
|
|
|
} |
|
|
|
crudShelf.FetchBookShelfDetails(params).then(res => { |
|
|
|
form.id = res.id |
|
|
|
// 单/双排 1 单 2 双 |
|
|
|
form.rowType = res.rowType |
|
|
|
// A/B面 1 A 2 B |
|
|
|
form.toward = res.toward |
|
|
|
// 书架排号 |
|
|
|
form.shelfRow = res.shelfRow |
|
|
|
// 书架名称 |
|
|
|
form.shelfName = res.shelfName |
|
|
|
// 书架规格 架 |
|
|
|
form.shelfShelf = res.shelfShelf |
|
|
|
// 书架规格 层 |
|
|
|
form.shelfFloor = res.shelfFloor |
|
|
|
// 架起始标 |
|
|
|
form.startShelf = res.startShelf |
|
|
|
// 架号顺序 |
|
|
|
form.shelfType = res.shelfType |
|
|
|
// 层号顺序 |
|
|
|
form.floorType = res.floorType |
|
|
|
// 倒架规则 1 无序 2 有序 |
|
|
|
form.shelfRule = res.shelfRule |
|
|
|
// 错架判断 1 书架 2 格子 |
|
|
|
form.shelfErrorJudge = res.shelfErrorJudge |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
|
|
}, |
|
|
|
// 提交前的验证 |
|
|
|
[CRUD.HOOK.afterValidateCU](crud) { |
|
|
|
console.log(crud.form) |
|
|
|
delete crud.form.floorName |
|
|
|
delete crud.form.regionName |
|
|
|
return true |
|
|
|
}, |
|
|
|
// 获取楼层数据 |
|
|
|
getLibraryFloorListAll() { |
|
|
|
FetchLibraryFloorListAll().then(res => { |
|
|
|
this.floorOptions = res |
|
|
|
if (this.floorOptions.length > 0) { |
|
|
|
this.selectFloorVal = this.floorOptions[0] |
|
|
|
this.crud.query.floorId = this.selectFloorVal.id |
|
|
|
if (this.crud.query.floorId) { |
|
|
|
this.getInitLibraryRegionList(this.crud.query.floorId) |
|
|
|
} |
|
|
|
} |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
|
|
}, |
|
|
|
getInitLibraryRegionList(val) { |
|
|
|
const params = { |
|
|
|
'floorId': val |
|
|
|
} |
|
|
|
FetchInitLibraryRegionList(params).then(res => { |
|
|
|
this.regionOptions = res.content |
|
|
|
if (this.regionOptions.length > 0) { |
|
|
|
this.selectRegionVal = this.regionOptions[0] |
|
|
|
this.crud.query.regionId = this.selectRegionVal.id |
|
|
|
this.crud.toQuery() |
|
|
|
} |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
|
|
}, |
|
|
|
changeBeforeFloor(val) { |
|
|
|
if (val) { |
|
|
|
this.selectFloorVal = val |
|
|
|
this.crud.query.floorId = val.id |
|
|
|
this.getInitLibraryRegionList(val.id) |
|
|
|
} |
|
|
|
}, |
|
|
|
changeBeforeRegion(val) { |
|
|
|
if (val) { |
|
|
|
this.selectRegionVal = val |
|
|
|
this.crud.query.regionId = val.id |
|
|
|
this.crud.toQuery() |
|
|
|
} |
|
|
|
}, |
|
|
|
changeSingleOrDouble(value) { |
|
|
|
console.log(value) |
|
|
|
}, |
|
|
@ -334,16 +466,70 @@ export default { |
|
|
|
changeLayerSeq(value) { |
|
|
|
console.log(value) |
|
|
|
}, |
|
|
|
selectionChangeHandler(val) { |
|
|
|
this.crud.selections = val |
|
|
|
// 处理选择项为1且有签名点的情况 |
|
|
|
if (this.crud.selections.length === 1 && this.crud.selections[0].signPoint) { |
|
|
|
this.currentMarkData = val[0] |
|
|
|
try { |
|
|
|
const drawinfo = JSON.parse(this.crud.selections[0].signPoint) |
|
|
|
this.initCanvasPreview(drawinfo) |
|
|
|
} catch (error) { |
|
|
|
console.error(error) |
|
|
|
this.resetImageUrl() |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 处理选择项大于1或选择项为0的情况 |
|
|
|
this.currentMarkData = null |
|
|
|
this.setImageUrlBasedOnRegionMap() |
|
|
|
} |
|
|
|
}, |
|
|
|
setImageUrlBasedOnRegionMap() { |
|
|
|
if (this.selectRegionVal && this.selectRegionVal.regionMap) { |
|
|
|
this.imageUrl = `${this.baseApi}/api/fileRelevant/getImg?imgId=${this.selectRegionVal.regionMap}` |
|
|
|
} else { |
|
|
|
this.resetImageUrl() |
|
|
|
} |
|
|
|
}, |
|
|
|
resetImageUrl() { |
|
|
|
this.imageUrl = this.defaultImg |
|
|
|
}, |
|
|
|
async handleMark() { |
|
|
|
if (this.crud.selections.length === 1) { |
|
|
|
const selection = this.crud.selections[0] |
|
|
|
if (selection && this.selectRegionVal.regionMap) { |
|
|
|
this.markVisible = true |
|
|
|
this.currentMarkData = selection |
|
|
|
this.titleMark = this.currentMarkData.shelfName + ' - 书架标注' |
|
|
|
this.$nextTick(() => { |
|
|
|
this.$refs.markRefs.drawinfo = this.currentMarkData && this.currentMarkData.signPoint ? JSON.parse(this.currentMarkData.signPoint) : null |
|
|
|
this.$refs.markRefs.initCanvas() |
|
|
|
}) |
|
|
|
} else { |
|
|
|
this.$message({ message: '请先上传当前区域图', type: 'error', offset: 8 }) |
|
|
|
} |
|
|
|
} else { |
|
|
|
console.error('666') |
|
|
|
} |
|
|
|
}, |
|
|
|
handleCloseDialog() { |
|
|
|
// if (this.$refs.markRefs.canvas) { |
|
|
|
// this.$refs.markRefs.canvas.clear() |
|
|
|
// this.$refs.markRefs.canvas.dispose() |
|
|
|
// } |
|
|
|
this.markVisible = false |
|
|
|
this.crud.refresh() |
|
|
|
}, |
|
|
|
clickRowHandler(row) { |
|
|
|
this.$router.push({ path: '/bookshelf/bookshelfPosition', query: { }}) |
|
|
|
console.log(row) |
|
|
|
|
|
|
|
this.$refs.table.clearSelection() |
|
|
|
this.$refs.table.toggleRowSelection(row) |
|
|
|
// http://192.168.99.67:12010/api/fileRelevant/getImg?imgId=f6d3ecea-0456-4429-ba77-1a4921d5c806 |
|
|
|
if (row.floorMap) { |
|
|
|
this.imageUrl = this.baseApi + '/api/fileRelevant/getImg?imgId=' + row.floorMap |
|
|
|
} else { |
|
|
|
this.imageUrl = this.defaultImg |
|
|
|
} |
|
|
|
|
|
|
|
crudShelf.FetchBookShelfDetails({ 'shelfId': row.shelfId }).then(res => { |
|
|
|
this.$router.push({ path: '/bookshelf/bookshelfPosition', query: { 'bookShelfDetails': res }}) |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
|
|
}, |
|
|
|
toDelete(datas) { |
|
|
|
this.$confirm('此操作将删除当前所选书架<span>你是否还要继续?</span>', '提示', { |
|
|
@ -358,7 +544,7 @@ export default { |
|
|
|
ids.push(val.id) |
|
|
|
}) |
|
|
|
console.log(ids) |
|
|
|
crudFloor.del(ids).then(res => { |
|
|
|
crudShelf.del(ids).then(res => { |
|
|
|
console.log(res) |
|
|
|
this.$message({ message: res, type: 'success', offset: 8 }) |
|
|
|
this.crud.delAllLoading = false |
|
|
@ -370,6 +556,83 @@ export default { |
|
|
|
}).catch(() => { |
|
|
|
this.crud.delAllLoading = false |
|
|
|
}) |
|
|
|
}, |
|
|
|
initCanvasPreview(drawinfo) { |
|
|
|
this.canvasPreview = new fabric.Canvas('canvasPreview', { |
|
|
|
skipTargetFind: false, |
|
|
|
selectable: false, |
|
|
|
selection: false |
|
|
|
}) |
|
|
|
|
|
|
|
this.canvasPreview.selectionColor = 'rgba(0,0,0,0.05)' |
|
|
|
this.loadDrawPreview(drawinfo) |
|
|
|
this.canvasPreview.on('mouse:wheel', this.mouse) |
|
|
|
}, |
|
|
|
// 鼠标滚轮放大缩小 |
|
|
|
mouse(e) { |
|
|
|
if (undefined === e) return |
|
|
|
let zoom = (e.e.deltaY > 0 ? -0.1 : 0.1) + this.canvasPreview.getZoom() |
|
|
|
zoom = Math.max(0.8, zoom) |
|
|
|
// 最小为原来的1/10 |
|
|
|
zoom = Math.min(3, zoom) |
|
|
|
// 最大是原来的3倍 |
|
|
|
const zoomPoint = new fabric.Point(e.e.pageX, e.e.pageY) |
|
|
|
this.canvasPreview.zoomToPoint(zoomPoint, zoom) |
|
|
|
}, |
|
|
|
// 回显详情信息 |
|
|
|
loadDrawPreview(drawinfo) { |
|
|
|
const self = this |
|
|
|
const pointGroup = drawinfo.pointInfo |
|
|
|
const imgInfo = drawinfo.imgInfo |
|
|
|
imgInfo.src = self.imageUrl |
|
|
|
// 加载底图 |
|
|
|
fabric.util.enlivenObjects([imgInfo], objects => { |
|
|
|
objects.forEach(o => { |
|
|
|
o.selectable = false |
|
|
|
o.hasControls = false |
|
|
|
o.centeredScaling = false |
|
|
|
self.canvasPreview.add(o) |
|
|
|
}) |
|
|
|
// 处理多边形绘制回显操作 |
|
|
|
pointGroup.forEach(async(item, index) => { |
|
|
|
if (item.pointInfo !== '') { |
|
|
|
const polygon = new fabric.Polygon(item.pointInfo, { |
|
|
|
name: item.name, |
|
|
|
stroke: 'rgba(196,43, 1, 1)', |
|
|
|
strokeWidth: self.drawWidth, |
|
|
|
fill: 'rgba(196,43, 1, 0.3)', |
|
|
|
opacity: 1, |
|
|
|
selectable: false, |
|
|
|
hasBorders: false, |
|
|
|
hasControls: false, |
|
|
|
originX: 'left', // 设置原点为左上角 |
|
|
|
originY: 'top' // 设置原点为左上角 |
|
|
|
}) |
|
|
|
// polygon.index = index |
|
|
|
self.canvasPreview.add(polygon) |
|
|
|
|
|
|
|
polygon.on('mousedown', function(e) { |
|
|
|
console.log('Rect ' + (index + 1) + ' clicked', e) |
|
|
|
console.log('e.target.name', e.target.name) |
|
|
|
}) |
|
|
|
|
|
|
|
polygon.on('mouseover', function(e) { |
|
|
|
console.log('e', e) |
|
|
|
console.log('e.target', e.target) |
|
|
|
console.log('e.target.name', e.target.name) |
|
|
|
this.set({ opacity: 0.3, hoverCursor: 'pointer' }) |
|
|
|
self.canvasPreview.renderAll() |
|
|
|
}) |
|
|
|
|
|
|
|
// 监听鼠标移出事件 |
|
|
|
polygon.on('mouseout', function() { |
|
|
|
this.set({ opacity: 1 }) |
|
|
|
self.canvasPreview.renderAll() |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
self.canvasPreview.renderAll() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|