vue3 用法汇总(二)
1、列表中鼠标放在不同单元格显示不同的背景颜色
<el-table
v-resize:44
:data="tableData"
class="table marking-table"
border
style='margin: 10px 0px'
highlight-current-row
element-loading-text="数据正在加载中..."
v-loading='isLoading'
header-cell-class-name="table-header"
:cell-style="cellStyle"
@cell-click="cellClick"
@selection-change="handleSelectionChange"
@cell-mouse-enter="mouseEnter"
@cell-mouse-leave="mouseLeave"
>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column type="index" label="NO." width='55px'/>
<el-table-column prop="lineName" width='100px' />
<el-table-column prop="plateNumber" width='140px' />
<!-- <template #default="scope">
<el-tooltip placement="top" effect="dark" content="点击单元格可编辑" >
<span>{{scope.row.plateNumber}}</span>
</el-tooltip>
</template>
</el-table-column> -->
<el-table-column label="车组人员" align="center">
<el-table-column prop="personList" width='260px' >
<template #default="scope">
<div v-for="(item, index) in scope.row.personList" :key="index">
{{ item.personName }} - {{ item.position }}
<span v-if="item.contactInfo">-{{ item.contactInfo }}</span>
<span v-else></span>
<span v-if="item.isMaster"> - (车长)</span>
</div>
</template>
</el-table-column>
<el-table-column prop="pmPersonList" width='260px' >
<template #default="scope">
<div v-for="(item, index) in scope.row.pmPersonList" :key="index">
{{ item.personName }} - {{ item.position }}
<span v-if="item.contactInfo">-{{ item.contactInfo }}</span>
<span v-else></span>
<span v-if="item.isMaster"> - (车长)</span>
</div>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="earlyBranch" >
<template #default="scope">
<div v-for="(item, index) in scope.row.earlyBranch" :key="index">
<div> {{ item.branchName }}</div>
</div>
<el-tooltip ref="tooltipRef" placement="top" v-model:visible="visible" :virtual-ref="buttonRef" virtual-triggering >
<template #content>
<span>点击单元格可编辑</span>
</template>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="lateBranch">
<template #default="scope">
<div v-for="(item, index) in scope.row.lateBranch" :key="index">
{{ item.branchName }}
</div>
</template>
</el-table-column>
<el-table-column prop="selfDevices" >
<template #default="scope">
<div v-for="(item, index) in scope.row.selfDevices" :key="index">
{{ item.branchName }}
</div>
</template>
</el-table-column>
<el-table-column prop="doorstep" >
<template #default="scope">
<div v-for="(item, index) in scope.row.doorstep" :key="index">
{{ item.branchName }}
</div>
</template>
</el-table-column>
<el-table-column prop="tempBranch" >
<template #default="scope">
<div v-for="(item, index) in scope.row.tempBranch" :key="index">
{{ item.branchName }}
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="150px" align="center" >
<template #default="scope">
<el-button type="primary" icon="Stamp" circle plain @click="handleCar(scope.row)" />
<el-button type="success" :icon="Edit" circle plain @click="handleTask(scope.row)" />
<el-popconfirm :title="`确定删除这条记录吗`" width="260px" @confirm="delSchedule(scope.row.ids)">
<template #reference>
<el-button type="danger" title="删除" icon="Minus" size="small" circle plain></el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<!-- 网点调整弹出框 -->
<branch-adjust ref="editDialog" v-model:visible="viewState.visible" :title="viewState.title" :taskId="viewState.taskId" @close="closeEdit" />
<!--人员调整弹出框 -->
<person-adjust ref="personDialog" v-model:visible="personState.visible" @close="closePersonEdit" />
2、具体方法实现
// 弹框调整页面
import BranchAdjust from "@/views/dispatch/components/branchAdjust.vue"
// 弹框调整页面
import PersonAdjust from "@/views/dispatch/components/personAdjust.vue"
//定义dialog中的值 const viewState = reactive({ visible: false, title: '', taskId:'' })
//人员调整的弹框参数
const personDialog = ref<any>();
// 定义人员弹框中的值
const personState = reactive({
visible: false,
title: '',
})
// 单元格样式修改
const cellStyle=(row:any) =>{
if (selectRow.value === row.row && selectColumn.value === row.column) {
//点击后的颜色
return {'background-color':'#a0cfff','color': '#606266', 'font-weight':'bold'}
}
else if (hoverRow.value === row.row && hoverColumn.value === row.column){
return {'cursor':'pointer','background-color':'#a0cfff','color': '#606266'}
}
else {
return {'background-color':'#fff'}
}
}
// 将鼠标移动到单元格内,样式变化,给出可编辑提示
const hoverRow=ref();
const hoverColumn=ref();
// 控制tooltip显示隐藏
const visible = ref(false);
const buttonRef: Ref<HTMLElement | null> = ref(null); //鼠标选中的元素
const mouseEnter=(row:any,column:any,cell:any,event:any)=>{
if (column.property == "personList" || (column.property == "pmPersonList" && row.pmPersonList != null)
|| (column.property == "earlyBranch" && row.earlyTask != null) || (column.property == "lateBranch" && row.lateTask != null)
|| (column.property == "selfDevices" && row.selfTask != null) || (column.property == "doorstep" && row.doorTask !=null)){
hoverRow.value = row
hoverColumn.value = column
}
if(column.property == "personList" || (column.property == "pmPersonList" && row.pmPersonList != null)
|| (column.property == "earlyBranch" && row.earlyTask != null)||(column.property == "lateBranch" && row.lateTask != null)
|| (column.property == "selfDevices" && row.selfTask != null) || (column.property == "doorstep" && row.doorTask !=null )){
// 显示提示信息
visible.value=true
buttonRef.value = event.currentTarget
}else{
visible.value=false
}
}
// 鼠标移除单元格
const mouseLeave=(row:any ,column:any)=>{
hoverRow.value=null;
hoverColumn.value=null;
visible.value=false
}
const selectRow=ref();
const selectColumn=ref();
// 选中单元格
const cellClick=(row:any ,column:any) =>{
// 当鼠标放在列上的时候显示不同的样式
if (column.property == "personList" ||column.property == "pmPersonList" ||
column.property == "earlyBranch"||column.property == "lateBranch" || column.property == "selfDevices" || column.property == "doorstep"){
selectRow.value = row
selectColumn.value = column
scheduleId.value =row.id
}
// 如果是人员调整,直接显示之前的排班信息,只能调整人员
if(column.property == "personList" || column.property == "pmPersonList" ){
// 上午
if(column.property == "personList" && row.personList !=null && row.pmPersonList !=null){
personDialog.value.initData({ ...row },row.personList,"am");
personState.visible = true
} else if(column.property == "pmPersonList" && row.pmPersonList !=null ){
personDialog.value.initData({ ...row },row.pmPersonList,"pm");
personState.visible = true
}else if(column.property == "personList" && row.personList !=null && row.pmPersonList ==null){
personDialog.value.initData({ ...row },row.personList,"all");
personState.visible = true
}
}
// 网点调整
else if(column.property == "earlyBranch"||column.property == "lateBranch" || column.property == "selfDevices" || column.property == "doorstep"){
//是ref创建的,所以得加.value,调用子组件dialog的initEditData方法
if(column.property == "earlyBranch" && row.earlyTask != null){
passValueChild(true, '早送任务网点',row.earlyTask)
editDialog.value.initData([ ...row.earlyBranch ]);
}
else if(column.property == "lateBranch" && row.lateTask != null){
passValueChild(true, '晚收任务网点',row.lateTask)
editDialog.value.initData([...row.lateBranch]);
}
else if(column.property == "selfDevices" && row.selfTask != null){
passValueChild(true, '自助设备点',row.selfTask)
editDialog.value.initData([...row.selfDevices]);
}
else if(column.property == "doorstep" && row.doorTask != null){
passValueChild(true, '上门收款点',row.doorTask)
editDialog.value.initData([...row.doorstep]);
}
}
else{
}
}
//父类给子类传值
const passValueChild = (visible: any, title: any, taskId:any) => {
//子组件中的props接收此两个值
viewState.visible = visible
viewState.title = title
viewState.taskId =taskId
}
3、组件具体内容
<!--调整网点信息-->
<template>
<div class="edit-container" >
<el-dialog v-model="props.visible" :destroy-on-close="true" :title="props.title" @close="closeBranchDialog" :close-on-click-modal=false top="8vh" width="80%">
<el-row :gutter="20">
<!-- 显示之前的网点信息-->
<el-col :span="18">
<div style="overflow:auto;height:500px;">
<el-table
size="medium"
:border="true"
:data="branchTableData"
:row-style="changeColor"
:stripe=false
style="width: 100%;">
<el-table-column type="index" label="NO." align="center" width='55px'/>
<el-table-column prop="customerName" />
<el-table-column prop="branchName" />
<el-table-column prop="branchType">
<template #default="scope">
<option-tag :optionCode='scope.row.branchType'></option-tag>
</template>
</el-table-column>
<el-table-column prop="businessType">
<template #default="scope">
<option-tag :optionCode='scope.row.businessType'></option-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="150px">
<template #default="scope">
<el-popconfirm :title="`确定删除这条记录吗`" width="260px" @confirm="delBranch(scope.$index,scope.row)">
<template #reference>
<el-button type="danger" title="删除" icon="Minus" size="small" circle plain></el-button>
</template>
</el-popconfirm>
<el-button type="primary" title="上移" icon="ArrowUpBold" size="small" circle plain :disabled="scope.$index === 0" @click="moveUp(scope.$index, scope.row)" />
<el-button type="success" title="下移" icon="ArrowDownBold" size="small" circle plain :disabled="scope.$index === branchTableData.length -1 " @click="moveDown(scope.$index, scope.row)" />
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<!-- 选择网点-->
<el-col :span="6" >
<el-tag size="large" effect="dark" style="margin-bottom:5px;">选择网点信息</el-tag>
<el-form-item style="margin-bottom:3px;">
<base-customer-org-info-tree class="tree" @getNode="getNodeData" ref="baseTree" :checkNode="paramForm.id" style="width:100%;" :getdisAbled="getdisAbled" />
</el-form-item>
<base-branch-tree ref="branchTree" :data="branchData" @getNode="getBranchNode" />
</el-col>
</el-row>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeBranchDialog">取消</el-button>
<el-button type="primary" @click="handleBranchConfirm" >确定</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { reactive, ref , onMounted, toRefs, defineProps} from 'vue'
import { ElMessage } from 'element-plus'
import { SysOptionConf } from '@/api/basic/baseOptionConf/type';
import { queryOrgtypeId } from "@/api/basic/baseCustomerOrgInfo"
import { baseCustomerOrgInfo } from "@/api/basic/baseCashboxInfo/type"
import publicMethod from '@/views/basic/common/publicMethod'
import {editForm} from '@/api/basic/baseBillboxInfo/type'
import BaseBranchTree from "@/views/basic/components/baseBranchTree.vue"
import baseCustomerOrgInfoTree from "@/views/basic/components/baseCustomerOrgInfoTree.vue"
import { tableItem as baseCustomerOrgInfoTableItem } from "@/api/basic/baseCustomerOrgInfo/type"
import { tableItem as baseBranchInfoTableItem } from "@/api/basic/baseBranchInfo/type"
import { getBranchInfoById} from "@/api/basic/baseBranchInfo/index"
import publicData from '@/views/basic/common/publicData'
import { useCounterStore } from "@/store/modules/base"
// 引入请求接口
import { updateTaskInfo } from "@/api/dispatch/reality-schedule"
import useUserStore from '@/store/modules/user'
import useCommonStore from '@/store/modules/common'
let userStore = useUserStore()
const commonStore = useCommonStore()
//定义dialog中的值
const viewState = reactive({
orgId: '',
})
//子组件用prop声明接收的参数,可以使用 defineProps() 宏来定义
const props = defineProps({
title:{
type:String,
default:''
},
visible:{
type:Boolean,
default: false
},
taskId:{
type:String,
default: ''
},
})
const businessOption =commonStore.filterOptions(publicData.businessTypeCode);
const branchTypeOption = commonStore.filterOptions(publicData.branchTypeCode);
const branchTableData=ref([])
//从父类给子组件传值,将选择的网点信息在当前页面展示
function initData(editRow:any){
if(editRow!=""){
branchTableData.value= editRow
}
}
const branchData=reactive([])
//用defineEmits声明要调用父组件的方法
//这个是父组件dialog标签上的@close,而不是父组件自己定义的方法closeEdit()
const emit = defineEmits(['close'])
// 关闭弹框
function closeBranchDialog(value:number){
branchTableData.value = {} as any
paramForm.id =''
branchTree.value.reFresh()
//执行调用父组件中的dialog @close="closeEdit"的close,value传值给父类
emit('close',value)
}
// 排序上移
const moveUp =(index:any,row:any) =>{
if(index > 0){
const up = branchTableData.value[index-1]
branchTableData.value.splice(index-1,1);
branchTableData.value.splice(index,0,up);
selectedIndex.value = index-1;
}else{
ElMessage({message:'当前网点已是第一个,不可上移!',type:'warning'})
}
}
// 排序下移
const moveDown =(index:any,row:any) =>{
if(index + 1 === branchTableData.value.length){
ElMessage({message:'当前网点已是最后一个,不可下移!',type:'warning'})
}else{
const down = branchTableData.value[index+1]
branchTableData.value.splice(index+1,1);
branchTableData.value.splice(index,0,down);
selectedIndex.value = index+1;
}
}
/**
* 改变样式
*/
const selectedIndex=ref();
const changeColor =({ row,rowIndex }) =>{
if(rowIndex === selectedIndex.value){
return {'background-color':'#a0cfff', 'font-weight':'bold'}
}
if(rowIndex % 2 === 0){
return {'background-color':'#fff'}
}
else{
return {'background-color':'#fafafa'}
}
}
// 删除网点
const delBranch =(index:any,row:any) =>{
branchTableData.value.splice(index,1);
}
// 确定按钮
const handleBranchConfirm=() =>{
// 将选中的数据保存在数据库中
const ids=ref([])
branchTableData.value.forEach(e => {
ids.value.push(e.id)
})
let param ={
taskId:props.taskId,
ids:ids.value.join()
}
// 更新任务对应的网点信息
updateTaskInfo(param).then(()=>{
closeBranchDialog(1);
})
}
const paramForm= reactive({
id:''
})
//网点调整的弹框参数
const branchTree = ref<any>();
const getNodeData = (node: baseCustomerOrgInfoTableItem) => {
if (node.parentId != "" && node.parentId != null) {
paramForm.id = node.id;
branchTree.value.reFresh(node.id)
}
}
// 选择网点信息,添加到列表
const getBranchNode = (node: baseCustomerOrgInfoTableItem) => {
if(node.orgType === publicData.customerTypeBra){
const ids = ref([])
let branchId= node.id
const exsitBranch =branchTableData.value.filter(i => i.id == branchId );
if(exsitBranch.length > 0){
ElMessage({message:'当前网点已存在!',type:'warning'})
}else{
ids.value.push(branchId)
let param={
ids: ids.value.join(),
}
// 调用分页查询接口
getBranchInfoById(param).then((res:any)=>{
let value =res[0]
branchTableData.value.push(value);
})
}
}
}
// 设置不可以选中的项目
const getdisAbled = (data: any) => {
if (data.parentId == "" || data.parentId == null) {
return true
} else {
return false
}
}
//使用defineExpose()暴露方法,别的组件才能调用
defineExpose({
initData
});
</script>
<style>
</style>
4、人员调整
<!--调整车组信息-->
<template>
<div class="edit-container" >
<el-dialog title="车组人员调整"
v-model="props.visible"
@close="closePersonDialog"
:close-on-click-modal=false
top="8vh"
width="80%">
<el-row :gutter="20">
<el-col :span="18">
<el-tag size="large" effect="dark" style="margin:5px;">原车组信息</el-tag>
<div class="temporary-schedule-edit-table">
<el-table
class="flex-table"
size="medium"
:border="true"
tooltip-effect="dark"
highlight-current-row
:data="oriTableData"
:header-cell-style="{background: '#F6F6F6', height: '10px'}"
style="width: 100%;">
<el-table-column prop="lineName" align="center"/>
<el-table-column prop="driverName" align="center"/>
<el-table-column prop="escort1Name" align="center"/>
<el-table-column prop="escort2Name" align="center"/>
<el-table-column prop="carrier1Name" align="center"/>
<el-table-column prop="carrier2Name" align="center"/>
<el-table-column label="操作" width="80px" align="center">
<template #default="scope">
<el-button type="primary" title="新增" icon="Plus" circle plain :disabled="show" @click="addTempSchedule(scope.row)"/>
</template>
</el-table-column>
</el-table>
</div>
<el-divider/>
<el-tag size="large" effect="dark" style="margin:5px;">调整信息</el-tag>
<span style="float:right;margin-right:5px;">
<span title="删除人员">
<el-button type="danger" @click="handleCellDelete" icon="Delete" circle/>
</span>
</span>
<div class="temporary-schedule-edit-table">
<el-table
class="flex-table"
size="medium"
stripe
border
tooltip-effect="dark"
highlight-current-row
:header-cell-style="{background: '#F6F6F6', height: '10px'}"
:data="adjustTableData"
:cell-style="cellStyle"
@cell-click="cellClick"
@cell-mouse-enter="mouseEnter"
@cell-mouse-leave="mouseLeave"
style="width: 100%">
<el-table-column type="index" label="NO." width='55px'/>
<el-table-column prop="lineName" align="center"/>
<el-table-column prop="dueTime" >
<template #default="scope">
<el-select v-model="scope.row.time" :key="updateKey" placeholder="请选择" @change="value => {changeTime(value, scope.row);}" :disabled="selectShow" >
<el-option
v-for="item in timeList"
:key="item.key"
:label="item.value"
:value="item.key">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="driverName" align="center">
<template #default="scope">
<el-tooltip placement="top" effect="dark" content="点击单元格可替换/删除" >
<p>{{scope.row.driverName}}</p>
<p class="temporary-schedule-edit-tel">{{scope.row.driverTel}}</p>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="escort1Name" align="center">
<template #default="scope">
<el-tooltip placement="top" effect="dark" content="点击单元格可替换/删除" >
<p>{{scope.row.escort1Name}}</p>
<p class="temporary-schedule-edit-tel">{{scope.row.escort1Tel}}</p>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="escort2Name" align="center">
<template #default="scope">
<el-tooltip placement="top" effect="dark" content="点击单元格可替换/删除" >
<p>{{scope.row.escort2Name}}</p>
<p class="temporary-schedule-edit-tel">{{scope.row.escort2Tel}}</p>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="carrier1Name" align="center">
<template #default="scope">
<el-tooltip placement="top" effect="dark" content="点击单元格可替换/删除" >
<p>{{scope.row.carrier1Name}}</p>
<p class="temporary-schedule-edit-tel">{{scope.row.carrier1Tel}}</p>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="carrier2Name" align="center">
<template #default="scope">
<el-tooltip placement="top" effect="dark" content="点击单元格可替换/删除" >
<p>{{scope.row.carrier2Name}}</p>
<p class="temporary-schedule-edit-tel">{{scope.row.carrier2Tel}}</p>
</el-tooltip>
</template>
</el-table-column>
<el-table-column width="80px" label="操作" align="center">
<template #default="scope">
<el-popconfirm :title="`确定删除这条记录吗`" width="260px" @confirm="delTempSchedule(scope.$index,scope.row)">
<template #reference>
<el-button type="danger" title="删除" icon="Minus" size="small" circle plain></el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col :span="6" >
<div class="temporary-schedule-edit-tree" >
<el-tag size="large" effect="dark" style="margin-bottom:5px;">选择替班人员</el-tag>
<base-person-org-tree
ref="personTree"
@getNode="personData"
/>
</div>
</el-col>
</el-row>
<template #footer>
<span class="dialog-footer">
<el-button @click="closePersonDialog">取消</el-button>
<el-button type="primary" @click="handlePersonConfirm" >确定</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted,Ref,h, nextTick, createApp} from "vue"
import { ElMessage,ElMessageBox } from "element-plus";
import BasePersonOrgTree from "@/views/basic/components/basePersonOrgTree.vue"
// 引入请求接口
import { batchUpdate, checkSelectedPerson } from "@/api/dispatch/reality-schedule"
import _ from 'lodash'
const updateKey=ref(0);
// 时间段
const timeList=[
{
id: "1001",
value: "全天",
key: "00:00-24:00"
},
{
id: "1002",
value: "上午",
key: "00:00-12:00"
},
{
id: "1003",
value: "下午",
key: "12:00-24:00"
}
]
const changeRow = ref('')
const changeRowId = ref('')
const property = ref('')
const changeType = ref('')
const setId = ref('')
const show= ref(false)
const selectShow= ref(false)
// 排班日期
const rosteringDate= ref()
// 人员调整集合
const adjustTableData = ref<any>([])
// 弹框人员信息
const oriTableData = ref<any>([])
//接收父组件的传值
const tempIndex= ref(0)
//子组件用prop声明接收的参数,可以使用 defineProps() 宏来定义
const props = defineProps({
visible:{
type:Boolean,
default: false
},
})
// 界面初始化
function initData(editRow:any,list:any,type:string){
if(editRow!=""){
// 接收调整的类型
changeType.value=type
// 排班日期
rosteringDate.value = editRow.rosteringDate
adjustTableData.value=[]
oriTableData.value=[]
const tempData = ref<any>([])
// 人员赋值
list.forEach(p =>{
if(p !=null && p.position !=null){
// 车长
if(p.isMaster){
tempData.masterId = p.id
}
if(p.position == "驾驶员"){
tempData.driverName = p.personName
tempData.driverId = p.id
}
else if(p.position == "押运员1"){
tempData.escort1Name = p.personName
tempData.escort1Id = p.id
}
else if(p.position == "押运员2"){
tempData.escort2Name = p.personName
tempData.escort2Id = p.id
}
else if(p.position == "携款员1"){
tempData.carrier1Name = p.personName
tempData.carrier1Id = p.id
}
else if(p.position == "携款员2"){
tempData.carrier2Name = p.personName
tempData.carrier2Id = p.id
}
}
})
tempData.lineName =editRow.lineName
tempData.plateNumber = editRow.plateNumber
// 实时排班主键
tempData.scheduleId = editRow.id
setId.value = editRow.setId
let ids = editRow.ids
let realityId = ids.split(",");
oriTableData.value.push(_.cloneDeep(tempData));
if (adjustTableData.value.length === 0){
let tempRow = {...tempData}
tempRow.id = realityId[0]
if(type == "am"){
tempRow.time= '00:00-12:00'
tempRow.dueTime= ["00:00","12:00"]
// 新增按钮不可用
show.value = true;
selectShow.value = true;
}else if(type == "pm"){
// 新增按钮不可用
show.value = true;
selectShow.value = true;
tempRow.time= '12:00-24:00'
tempRow.dueTime= ["12:00","24:00"]
if(ids !=null && ids.length >1){
tempRow.id =realityId[1]
}
} else{
// 新增按钮可用
show.value = false;
selectShow.value = false;
tempRow.time='00:00-24:00'
tempRow.dueTime= ["00:00","24:00"]
}
tempRow.tempIndex= tempIndex.value
tempIndex.value++
adjustTableData.value.push(_.cloneDeep(tempRow))
}
}
}
const hoverRow=ref();
const hoverColumn=ref();
// 单元格样式修改
const cellStyle=(row:any) =>{
if (JSON.stringify(selectRow.value) == JSON.stringify(row.row) && JSON.stringify(selectColumn.value) == JSON.stringify(row.column)) {
//点击后的颜色
return {'background-color':'#a0cfff','color': '#606266', 'font-weight':'bold'}
}
else if (JSON.stringify(hoverRow.value) == JSON.stringify(row.row) && JSON.stringify(hoverColumn.value) == JSON.stringify(row.column)){
return {'cursor':'pointer','background-color':'#a0cfff','color': '#606266'}
}
else {
return {'background-color':'#fff'}
}
}
// 将鼠标移动到单元格内,样式变化,给出可编辑提示
const mouseEnter=(row:any,column:any,cell:any,event:any)=>{
if (column.property == "driverName" || column.property == "escort1Name"|| column.property == "escort2Name" || column.property == "carrier1Name" || column.property == "carrier2Name"){
hoverRow.value = row
hoverColumn.value= column
}
}
// 鼠标移除单元格
const mouseLeave=(row:any ,column:any)=>{
hoverRow.value=null;
hoverColumn.value=null;
}
const selectRow=ref();
const selectColumn=ref();
// 选中单元格
const cellClick=(row:any ,column:any) =>{
changeRow.value = row
changeRowId.value = row.tempIndex
property.value = column.property
// 当鼠标放在列上的时候显示不同的样式
if (column.property == "driverName" || column.property == "escort1Name"|| column.property == "escort2Name" || column.property == "carrier1Name" || column.property == "carrier2Name"){
selectRow.value = row
selectColumn.value = column
}
}
// 关闭弹框
const emit = defineEmits(['close'])
function closePersonDialog(value:number){
oriTableData.value = {} as any
//执行调用父组件中的dialog @close="closeEdit"的close,value传值给父类
emit('close',value)
}
// 添加调整信息
const addTempSchedule = (row:any) => {
if (adjustTableData.value.length > 1){
return
}
//判断是不是通过替班新增的
let tempRow = { ...row }
tempRow.dueTime = ["00:00","24:00"]
tempRow.time = "00:00-24:00"
tempRow.tempIndex = tempIndex.value
tempRow.id=""
tempRow.setId = setId.value
tempRow.startTime="00:00"
tempRow.endTime="24:00"
tempRow.rosteringDate =rosteringDate.value
tempIndex.value++
adjustTableData.value.push(tempRow)
}
const delTempSchedule = (index:any,row:any) => {
adjustTableData.value.splice(index,1);
}
// 删除人员
const handleCellDelete =() =>{
if(changeRow.value == ''){
ElMessage({message:'请先选择需要删除的人员!',type:'error'})
}else{
if (property.value == 'driverName' || property.value == "escort1Name"|| property.value == "escort2Name"
|| property.value == "carrier1Name" || property.value == "carrier2Name"){
if (workerCount(changeRow.value) >= 2){
return
}else{
ElMessageBox.confirm('确定删除选中人员吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let tempRow = changeRow.value
if(property.value == "driverName"){
tempRow.driverId = ''
tempRow.driverName =''
}
else if(property.value == "escort1Name"){
tempRow.escort1Id = ''
tempRow.escort1Name = ''
}
else if(property.value == "escort2Name"){
tempRow.escort2Id = ''
tempRow.escort2Name = ''
}
else if(property.value == "carrier1Name"){
tempRow.carrier1Id = ''
tempRow.carrier1Name = ''
}
else if(property.value == "carrier2Name"){
tempRow.carrier2Id = ''
tempRow.carrier2Name = ''
}
// 更新人员
let changeList = [];
changeList.push(tempRow)
batchUpdate(changeList).then((res) =>{
ElMessage.success('删除成功!')
})
}).catch(_ => { })
}
}
}
}
//判断当前记录中人员个数
const workerCount=(data:any) =>{
let count = 0
if (data.driverId == null || data.driverId == ''){
count++
}
if (data.escort1Id == null || data.escort1Id == ''){
count++
}
if (data.escort2Id == null || data.escort2Id == ''){
count++
}
if (data.carrier1Id == null || data.carrier1Id == ''){
count++
}
if (data.carrier2Id == null || data.carrier2Id == ''){
count++
}
return count
}
const personData=(data:any) =>{
if(data.orgName == "11"){
return
}else {
if(changeRow.value == ''){
ElMessage({message:'请先选择需要替换的人员!',type:'error'})
}else{
let param={
rosteringDate: rosteringDate.value,
id:data.id,
startTime:"",
endTime:""
}
if(changeType.value == "am"){
param.startTime="00:00"
param.endTime="12:00"
} else if(changeType.value == "am"){
param.startTime="12:00"
param.endTime="24:00"
}else{
param.startTime="00:00"
param.endTime="24:00"
}
checkSelectedPerson(param).then((res:any)=>{
// 替换当前的人员信息
let tempRow = changeRow.value
if(property.value == "driverName"){
tempRow.driverId = data.id
tempRow.driverName = data.orgName
}
else if(property.value == "escort1Name"){
tempRow.escort1Id = data.id
tempRow.escort1Name = data.orgName
}
else if(property.value == "escort2Name"){
tempRow.escort2Id = data.id
tempRow.escort2Name = data.orgName
}
else if(property.value == "carrier1Name"){
tempRow.carrier1Id = data.id
tempRow.carrier1Name = data.orgName
}
else if(property.value == "carrier2Name"){
tempRow.carrier2Id = data.id
tempRow.carrier2Name = data.orgName
}
})
}
}
}
// 人员选择确定
const handlePersonConfirm=() =>{
let count =adjustTableData.value.length;
if(count == 0){
ElMessage.error("当前车组不存在人员信息!")
return
}else{
// 有两条记录需要判断时间段选择的是否一致
if(count > 1){
let first = adjustTableData.value[0].time
let second = adjustTableData.value[1].time
// 两条记录的时间段不能一致
if(first =="00:00-24:00" || second =="00:00-24:00" || first == second ){
ElMessage.error("车组的两个时间段不能一样并且不能是全天!")
}else{
batchUpdate(JSON.parse(JSON.stringify(adjustTableData.value))).then((res) =>{
closePersonDialog(1)
})
}
}else{
batchUpdate(JSON.parse(JSON.stringify(adjustTableData.value))).then((res) =>{
closePersonDialog(1)
})
}
}
}
const changeTime=(data:any,row:any) =>{
let timeArr = data.split("-");
if (timeArr.length > 1){
row.dueTime[0] = timeArr[0]
row.dueTime[1] = timeArr[1]
row.startTime = timeArr[0]
row.endTime = timeArr[1]
updateKey.value++
}
}
//使用defineExpose()暴露方法,别的组件才能调用
defineExpose({
initData
});
</script>
浙公网安备 33010602011771号