xiaohaizhao 2 месяцев назад
Родитель
Сommit
ae4e67b140

+ 10 - 3
E-service/serviceBillList/detail.js

@@ -16,6 +16,14 @@ Page({
         bgColor: "#FCE4E4",
         color: "#ED4949"
       },
+      紧急: {
+        bgColor: "#FCE4E4",
+        color: "#ED4949"
+      },
+      历史售后: {
+        bgColor: "#eeeeee",
+        color: "#888888"
+      }
     },
     tabsList: [{
       label: "申请信息"
@@ -227,8 +235,7 @@ Page({
       statusOptions.已提交 = [];
     }
     const appAuth = wx.getStorageSync('auth').applyBill;
-    appAuth.optionnames = ['查询', '转工单', '退回', '中止']
-    statusOptions.已提交 = appAuth.optionnames.filter(v => ['转工单', '退回', '中止'].includes(v))
+    statusOptions.已提交 = appAuth.optionnames.filter(v => this.data.type == 'admin' ? ['转工单', '退回', '中止'] : ['中止'].includes(v))
     if (statusOptions[status]) {
       tabbarList = statusOptions[status].map(v => options[v]);
     }
@@ -266,7 +273,7 @@ Page({
     }, {
       label: "服务类型",
       value: res.data.servicetype,
-      style: `color:${this.data.tabColorS[res.data.servicetype].color}`
+      style: this.data.tabColorS[res.data.servicetype] ? `color:${this.data.tabColorS[res.data.servicetype].color}` : ''
     }, {
       label: "现场联系人",
       value: res.data.scenecontact,

+ 7 - 1
E-service/serviceBillList/detail.wxml

@@ -9,6 +9,12 @@
 		<view class="tab">
 			{{language[detail.class1]||detail.class1}}
 		</view>
+		<view wx:if="{{detail.exception_type}}" class="tab">
+			{{language[detail.exception_type]||detail.exception_type}}
+		</view>
+		<view wx:if="{{detail.service_level}}" style="background-color: {{tabColorS[detail.service_level].bgColor}};color:{{tabColorS[detail.service_level].color}};" class="tab">
+			{{language[detail.service_level]||detail.service_level}}
+		</view>
 	</view>
 	<view class="row">
 		<view class="label">{{language['状态']||'状态'}}</view>
@@ -40,7 +46,7 @@
 	</view>
 	<view class="row">
 		<view class="label">{{language['工单状态']||'工单状态'}}</view>
-		<view class="value" style="color:{{sColors[item.status_workorder]}};">{{detail.status_workorder || '--'}}</view>
+		<view class="value" style="color:{{sColors[detail.status_workorder]}};">{{detail.status_workorder || '--'}}</view>
 	</view>
 	<view class="row">
 		<view class="label">{{language['工单完工时间']||'工单完工时间'}}</view>

+ 9 - 0
E-service/serviceBillList/index.js

@@ -35,7 +35,16 @@ Page({
         bgColor: "#FCE4E4",
         color: "#ED4949"
       },
+      紧急: {
+        bgColor: "#FCE4E4",
+        color: "#ED4949"
+      },
+      历史售后: {
+        bgColor: "#eeeeee",
+        color: "#888888"
+      }
     },
+
     filtratelist: []
   },
   async onLoad(options) {

+ 6 - 0
E-service/serviceBillList/index.wxml

@@ -9,6 +9,12 @@
 				<view class="tab">
 					{{language[item.class1]||item.class1}}
 				</view>
+				<view wx:if="{{item.exception_type}}" class="tab">
+					{{language[item.exception_type]||item.exception_type}}
+				</view>
+				<view wx:if="{{item.service_level}}" style="background-color: {{tabColorS[item.service_level].bgColor}};color:{{tabColorS[item.service_level].color}};" class="tab">
+					{{language[item.service_level]||item.service_level}}
+				</view>
 			</view>
 			<view class="status" style="color:{{sColors[item.status]}};">{{language[item.status]||item.status}}</view>
 		</view>

+ 24 - 15
E-service/serviceBillList/insert.js

@@ -64,7 +64,7 @@ Page({
       value: "",
       placeholder: "现场联系人身份备注",
       valueName: "scenecontactrole",
-      required: false,
+      required: true,
       checking: "base"
     }, {
       label: "现场联系人电话",
@@ -179,7 +179,7 @@ Page({
     sa_orderid: ""
   },
   onLoad(options) {
-    getApp().globalData.Language.getLanguagePackage(this, '新建申请单');
+    getApp().globalData.Language.getLanguagePackage(this, options.edit ? '编辑申请单' : '新建申请单');
     this.setData({
       type: options.type || "default"
     })
@@ -277,19 +277,28 @@ Page({
       })
       console.log("创建申请单", res)
       if (res.code == 1) {
-        if (content.sa_serviceorderid) wx.navigateBack({
-          delta: 2
-        })
-        wx.navigateTo({
-          url: `/E-service/serviceBillList/detail?id=${res.data.sa_serviceorderid}&type=${this.data.type}`,
-          success: () => {
-            wx.showToast({
-              title: getApp().globalData.Language.getMapText(content.sa_serviceorderid == 0 ? '创建成功' : '保存成功'),
-              icon: "none",
-            })
-          },
-        })
-
+        if (content.sa_serviceorderid) {
+          getCurrentPages().find(v => v.__route__ == 'E-service/serviceBillList/detail').getDetail();
+          wx.navigateBack({
+            success() {
+              wx.showToast({
+                title: getApp().globalData.Language.getMapText('保存成功'),
+                icon: "none",
+                mask: true
+              })
+            }
+          });
+        } else {
+          wx.navigateTo({
+            url: `/E-service/serviceBillList/detail?id=${res.data.sa_serviceorderid}&type=${this.data.type}`,
+            success: () => {
+              wx.showToast({
+                title: getApp().globalData.Language.getMapText(content.sa_serviceorderid == 0 ? '创建成功' : '保存成功'),
+                icon: "none",
+              })
+            },
+          })
+        }
       } else {
         wx.showToast({
           title: res.code != '1' ? res.msg : getApp().globalData.Language.getMapText('保存成功'),

+ 146 - 0
E-service/workOrder/confirm.js

@@ -0,0 +1,146 @@
+const _Http = getApp().globalData.http,
+  getTime = require("../../utils/getTime");
+
+Page({
+  data: {
+    loading: false,
+    showAll: false,
+    disabled: false,
+    form: [{
+      label: "是否为我司出货产品",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: 1,
+      interrupt: false,
+      radioList: [{
+        id: 1,
+        name: "是"
+      }, {
+        id: 0,
+        name: "否"
+      }],
+      valueName: "isouritem", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "是否在保质期内",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: 0,
+      interrupt: false,
+      radioList: [{
+        id: 1,
+        name: "是"
+      }, {
+        id: 0,
+        name: "否"
+      }],
+      valueName: "inqualityguaranteeperiod", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "确认客诉异常描述是否属实",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: 1,
+      interrupt: false,
+      radioList: [{
+        id: 1,
+        name: "是"
+      }, {
+        id: 0,
+        name: "否"
+      }],
+      valueName: "isfact", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "备注",
+      error: false,
+      errMsg: "",
+      type: "textarea",
+      value: "",
+      placeholder: "请填写",
+      valueName: "remarks",
+      required: false,
+      checking: "base"
+    }],
+    sa_workorderid: 0
+  },
+  onLoad(options) {
+    getApp().globalData.Language.getLanguagePackage(this, '确认信息');
+    let form = this.data.form,
+      data = getCurrentPages().find(v => v.__route__ == 'E-service/workOrder/detail').data.detail;
+    form = form.map(v => {
+      switch (v.valueName) {
+        default:
+          v.value = data[v.valueName]
+          break;
+      }
+      return v
+    })
+    this.setData({
+      form,
+      sa_workorderid: data.sa_workorderid
+    })
+
+  },
+  submit() {
+    this.setData({
+      loading: true
+    })
+    let content = {
+      sa_workorderid: this.data.sa_workorderid,
+      ...this.selectComponent("#Form").submit()
+    };
+    _Http.basic({
+      "id": 2026012714172302,
+      content
+    }).then(res => {
+      this.setData({
+        loading: false
+      })
+      console.log("确认信息", res)
+      if (res.code == 1) {
+        getCurrentPages().find(v => v.__route__ == 'E-service/workOrder/detail').getDetail();
+        wx.navigateBack({
+          success() {
+            wx.showToast({
+              title: getApp().globalData.Language.getMapText('保存成功'),
+              icon: "none",
+              mask: true
+            })
+          }
+        });
+      } else {
+        wx.showToast({
+          title: res.code != '1' ? res.msg : getApp().globalData.Language.getMapText('保存成功'),
+          icon: "none",
+          mask: true
+        })
+      }
+    })
+  },
+  // 是否显示全部
+  onChange({
+    detail
+  }) {
+    this.setData({
+      showAll: detail
+    })
+  },
+  /* 表单必填项是否完成 */
+  onConfirm({
+    detail
+  }) {
+    this.setData({
+      disabled: detail
+    })
+  }
+})

+ 3 - 0
E-service/workOrder/confirm.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 24 - 0
E-service/workOrder/confirm.scss

@@ -0,0 +1,24 @@
+.new-footer {
+	display: flex;
+	align-items: center;
+	justify-content: flex-end;
+	position: fixed;
+	width: 100vw;
+	height: 130rpx;
+	background: #FFFFFF;
+	box-shadow: 0px -4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+	bottom: 0;
+	z-index: 9999;
+
+	.new-submit {
+			width: 156rpx;
+			height: 90rpx;
+			background: #3874F6;
+			border-radius: 8rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC-Bold, PingFang SC;
+			font-weight: bold;
+			color: #FFFFFF;
+			margin-right: 30rpx;
+	}
+}

+ 6 - 0
E-service/workOrder/confirm.wxml

@@ -0,0 +1,6 @@
+<Yl_Headline title='基本信息' type='switch' switchLabel='仅显示必填信息' switch='{{showAll}}' bind:callBack='onChange' />
+<Yl_Field id='Form' form='{{form}}' showAll='{{!showAll}}' bind:onConfirm='onConfirm' bind:interrupt="interrupt" />
+<view style="height: 150rpx;" />
+<view class="new-footer">
+    <van-button custom-class='new-submit' disabled='{{disabled || loading}}' loading='{{loading}}' bindclick='submit'>{{language['确定']||'确定'}}</van-button>
+</view>

+ 287 - 1
E-service/workOrder/detail.js

@@ -15,6 +15,14 @@ Page({
         bgColor: "#FCE4E4",
         color: "#ED4949"
       },
+      紧急: {
+        bgColor: "#FCE4E4",
+        color: "#ED4949"
+      },
+      历史售后: {
+        bgColor: "#eeeeee",
+        color: "#888888"
+      }
     },
     tabsList: [{
       label: "服务商品",
@@ -23,7 +31,11 @@ Page({
     }, {
       label: "工单信息"
     }],
-    tabsActive: 2
+    tabsActive: 2,
+    reason: {
+      abortreason: ""
+    },
+    abortreasonShow: false
   },
   onLoad(options) {
     getApp().globalData.Language.getLanguagePackage(this, '工单详情');
@@ -49,6 +61,259 @@ Page({
         detail: res.data
       })
       this.setPreview(res);
+      this.setTabbar()
+    })
+  },
+  onCancel() {
+    this.setData({
+      abortreasonShow: false,
+      backreasonShow: false
+    })
+  },
+  // 中止
+  onSuspend() {
+    let abortreason = this.data.reason.abortreason;
+    if (abortreason == '') return wx.showToast({
+      title: getApp().globalData.Language.getMapText("请说明中止原因"),
+      icon: "none"
+    })
+    _Http.basic({
+      "content": {
+        "sa_serviceorderid": this.data.detail.sa_serviceorderid,
+        abortreason
+      },
+      "id": 2026012714282702,
+    }).then(res => {
+      getApp().globalData.Language.showToast(res.code == '1' ? "中止成功" : res.msg)
+      if (res.code == 1) this.getDetail();
+    })
+  },
+  tabbarOnClick(e) {
+    let that = this,
+      detail = this.data.detail;
+    switch (e.detail.label) {
+      case '转工单':
+        let leader = '';
+        try {
+          leader = detail.team.find(v => v.isleader).userid || 0
+        } catch (error) {
+
+        }
+        _Http.basic({
+          id: 20230213143003,
+          content: {
+            pageSize: 9999
+          }
+        }).then(res => {
+          console.log("转工单", res)
+          if (res.code != '1') return wx.showToast({
+            title: res.msg,
+            icon: "none"
+          })
+          this.setData({
+            users: res.data.map(v => {
+              v.disabled = v.userid == leader
+              return v
+            })
+          })
+        })
+        break;
+      case '编辑':
+        wx.navigateTo({
+          url: `/E-service/workOrder/insert`
+        })
+        break;
+      case '接单':
+        wx.navigateTo({
+          url: `/E-service/workOrder/takeOrder`
+        })
+        break;
+      case '中止':
+        this.setData({
+          abortreasonShow: true
+        })
+        break;
+      case '暂停':
+        wx.showModal({
+          title: getApp().globalData.Language.getMapText('提示'),
+          content: getApp().globalData.Language.getMapText(`确认暂停当前工单吗`) + '?',
+          confirmBtn: getApp().globalData.Language.getMapText('确定'),
+          cancelBtn: getApp().globalData.Language.getMapText('取消'),
+          complete: ({
+            confirm
+          }) => {
+            if (confirm) _Http.basic({
+              "content": {
+                "sa_workorderid": detail.sa_workorderid
+              },
+              "id": "20230209144603",
+            }).then(res => {
+              getApp().globalData.Language.showToast(res.code == '1' ? "暂停成功" : res.msg)
+              that.getDetail()
+            })
+          }
+        })
+        break;
+      case '完结工单':
+        wx.showModal({
+          title: getApp().globalData.Language.getMapText('提示'),
+          content: getApp().globalData.Language.getMapText(`确认完结工单吗`) + '?',
+          confirmBtn: getApp().globalData.Language.getMapText('确定'),
+          cancelBtn: getApp().globalData.Language.getMapText('取消'),
+          complete: ({
+            confirm
+          }) => {
+            if (confirm) _Http.basic({
+              "content": {
+                "sa_workorderid": detail.sa_workorderid
+              },
+              "id": "20230209144903",
+            }).then(res => {
+              getApp().globalData.Language.showToast(res.code == '1' ? "完结成功" : res.msg)
+              that.getDetail()
+            })
+          }
+        })
+        break;
+      case '开始工单':
+        wx.showModal({
+          title: getApp().globalData.Language.getMapText('提示'),
+          content: getApp().globalData.Language.getMapText(`确认开始工单吗`) + '?',
+          confirmBtn: getApp().globalData.Language.getMapText('确定'),
+          cancelBtn: getApp().globalData.Language.getMapText('取消'),
+          complete: ({
+            confirm
+          }) => {
+            if (confirm) _Http.basic({
+              "content": {
+                "sa_workorderid": detail.sa_workorderid
+              },
+              "id": "20230209144503",
+            }).then(res => {
+              getApp().globalData.Language.showToast(res.code == '1' ? "开始成功" : res.msg)
+              that.getDetail()
+            })
+          }
+        })
+        break;
+      case '启用':
+        wx.showModal({
+          title: getApp().globalData.Language.getMapText('提示'),
+          content: getApp().globalData.Language.getMapText(`确认启用当前工单吗`) + '?',
+          confirmBtn: getApp().globalData.Language.getMapText('确定'),
+          cancelBtn: getApp().globalData.Language.getMapText('取消'),
+          complete: ({
+            confirm
+          }) => {
+            if (confirm) _Http.basic({
+              "content": {
+                "sa_workorderid": detail.sa_workorderid
+              },
+              "id": "20230209144703",
+            }).then(res => {
+              getApp().globalData.Language.showToast(res.code == '1' ? "启用成功" : res.msg)
+              that.getDetail()
+            })
+          }
+        })
+        break;
+    }
+  },
+  onSelectLeader({
+    detail
+  }) {
+    const that = this;
+    wx.showModal({
+      title: getApp().globalData.Language.getMapText('提示'),
+      content: getApp().globalData.Language.getMapText(`是否确认选择`) + getApp().globalData.Language.getMapText(detail.name) + getApp().globalData.Language.getMapText(`执行工单`) + '?',
+      confirmBtn: getApp().globalData.Language.getMapText('确定'),
+      cancelBtn: getApp().globalData.Language.getMapText('取消'),
+      complete: ({
+        confirm
+      }) => {
+        if (confirm) _Http.basic({
+          "content": {
+            "sa_workorderid": that.data.detail.sa_workorderid,
+            "userid": detail.userid
+          },
+          "id": 2026012714183302,
+        }).then(res => {
+          getApp().globalData.Language.showToast(res.code == '1' ? "操作成功" : res.msg)
+          if (res.code == 1) {
+            that.getDetail()
+            that.clearUsers()
+          }
+        })
+      }
+    })
+  },
+  clearUsers() {
+    this.setData({
+      "users": []
+    })
+  },
+  /* 底部功能 */
+  async setTabbar() {
+    let status = this.data.detail.status,
+      tabbarList = [];
+    let options = {
+      编辑: {
+        icon: "icon-bianji2",
+        label: "编辑"
+      },
+      转工单: {
+        icon: "icon-dibu-biangengchengjiaozhuangtai",
+        label: "转工单"
+      },
+      接单: {
+        icon: "icon-a-tonggaoshujuxiazailiang",
+        label: "接单"
+      },
+      开始工单: {
+        icon: "icon-huifu1",
+        label: "开始工单"
+      },
+      暂停: {
+        icon: "icon-zanhuan",
+        label: "暂停"
+      },
+      完结工单: {
+        icon: "icon-dibu-chengjiao",
+        label: "完结工单"
+      },
+      启用: {
+        icon: "icon-quxiaozanhuan",
+        label: "启用"
+      },
+      中止: {
+        icon: "icon-zhongzhi",
+        label: "中止"
+      }
+    };
+
+    let userMsg = wx.getStorageSync("userMsg"),
+      isAdmin = userMsg.hrid == 0 && userMsg.usertype == 0;
+    /* '确认信息',
+    '确认信息', */
+    let statusOptions = {
+      待接单: ['编辑', '转工单', '接单', '中止'],
+      待开始: ['编辑', '开始工单', '中止'],
+      进行中: ['编辑', '完结工单', '暂停', '中止'],
+      暂停: ['编辑', '启用', '中止'],
+    };
+
+    /*  if (isAdmin) {
+       statusOptions.新建 = [];
+       statusOptions.已提交 = [];
+     } */
+    /*     const appAuth = wx.getStorageSync('auth').applyBill;
+        appAuth.optionnames = ['查询', '转工单', '退回', '中止']
+        statusOptions.已提交 = appAuth.optionnames.filter(v => ['转工单', '退回', '中止'].includes(v)) */
+    if (statusOptions[status]) {
+      tabbarList = statusOptions[status].map(v => options[v]);
+    }
+    this.setData({
+      tabbarList
     })
   },
   setPreview(res) {
@@ -208,5 +473,26 @@ Page({
     wx.makePhoneCall({
       phoneNumber: e.currentTarget.dataset.number
     })
+  },
+  onUnload() {
+    getCurrentPages().forEach(page => {
+      if (page.__route__ == 'E-service/workOrder/index') {
+        let content = JSON.parse(JSON.stringify(page.data.content));
+        content.pageSize = (content.pageNumber - 1) * content.pageSize;
+        content.pageNumber = 1;
+        _Http.basic({
+          id: page.data.id,
+          content
+        }).then(res => {
+          console.log("更新列表", res);
+          if (res.code == '1') {
+            page.setData({
+              list: res.data,
+              "content.total": res.total
+            })
+          }
+        })
+      } else {}
+    })
   }
 })

+ 35 - 0
E-service/workOrder/detail.scss

@@ -47,4 +47,39 @@
 		}
 	}
 
+	.buts {
+		display: flex;
+		font-size: 28rpx;
+		margin-top: 20rpx;
+		font-weight: bold;
+
+		.but {
+			height: 64rpx;
+			line-height: 64rpx;
+			border-radius: 8rpx;
+			padding: 0 20rpx;
+			margin-right: 20rpx;
+		}
+
+		.confirm {
+			color: #3874F6;
+			background: #ECF0F8;
+		}
+
+		.start {
+			background: rgba($color: #5FBF57, $alpha: 0.15);
+			color: #5FBF57;
+		}
+	}
+}
+
+.textarea {
+	width: 90%;
+	height: 200rpx;
+	box-sizing: border-box;
+	padding: 20rpx 30rpx;
+	background-color: #FDF9FC;
+	margin: 20rpx auto;
+	border: 1rpx solid #EEECEF;
+	border-radius: 8rpx;
 }

+ 22 - 7
E-service/workOrder/detail.wxml

@@ -12,8 +12,11 @@
 		<view wx:if="{{detail.exception_type}}" class="tab">
 			{{language[detail.exception_type]||detail.exception_type}}
 		</view>
-		<view wx:if="{{detail.class1}}" class="tab">
-			{{language[detail.class1]||detail.class1}}
+		<view wx:if="{{detail.service_level}}" style="background-color: {{tabColorS[detail.service_level].bgColor}};color:{{tabColorS[detail.service_level].color}};" class="tab">
+			{{language[detail.service_level]||detail.service_level}}
+		</view>
+		<view wx:if="{{detail.isout}}" class="tab" style="background-color: #FEF0E1;color: #F69E38;">
+			{{language['外包']||'外包'}}
 		</view>
 	</view>
 	<view class="row">
@@ -28,18 +31,14 @@
 		<view class="label">{{language['服务地址']||'服务地址'}}</view>
 		<view class="value">{{detail.province + detail.city + detail.county + detail.address}}</view>
 	</view>
-
 	<view class="row">
 		<view class="label">{{language['现场联系人']||'现场联系人'}}</view>
 		<view class="value">{{detail.scenecontact}}<text wx:if="{{detail.scenecontactrole}}" style="margin-left: 10rpx;">{{language[detail.scenecontactrole]||detail.scenecontactrole}}</text> <text wx:if="{{detail.scenecontactphonenumber}}" bind:tap="callPhone" data-number="{{detail.scenecontactphonenumber}}" style="color: #3874F6;margin-left: 10rpx;">{{detail.scenecontactphonenumber}}</text></view>
 	</view>
-
-
 	<view class="row">
 		<view class="label">{{language['业务员']||'业务员'}}</view>
 		<view class="value">{{detail.saler_name}}<text wx:if="{{detail.salerphonenumber}}" bind:tap="callPhone" data-number="{{detail.salerphonenumber}}" style="color: #3874F6;margin-left: 10rpx;">{{detail.salerphonenumber}}</text></view>
 	</view>
-
 	<view class="row">
 		<view class="label">{{language['服务开始时间']||'服务开始时间'}}</view>
 		<view class="value">{{detail.begdate}}</view>
@@ -48,9 +47,25 @@
 		<view class="label">{{language['服务结束时间']||'服务结束时间'}}</view>
 		<view class="value">{{detail.enddate}}</view>
 	</view>
+	<view class="buts">
+		<navigator class="confirm but" url="/E-service/workOrder/confirm?id={{sa_workorderid}}">
+			{{language['查看工单确认信息']||'查看工单确认信息'}}
+		</navigator>
+		<navigator class="start but" url="/E-service/workOrder/confirm?id={{sa_workorderid}}">
+			{{language['发起服务确认单']||'发起服务确认单'}}
+		</navigator>
+	</view>
 </view>
 <view style="height: 20rpx;" />
 <Yl_FunTabs list='{{tabsList}}' showIcon='{{false}}' active='{{tabsActive}}' bind:onChenge="tabsChange">
 	<Preview slot='工单信息' list1='{{list1}}' list2='{{list2}}' />
 	<view style="height: 150rpx;" />
-</Yl_FunTabs>
+</Yl_FunTabs>
+
+<Yl_Tabbar wx:if="{{tabbarList.length}}" list='{{tabbarList}}' bind:callback="tabbarOnClick" />
+
+<van-dialog confirmButtonText="{{language['确定']||'确定'}}" cancelButtonText="{{language['取消']||'取消'}}" use-slot title="{{language['中止']||'中止'}}" show="{{ abortreasonShow }}" show-cancel-button confirm-button-color='#3874F6' bind:confirm='onSuspend' bind:cancel='onCancel'>
+	<textarea placeholder="{{language['中止原因']||'中止原因'}}" value="{{reason.abortreason}}" data-name="abortreason" bindinput="areaInput" class="textarea" />
+</van-dialog>
+
+<van-action-sheet bind:select='onSelectLeader' show="{{ users.length }}" bind:click-overlay='clearUsers' bind:cancel='clearUsers' actions="{{ users }}" cancel-text="{{language['取消']||'取消'}}" z-index='9999999999' />

+ 12 - 21
E-service/workOrder/index.js

@@ -28,6 +28,14 @@ Page({
         bgColor: "#FCE4E4",
         color: "#ED4949"
       },
+      紧急: {
+        bgColor: "#FCE4E4",
+        color: "#ED4949"
+      },
+      历史售后: {
+        bgColor: "#eeeeee",
+        color: "#888888"
+      }
     },
     filtratelist: []
   },
@@ -90,28 +98,11 @@ Page({
   onChangeTab({
     detail
   }) {
-    let value = [];
+    let value = [detail.title];
     delete this.data.content.where.isconfirmation;
-    switch (detail.title) {
-      case '派单':
-        value = ['待接单']
-        break;
-      case '接单':
-        value = ['待开始']
-        break;
-      case '执行中':
-        value = ['进行中']
-        break;
-      case '完工':
-        value = ['已完成']
-        break;
-      case '中止':
-        value = ['已中止']
-        break;
-      case '确认':
-        value = []
-        this.data.content.where.isconfirmation = 1;
-        break;
+    if (detail.title == '已确认') {
+      value = []
+      this.data.content.where.isconfirmation = 1;
     }
     this.setData({
       'content.where.status': value,

+ 6 - 3
E-service/workOrder/index.wxml

@@ -1,6 +1,6 @@
-<Yl_Head2 tabs="{{[{title:'派单'},{title:'接单'},{title:'执行中'},{title:'完工'},{title:'中止'},{title:'确定'}]}}" bind:onSearch='onSearch' bind:onChangeTab='onChangeTab' />
+<Yl_Head2 tabs="{{[{title:'待接单'},{title:'待开始'},{title:'进行中'},{title:'暂停'},{title:'已确认'},{title:'已中止'}]}}" bind:onSearch='onSearch' bind:onChangeTab='onChangeTab' />
 <Yl_ListBox id='ListBox' bind:getlist='getList'>
-	<block wx:if="{{list[0].servicetype}}">
+	<block wx:if="{{list[0].address}}">
 		<navigator class="item" url="/E-service/workOrder/detail?id={{item.sa_workorderid}}" wx:for="{{list}}" wx:key="sa_workorderid">
 			<view class="head">
 				<view class="tabs">
@@ -13,7 +13,10 @@
 					<view wx:if="{{item.class1}}" class="tab">
 						{{language[item.class1]||item.class1}}
 					</view>
-					<view wx:if="{{isout}}" class="tab" style="background-color: #FEF0E1;color: #F69E38;">
+					<view wx:if="{{item.service_level}}" style="background-color: {{tabColorS[item.service_level].bgColor}};color:{{tabColorS[item.service_level].color}};" class="tab">
+						{{language[item.service_level]||item.service_level}}
+					</view>
+					<view wx:if="{{item.isout}}" class="tab" style="background-color: #FEF0E1;color: #F69E38;">
 						{{language['外包']||'外包'}}
 					</view>
 				</view>

+ 381 - 52
E-service/workOrder/insert.js

@@ -1,66 +1,395 @@
-// E-service/workOrder/insert.js
-Page({
+const _Http = getApp().globalData.http,
+  getTime = require("../../utils/getTime");
 
-  /**
-   * 页面的初始数据
-   */
+Page({
   data: {
-
+    loading: false,
+    showAll: false,
+    disabled: true,
+    form: [{
+      label: "省市县",
+      error: false,
+      errMsg: "",
+      type: "region",
+      value: [],
+      placeholder: "省,市,县",
+      valueName: "region",
+      required: true
+    }, {
+      label: "详细地址",
+      error: false,
+      errMsg: "",
+      type: "textarea",
+      value: "",
+      placeholder: "例: 科创园11栋1103室",
+      valueName: "address",
+      required: true,
+      checking: "base"
+    }, {
+      label: "现场联系人",
+      error: false,
+      errMsg: "",
+      type: "text",
+      value: "",
+      placeholder: "现场联系人",
+      valueName: "scenecontact",
+      required: true,
+      checking: "base"
+    }, {
+      label: "身份备注",
+      error: false,
+      errMsg: "",
+      type: "text",
+      value: "",
+      placeholder: "现场联系人身份备注",
+      valueName: "scenecontactrole",
+      required: true,
+      checking: "base"
+    }, {
+      label: "现场联系人电话",
+      error: false,
+      errMsg: "",
+      type: "number",
+      value: "",
+      placeholder: "联系人手机号码",
+      valueName: "scenecontactphonenumber",
+      required: true,
+      checking: "phone"
+    }, {
+      label: "应用系统",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: "",
+      interrupt: false,
+      radioList: [],
+      valueName: "class1", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "客诉大类",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: "",
+      interrupt: false,
+      radioList: [],
+      valueName: "class2", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "问题描述",
+      error: false,
+      errMsg: "",
+      type: "reason",
+      value: "",
+      placeholder: "请填写",
+      valueName: "reason",
+      required: true,
+      checking: "base"
+    }, {
+      label: "异常类型",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: "",
+      interrupt: false,
+      radioList: [],
+      valueName: "exception_type", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "服务等级",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: "",
+      interrupt: false,
+      radioList: [],
+      valueName: "service_level", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }, {
+      label: "备注",
+      error: false,
+      errMsg: "",
+      type: "textarea",
+      value: "",
+      placeholder: "请填写",
+      valueName: "remarks",
+      required: false,
+      checking: "base"
+    }],
+    sa_orderid: "",
+    sa_workorderid: 0
   },
-
-  /**
-   * 生命周期函数--监听页面加载
-   */
   onLoad(options) {
-
-  },
-
-  /**
-   * 生命周期函数--监听页面初次渲染完成
-   */
-  onReady() {
-
-  },
-
-  /**
-   * 生命周期函数--监听页面显示
-   */
-  onShow() {
-
+    getApp().globalData.Language.getLanguagePackage(this, '编辑工单');
+    this.getOptions();
+    let form = this.data.form,
+      data = getCurrentPages().find(v => v.__route__ == 'E-service/workOrder/detail').data.detail;
+    data.region = data.province ? [data.province, data.city, data.county] : [];
+    form = form.map(v => {
+      switch (v.valueName) {
+        case 'sys_enterpriseid':
+          v.value = data[v.valueName] ? [data.enterprisename, [data.sys_enterpriseid]] : ''
+          break;
+        default:
+          v.value = data[v.valueName] || ''
+          break;
+      }
+      return v
+    })
+    this.setData({
+      form,
+      sa_workorderid: data.sa_workorderid
+    })
   },
-
-  /**
-   * 生命周期函数--监听页面隐藏
-   */
-  onHide() {
-
+  submit() {
+    this.setData({
+      loading: true
+    })
+    let content = {
+      sa_workorderid: this.data.sa_workorderid,
+      ...this.selectComponent("#Form").submit()
+    };
+    content.province = content.region[0] || "";
+    content.city = content.region[1] || "";
+    content.county = content.region[2] || "";
+    delete content.region
+    _Http.basic({
+      "id": 2026020514064602,
+      content
+    }).then(res => {
+      this.setData({
+        loading: false
+      })
+      console.log("编辑工单", res)
+      if (res.code == 1) {
+        getCurrentPages().find(v => v.__route__ == 'E-service/workOrder/detail').getDetail();
+        wx.navigateBack({
+          success() {
+            wx.showToast({
+              title: getApp().globalData.Language.getMapText('保存成功'),
+              icon: "none",
+              mask: true
+            })
+          }
+        });
+      } else {
+        wx.showToast({
+          title: res.code != '1' ? res.msg : getApp().globalData.Language.getMapText('保存成功'),
+          icon: "none",
+          mask: true
+        })
+      }
+    })
   },
+  getOptions() {
+    let form = this.data.form;
+    // 服务类型
+    let servicetypes = _Http.servicetypes || [];
+    if (!servicetypes.length) {
+      _Http.basic({
+        "id": 20230206112003,
+        "content": {},
+      }).then(res => {
+        console.log("服务类型", res)
+        if (res.code == 1) {
+          servicetypes = res.data.map(v => {
+            return {
+              id: v.value,
+              name: v.value,
+            }
+          });
+          let data = form.find(v => v.valueName == 'servicetype');
+          data.radioList = servicetypes;
+          data.value = data.value || servicetypes[0].id;
+          _Http.servicetypes = servicetypes;
+          this.setData({
+            form
+          })
+        }
+      })
+    } else {
+      let data = form.find(v => v.valueName == 'servicetype');
+      data.radioList = servicetypes;
+      data.value = data.value || servicetypes[0].id;
+      this.setData({
+        form
+      })
+    }
 
-  /**
-   * 生命周期函数--监听页面卸载
-   */
-  onUnload() {
+    // 应用系统
+    let class1s = _Http.class1s || [];
+    if (!class1s.length) {
+      _Http.basic({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 1000,
+          "typename": "systemapp",
+        },
+      }).then(res => {
+        console.log("应用系统", res)
+        if (res.code == 1) {
+          class1s = res.data.map(v => {
+            return {
+              id: v.value,
+              name: v.value,
+            }
+          });
+          let data = form.find(v => v.valueName == 'class1');
+          data.radioList = class1s;
+          data.value = data.value || class1s[0].id;
+          _Http.class1s = class1s;
+          this.setData({
+            form
+          })
+        }
+      })
+    } else {
+      let data = form.find(v => v.valueName == 'class1');
+      data.radioList = class1s;
+      data.value = data.value || class1s[0].id;
+      this.setData({
+        form
+      })
+    }
 
-  },
+    // 客诉大类
+    let class2s = _Http.class2s || [];
+    if (!class2s.length) {
+      _Http.basic({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 1000,
+          "typename": "customerclass",
+        },
+      }).then(res => {
+        console.log("客诉大类", res)
+        if (res.code == 1) {
+          class2s = res.data.map(v => {
+            return {
+              id: v.value,
+              name: v.value,
+            }
+          });
+          let data = form.find(v => v.valueName == 'class2');
+          data.radioList = class2s;
+          data.value = data.value || class2s[0].id;
+          _Http.class2s = class2s;
+          this.setData({
+            form
+          })
+        }
+      })
+    } else {
+      let data = form.find(v => v.valueName == 'class2');
+      data.radioList = class2s;
+      data.value = data.value || class2s[0].id;
+      this.setData({
+        form
+      })
+    }
 
-  /**
-   * 页面相关事件处理函数--监听用户下拉动作
-   */
-  onPullDownRefresh() {
+    // 异常类型
+    let exception_types = _Http.exception_types || [];
+    if (!exception_types.length) {
+      _Http.basic({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 1000,
+          "typename": "exceptiontype",
+        },
+      }).then(res => {
+        console.log("异常类型", res)
+        if (res.code == 1) {
+          exception_types = res.data.map(v => {
+            return {
+              id: v.value,
+              name: v.value,
+            }
+          });
+          let data = form.find(v => v.valueName == 'exception_type');
+          data.radioList = exception_types;
+          data.value = data.value || exception_types[0].id;
+          _Http.exception_types = exception_types;
+          this.setData({
+            form
+          })
+        }
+      })
+    } else {
+      let data = form.find(v => v.valueName == 'exception_type');
+      data.radioList = exception_types;
+      data.value = data.value || exception_types[0].id;
+      this.setData({
+        form
+      })
+    }
 
+    // 服务等级
+    let service_levels = _Http.service_levels || [];
+    if (!service_levels.length) {
+      _Http.basic({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 1000,
+          "typename": "servicelevel",
+        },
+      }).then(res => {
+        console.log("服务等级", res)
+        if (res.code == 1) {
+          service_levels = res.data.map(v => {
+            return {
+              id: v.value,
+              name: v.value,
+            }
+          });
+          let data = form.find(v => v.valueName == 'service_level');
+          data.radioList = service_levels;
+          data.value = data.value || service_levels[0].id;
+          _Http.service_levels = service_levels;
+          this.setData({
+            form
+          })
+        }
+      })
+    } else {
+      let data = form.find(v => v.valueName == 'service_level');
+      data.radioList = service_levels;
+      data.value = data.value || service_levels[0].id;
+      this.setData({
+        form
+      })
+    }
   },
-
-  /**
-   * 页面上拉触底事件的处理函数
-   */
-  onReachBottom() {
-
+  // 是否显示全部
+  onChange({
+    detail
+  }) {
+    this.setData({
+      showAll: detail
+    })
   },
-
-  /**
-   * 用户点击右上角分享
-   */
-  onShareAppMessage() {
-
+  /* 表单必填项是否完成 */
+  onConfirm({
+    detail
+  }) {
+    this.setData({
+      disabled: detail
+    })
   }
 })

+ 24 - 1
E-service/workOrder/insert.scss

@@ -1 +1,24 @@
-/* E-service/workOrder/insert.wxss */
+.new-footer {
+	display: flex;
+	align-items: center;
+	justify-content: flex-end;
+	position: fixed;
+	width: 100vw;
+	height: 130rpx;
+	background: #FFFFFF;
+	box-shadow: 0px -4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+	bottom: 0;
+	z-index: 9999;
+
+	.new-submit {
+			width: 156rpx;
+			height: 90rpx;
+			background: #3874F6;
+			border-radius: 8rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC-Bold, PingFang SC;
+			font-weight: bold;
+			color: #FFFFFF;
+			margin-right: 30rpx;
+	}
+}

+ 6 - 2
E-service/workOrder/insert.wxml

@@ -1,2 +1,6 @@
-<!--E-service/workOrder/insert.wxml-->
-<text>E-service/workOrder/insert.wxml</text>
+<Yl_Headline title='基本信息' type='switch' switchLabel='仅显示必填信息' switch='{{showAll}}' bind:callBack='onChange' />
+<Yl_Field id='Form' form='{{form}}' showAll='{{!showAll}}' bind:onConfirm='onConfirm' bind:interrupt="interrupt" />
+<view style="height: 150rpx;" />
+<view class="new-footer">
+    <van-button custom-class='new-submit' disabled='{{disabled || loading}}' loading='{{loading}}' bindclick='submit'>{{language['提交']||'提交'}}</van-button>
+</view>

+ 178 - 0
E-service/workOrder/takeOrder.js

@@ -0,0 +1,178 @@
+const _Http = getApp().globalData.http,
+  getTime = require("../../utils/getTime");
+
+Page({
+  data: {
+    loading: false,
+    showAll: false,
+    disabled: false,
+    form: [{
+      label: "是否外包",
+      error: false,
+      errMsg: "",
+      hint: "",
+      type: "radio",
+      value: 0,
+      interrupt: true,
+      radioList: [{
+        id: 1,
+        name: "是"
+      }, {
+        id: 0,
+        name: "否"
+      }],
+      valueName: "isout", //绑定的字段名称
+      required: true, //必填
+      checking: `base`,
+    }],
+    sa_workorderid: 0,
+    users: []
+  },
+  onLoad(options) {
+    getApp().globalData.Language.getLanguagePackage(this, '接单');
+    let form = this.data.form,
+      data = getCurrentPages().find(v => v.__route__ == 'E-service/workOrder/detail').data.detail;
+    form = form.map(v => {
+      switch (v.valueName) {
+        default:
+          v.value = data[v.valueName]
+          break;
+      }
+      return v
+    })
+    let leader = '';
+    try {
+      leader = data.team.find(v => v.isleader).userid || 0
+    } catch (error) {
+
+    }
+    this.setData({
+      form,
+      sa_workorderid: data.sa_workorderid,
+      leader
+    })
+  },
+  async interrupt({
+    detail
+  }) {
+    if (detail.data.valueName == "isout") {
+      detail.form[detail.form.findIndex(v => v.valueName == 'isout')] = detail.data;
+      if (detail.data.value == 1) {
+        this.setData({
+          form: detail.form
+        })
+        let users = this.data.users;
+        if (users.length == 0) await _Http.basic({
+          id: 20230213143003,
+          content: {
+            pageSize: 9999
+          }
+        }).then(res => {
+          console.log("服务人员", res)
+          if (res.code != '1') return wx.showToast({
+            title: res.msg,
+            icon: "none"
+          })
+          users = res.data;
+        })
+        if (users.length) {
+          let leaderdata = users.find(v => v.userid == this.data.leader)
+          detail.form = detail.form.concat([{
+            label: "服务负责人",
+            error: false,
+            errMsg: "",
+            hint: "",
+            type: "radio",
+            value: leaderdata.userid || '',
+            interrupt: true,
+            radioList: users.map(v => {
+              v.id = v.userid
+              return v
+            }),
+            valueName: "userid", //绑定的字段名称
+            required: true, //必填
+            checking: `base`,
+          }, {
+            label: "服务负责人电话",
+            error: false,
+            errMsg: "",
+            hint: "",
+            type: "number",
+            value: leaderdata.phonenumber || '',
+            interrupt: true,
+            valueName: "phonenumber111", //绑定的字段名称
+            required: false, //必填
+            checking: `base`,
+            disabled: true
+          }]);
+          this.setData({
+            form: detail.form
+          })
+        }
+      } else {
+        this.setData({
+          form: detail.form.filter(v => v.valueName == 'isout')
+        })
+      }
+    } else if (detail.data.valueName == "userid") {
+      detail.form[detail.form.findIndex(v => v.valueName == 'userid')] = detail.data;
+      detail.form[detail.form.findIndex(v => v.valueName == 'phonenumber111')].value = detail.data.radioList.find(v => v.id == detail.data.value).phonenumber;
+      this.setData({
+        form: detail.form,
+        leader: detail.data.value
+      })
+    }
+  },
+  submit() {
+    this.setData({
+      loading: true
+    })
+    let content = {
+      sa_workorderid: this.data.sa_workorderid,
+      ...this.selectComponent("#Form").submit()
+    };
+    _Http.basic({
+      "id": 20230210101103,
+      content
+    }).then(res => {
+      this.setData({
+        loading: false
+      })
+      console.log("确认信息", res)
+      if (res.code == 1) {
+        getCurrentPages().find(v => v.__route__ == 'E-service/workOrder/detail').getDetail();
+        wx.navigateBack({
+          success() {
+            wx.showToast({
+              title: getApp().globalData.Language.getMapText('接单成功'),
+              icon: "none",
+              mask: true
+            })
+          }
+        });
+      } else {
+        wx.showToast({
+          title: res.code != '1' ? res.msg : getApp().globalData.Language.getMapText('保存成功'),
+          icon: "none",
+          mask: true
+        })
+      }
+    })
+  },
+  // 是否显示全部
+  onChange({
+    detail
+  }) {
+    this.setData({
+      showAll: detail
+    })
+  },
+  /* 表单必填项是否完成 */
+  onConfirm({
+    detail
+  }) {
+    this.setData({
+      disabled: detail
+    })
+  }
+})

+ 3 - 0
E-service/workOrder/takeOrder.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 24 - 0
E-service/workOrder/takeOrder.scss

@@ -0,0 +1,24 @@
+.new-footer {
+	display: flex;
+	align-items: center;
+	justify-content: flex-end;
+	position: fixed;
+	width: 100vw;
+	height: 130rpx;
+	background: #FFFFFF;
+	box-shadow: 0px -4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+	bottom: 0;
+	z-index: 9999;
+
+	.new-submit {
+			width: 156rpx;
+			height: 90rpx;
+			background: #3874F6;
+			border-radius: 8rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC-Bold, PingFang SC;
+			font-weight: bold;
+			color: #FFFFFF;
+			margin-right: 30rpx;
+	}
+}

+ 6 - 0
E-service/workOrder/takeOrder.wxml

@@ -0,0 +1,6 @@
+<Yl_Headline title='基本信息' type='switch' switchLabel='仅显示必填信息' switch='{{showAll}}' bind:callBack='onChange' />
+<Yl_Field id='Form'bind:interrupt='interrupt' form='{{form}}' showAll='{{!showAll}}' bind:onConfirm='onConfirm' bind:interrupt="interrupt" />
+<view style="height: 150rpx;" />
+<view class="new-footer">
+    <van-button custom-class='new-submit' disabled='{{disabled || loading}}' loading='{{loading}}' bindclick='submit'>{{language['确定']||'确定'}}</van-button>
+</view>

+ 3 - 1
app.json

@@ -95,7 +95,9 @@
         "workOrder/insert",
         "workOrder/detail",
         "serviceBillList/product/select",
-        "serviceBillList/transferWorkOrder/transfer"
+        "serviceBillList/transferWorkOrder/transfer",
+        "workOrder/confirm",
+        "workOrder/takeOrder"
       ]
     },
     {

+ 23 - 2
project.private.config.json

@@ -24,12 +24,33 @@
   "condition": {
     "miniprogram": {
       "list": [
+        {
+          "name": "老工单详情",
+          "pathName": "/Eservice/workerLeader/editworkOrderDetail/index",
+          "query": "id=1387",
+          "scene": null,
+          "launchMode": "default"
+        },
+        {
+          "name": "工单详情",
+          "pathName": "E-service/workOrder/detail",
+          "query": "id=1387",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "工单详情",
+          "pathName": "E-service/workOrder/detail",
+          "query": "id=1387",
+          "launchMode": "default",
+          "scene": null
+        },
         {
           "name": "已提交详情",
           "pathName": "E-service/serviceBillList/detail",
           "query": "id=1536&type=admin",
-          "scene": null,
-          "launchMode": "default"
+          "launchMode": "default",
+          "scene": null
         },
         {
           "name": "服务申请单详情",