解决冲突

This commit is contained in:
xiaofajia 2024-11-15 16:36:00 +08:00
commit 78bb5006ab
6 changed files with 292 additions and 70 deletions

View File

@ -70,6 +70,9 @@
<view v-if="(order.ticketsStatus == '04' || order.ticketsStatus == '05')&& (userInfo.roleCodes.includes('weixiu') || userInfo.roleCodes.includes('service_advisor') || userInfo.roleCodes.includes('general_inspection'))" @click="addProj(order)" class="btn pg">
修改项目
</view>
<view @click="editWaresPrice" v-if="userInfo.roleCodes.includes('repair_warehouse')" class="btn pg">
修改价格
</view>
<view @click="gotoDetail" class="btn pg">
<!-- 在什么都不能操作的情况下可以查看详情-->
查看详情
@ -95,6 +98,12 @@ export default {
default: () => {
return {}
}
},
userInfo: {
type: Object,
default: () => {
return {}
}
}
},
computed: {
@ -119,14 +128,11 @@ export default {
roleCanJd:false,
//---
roleCanSg:false,
//
userInfo:{},
ifLeader:false,
}
},
mounted(){
this.ifLeader = getStrData('ifLeader')
this.userInfo = getUserInfo()
if(this.userInfo.roleCodes.includes("service_advisor") || this.userInfo.roleCodes.includes("general_inspection") || (this.userInfo.roleCodes.includes("repair_staff") && getStrData("ifLeader"))){
//,
this.roleCanPg = true
@ -167,6 +173,14 @@ export default {
url: '/pages-order/orderDetail/orderDetail?id=' + this.order.id + '&isDetail=' + '1'
})
},
/**
* 修改配件价格
*/
editWaresPrice(){
uni.navigateTo({
url: `/pages-order/orderDetail/orderDetail?id=${this.order.id}&isDetail=0`
});
},
/**
* 作废

View File

@ -3,6 +3,9 @@
<!--<VNavigationBar style="position: relative;z-index: 99;" leftTitle="true" backgroundColor="rgba(0,0,0,0)" title-color="#fff" title=" "></VNavigationBar>-->
<view class="bodyTopBg"></view>
<view class="body">
<view style="text-align: left;margin: 0 32rpx" >
<text class="company-text">{{ companyInfo.simpleName || companyInfo.corpName }}</text>
</view>
<view class="userInfoBox" >
<image @click="showUserDetail" style="width: 104rpx;height: 104rpx;border-radius: 50%;" v-if="''==userInfo.avatar || null == userInfo.avatar" :src="defaultAvatar" mode="scaleToFill" @error="avatarErr"></image>
<image @click="showUserDetail" style="width: 104rpx;height: 104rpx;border-radius: 50%;" v-else :src="imgUrlPrex+userInfo.avatar" mode="scaleToFill" @error="avatarErr"></image>
@ -67,25 +70,35 @@
<u-icon style="width: 20rpx" color="#999" name="arrow-right" size="12"></u-icon>
</view>
</view>
<!-- 总检角色和维修业务管理员 -->
<view v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')">
<view class="body-top-tab">
<view v-for="(item, index) in timePicker" @click="activeTab(index)" :key="index"
:class="{ active: active === index }"
class="body-top-tab-item">
{{ item }}
<view v-if="index === active" class="activeLine"></view>
</view>
</view>
<view class="orderCount" >
<view class="orderCountItem">
<text class="label">维修中</text>
<text class="value">{{ bossNum.workingNum }}</text>
</view>
<view class="line"></view>
<view class="orderCountItem">
<text class="label">已完成</text>
<text class="value">{{ bossNum.doneNum }}</text>
</view>
</view>
</view>
<!-- 服务顾问角色 -->
<view class="orderCount" v-if="userInfo.roleCodes.includes('service_advisor')" @click="serviceWork">
<view class="orderCount" v-if="userInfo.roleCodes.includes('service_advisor') || userInfo.roleCodes.includes('weixiu')|| userInfo.roleCodes.includes('general_inspection')" @click="serviceWork">
<view class="orderCountItem">
<text class="label">待审批配件申请单</text>
<text class="value">{{serviceNum}}</text>
</view>
</view>
<!-- TODO 总检角色 -->
<view class="orderCount" v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')">
<view class="orderCountItem">
<text class="label">维修中</text>
<text class="value">{{ bossNum.workingNum }}</text>
</view>
<view class="line"></view>
<view class="orderCountItem">
<text class="label">已完成</text>
<text class="value">{{ bossNum.doneNum }}</text>
</view>
</view>
<view class="todoListBox">
<view class="title">
待办工单
@ -97,7 +110,7 @@
<view class="todoList">
<scroll-view scroll-y="true" style="height: 100%" class="itemContent" @scrolltolower="onReachBottomCus"
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered">
<order-card v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @doVoid="doVoidReq" @getOrder="openFile" @startWork="startWork" @addProj="addProj"></order-card>
<order-card :userInfo="userInfo" v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @doVoid="doVoidReq" @getOrder="openFile" @startWork="startWork" @addProj="addProj"></order-card>
<view style="text-align: center" v-if="orderList.length==0">
<image class="" src="@/static/images/nothing.png" ></image>
</view>
@ -179,6 +192,9 @@ export default {
avatar: undefined,
nickname: ''
},
//--
timePicker:['当日','累计'],
active:0,
menuList: [
{
title: '新建工单',
@ -231,6 +247,8 @@ export default {
//
tellCusText:"",
ifLeader:false,
//
companyInfo:{},
}
},
onLoad(){
@ -239,6 +257,7 @@ export default {
url: '/pages/login/login'
})
}else{
this.companyInfo = getJSONData("companyInfo")
if(!this.$msgSocket){
this.$startMsgSocket(getTenantId(),getStrData("userId"))
}
@ -269,6 +288,11 @@ export default {
}
},
methods: {
activeTab(index) {
this.active = index
//
this.getBossTodo()
},
/**
* 作废
*/
@ -557,9 +581,13 @@ export default {
* 从总检的角度差维修中已完成的工单数量
*/
getBossTodo(){
let params={
selectType:this.active==0?"today":"all"
}
request({
url: '/admin-api/repair/tickets/getBossNum',
method: 'get',
params:params
}).then((res) => {
console.log(res)
if (res.code == 200) {
@ -751,6 +779,12 @@ export default {
overflow: auto;
padding-bottom: 30rpx;
}
.company-text {
font-size: 30rpx;
font-weight: bold;
display: inline-block;
padding: 8rpx 16rpx;
}
.userInfoBox {
margin: 0 32rpx 40rpx;
@ -920,7 +954,7 @@ export default {
}
}
.orderCount {
margin: 40rpx 32rpx;
margin: 0 40rpx 32rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
padding: 40rpx;
@ -1064,6 +1098,35 @@ export default {
}
}
.body-top-tab {
display: flex;
font-size: 30rpx;
margin: 0 32rpx;
.body-top-tab-item {
flex: 1;
width: 0;
text-align: center;
padding: 16rpx 20rpx;
position: relative;
&.active {
color: #0174F6;
}
.activeLine {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 96rpx;
height: 6rpx;
background: #0174F6;
border-radius: 4rpx 4rpx 0rpx 0rpx;
}
}
}
.repairShop {
width: 686rpx;
margin: 38rpx auto 0;

View File

@ -120,7 +120,7 @@
<view class="projList">
<template>
<view v-for="(item,index) in ticketInfo.projects" :key="item.id" class="projEditItem">
<view v-if="isDetail == '0'" class="del-proj-box" @click="delProj(item.id,index)"><uni-icons type="trash" size="25" style="color: #0174F6"></uni-icons></view>
<view v-if="(loginUser.roleCodes.includes('weixiu') || loginUser.roleCodes.includes('service_advisor')||loginUser.roleCodes.includes('general_inspection')) && isDetail == '0'" class="del-proj-box" @click="delProj(item.id,index)"><uni-icons type="trash" size="25" style="color: #0174F6"></uni-icons></view>
<view class="projEditLine1">
<text>{{ item.itemName }}</text>
<text v-if="canSeeMoney" class="projAmount">{{ item.itemMoney }}</text>
@ -133,7 +133,7 @@
<view v-if="canSeeMoney">折扣<input @input="onKeyInput('zk',item)" style="background: white;padding: 0 10rpx" type="decimal" placeholder="请输入折扣0-1" v-model="item.itemDiscount" /></view>
<view v-if="canSeeMoney">金额<input type="number" disabled placeholder="请输入售价" v-model="item.itemMoney" /></view>
</view>
<view v-else class="projBaseInfo" v-if="(loginUser.roleCodes.includes('weixiu') || loginUser.roleCodes.includes('service_advisor')||loginUser.roleCodes.includes('general_inspection')) && isDetail != '0'" >
<view v-else class="projBaseInfo" >
<!-- 只读 -->
<view v-if="canSeeMoney">售价{{ item.itemPrice || "" }}</view>
<view>数量{{ item.itemCount || "" }}</view>
@ -150,11 +150,11 @@
<text >{{item.saleName || ""}}
</text>
</view>
<image v-if="isDetail == '0'" src="/static/icons/edit.png" style="width: 28rpx;height: 28rpx"
<image v-if="(loginUser.roleCodes.includes('weixiu') || loginUser.roleCodes.includes('service_advisor')||loginUser.roleCodes.includes('general_inspection')) && isDetail == '0'" src="/static/icons/edit.png" style="width: 28rpx;height: 28rpx"
@click="editPeople('xs', item)"></image>
</view>
</template>
<template v-if="isDetail == '0'">
<template v-if="(loginUser.roleCodes.includes('weixiu') || loginUser.roleCodes.includes('service_advisor')||loginUser.roleCodes.includes('general_inspection')) && isDetail == '0'">
<image @click="editPeople('xs', item)"src="/pages-order/static/addIcon.png" style="width: 28rpx;height: 28rpx"></image>
<!-- <text class="addText" @click="editPeople('xs', item)">添加服务顾问</text>-->
</template>
@ -167,11 +167,11 @@
<text class="label">施工人员</text>
<text >{{ item.repairNames || ""}}</text>
</view>
<image v-if="isDetail == '0'" src="/static/icons/edit.png" style="width: 28rpx;height: 28rpx"
<image v-if="(loginUser.roleCodes.includes('weixiu') || loginUser.roleCodes.includes('service_advisor')||loginUser.roleCodes.includes('general_inspection')) && isDetail == '0'" src="/static/icons/edit.png" style="width: 28rpx;height: 28rpx"
@click="editPeople('sg', item)"></image>
</view>
</template>
<template v-if="isDetail == '0'">
<template v-if="(loginUser.roleCodes.includes('weixiu') || loginUser.roleCodes.includes('service_advisor')||loginUser.roleCodes.includes('general_inspection')) && isDetail == '0'">
<image @click="editPeople('sg', item)" src="/pages-order/static/addIcon.png" style="width: 28rpx;height: 28rpx"></image>
<!-- <text class="addText" @click="editPeople('sg', item)">添加施工人员</text>-->
</template>
@ -187,12 +187,18 @@
<view class="projList">
<template>
<view v-for="item in ticketInfo.wares" :key="item.id" class="projEditItem">
<view class="projEditLine1">
<text>{{ item.itemName }}</text>
<text v-if="canSeeMoney" class="projAmount">{{ item.itemMoney }}</text>
</view>
<view class="projBaseInfo">
<view class="projBaseInfo" v-if="loginUser.roleCodes.includes('repair_warehouse') && isDetail == '0'" >
<view v-if="canSeeMoney">售价<input @input="onKeyInput('sj',item)" style="background: white;padding: 0 10rpx" type="decimal" placeholder="请输入售价" v-model="item.itemPrice" /></view>
<view>数量<input @input="onKeyInput('sl',item)" style="background: white;padding: 0 10rpx" type="number" placeholder="请输入数量" v-model="item.itemCount" /></view>
<view>单位<input style="padding: 0 10rpx" type="text" v-model="item.itemUnit" disabled /></view>
<view v-if="canSeeMoney">折扣<input @input="onKeyInput('zk',item)" style="background: white;padding: 0 10rpx" type="decimal" placeholder="请输入折扣0-1" v-model="item.itemDiscount" /></view>
<view v-if="canSeeMoney">金额{{ item.itemMoney || "" }}</view>
</view>
<view class="projBaseInfo" v-else >
<view v-if="canSeeMoney">售价{{ item.itemPrice || "" }}</view>
<view>数量{{ item.itemCount || "" }}</view>
<view>单位{{ item.itemUnit || ""}}</view>
@ -467,6 +473,7 @@ export default {
},
submit (){
let canSubmit = true
let itemList = []
//
if(this.ticketInfo.projects && this.ticketInfo.projects.length>0){
this.ticketInfo.projects.map((item)=>{
@ -490,30 +497,49 @@ export default {
item.itemDiscount = 1
}
item.itemMoney = item.itemPrice*item.itemCount*item.itemDiscount
let itemObj = {
id:item.id,
ticketId:item.ticketId,
itemPrice:item.itemPrice,
itemCount:item.itemCount,
itemDiscount:item.itemDiscount,
itemMoney:item.itemMoney,
}
itemList.push(itemObj)
})
}
//APP--
// if(this.ticketInfo.wares && this.ticketInfo.wares.length>0){
// this.ticketInfo.wares.map((item)=>{
// if((item.itemPrice && item.itemPrice>0) && (item.itemCount && item.itemCount>0) && (item.itemDiscount && item.itemDiscount>0 && item.itemDiscount<=1)){
// //
// item.itemMoney = item.itemPrice*item.itemCount*item.itemDiscount
// }else{
// canSubmit=false
// uni.showToast({
// title: ''+item.itemName+'',
// icon: 'none'
// })
// return
// }
// })
// }
//
if(this.ticketInfo.wares && this.ticketInfo.wares.length>0){
this.ticketInfo.wares.map((item)=>{
//null0
if(!item.itemPrice){
item.itemPrice = 0
}
if(!item.itemCount){
item.itemCount = 0
}
if(!item.itemDiscount){
item.itemDiscount = 1
}
item.itemMoney = item.itemPrice*item.itemCount*item.itemDiscount
let itemObj = {
id:item.id,
ticketId:item.ticketId,
itemPrice:item.itemPrice,
itemCount:item.itemCount,
itemDiscount:item.itemDiscount,
itemMoney:item.itemMoney,
}
itemList.push(itemObj)
})
}
if(canSubmit){
//
request({
url: '/admin-api/repair/titem/updateRepairItem',
method: 'PUT',
data:{"itemList":this.ticketInfo.projects,"delProjIdList":this.delProjId,"ticketId":this.ticketId}
data:{"itemList":itemList,"delProjIdList":this.delProjId,"ticketId":this.ticketId}
}).then((res) => {
if(res.code==200){
uni.showToast({
@ -521,9 +547,18 @@ export default {
icon: 'none'
})
setTimeout(()=>{
uni.navigateTo({
url: '/pages-home/home/home'
})
//
if(this.loginUser.roleCodes.includes('repair_warehouse')){
//
uni.navigateTo({
url: '/pages-warehouse/home/home'
})
}else{
//
uni.navigateTo({
url: '/pages-home/home/home'
})
}
},700)
}else{
uni.showToast({

View File

@ -51,7 +51,7 @@
<scroll-view :refresher-triggered="isTriggered" @scrolltolower="onReachBottomCus" class="itemContent"
refresher-enabled
scroll-y="true" style="height: 100%" @refresherrefresh="onRefresherrefresh">
<view v-for="(item, index) in ticketWares" :key="index" class="orderItem">
<view v-if="active!=3" v-for="(item, index) in ticketWares" :key="index" class="orderItem">
<view class="order-top">
<view class="order-top-left">
<text class="order-top-name">{{ item.repairName }}{{ '配件申请单' }}</text>
@ -82,9 +82,13 @@
</template>
</view>
</view>
<view v-if="ticketWares.length==0" style="text-align: center">
<view v-if="ticketWares.length==0 && active!=3" style="text-align: center">
<image class="" src="@/static/images/nothing.png"></image>
</view>
<order-card :userInfo="userInfo" v-if="active==3" v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @doVoid="doVoidReq" @getOrder="openFile" @startWork="startWork" @addProj="addProj"></order-card>
<view style="text-align: center" v-if="orderList.length==0 && active==3">
<image class="" src="@/static/images/nothing.png" ></image>
</view>
</scroll-view>
</view>
</view>
@ -105,7 +109,7 @@ import {
getTenantId,
setJSONData
} from '@/utils/auth'
import {getDictTextByCodeAndValue, formatDate, formatTimestamp} from "@/utils/utils";
import {getDictTextByCodeAndValue, formatDate,builderOrder, formatTimestamp} from "@/utils/utils";
export default {
components: {
@ -125,6 +129,9 @@ export default {
{
name: '待审核'
},
{
name: '进行中工单'
},
],
//
queryParams: {
@ -135,24 +142,19 @@ export default {
},
//
ticketWares: [],
//
orderList:[],
//
total: 0,
//
isTriggered: false,
imgUrlPrex: config.baseImageUrl,
userInfo: {
avatar: undefined,
nickname: ''
},
isShow: true,
active: 0,
bannerIndex: 0,
shopList: [],
bannerList: [],
richTextHtml: null,
defaultAvatar: require('@/static/icons/avatar.png'),
//
noReadNum: 0,
@ -241,7 +243,12 @@ export default {
this.queryParams.pageNo = 1
this.total = 0
this.ticketWares = []
this.getTicketWares()
this.orderList = []
if(this.active==3){
this.getOrderList()
}else{
this.getTicketWares()
}
},
/**
* 配件单查询
@ -272,7 +279,54 @@ export default {
}
})
},
/**
* 查本人待处理工单
*/
getOrderList(){
let paramsObj = {pageNo: this.queryParams.pageNo, pageSize: this.queryParams.pageSize ,ticketNo:this.queryParams.query}
request({
url: '/admin-api/repair/tickets/pageType',
method: 'get',
params:paramsObj
}).then((res) => {
console.log(res)
if (res.code == 200) {
let thisPageRecords = []
if(res.data && res.data.hasOwnProperty("records")){
for (let i = 0; i < res.data.records.length; i++) {
let order = res.data.records[i]
let viewOrder = builderOrder(order)
if(order.booking){
viewOrder['appointDate'] = formatTimestamp(order.createTime)
}
let projectList = []
if(order.itemList){
for (let j = 0; j < order.itemList.length; j++) {
let itemObj = order.itemList[j]
if("01"==itemObj.itemType){
projectList.push({
id:itemObj.id,
name:itemObj.itemName
})
}
}
}
viewOrder['projectList'] = projectList
thisPageRecords.push(viewOrder)
}
}
// concat n
if (this.pageNo != 1) {
this.orderList = this.orderList.concat(thisPageRecords)
} else {
this.orderList = thisPageRecords
}
//
this.total = res.data.total
this.isTriggered = false
}
})
},
/**
* 上滑加载数据
@ -286,7 +340,11 @@ export default {
//+1,
this.queryParams.pageNo++
//
this.getTicketWares()
if(this.active==3){
this.getOrderList()
}else{
this.getTicketWares()
}
},
/**

View File

@ -24,32 +24,52 @@
}
}
},
onLoad() {
// #ifdef APP
//
this.register()
// #endif
if(getToken()){
onLoad() {
// #ifdef APP
//
this.register()
// #endif
if (getToken()) {
this.getNoReadNum()
//
//
let userInfo = getUserInfo()
if(userInfo.roleCodes.includes('repair_warehouse')){
if (userInfo.roleCodes.includes('repair_warehouse')) {
//
uni.navigateTo({
url: '/pages-warehouse/home/home'
})
}else{
} else {
uni.navigateTo({
url: '/pages-home/home/home'
})
}
}else{
} else {
uni.navigateTo({
url: '/pages/login/login'
})
}
},
}
},
onShow(){
if (getToken()) {
//
let userInfo = getUserInfo()
if (userInfo.roleCodes.includes('repair_warehouse')) {
//
uni.navigateTo({
url: '/pages-warehouse/home/home'
})
} else {
uni.navigateTo({
url: '/pages-home/home/home'
})
}
} else {
uni.navigateTo({
url: '/pages/login/login'
})
}
},
methods: {
register() { //
console.log(keepAlivePlugin, 'keepAlive');

View File

@ -48,6 +48,8 @@
loginApp
} from '@/api/login';
import {
getToken,
getUserInfo,
setToken,
setTenantId,
getTenantId,
@ -96,6 +98,22 @@
},
},
mounted() {},
onShow(){
if (getToken()) {
//
let userInfo = getUserInfo()
if (userInfo.roleCodes.includes('repair_warehouse')) {
//
uni.navigateTo({
url: '/pages-warehouse/home/home'
})
} else {
uni.navigateTo({
url: '/pages-home/home/home'
})
}
}
},
methods: {
wxlogin() {
uni.login({
@ -163,6 +181,8 @@
setToken(res.data.loginResult.accessToken)
setUserInfo(res.data.userinfo)
setStrData("userId",res.data.userinfo.id)
//
this.getCompanyInfo()
this.getNoReadNum()
if(res.data.userinfo.roleCodes.includes("repair_staff")){
//
@ -320,6 +340,18 @@
}
})
},
async getCompanyInfo(){
await request({
url: "/admin-api/base/company/getCompanyByTenantId",
method: "GET",
params:{tenantId:getTenantId(),systemCode:"weixiu"}
}).then((res) => {
if(res.code==200){
setJSONData("companyInfo",res.data)
console.log(res.data,"企业信息")
}
})
},
dianyidain() {
if(!this.ifPlay){
console.log('执行了dianyidain');