lanan-repair-app/pages-order/choosePeople/choosePeople.vue
2024-11-13 17:47:41 +08:00

480 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<VNavigationBar background-color="#fff" title="选择人员" title-color="#333"></VNavigationBar>
<view class="body">
<!-- <div class="searchBox">-->
<!-- <div class="inputBox">-->
<!-- <input placeholder="请输入人员姓名" type="text">-->
<!-- </div>-->
<!-- <text>搜索</text>-->
<!-- </div>-->
<div class="userList">
<!-- <u-checkbox-group-->
<!-- placement="column"-->
<!-- v-model="checked">-->
<radio-group @change="radioChange" v-if="type == 'xs' || !type">
<label v-for="(item, index) in list" :key="item.userId" class="userItem">
<view class="info">
<text class="name">{{ item.userName }}</text>
<text class="trade">{{ item.workTypeText }}</text>
</view>
<radio :value="item.userId+''" :checked="index === current"/>
<!-- <u-checkbox v-model="item.checked" :name="item.userId" iconSize="24" shape="circle" activeColor="#1890ff"></u-checkbox>-->
</label>
</radio-group>
<view v-else>
<!-- <label v-for="(item, index) in list" :key="item.id" class="userItem">-->
<!-- <view class="info">-->
<!-- <text class="name">{{ item.userName }}</text>-->
<!-- <text class="trade">{{ item.workTypeText }}</text>-->
<!-- </view>-->
<!-- <checkbox :value="item.id+''" v-model="selectedUsers" @change="cs" />-->
<!-- </label>-->
<checkbox-group @change="cs">
<label v-for="(item, index) in list" :key="item.userId" class="userItem">
<view class="info">
<text class="name">{{ item.userName }}</text>
<text class="trade">{{ item.workTypeText }}</text>
</view>
<checkbox :value="item.userId + ''" />
</label>
</checkbox-group>
</view>
<!-- </u-checkbox-group>-->
</div>
</view>
<!-- 普通弹窗---拍照上传 -->
<uni-popup ref="popup" background-color="#fff">
<view class="popup-content">
<view class="dl-avatar-box">
<input type="text" placeholder="请输入内返派工原因" v-model="remark" />
<uni-file-picker :value="fileList" :sizeType="sizeType" @select="afterRead" @delete="deleteFile" limit="9" title="请上传图片最多上传9张"></uni-file-picker>
</view>
<button type="primary" @click="submit('1')">保存</button>
</view>
</uni-popup>
<view class="foot">
<view v-if="isNei" class="submit" @click="openFile">确定选择</view>
<view v-else class="submit" @click="submit('0')">确定选择</view>
</view>
</view>
</template>
<script>
import VNavigationBar from '@/components/VNavigationBar.vue'
import {bus} from "@/utils/eventBus";
import request from '@/utils/request';
import {getDictTextByCodeAndValue,saveTicketsRecords} from "@/utils/utils";
import config from "@/config";
import upload from "@/utils/upload";
export default {
components: {
VNavigationBar,
},
data() {
return {
//上传的图片数组
fileList: [],
sizeType:['compressed'],
remark:'',
isNei:false,
current: 0,
ticketId: '',
list: [],
checkedUserId: "",
checkedUserName: "",
ifDetail: false,
type: "",
sgIds: [], // 初始化为数组
sgNames : [],
projectId: '',
itemId:"",
}
},
onLoad(data) {
console.log("data", data)
if (data.id) {
console.log('执行了派单')
this.ticketId = data.id
console.log(data.canOperate,103)
console.log(data.canOperate === '1',104)
if (data.canOperate === '1'){
this.listLeadsAll()
} else {
this.workByTicketId()
}
}
if (data.isNei) {
//内返派工
this.isNei = true
}
if (data.ifDetail) {
//从订单详情页跳过来的返回时需要返回2步
this.ifDetail = true
}
if (data.itemId) {
//从订单详情页跳过来的返回时需要返回2步
this.itemId = data.itemId
}
if (data.type) {
this.type = data.type
if (data.type == 'xs') {
this.getStaffList()
} else {
this.getRepairWorder()
}
}
//创建工单后,订单详情页跳转过来携带
if (data.ticketId) {
this.ticketId = data.ticketId
}
if (data.projectId) {
this.projectId = data.projectId
}
},
methods: {
/**
* 维修班组长修改派工
*/
listLeadsAll(){
request({
url: '/admin-api/repair/worker/listLeadsAll',
method: 'get',
}).then((res) => {
this.list = res.data
if (this.list.length > 0) {
console.log(this.list[0].userId)
this.checkedUserId = this.list[0].userId
this.checkedUserName = this.list[0].userName
}
})
},
/**
* 内返派工打开上传附件弹窗
*/
openFile(){
this.$refs.popup.open("bottom")
},
afterRead(file) {
for (let i = 0; i < file.tempFilePaths.length; i++) {
upload({
url:'/admin-api/infra/file/upload',
filePath: file.tempFilePaths[i]
}).then((res)=>{
this.fileList.push({
url: config.baseImageUrl+res.data
})
console.log(this.fileList)
})
}
},
deleteFile(file, index) {
this.fileList.splice(index, 1);
},
radioChange: function (evt) {
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].userId == evt.detail.value) {
this.current = i;
this.checkedUserId = this.list[i].userId
this.checkedUserName = this.list[i].userName
break;
}
}
console.log(this.checkedUserName)
},
/**
* 获取销售列表
*/
getStaffList() {
request({
url: '/admin-api/company/staff/list',
method: 'get'
}).then(res => {
this.list = res.data
this.list.map((item) => {
item.userName = item.name
})
if (this.list.length > 0) {
console.log(this.list[0].userId)
this.checkedUserId = this.list[0].userId
this.checkedUserName = this.list[0].userName
}
})
},
/**
* 获取维修工人
*/
getRepairWorder(){
request({
url: '/admin-api/repair/worker/page',
method: 'get',
params:{
pageNo: 1,
pageSize: 9999
}
}).then(res => {
if (res.code == 200) {
let thisList = res.data.records
thisList.map((item) => {
getDictTextByCodeAndValue("repair_work_type", item.workType).then(value => {
item.workTypeText = value
}).catch(error => {
item.workTypeText = "未知"
console.error(error);
});
})
this.list = thisList
} else {
this.list = []
}
})
},
/**
* 通过工单id查询维修工人
*/
workByTicketId() {
request({
url: '/admin-api/repair/worker/listByTicketId',
method: 'get',
params: {ticketId: this.ticketId}
}).then((res) => {
this.list = res.data
if (this.list.length > 0) {
console.log(this.list[0].userId)
this.checkedUserId = this.list[0].userId
this.checkedUserName = this.list[0].userName
}
})
},
cs(e){
let arr = []
let nameArr = []
for (let i = 0; i < this.list.length; i++) {
for (let j = 0; j < e.detail.value.length; j++) {
if (this.list[i].userId == e.detail.value[j]) {
this.current = i;
let checkedUserId = this.list[i].userId
let checkedUserName = this.list[i].userName
arr.push(checkedUserId)
nameArr.push(checkedUserName)
}
}
}
console.log(this.checkedUserName)
this.sgIds = arr
this.sgNames = nameArr
},
async submit(type) {
if (this.type == 'sg') {
if (this.sgIds.length == 0) {
uni.showToast({
title: '请选择维修人员!',
icon: 'none'
})
} else {
//以逗号拼接
const sgIds = this.sgIds.join(',')
const sgNames = this.sgNames.join(',')
console.log('this.projectId',this.projectId)
const param = {
ticketId: this.ticketId,
projectId: this.projectId,
repairIds: sgIds,
repairNames: sgNames,
}
request({
url: '/admin-api/repair/titem/updateRepairAndSale',
method: 'put',
data: param
}).then((res) => {
uni.showToast({
title: '选择维修人员成功!',
icon: 'none'
})
setTimeout(() => {
uni.navigateBack()
}, 700)
})
}
}else if (this.type == 'xs') {
if (this.checkedUserId == '' && this.checkedUserName == '') {
uni.showToast({
title: '请选择服务顾问!',
icon: 'none'
})
} else {
//以逗号拼接
const param = {
ticketId: this.ticketId,
projectId: this.projectId,
saleId: this.checkedUserId,
saleName: this.checkedUserName,
}
request({
url: '/admin-api/repair/titem/updateRepairAndSale',
method: 'put',
data: param
}).then((res) => {
uni.showToast({
title: '选择服务顾问成功!',
icon: 'none'
})
setTimeout(() => {
uni.navigateBack()
}, 700)
})
}
} else {
const param = {
id: this.ticketId,
nowRepairId: this.checkedUserId,
nowRepairName: this.checkedUserName
}
if (type == '1'){
param.remark = this.remark
param.image = this.fileList.map(item=>item.url.replace(config.baseImageUrl,"")).join(",")
}
console.log(param)
request({
url: '/admin-api/repair/tickets/notify',
method: 'post',
data: param
}).then((res) => {
uni.showToast({
title: '指派成功!',
icon: 'none'
})
setTimeout(() => {
if (this.ifDetail) {
uni.navigateBack({
delta: 2 // 返回倒数第2页
})
} else {
uni.navigateBack()
}
}, 700)
})
//
// console.log('this.checked', this.checked)
// const selected = this.list.filter(f => this.checked.includes(f.id))
// bus.$emit('choosePeople', selected)
// uni.navigateBack()
}
}
}
}
</script>
<style lang="less" scoped>
.popup-content {
@include flex;
align-items: center;
justify-content: center;
padding: 30rpx 30rpx 120rpx 30rpx;
height: auto;
background-color: #fff;
}
.container {
height: 100%;
background-color: #F3F5F7;
display: flex;
flex-direction: column;
.body {
flex: 1;
height: 0;
overflow: auto;
padding: 20rpx 0;
.searchBox {
margin: 0 32rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
padding: 30rpx;
display: flex;
align-items: center;
column-gap: 20rpx;
font-weight: 500;
font-size: 28rpx;
color: #0174F6;
.inputBox {
flex: 1;
width: 0;
color: #000;
}
}
.userList {
margin: 20rpx 32rpx 0;
background-color: #fff;
padding: 0 20rpx;
.userItem {
padding: 30rpx 0;
border-bottom: 1rpx solid #DDDDDD;
display: flex;
align-items: center;
justify-content: space-between;
.info {
display: flex;
flex-direction: column;
row-gap: 20rpx;
.name {
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.trade {
font-weight: 500;
font-size: 24rpx;
color: #999999;
}
}
}
.userItem:last-child {
border-bottom: none;
}
}
}
.foot {
background-color: #fff;
padding: 30rpx;
.submit {
margin: 0 auto;
width: 510rpx;
height: 76rpx;
background: #0174F6;
border-radius: 38rpx 38rpx 38rpx 38rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #FFFFFF;
}
}
}
</style>