602 lines
13 KiB
Vue

<template>
<view class="addIssue">
<view class="fixedheader">
<headers :showBack="true" :themeType="true">
<view class="headerName">
设备列表
</view>
</headers>
</view>
<view class="search-box" :style="{paddingTop: mobileTopHeight + 44 + 'px'}">
<view class="uni-form-item">
<u-search class="uni-input" placeholder="搜索设备名称" :show-action="false" @change="loadData"
v-model="policeCameraInfo.devName"></u-search>
</view>
<u-dropdown @open="open" @close="close" :style="dropDownShow ? '' :'overflow:hidden'" :overlay="true"
active-color="#3190F3">
<u-dropdown-item
:title="policeCameraInfo.groupId == '' ? '分组' : dataListUp(policeCameraGroupList, policeCameraInfo.groupId)"
v-model="policeCameraInfo.groupId" :options="policeCameraGroupList">
<view class="slot-content">
<scroll-view scroll-y="true" class="scroll-view">
<view @click="onMenuClick(item, 1)" class="cell-box" v-for="item in policeCameraGroupList"
:key="item.id">
<view>{{item.label}}</view>
<image v-if="policeCameraInfo.groupId == item.value"
src="/static/staffAttendance/identity-success.png" mode=""></image>
</view>
</scroll-view>
</view>
</u-dropdown-item>
<u-dropdown-item @change="onMenuChage" v-model="policeCameraInfo.stateType" :options="inserviceTypeList"
:title="policeCameraInfo.stateType == '' ? '状态' : dataListUp(inserviceTypeList, policeCameraInfo.stateType)"></u-dropdown-item>
</u-dropdown>
</view>
<view class="content" :style="{paddingTop: mobileTopHeight + 130 + 'px'}">
<view class="content_main">
<view class="content_main-box" v-for="item in policeCameraItemList" :key="item.itemId">
<view>
<view>
<checkbox-group @change="onChangeClick">
<checkbox :disabled="item.bindChecked" :value="item.itemId" :checked="item.checked" />
</checkbox-group>
<view>{{item.devName}}</view>
</view>
<view :class="{'boundalready': item.bindChecked}">{{item.bindChecked ? '已绑定' : '空闲'}} </view>
</view>
<view class="">
<image v-if="item.pic" :src="url_config + 'image/' + item.pic"
mode=""></image>
<image v-else src="/static/staffAttendance/attendance-bg2.png" mode=""></image>
<view>
<view>
<view>使用人</view>
<view>{{item.userNames ? item.userNames : '--'}}</view>
</view>
<view>
<view>编号</view>
<view>{{item.devSn}}</view>
</view>
</view>
</view>
</view>
</view>
<view class="confrim-btn">
<view @click="onNavigateBack">取消返回</view>
<view @click="onSubmit">确定添加</view>
</view>
</view>
<u-modal @cancel="onCancel" @confirm="onConfirm" v-model="submitShow" confirm-text="绑定完成" :show-cancel-button="true" cancel-text="继续添加" content="设备已绑定作业票,请选择继续添加设备或者绑定完成进行下一步操作"></u-modal>
</view>
</template>
<script>
import TreeView from '@/components/tree-view/TreeView.vue';
export default {
components: {
TreeView
},
data() {
return {
mobileTopHeight: 0,
projectDetail: {},
searchName: "",
inserviceTypeList: [{
label: '全部',
value: ''
},
{
label: '空闲',
value: '1'
},
{
label: '已绑定',
value: '2'
}
],
dropDownShow: false,
submitShow: false,
policeCameraGroupList:[],
policeCameraItemList: [],
policeCameraInfo: {
groupId: "",
stateType: "",
devName: "",
},
selectList: [],
bindSelectList: [],
}
},
onLoad(opts) {
this.projectDetail = JSON.parse(uni.getStorageSync('projectDetail'));
this.bindSelectList = JSON.parse(opts.selectList);
this.getPoliceCameraGroupListFn();
this.getPoliceCameraItemListFn();
},
mounted() {
var that = this
uni.getSystemInfo({
success(res) {
that.mobileTopHeight = res.statusBarHeight ? res.statusBarHeight : 0;
uni.setStorageSync('systemInfo', res)
console.log(res)
}
})
},
methods: {
// 取消
onNavigateBack() {
uni.navigateBack({
delta: 1
})
},
onChangeClick(e){
if(e.detail.value.length > 0) {
const find = this.policeCameraItemList.find(item => item.itemId == e.detail.value[0]);
if(find) {
find.checked = true;
}
}
},
onCancel(){
this.getPoliceCameraItemListFn();
this.submitShow = false;
},
onSubmit() {
const resultList = this.policeCameraItemList.filter(item => item.checked).map(item => item.itemId);
this.selectList = [...this.selectList, ...resultList];
console.log(this.selectList)
this.submitShow = true;
},
onConfirm() {
uni.$emit('updateData', JSON.stringify(this.selectList))
uni.navigateBack({
delta: 1
})
},
open() {
this.dropDownShow = true
},
close() {
this.dropDownShow = false
},
onMenuChage(event) {
this.loadData();
},
onMenuClick(row, type) {
if (type == 1) {
this.policeCameraInfo.groupId = row.value;
}
this.loadData();
},
loadData(){
this.getPoliceCameraItemListFn();
},
// 获取分组
getPoliceCameraGroupListFn() {
let that = this;
let data = {
projectSn: this.projectDetail.projectSn,
};
this.sendRequest({
url: 'xmgl/policeCameraGroup/list',
method: 'POST',
data: data,
success: res => {
if (res.code == 200) {
const resultList = res.result.map(item => {
return {
...item,
value: item.id,
label: item.groupName,
}
});
that.policeCameraGroupList = [{
value: "",
label: "全部"
}, ...resultList]
}
}
})
},
// 获取设备列表
getPoliceCameraItemListFn() {
let that = this;
let data = {
projectSn: this.projectDetail.projectSn,
groupId: this.policeCameraInfo.groupId,
devName: this.policeCameraInfo.devName,
};
this.sendRequest({
url: 'xmgl/policeCameraItem/list',
method: 'get',
data: data,
success: res => {
if (res.code == 200) {
const resultList = res.result.map(item => {
return {
...item,
bindChecked: this.bindSelectList.includes(item.itemId) || item.bindTicket == 1 ? true : false,
checked: false,
}
});
if(that.policeCameraInfo.stateType == 1) {
that.policeCameraItemList = resultList.filter(item => !item.bindChecked);
} else if(that.policeCameraInfo.stateType == 2) {
that.policeCameraItemList = resultList.filter(item => item.bindChecked);
} else {
that.policeCameraItemList = resultList;
}
}
}
})
},
},
computed: {
dataListUp() {
return (dataList, id) => {
const find = dataList.find(item => item.value == id);
return find ? find.label : '--'
}
}
}
}
</script>
<style scoped lang="scss">
/deep/ .u-mode-center-box {
width: 698rpx !important;
.u-model__title {
padding: 0;
font-size: 32rpx;
color: #272D45;
height: 86rpx;
background-color: #FFFFFF;
box-shadow: 0rpx 8rpx 10rpx -8rpx rgba(81,129,246,0.42);
display: flex;
align-items: center;
justify-content: center;
}
.u-model__content__message {
padding: 26rpx 26rpx 72rpx;
font-size: 28rpx;
color: #171717;
}
.u-model__footer__button {
height: 76rpx;
line-height: 76rpx;
background-color: rgba(81,129,246,0.1);
font-weight: 500;
font-size: 28rpx;
color: #5181F6;
}
.hairline-left {
background-color: #5181F6;
color: white !important;
}
}
.addIssue {
min-height: 100vh;
background-color: #F2F3F7;
}
.content {
.content_main {
margin-top: 26rpx;
// background-color: white;
padding-bottom: 138rpx;
min-height: calc(100vh - 130rpx - 138rpx - 26rpx);
>.content_main-box:not(:first-child) {
margin-top: 20rpx;
}
.content_main-box {
height: 224rpx;
background-color: #FFFFFF;
padding: 26rpx;
/deep/ .uni-checkbox-input {
width: 32rpx;
height: 32rpx;
}
>view:last-child {
margin-top: 22rpx;
display: flex;
align-items: center;
>image {
width: 80rpx;
height: 104rpx;
border-radius: 6rpx;
}
>view:last-child {
display: flex;
flex-direction: column;
justify-content: space-between;
margin-left: 40rpx;
height: 104rpx;
>view {
display: flex;
>view:first-child {
width: 84rpx;
font-size: 28rpx;
color: #4D4D4D;
text-align: right;
}
>view:last-child {
margin-left: 40rpx;
font-size: 28rpx;
color: #4D4D4D;
}
}
}
}
>view:first-child {
display: flex;
align-items: center;
justify-content: space-between;
>view:first-child {
display: flex;
align-items: center;
>view:last-child {
margin-left: 12rpx;
font-weight: 800;
font-size: 30rpx;
color: #171717;
}
}
>view:last-child {
width: 90rpx;
height: 42rpx;
background-color: rgba(71, 195, 147, 0.1);
border-radius: 76rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 21rpx;
color: #47C393;
}
.boundalready {
background-color: rgba(113,75,0,0.1) !important;
color: #714B00 !important;
}
}
}
}
.confrim-btn {
width: 100%;
padding: 18rpx 26rpx;
background-color: #FFFFFF;
box-shadow: 0rpx -8rpx 8rpx 0rpx rgba(0, 0, 0, 0.05);
display: flex;
position: fixed;
bottom: 0;
z-index: 1;
>view {
width: 50%;
height: 76rpx;
font-weight: 500;
font-size: 28rpx;
display: flex;
align-items: center;
justify-content: center;
}
>view:first-child {
background-color: rgba(81, 129, 246, 0.1);
border-radius: 6rpx 0rpx 0rpx 6rpx;
color: #5181F6;
}
>view:last-child {
background-color: #5181F6;
border-radius: 0rpx 6rpx 6rpx 0rpx;
color: #FFFFFF;
}
}
}
.fixedheader {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 999;
/deep/ .headerBox {
border-bottom: none;
}
.headerName {
z-index: 1;
}
}
.search-box {
background-color: white;
width: 100%;
position: fixed;
z-index: 99;
.uni-form-item {
padding: 26rpx 26rpx 0;
position: relative;
.uni-input {
border: 2rpx solid #E4E4E4;
border-radius: 68rpx;
padding: 0;
font-size: 30rpx;
color: #444444;
/deep/ .u-content {
background-color: #FFFFFF !important;
.u-input {
background-color: #FFFFFF !important;
color: #999999 !important;
}
}
}
.search-btn {
width: 130rpx;
height: calc(100% - 26rpx - 26rpx);
background: #2F8FF3;
border-radius: 68rpx;
font-size: 30rpx;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
right: 26rpx;
top: 50%;
transform: translateY(-50%);
}
}
}
.scroll-view {
margin: 10rpx 26rpx;
width: calc(100% - 26rpx - 26rpx);
max-height: 60vh;
border-radius: 6rpx;
}
/deep/ .u-dropdown__menu__item__text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/* 限制为两行 */
overflow: hidden;
}
.cell-box {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
position: relative;
box-sizing: border-box;
width: 100%;
padding: 13px 16px;
font-size: 14px;
line-height: 27px;
color: #606266;
background-color: #fff;
text-align: left;
>view {
flex: 1;
margin-right: 20rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/* 限制为两行 */
overflow: hidden;
}
.box-active {
color: rgb(49, 144, 243);
}
>image {
width: 32rpx;
height: 32rpx;
}
}
/deep/ .u-mask {
z-index: 10 !important;
}
/deep/ .u-dropdown__content {
// height: initial !important;
// top: 166rpx !important;
overflow: visible !important;
}
/deep/ .van-dropdown-item__content,
/deep/ .u-cell-item-box {
margin: 20rpx 26rpx;
width: calc(100% - 26rpx - 26rpx);
border-radius: 6rpx;
}
/deep/ .u-cell-item-box {
// max-height: 60vh;
// overflow-y: scroll;
}
/deep/ .uicon-arrow-down {
// position: absolute;
// top: 50%;
// right: -4px;
margin-top: -5px;
border: 3px solid;
border-color: transparent transparent #dcdee0 #dcdee0;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: .8;
content: '';
}
/deep/ .u-dropdown__menu__item__arrow--rotate .uicon-arrow-down {
border-color: transparent transparent rgb(49, 144, 243) rgb(49, 144, 243);
}
/deep/ .uicon-arrow-down::before {
display: none;
}
/deep/ .u-dropdown__menu {
flex-wrap: wrap;
// height: 166rpx !important;
box-shadow: none;
.u-dropdown__menu__item {
width: 33%;
// height: 82rpx;
flex: initial;
}
}
.new-nodata {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
>view {
width: 300rpx;
height: 300rpx;
background-image: url('@/static/staffAttendance/nodata.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
>text {
font-size: 22rpx;
color: #808080;
margin-top: 60rpx;
}
}
</style>