| | |
| | | </div> |
| | | <div class="body"> |
| | | <div class="flex-box"> |
| | | <div> |
| | | <!-- <div> |
| | | <el-date-picker |
| | | v-model="videoSearchTime" |
| | | type="datetimerange" |
| | |
| | | end-placeholder="结束日期" |
| | | align="right" |
| | | ></el-date-picker> |
| | | </div> --> |
| | | <div> |
| | | <el-input |
| | | class="keyword-input" |
| | | v-model="keyword1" |
| | | placeholder="请输入机车号" |
| | | size="small" |
| | | style="margin: 0 10px;" |
| | | clearable="true" |
| | | ></el-input> |
| | | </div> |
| | | <div> |
| | | <el-input |
| | | class="keyword-input" |
| | | v-model="videoListSearchWord" |
| | | placeholder="请输入机车号,多个用','分隔" |
| | | size="mini" |
| | | v-model="keyword2" |
| | | placeholder="请输入车次" |
| | | size="small" |
| | | style="margin: 0 10px;" |
| | | clearable="true" |
| | | ></el-input> |
| | | </div> |
| | | <div></div> |
| | | <div> |
| | | <el-input |
| | | class="keyword-input" |
| | | v-model="keyword3" |
| | | placeholder="请输入司机姓名" |
| | | size="small" |
| | | style="margin: 0 10px;" |
| | | clearable="true" |
| | | ></el-input> |
| | | </div> |
| | | <el-button |
| | | type="primary" |
| | | @click="searchVideoList" |
| | | size="mini" |
| | | @click="renderVideoTable" |
| | | size="small" |
| | | style="margin-right:10px;" |
| | | >搜索</el-button> |
| | | <el-checkbox v-model="isShowUndistributedOnly">仅显示未分配</el-checkbox> |
| | | <!-- <el-checkbox v-model="isShowUndistributedOnly">仅显示未分配</el-checkbox> --> |
| | | <el-checkbox v-model="notAssignedOnly">仅显示未分配</el-checkbox> |
| | | </div> |
| | | <div class="video-list"> |
| | | <el-collapse v-model="actCollapseName"> |
| | | <el-collapse-item :name="trainNo.id" v-for="trainNo in trainNoList" :key="trainNo.id"> |
| | | <template slot="title"> |
| | | <div> |
| | | <el-checkbox v-model="trainNo.checked" style="padding-right:10px;"></el-checkbox> |
| | | <span>{{trainNo.no}}({{trainNo.videos.length}})</span> |
| | | <el-checkbox-group v-model="trainNochecked"> |
| | | <el-collapse v-model="actCollapseName"> |
| | | <el-collapse-item |
| | | :name="vkey" |
| | | v-for="(v,vkey,i) in videoPackageList" |
| | | :key="i" |
| | | > |
| | | <template slot="title"> |
| | | <div> |
| | | <el-checkbox |
| | | :label="i" |
| | | style="padding-right:10px;" |
| | | ></el-checkbox> |
| | | <span>{{vkey}}({{v.length}})</span> |
| | | </div> |
| | | </template> |
| | | <div class="video-detail" v-for="video in v" :key="video.ID"> |
| | | <i class="el-icon-film" style="margin-left: 20px;"></i> |
| | | <span style="padding-left: 10px;">{{video.VideoName}}</span> |
| | | </div> |
| | | </template> |
| | | <div v-for="video in trainNo.videos" :key="video.id"> |
| | | <i class="el-icon-film" style="margin-left: 20px;"></i> |
| | | <span style="padding-left: 10px;">{{video.name}}</span> |
| | | </div> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </el-checkbox-group> |
| | | <!-- <el-pagination |
| | | @size-change="handleTrainNoSizeChange" |
| | | @current-change="handleTrainNoCurChange" |
| | | :current-page.sync="trainNoCurPage" |
| | | :page-size="trainNoPageSize" |
| | | :page-sizes="trainNoPageSizes" |
| | | layout="total,sizes, prev, pager, next" |
| | | :total="trainNoTotal" |
| | | ></el-pagination> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="top-right partment"> |
| | | <div class="header"> |
| | | <el-checkbox v-model="isAllCheck" :indeterminate="isIndeterminate" @change="handleCheckAllChange"></el-checkbox> |
| | | <div class="title">人员列表</div> |
| | | <el-input size="small" @input="searchName" v-model="inputName" placeholder="请输入内容" clearable="true"></el-input> |
| | | </div> |
| | | <div class="body"> |
| | | <div class="flex-box"> |
| | | <!-- <div class="flex-box"> |
| | | <label>部门:</label> |
| | | <span class="checked-org" :class="{'null':!checkedOrg.id}">{{checkedOrg.label||'全部'}}</span> |
| | | <el-button type="primary" size="mini" @click="selOrg">选择部门</el-button> |
| | | </div> |
| | | </div> --> |
| | | <div class="person-list"> |
| | | <div class="person" v-for="person in personList" :key="person.id"> |
| | | <el-checkbox v-model="person.personChecked">{{person.name}}</el-checkbox> |
| | | </div> |
| | | <el-checkbox-group v-model="memberChecked" @change="handleCheckedCitiesChange"> |
| | | <div class="person" v-for="person in personList" :key="person.ID"> |
| | | <el-checkbox :label="person.ID">{{person.Name}}</el-checkbox> |
| | | </div> |
| | | </el-checkbox-group> |
| | | <el-button |
| | | v-show="memberChecked.length && trainNochecked.length" |
| | | type="primary" |
| | | @click="toAddAssignList" |
| | | size="small" |
| | | >加入待分配列表</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | size="mini" |
| | | style="margin-left: 10px;" |
| | | > |
| | | <el-button slot="append" icon="el-icon-search" @click="searchTask"></el-button> |
| | | <el-button slot="append" icon="el-icon-search" @click="renderTaskTable"></el-button> |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | <div class="body table-area"> |
| | | <div class="table-area"> |
| | | <div class="actions"> |
| | | <el-button type="primary" size="small" @click="distributeTask">分配任务</el-button> |
| | | <el-button |
| | | type="primary" |
| | | size="small" |
| | | @click="distributeTask" |
| | | v-if="taskType==1&&taskVideoChecked.length" |
| | | >分配任务</el-button> |
| | | </div> |
| | | <el-table class="thbg" :data="taskTableData" ref="elTable"> |
| | | <el-table-column type="expand"> |
| | | <template slot-scope="props"> |
| | | <div class="video-item" v-for="video in props.videos" :key="video.id">{{video.name}}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="trainNo" label="机车号"></el-table-column> |
| | | <el-table |
| | | class="thbg" |
| | | :data="taskTableData" |
| | | ref="elTable" |
| | | @selection-change="taskTableSelection" |
| | | v-loading |
| | | > |
| | | <el-table-column v-if="taskType==1" type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="LocomotiveNumber" label="机车号"></el-table-column> |
| | | <el-table-column label="视频数量"> |
| | | <template slot-scope="scope"> |
| | | <div>{{scope.row.videos.length}}</div> |
| | | <div>{{scope.row.LKGList.length}}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="person" label="分配人"></el-table-column> |
| | | <el-table-column prop="time" label="分配时间"></el-table-column> |
| | | <el-table-column prop="handle" label="处理人"></el-table-column> |
| | | <el-table-column prop="DistributionUser" label="分配人"></el-table-column> |
| | | <el-table-column prop="DistributionDate" label="分配时间"></el-table-column> |
| | | <el-table-column prop="HandlingUsers" label="处理人"></el-table-column> |
| | | <el-table-column label="操作"> |
| | | <template slot-scope="scope"> |
| | | <div class="operation"> |
| | | <span @click="cancelDistribute(scope.row)">取消分配/指派</span> |
| | | <span @click="toggleCollapse(scope.row)">查看/隐藏车次</span> |
| | | <span @click="cancelDistribute(scope.row)" v-show="taskType==1">取消分配</span> |
| | | <span @click="cancelDistribute(scope.row)" v-show="taskType==2">取消指派</span> |
| | | <!-- <span @click="toggleCollapse(scope.row)">查看/隐藏车次</span> --> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column type="expand"> |
| | | <template slot-scope="scope"> |
| | | <div |
| | | class="video-item" |
| | | v-for="video in scope.row.LKGList" |
| | | :key="video.ID" |
| | | >{{video.VideoName}}</div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getOrganizeTree } from '@/api/shuohuang'; |
| | | import { getOrganizeTree, getMemberByOrg, getVideoListBySearch, addToAssignList, getTaskList, distributeTask, cancelMission } from '@/api/shuohuang'; |
| | | export default { |
| | | data () { |
| | | return { |
| | | isAllCheck:false, |
| | | taskType: '1', |
| | | keyWordOfTask: '', |
| | | videoSearchTime: [], |
| | | // videoSearchTime: [], |
| | | pickerOptions: { |
| | | shortcuts: [{ |
| | | text: '今天', |
| | |
| | | }] |
| | | }, |
| | | isShowUndistributedOnly: false, |
| | | trainNoList: [ |
| | | { no: 'SS4B115', id: 'SS4B115', videos: [{ id: 'SS4B115', name: 'SS4B115_06_B节二端司机室_20201115_091500.mp4' }, { id: 'SS4B116', name: 'SS4B116_06_B节二端司机室_20201115_091500.mp4' }] }, |
| | | { no: 'SS5B115', id: 'SS5B115', videos: [{ id: 'SS5B116', name: 'SS5B116_06_B节二端司机室_20201115_091500.mp4' }] } |
| | | ], |
| | | videoListSearchWord: '', |
| | | videoPackageList: {}, |
| | | trainNochecked: [], |
| | | // trainNoCurPage: 1, |
| | | // trainNoPageSize: 8, |
| | | // trainNoPageSizes: [5, 8, 12], |
| | | trainNoTotal: 0, |
| | | keyword1: '', |
| | | keyword2: '', |
| | | keyword3: '', |
| | | actCollapseName: '', |
| | | checkedOrg: {}, |
| | | orgTreeDialogVisible: false, |
| | | organizeData: [], |
| | | |
| | | personList: [ |
| | | { name: '张三', id: 'zs' }, |
| | | { name: '李斯', id: 'ls' } |
| | | ], |
| | | personList: [], |
| | | memberChecked: [], |
| | | taskTableData: [], |
| | | taskVideoChecked: [], |
| | | notAssignedOnly: false, |
| | | isIndeterminate:false, |
| | | inputName:"" |
| | | } |
| | | }, |
| | | mounted () { |
| | | this.getOrganizeTreeData(); |
| | | this.refreshAll(); |
| | | }, |
| | | watch: { |
| | | taskType (n, o) { |
| | | this.renderTaskTable(); |
| | | } |
| | | }, |
| | | methods: { |
| | | searchMemberByOrg(){ |
| | | debugger |
| | | |
| | | searchName(val){ |
| | | console.log(this.personList ,val); |
| | | if (val=="") { |
| | | this.searchMemberByOrg() |
| | | } |
| | | if (val.trim()=="") { |
| | | return |
| | | } |
| | | this.personList = this.personList.filter(item=>{ |
| | | return item.Name.indexOf(val)>-1 |
| | | }) |
| | | }, |
| | | handleCheckAllChange(val) { |
| | | let arr =[] |
| | | this.personList.forEach(item=>{ |
| | | arr.push(item.ID) |
| | | }) |
| | | this.memberChecked = val ? arr : []; |
| | | this.isIndeterminate = false; |
| | | }, |
| | | handleCheckedCitiesChange(value) { |
| | | let checkedCount = value.length; |
| | | this.isAllCheck = checkedCount === this.personList.length; |
| | | this.isIndeterminate = checkedCount > 0 && checkedCount < this.personList.length; |
| | | }, |
| | | cancelDistribute (row) { |
| | | cancelMission({ UniqeID: row.LKGList[0].UniqeID }).then(res => { |
| | | if (res.success) { |
| | | this.$notify({ |
| | | type: 'success', |
| | | message: res.msg |
| | | }); |
| | | this.refreshAll(); |
| | | } |
| | | }) |
| | | }, |
| | | refreshAll () { |
| | | this.trainNochecked = []; |
| | | this.checkedOrg = {}; |
| | | this.memberChecked = []; |
| | | this.searchMemberByOrg(); |
| | | this.renderVideoTable(); |
| | | this.renderTaskTable(); |
| | | }, |
| | | taskTableSelection (val) { |
| | | this.taskVideoChecked = val |
| | | }, |
| | | renderTaskTable () { |
| | | let _this = this; |
| | | let params = { |
| | | IsPackage: 0, |
| | | Status: this.taskType |
| | | }; |
| | | getTaskList(params).then(res => { |
| | | _this.taskTableData = res.data |
| | | }) |
| | | }, |
| | | // handleTrainNoSizeChange (size) { |
| | | // this.trainNoPageSize = size; |
| | | // this.renderVideoTable(); |
| | | // }, |
| | | handleTrainNoCurChange () { |
| | | this.renderVideoTable(); |
| | | }, |
| | | renderVideoTable () { |
| | | let _this = this; |
| | | let params = { |
| | | CarNumber: this.keyword1, |
| | | TrainNumber: this.keyword2, |
| | | DriverName: this.keyword3, |
| | | // PageIndex: this.trainNoCurPage, |
| | | // PageSize: this.trainNoPageSize, |
| | | notAssignedOnly: this.notAssignedOnly, |
| | | }; |
| | | getVideoListBySearch(params).then(res => { |
| | | _this.videoPackageList = res.data |
| | | _this.trainNoTotal = res.total; |
| | | }); |
| | | }, |
| | | toAddAssignList () { |
| | | let _this = this; |
| | | let params = { |
| | | UserID: this.memberChecked[0], |
| | | UniqeID: this.trainNochecked.join(',') |
| | | }; |
| | | addToAssignList(params).then(res => { |
| | | if (res.success) { |
| | | this.$notify({ |
| | | type: 'success', |
| | | message: res.msg |
| | | }); |
| | | _this.refreshAll(); |
| | | } |
| | | }) |
| | | }, |
| | | searchMemberByOrg () { |
| | | let _this = this; |
| | | getMemberByOrg({}).then(res => { |
| | | _this.personList = res.data; |
| | | // _this.orgTreeDialogVisible = false; |
| | | }) |
| | | }, |
| | | deepNodeChildren (node) { |
| | | if (node.ChildDept && node.ChildDept.length > 0) { |
| | |
| | | }) |
| | | }, |
| | | distributeTask () { |
| | | |
| | | let _this = this; |
| | | let arr = this.taskVideoChecked.map(train => train['LKGList'][0]['UniqeID']) |
| | | let params = { |
| | | UniqeID: arr.join(',') |
| | | } |
| | | distributeTask(params).then(res => { |
| | | _this.renderTaskTable(); |
| | | }) |
| | | }, |
| | | searchVideoList () { |
| | | |
| | | }, |
| | | selOrg () { |
| | | this.orgTreeDialogVisible = true; |
| | | }, |
| | | searchTask () { |
| | | |
| | | } |
| | | // selOrg () { |
| | | // this.orgTreeDialogVisible = true; |
| | | // }, |
| | | } |
| | | } |
| | | </script> |
| | |
| | | .video-list { |
| | | margin-top: 14px; |
| | | text-align: left; |
| | | .el-checkbox-group { |
| | | margin-bottom: 20px; |
| | | .el-checkbox__label{ |
| | | display: none; |
| | | } |
| | | .video-detail { |
| | | i { |
| | | //color: #409EFF; |
| | | } |
| | | color: #888; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .top-right { |
| | | width: 360px; |
| | | height: 465px; |
| | | // overflow-y:auto; |
| | | .header{ |
| | | .el-input{ |
| | | line-height: 41px; |
| | | width: 185px; |
| | | font-size: 14px; |
| | | } |
| | | .el-checkbox{ |
| | | float: left; |
| | | padding-left: 20px; |
| | | height: 40px; |
| | | line-height: 40px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | .checked-org { |
| | | flex: 1; |
| | | text-align: left; |
| | |
| | | } |
| | | .person-list { |
| | | padding-top: 14px; |
| | | |
| | | .el-checkbox-group{ |
| | | height: 330px; |
| | | |
| | | margin-bottom: 8px; |
| | | overflow: auto; |
| | | } |
| | | .person { |
| | | text-align: left; |
| | | margin-bottom: 10px; |
| | | |
| | | padding-bottom: 6px; |
| | | border-bottom: 1px solid #eee; |
| | | } |