Browse Source

Merge branch 'linwenxin_workOrder' of ssh://gogs.zfire.top:2222/zfire-front/zfire-newmall-admin

linwenxin 1 year ago
parent
commit
791281df63
20 changed files with 343 additions and 582 deletions
  1. 8 0
      src/api/workOrderPool.js
  2. 46 0
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/abnormal.vue
  3. 0 35
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/activate.vue
  4. 0 80
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/closeOrder.vue
  5. 0 121
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/cloudCall.vue
  6. 16 4
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/commitSave.vue
  7. 0 31
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/commitTempSave.vue
  8. 10 37
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/processFeedback.vue
  9. 0 90
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/rejectOrder.vue
  10. 46 0
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/unurgent.vue
  11. 46 0
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/urgent.vue
  12. 0 87
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/void.vue
  13. 14 7
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/index.vue
  14. 19 22
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/basicInfo.js
  15. 34 3
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/dispatchInfo.js
  16. 13 10
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/pandanxinxi.js
  17. 11 11
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/productColumns.js
  18. 13 13
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/serviceInfo.js
  19. 49 28
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/workOrderLogic.js
  20. 18 3
      src/views/workOrder/workOrderPool/index.vue

+ 8 - 0
src/api/workOrderPool.js

@@ -1,5 +1,13 @@
 import request, { postBlob, getBlob, handleImport } from '@/utils/request'
 
+export function orderBaseFlag(params) {
+  return request({
+    url: `/order/base/flag`,
+    method: 'post',
+    params
+  })
+}
+
 export function orderBaseSave(data) {
   return request({
     url: `/order/base/save`,

+ 46 - 0
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/abnormal.vue

@@ -0,0 +1,46 @@
+<template>
+  <div class="withinLine">
+    <el-button @click="abnormal" type="primary" size="mini">设为异常</el-button>
+  </div>
+</template>
+
+<script>
+import buttonMixin from './button_mixin.js'
+import { MessageBox } from '@zjlib/element-ui2'
+import { orderBaseFlag } from "@/api/workOrderPool.js"
+export default {
+  mixins: [buttonMixin],
+  methods: {
+    abnormal() {
+      MessageBox.confirm('是否确定将此单设置为异常单,请谨慎操作', '设为异常确认', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        orderBaseFlag({ flag: true, orderBaseId: this.orderInfo.id, orderFlagEnum: "YI_CHANGE" }).then(res => {
+          // 编辑保存后不跳转列表,刷新数据
+          this.acquireVerify(this, 'getorderDetail')()
+          // 刷新操作记录
+          this.acquireVerify(this, 'getOrderBaseLogList')()
+          this.$message({
+            type: 'success',
+            message: '设置成功!'
+          })
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.withinLine {
+  display: inline-block;
+
+  ::v-deep .el-button {
+    margin-left: 0;
+    margin-right: 10px;
+    margin-bottom: 10px;
+  }
+}
+</style>

+ 0 - 35
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/activate.vue

@@ -1,35 +0,0 @@
-<template>
-  <div class="withinLine">
-    <el-button @click="activate" type="primary" size="mini">激活工单</el-button>
-  </div>
-</template>
-
-<script>
-import buttonMixin from './button_mixin.js'
-import { MessageBox } from '@zjlib/element-ui2'
-export default {
-  mixins: [buttonMixin],
-  methods: {
-    activate() {
-      MessageBox.confirm('是否确定激活工单', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.withinLine {
-  display: inline-block;
-  ::v-deep .el-button {
-    margin-left: 0;
-    margin-right: 10px;
-    margin-bottom: 10px;
-  }
-}
-</style>

+ 0 - 80
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/closeOrder.vue

@@ -1,80 +0,0 @@
-<template>
-  <div class="withinLine">
-    <el-button type="primary" size="mini" @click="closeOrder">关闭工单</el-button>
-    <el-dialog
-      title="关闭工单"
-      width="800px"
-      :visible.sync="dialogVisible"
-      :modal-append-to-body="false"
-      :append-to-body="true"
-      :before-close="handleClose"
-    >
-      <div>
-        <h2 style="color: red">注意:工单异常关闭,将无法转结算。</h2>
-        <p>平台信息编号: {{ orderInfo.id }}</p>
-      </div>
-      <el-form ref="closeOrder" size="mini" :model="sendEngineersform" label-width="100px" label-position="left">
-        <el-form-item
-          label="审批意见"
-          prop="remark"
-          :rows="5"
-          :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
-        >
-          <el-input type="textarea" v-model="sendEngineersform.remark"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="mini" @click="handleClose">取 消</el-button>
-        <el-button size="mini" type="primary" @click="sub">确 定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import buttonMixin from './button_mixin.js'
-export default {
-  mixins: [buttonMixin],
-  data() {
-    return {
-      dialogVisible: false,
-      sendEngineersform: {
-        orderBaseId: '',
-        remark: ''
-      }
-    }
-  },
-  methods: {
-    closeOrder() {
-      this.dialogVisible = true
-      this.sendEngineersform.orderBaseId = this.orderInfo.id
-    },
-    sub() {
-      this.$refs.closeOrder.validate(valid => {
-        if (valid) {
-          
-        } else {
-          this.$message({
-            type: 'warning',
-            message: '审批意见'
-          })
-        }
-      })
-    },
-    handleClose() {
-      Object.assign(this.$data, this.$options.data())
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.withinLine {
-  display: inline-block;
-  ::v-deep .el-button {
-    margin-left: 0;
-    margin-right: 10px;
-    margin-bottom: 10px;
-  }
-}
-</style>

+ 0 - 121
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/cloudCall.vue

@@ -1,121 +0,0 @@
-<template>
-  <div class="withinLine_cloud_call">
-    <i class="el-icon-phone" @click="letClick" @contextmenu.prevent.stop="rigClick"></i>
-    <el-dialog
-      :modal="true"
-      title="设置联通云呼登入名"
-      :visible.sync="dialogbol"
-      width="700px"
-      :show-close="false"
-      :close-on-click-modal="false"
-      :modal-append-to-body="true"
-      :append-to-body="true"
-    >
-      <el-form :model="form" :rules="formRules" ref="ruleForm" label-width="130px" label-position="top">
-        <el-form-item label="联通云呼登录名" prop="unicomIntegratedId">
-          <el-input style="width: 300px" v-model="form.unicomIntegratedId"></el-input>
-        </el-form-item>
-        <el-form-item label="联通云呼-接听方式" prop="unicomIntegratedType">
-          <el-radio-group v-model="form.unicomIntegratedType">
-            <el-radio label="ExtenType">支持三种方式</el-radio>
-            <el-radio label="Local">直线方式</el-radio>
-            <el-radio label="sip">软电话</el-radio>
-            <el-radio label="gateway">语音网关/IP话机</el-radio>
-          </el-radio-group>
-          <div>
-            (<span style="color: red">选择任意一种成功即可,不成功就换个方式试试</span
-            >)对应云呼平台登录界面选择的接听方式。
-          </div>
-          <div>(按对方平台说的两个地方都选择IP话机,可以不需要每天都登录)</div>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="mini" @click="Cancel">取 消</el-button>
-        <el-button size="mini" @click="Confirm" type="primary">确 定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    orderBaseId: {
-      type: [String, Number],
-      default: ''
-    },
-    phone: {
-      type: [String, Number],
-      default: ''
-    }
-  },
-
-  data() {
-    return {
-      dialogbol: false,
-      form: {
-        unicomIntegratedId: '',
-        unicomIntegratedType: ''
-      },
-      formRules: {
-        unicomIntegratedId: [{ required: true, message: '请输入', trigger: 'blur' }],
-        unicomIntegratedType: [{ required: true, message: '请选择', trigger: 'change' }]
-      }
-    }
-  },
-  methods: {
-    letClick() {
-      if (this.phone) {
-       
-      } else {
-        this.$message({
-          type: 'warning',
-          message: '请先选择工程师'
-        })
-        return
-      }
-    },
-    rigClick() {
-      var { unicomIntegratedId, unicomIntegratedType } = JSON.parse(localStorage.getItem('greemall_user'))
-      this.form.unicomIntegratedId = unicomIntegratedId || ''
-      this.form.unicomIntegratedType = unicomIntegratedType || ''
-      this.dialogbol = true
-    },
-    Cancel() {
-      this.dialogbol = false
-    },
-    Confirm() {
-      this.$refs.ruleForm.validate(valid => {
-        if (valid) {
- 
-        } else {
-          console.log('error submit!!')
-          return false
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.el-input-group__append {
-  position: relative !important;
-}
-.withinLine_cloud_call {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  .el-icon-phone {
-    width: 100%;
-    height: 100%;
-    display: inline-block;
-    text-align: center;
-    line-height: 26px;
-    background-color: #409eff !important;
-    color: #fff !important;
-  }
-}
-</style>

+ 16 - 4
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/commitSave.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="withinLine">
-    <el-button type="primary" size="mini" @click="save">{{
-      orderInfo.id ? '保存' : '下派工单'
-    }}</el-button>
+    <el-button type="primary" size="mini" @click="save">
+      {{ orderInfo.id ? '保存' : '下派工单' }}
+    </el-button>
   </div>
 </template>
 
@@ -17,7 +17,19 @@ export default {
       this.acquireVerify(this, 'allVerify')((v) => {
         if (v) {
           orderBaseSave(this.orderInfo).then(res => {
-            EventBus.$emit('handleOrderClone')
+            if (this.orderInfo.id) {
+              // 编辑保存后不跳转列表,刷新数据
+              this.acquireVerify(this, 'getorderDetail')()
+              // 刷新操作记录
+              this.acquireVerify(this, 'getOrderBaseLogList')()
+              this.$message({
+                type: 'success',
+                message: '保存成功'
+              })
+            } else {
+              // 创建保存后跳转列表
+              EventBus.$emit('handleOrderClone')
+            }
           })
         }
       })

+ 0 - 31
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/commitTempSave.vue

@@ -1,31 +0,0 @@
-<template>
-  <div class="withinLine">
-    <el-button type="primary" size="mini" @click="save">临时保存</el-button>
-  </div>
-</template>
-
-<script>
-import buttonMixin from './button_mixin.js'
-import { EventBus } from '@/utils/eventBus'
-export default {
-  mixins: [buttonMixin],
-  methods: {
-    save() {
-      this.acquireVerify(this, 'allVerify')(() => {
-        
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.withinLine {
-  display: inline-block;
-  ::v-deep .el-button {
-    margin-left: 0;
-    margin-right: 10px;
-    margin-bottom: 10px;
-  }
-}
-</style>

+ 10 - 37
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/processFeedback.vue

@@ -1,24 +1,12 @@
 <template>
   <div class="withinLine">
     <el-button type="primary" size="mini" @click="open">{{ resultCodeName }}</el-button>
-    <el-dialog
-      title="过程反馈"
-      :visible.sync="dialogVisible"
-      :append-to-body="true"
-      :before-close="handleClose"
-      :close-on-click-modal="false"
-      width="750px"
-    >
+    <el-dialog title="过程反馈" :visible.sync="dialogVisible" :append-to-body="true" :before-close="handleClose"
+      :close-on-click-modal="false" width="750px">
       <zj-page-container direction="row">
         <zj-page-fill>
           <div style="width: 100%; box-sizing: border-box; padding: 0 10px">
-            <zj-form
-              v-if="dialogVisible"
-              ref="formRef"
-              :formData="form"
-              :formItems="formItems"
-              :formRules="formRules"
-            />
+            <zj-form v-if="dialogVisible" ref="formRef" :formData="form" :formItems="formItems" :formRules="formRules" />
           </div>
         </zj-page-fill>
       </zj-page-container>
@@ -47,31 +35,13 @@ export default {
   },
   data() {
     return {
-      tableData: [],
       dialogVisible: false,
-      PROCESS_DELAY_TYPE: [],
       form: {
-        remark: '',
-        appointmentTime: '',
-        message: '',
-        isTriggerMessage: '',
-        fileUrl: '',
-        delayType: '',
-        items: [],
-        resultCode: this.resultCode_
+
       },
-      optionsList: [],
-      userMobile: [],
       formRules: {
-        resultCode: [{ required: true, message: '请选择', trigger: 'blur' }],
-        materialProvide: [{ required: true, message: '请选择', trigger: 'blur' }],
-        waitApplyCode: [{ required: true, message: '请输入', trigger: 'blur' }],
-        waitMaterialCode: [{ required: true, message: '请输入', trigger: 'blur' }],
-        qualityFeedbackCode: [{ required: true, message: '请输入', trigger: 'blur' }],
-        feedbackTime: [{ required: true, message: '请选择', trigger: 'blur' }],
-        receiveNumber: [{ required: true, message: '请选择', trigger: 'blur' }]
+
       },
-      scripFeedbackList: []
     }
   },
   computed: {
@@ -80,7 +50,7 @@ export default {
       return JSON.parse(localStorage.getItem('greemall_user'))
     },
     formItems() {
-return []
+      return []
     }
   },
   methods: {
@@ -90,7 +60,7 @@ return []
     sub() {
       this.$refs.formRef.validate(valid => {
         if (valid) {
-          
+
         }
       })
     },
@@ -108,14 +78,17 @@ return []
 .el-date-editor.el-input__inner {
   width: 100%;
 }
+
 .xijiezhanshi {
   width: 100%;
   display: flex;
   justify-content: space-between;
   margin-bottom: 5px;
 }
+
 .withinLine {
   display: inline-block;
+
   ::v-deep .el-button {
     margin-left: 0;
     margin-right: 10px;

+ 0 - 90
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/rejectOrder.vue

@@ -1,90 +0,0 @@
-<template>
-  <div class="withinLine">
-    <el-button type="primary" size="mini" @click="open">驳回</el-button>
-    <el-dialog
-      :modal="true"
-      title="驳回"
-      :visible.sync="dialogVisible"
-      width="50%"
-      :show-close="false"
-      :close-on-click-modal="false"
-      :modal-append-to-body="false"
-      append-to-body
-      destroy-on-close
-    >
-      <div>
-        <el-row>
-          <el-col :xs="24" :sm="24" :lg="12">平台信息编号:{{ orderInfo.id || '' }}</el-col>
-          <el-col :xs="24" :sm="24" :lg="12">报完工师傅:{{ orderInfo.workerName || '' }}</el-col>
-        </el-row>
-        <br />
-        <el-form ref="form" size="mini" :rules="formRules" label-position="top" :model="form" label-width="80px">
-          <el-form-item label="备注" prop="remark">
-            <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="form.remark"> </el-input>
-          </el-form-item>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="mini" @click="handleCancel">取 消</el-button>
-        <el-button size="mini" @click="handleConfirm" type="primary">确 定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import buttonMixin from './button_mixin.js'
-export default {
-  mixins: [buttonMixin],
-  components: {},
-  props: {},
-  data() {
-    return {
-      form: {
-        remark: ''
-      },
-      formRules: {
-        remark: [{ required: true, message: '请选择', trigger: 'change' }]
-      },
-      dialogVisible: false
-    }
-  },
-  created() {},
-  watch: {},
-  computed: {},
-  methods: {
-    open() {
-      this.dialogVisible = true
-    },
-    handleCancel() {
-      this.form.remark = ''
-      this.dialogVisible = false
-    },
-    handleConfirm() {
-      this.$refs.form.validate(async valid => {
-        if (valid) {
-          let params = {
-            orderBaseId: this.orderInfo.id,
-            remark: this.form.remark
-          }
-         
-        } else {
-          this.$message.error('* 代表必填必选项,请检查')
-          return false
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.withinLine {
-  display: inline-block;
-  ::v-deep .el-button {
-    margin-left: 0;
-    margin-right: 10px;
-    margin-bottom: 10px;
-  }
-}
-</style>

+ 46 - 0
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/unurgent.vue

@@ -0,0 +1,46 @@
+<template>
+  <div class="withinLine">
+    <el-button @click="urgent" type="primary" size="mini">不加急</el-button>
+  </div>
+</template>
+
+<script>
+import buttonMixin from './button_mixin.js'
+import { MessageBox } from '@zjlib/element-ui2'
+import { orderBaseFlag } from "@/api/workOrderPool.js"
+export default {
+  mixins: [buttonMixin],
+  methods: {
+    urgent() {
+      MessageBox.confirm('取消加急操作,会消息通知所有订单相关人员,请谨慎操作', '取消加急确认', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        orderBaseFlag({ flag: false, orderBaseId: this.orderInfo.id, orderFlagEnum: "JIA_JI" }).then(res => {
+          // 编辑保存后不跳转列表,刷新数据
+          this.acquireVerify(this, 'getorderDetail')()
+          // 刷新操作记录
+          this.acquireVerify(this, 'getOrderBaseLogList')()
+          this.$message({
+            type: 'success',
+            message: '取消加急成功!'
+          })
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.withinLine {
+  display: inline-block;
+
+  ::v-deep .el-button {
+    margin-left: 0;
+    margin-right: 10px;
+    margin-bottom: 10px;
+  }
+}
+</style>

+ 46 - 0
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/urgent.vue

@@ -0,0 +1,46 @@
+<template>
+  <div class="withinLine">
+    <el-button @click="urgent" type="primary" size="mini">加急</el-button>
+  </div>
+</template>
+
+<script>
+import buttonMixin from './button_mixin.js'
+import { MessageBox } from '@zjlib/element-ui2'
+import { orderBaseFlag } from "@/api/workOrderPool.js"
+export default {
+  mixins: [buttonMixin],
+  methods: {
+    urgent() {
+      MessageBox.confirm('加急操作,会消息通知所有订单相关人员,请谨慎操作', '加急确认', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        orderBaseFlag({ flag: true, orderBaseId: this.orderInfo.id, orderFlagEnum: "JIA_JI" }).then(res => {
+          // 编辑保存后不跳转列表,刷新数据
+          this.acquireVerify(this, 'getorderDetail')()
+          // 刷新操作记录
+          this.acquireVerify(this, 'getOrderBaseLogList')()
+          this.$message({
+            type: 'success',
+            message: '加急成功!'
+          })
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.withinLine {
+  display: inline-block;
+
+  ::v-deep .el-button {
+    margin-left: 0;
+    margin-right: 10px;
+    margin-bottom: 10px;
+  }
+}
+</style>

+ 0 - 87
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/buttons/void.vue

@@ -1,87 +0,0 @@
-<template>
-  <div class="withinLine">
-    <el-button type="primary" size="mini" @click="open">作废</el-button>
-    <el-dialog
-      title="作废"
-      :visible.sync="dialogVisible"
-      :append-to-body="true"
-      width="500px"
-      :before-close="handleClose"
-    >
-      <el-form ref="form" size="mini" :model="form" label-width="80px">
-        <el-form-item
-          label="备注内容"
-          prop="cancelRemark"
-          :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
-        >
-          <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="form.cancelRemark"> </el-input>
-        </el-form-item>
-        <el-form-item
-          label="作废原因"
-          prop="cancelReason"
-          :rules="[{ required: true, message: '请选择', trigger: 'blur' }]"
-        >
-          <el-select v-model="form.cancelReason" placeholder="请选择">
-            <el-option
-              v-for="(item, index) in ORDER_CANCEL_REASON"
-              :key="index"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button size="mini" @click="handleClose">取 消</el-button>
-        <el-button size="mini" type="primary" @click="sub">提交</el-button>
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import buttonMixin from './button_mixin.js'
-export default {
-  mixins: [buttonMixin],
-  data() {
-    return {
-      dialogVisible: false,
-      form: {},
-      ORDER_CANCEL_REASON: []
-    }
-  },
-  methods: {
-    open() {
-      if (this.orderInfo.orderStatus === 'A13081' || this.orderInfo.orderStatus === 'A1308') {
-        this.$message.error('已作废工单,不可再作废')
-        return
-      }
-
-      this.dialogVisible = true
-    },
-    sub() {
-      this.$refs.form.validate(valid => {
-        if (valid) {
-
-        }
-      })
-    },
-    handleClose() {
-      this.dialogVisible = false
-      Object.assign(this.$data, this.$options.data())
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.withinLine {
-  display: inline-block;
-  ::v-deep .el-button {
-    margin-left: 0;
-    margin-right: 10px;
-    margin-bottom: 10px;
-  }
-}
-</style>

+ 14 - 7
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/index.vue

@@ -3,7 +3,7 @@
     <zj-page-fill class="neibuview">
       <zj-form-container ref="formRef" :form-data="orderInfo" :form-rules="formRules" :form-attributes="{ size: 'mini' }">
         <!-- 派工信息 创建不需要 -->
-        <zj-form-module v-if="id" title="派工信息" label-width="68px" :form-data="orderInfo" :form-items="dispatchInfo">
+        <zj-form-module v-if="id" title="派工信息" label-width="90px" :form-data="orderInfo" :form-items="dispatchInfo">
           <div slot="internal-bottom">
             <copy-info text="复制工单信息" :info="dispatchInfo" :order-info="orderInfo" />
           </div>
@@ -34,11 +34,14 @@
         <!-- 关闭 -->
         <close-button />
         <!-- 1,保存  -->
-        <commitSave :orderInfo="orderInfo" :orderType="orderType"/>
+        <commitSave v-if="~btnRestrict.indexOf(1)" :orderInfo="orderInfo" :orderType="orderType" />
         <!-- 2,过程反馈  -->
         <!-- 3,设为异常  -->
+        <abnormal v-if="~btnRestrict.indexOf(3)" :orderInfo="orderInfo" :orderType="orderType" />
         <!-- 4,加急  -->
+        <urgent v-if="~btnRestrict.indexOf(4)" :orderInfo="orderInfo" :orderType="orderType" />
         <!-- 5,不加急  -->
+        <unurgent v-if="~btnRestrict.indexOf(5)" :orderInfo="orderInfo" :orderType="orderType" />
         <!-- 6,取消工单  -->
         <!-- 7,回访  -->
         <!-- 8,新建工单 -->
@@ -46,7 +49,8 @@
       <div style="box-sizing: border-box;padding: 10px 10px 0;" v-else>
         <!-- 关闭 -->
         <close-button />
-        <commitSave :orderInfo="orderInfo" :orderType="orderType"/>
+        <!-- 1,下派服务单  -->
+        <commitSave :orderInfo="orderInfo" :orderType="orderType" />
       </div>
     </div>
   </zj-page-container>
@@ -63,12 +67,18 @@ import pandanxinxi from './mixins/pandanxinxi.js'
 import copyInfo from './buttons/copyInfo.vue'
 import closeButton from './buttons/closeButton.vue'
 import commitSave from './buttons/commitSave.vue'
+import urgent from './buttons/urgent.vue'
+import unurgent from './buttons/unurgent.vue'
+import abnormal from './buttons/abnormal.vue'
 
 export default {
   components: {
     copyInfo,
     closeButton,
-    commitSave
+    commitSave,
+    urgent,
+    unurgent,
+    abnormal
   },
   mixins: [
     workOrderLogic,
@@ -80,9 +90,6 @@ export default {
     pandanxinxi,
   ],
   methods: {
-    upoptions() {
-
-    },
     allVerify(cb) {
       this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
         cb && cb(valid, invalidFields, errLabels)

+ 19 - 22
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/basicInfo.js

@@ -158,55 +158,52 @@ export default {
           name: 'slot-component',
           md: 2,
           formItemAttributes: {
-            'label-width': '0px'
+            'label-width': '0px',
+            prop: 'gpsAddress',
+            rules: this.formOptions.gpsAddress.isRules,
+            errLabel: 'GPS地址'
           },
           render: (h, { props }) => {
-            var { formData } = props
             return (
               <geographicalPosi
                 disabled={!this.formOptions.gpsAddress.isEdit}
-                formData={formData}
+                formData={this.orderInfo}
                 onSelectPosi={data => {
                   // 获取经纬度
-                  formData.lng = data.center[0]
-                  formData.lat = data.center[1]
+                  this.orderInfo.lng = data.center[0]
+                  this.orderInfo.lat = data.center[1]
                   // 获取定位的省市区街道
                   var { province, city, district, township } = data.data.addressComponent
-                  console.log(province, city, district, township)
                   // 获取选中省名称id
                   var { id, name } = this.provinceList.find(item => item.name === province)
-                  formData.provinceId = id
-                  formData.province = name
+                  this.orderInfo.provinceId = id
+                  this.orderInfo.province = name
                   // 请求市选项
-                  lbsAmapRegion({ pid: formData.provinceId }).then(res => {
+                  lbsAmapRegion({ pid: this.orderInfo.provinceId }).then(res => {
                     // 赋值市选项
                     this.cityList = res.data
                     // 获取选中市名称id
                     var { id, name } = res.data.find(item => item.name === city)
-                    formData.cityId = id
-                    formData.city = name
+                    this.orderInfo.cityId = id
+                    this.orderInfo.city = name
                     // 请求区选项
-                    lbsAmapRegion({ pid: formData.cityId }).then(res => {
+                    lbsAmapRegion({ pid: this.orderInfo.cityId }).then(res => {
                       // 赋值区选项
                       this.areaList = res.data
                       // 获取选中区名称id
                       var { id, name } = res.data.find(item => item.name === district)
-                      formData.areaId = id
-                      formData.area = name
+                      this.orderInfo.areaId = id
+                      this.orderInfo.area = name
                       // 请求街道选项
-                      lbsAmapRegion({ pid: formData.areaId }).then(res => {
+                      lbsAmapRegion({ pid: this.orderInfo.areaId }).then(res => {
                         // 赋值街道选项
                         this.streetList = res.data
                         // 获取选中街道名称id
                         var { id, name } = res.data.find(item => item.name === township)
-                        formData.streetId = id
-                        formData.street = name
+                        this.orderInfo.streetId = id
+                        this.orderInfo.street = name
                         // 赋值GPS详细地址
-                        formData.gpsAddress = data.name
-                        // 如果手动填写详细地址没有值时,赋值GPS地址
-                        if (!formData.address) {
-                          // formData.address = data.name
-                        }
+                        this.orderInfo.gpsAddress = data.name
                       })
                     })
                   })

+ 34 - 3
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/dispatchInfo.js

@@ -60,12 +60,12 @@ export default {
           name: 'slot-component',
           md: 24,
           attributes: { disabled: true, placeholder: '请输入' },
-          formItemAttributes: { label: '网点信息', prop: 'createWebsitName' },
+          formItemAttributes: { label: '网点信息', prop: 'websitName' },
           render: (h, { props, onInput }) => {
             var { formData } = props
             return (
               <el-input
-                value={`${formData.createWebsitId || ''}-${formData.createWebsitName || ''}`}
+                value={`${formData.websitName || ''}-${formData.websitId || ''}`}
                 disabled={true}
                 size="mini"
                 placeholder="请输入"
@@ -73,7 +73,7 @@ export default {
             )
           },
           getValue: () => {
-            return `${this.orderInfo.createWebsitName}  ${this.orderInfo.createWebsitId}`
+            return `${this.orderInfo.websitName}  ${this.orderInfo.websitId}`
           }
         },
         {
@@ -100,6 +100,37 @@ export default {
           attributes: { disabled: true, placeholder: '请输入' },
           formItemAttributes: { label: '接单时间', prop: 'workerReceTime' }
         },
+        ...(() => {
+          var list = [];
+          (this.orderInfo.orderWorkers_cp || []).map(item => {
+            list.push({
+              name: 'slot-component',
+              md: 12,
+              formItemAttributes: { label: item.isMaster == '1' ? '主要工程师' : item.isMaster == '0' ? '辅助工程师' : '', prop: '' },
+              render: (h, { props, onInput }) => {
+                return (
+                  <el-input value={item.workerName} disabled={true} size="mini" ></el-input>
+                )
+              },
+              getValue: () => {
+                return item.workerName
+              }
+            }, {
+              name: 'slot-component',
+              md: 12,
+              formItemAttributes: { label: '手机号', prop: '' },
+              render: (h, { props, onInput }) => {
+                return (
+                  <el-input value={item.workerMobile} disabled={true} size="mini" ></el-input>
+                )
+              },
+              getValue: () => {
+                return item.workerMobile
+              }
+            })
+          })
+          return list
+        })()
       ]
     }
   },

+ 13 - 10
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/pandanxinxi.js

@@ -213,17 +213,20 @@ export default {
     getWorkers() {
       if (this.orderInfo.websitId) {
         memberListPageV2({ "pageNum": 1, "pageSize": -1, "params": [{ "param": "b.examine_status", "compare": "=", "value": "OK" }, { "param": "b.websit_id", "compare": "=", "value": this.orderInfo.websitId }] }).then(res => {
-          this.workerList = res.data.records.map(item => ({
-            value: item.id,
-            label: item.nickName,
-            data: {
-              workerId: item.id,
-              workerName: item.nickName,
-              workerIdcard: item.idCard,
-              workerMobile: item.mobile,
-              ...item
+          this.workerList = res.data.records.map(item => {
+            var { id, ...data } = item
+            return {
+              value: id,
+              label: data.nickName,
+              data: {
+                workerId: id,
+                workerName: data.nickName,
+                workerIdcard: data.idCard,
+                workerMobile: data.mobile,
+                ...data
+              }
             }
-          }))
+          })
         })
       }
     }

+ 11 - 11
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/productColumns.js

@@ -21,7 +21,7 @@ export default {
           },
           render: (h, { row, column, index }) => {
             return this.isEditIndex == index ? <div class="redbordererr">
-              <el-form-item label="" lebel-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
+              <el-form-item label="" label-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-select
                   disabled={!this.formOptions.orderProducts.isEdit}
                   value={row[column.columnAttributes.prop]}
@@ -48,7 +48,7 @@ export default {
           },
           render: (h, { row, column, index }) => {
             return this.isEditIndex == index ? <div class="redbordererr">
-              <el-form-item label="" lebel-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
+              <el-form-item label="" label-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-select
                   disabled={!this.formOptions.orderProducts.isEdit}
                   value={row[column.columnAttributes.prop]}
@@ -77,7 +77,7 @@ export default {
           },
           render: (h, { row, column, index }) => {
             return this.isEditIndex == index ? <div class="redbordererr">
-              <el-form-item label="" lebel-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
+              <el-form-item label="" label-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-select
                   disabled={!this.formOptions.orderProducts.isEdit}
                   value={row[column.columnAttributes.prop]}
@@ -104,7 +104,7 @@ export default {
           },
           render: (h, { row, column, index }) => {
             return this.isEditIndex == index ? <div class="redbordererr">
-              <el-form-item label="" lebel-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
+              <el-form-item label="" label-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-input
                   disabled={!this.formOptions.orderProducts.isEdit}
                   value={row[column.columnAttributes.prop]}
@@ -123,7 +123,7 @@ export default {
           },
           render: (h, { row, column, index }) => {
             return this.isEditIndex == index ? <div class="redbordererr">
-              <el-form-item label="" lebel-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
+              <el-form-item label="" label-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-input
                   disabled={!this.formOptions.orderProducts.isEdit}
                   value={row[column.columnAttributes.prop]}
@@ -142,7 +142,7 @@ export default {
           },
           render: (h, { row, column, index }) => {
             return this.isEditIndex == index ? <div class="redbordererr">
-              <el-form-item label="" lebel-width="0px" prop={`orderProducts.${index}.${column.columnAttributes.prop}`}>
+              <el-form-item label="" label-width="0px">
                 <el-input
                   disabled={!this.formOptions.orderProducts.isEdit}
                   value={row[column.columnAttributes.prop]}
@@ -163,11 +163,11 @@ export default {
                 },
                 render: (h, { row, column, index }) => {
                   return <div style="padding-left:10px">
-                    <el-button type="text" onClick={()=>{
-                      this.delProduct(row.index)
+                    <el-button type="text" onClick={() => {
+                      this.delProduct(row, index)
                     }}>删除</el-button>
-                    {this.isEditIndex == index && <el-button type="text" onClick={()=>{
-                      this.eidtProduct(row.index)
+                    {this.isEditIndex == index && <el-button type="text" onClick={() => {
+                      this.eidtProduct(row, index)
                     }}>确定</el-button>}
                     {this.isEditIndex == -1 && <el-button type="text" onClick={() => {
                       this.isEditIndex = index
@@ -209,7 +209,7 @@ export default {
                         "mainId": "",
                         "mainName": "",
                         "num": "",
-                        "orderBaseId": "",
+                        "orderBaseId": this.id || '',
                         "productId": "",
                         "productName": "",
                         "remark": "",

+ 13 - 13
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/serviceInfo.js

@@ -4,7 +4,7 @@ import { getDataDictionary } from '@/api/dataDictionary.js'
 export default {
   data() {
     return {
-      orderTypeData: [],
+      orderSmallTypeData: [],
       orderChannels: []
     }
   },
@@ -12,42 +12,42 @@ export default {
     serviceInfo() {
       return [
         {
-          isShow: this.formOptions.orderType.isShow && !this.id,
+          isShow: this.formOptions.orderSmallType.isShow && !this.id,
           name: 'el-select',
           md: 6,
-          options: this.orderTypeData,
+          options: this.orderSmallTypeData,
           attributes: {
-            disabled: !this.formOptions.orderType.isEdit,
+            disabled: !this.formOptions.orderSmallType.isEdit,
             placeholder: '请选择',
             clearable: true,
             filterable: true
           },
           formItemAttributes: {
             label: '工单类型',
-            prop: 'orderType',
-            rules: this.formOptions.orderType.isRules
+            prop: 'orderSmallType',
+            rules: this.formOptions.orderSmallType.isRules
           },
           events: {
             change: (val) => {
               if (val) {
-                this.orderInfo.orderTypeText = this.orderTypeData.find(item => item.value == val).label
+                this.orderInfo.orderSmallTypeText = this.orderSmallTypeData.find(item => item.value == val).label
               } else {
-                this.orderInfo.orderTypeText = ''
+                this.orderInfo.orderSmallTypeText = ''
               }
             }
           }
         },
         {
-          isShow: this.formOptions.orderType.isShow && this.id,
+          isShow: this.formOptions.orderSmallType.isShow && this.id,
           name: 'el-input',
           md: 6,
           attributes: {
-            disabled: !this.formOptions.orderType.isEdit,
+            disabled: !this.formOptions.orderSmallType.isEdit,
           },
           formItemAttributes: {
             label: '工单类型',
-            prop: 'orderTypeText',
-            rules: this.formOptions.orderType.isRules
+            prop: 'orderSmallTypeText',
+            rules: this.formOptions.orderSmallType.isRules
           }
         },
         {
@@ -128,7 +128,7 @@ export default {
   created() {
     // 获取工单类型
     listPageV2({ "pageNum": 1, "pageSize": -1, "params": [{ "param": "a.status", "compare": "=", "value": "true" }] }).then(res => {
-      this.orderTypeData = res.data.records.map(item => ({
+      this.orderSmallTypeData = res.data.records.map(item => ({
         value: item.id,
         label: item.orderSmallTypeText
       }))

+ 49 - 28
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/workOrderLogic.js

@@ -10,17 +10,25 @@ var initdata_ = {
   userMobile: "",
   // 客户电话2
   userMobile2: "",
+  // 省
+  provinceId: "",
+  // 市
+  cityId: "",
+  // 区
+  areaId: "",
+  // 街道
+  streetId: "",
   // gps地址
   gpsAddress: "",
   // 详细地址
   address: "",
   // 服务信息--------------------------------
   // 工单类型
-  orderType: "",
-  // 预约上门日期
-  appointmentTime: "",
+  orderSmallType: "",
   // 工单渠道
   orderChannelId: "",
+  // 预约上门日期
+  appointmentTime: "",
   // 销售单位
   saleCompany: "",
   // 产品信息------------------------
@@ -34,7 +42,8 @@ var initdata_ = {
   // 主要工程师id
   workerId: "",
   // 工程师列表
-  orderWorkers: []
+  orderWorkers: [],
+  orderWorkers_cp: []
 }
 
 export default {
@@ -42,7 +51,6 @@ export default {
     id: {
       type: [String, Number],
       default: null,
-
     }
   },
   data() {
@@ -51,9 +59,6 @@ export default {
     }
   },
   watch: {
-    orderType(newVal, oldVal) {
-      this.$emit('updateOrderType', newVal)
-    },
     id: {
       handler(newVal, oldVal) {
         this.getorderDetail((data) => {
@@ -68,7 +73,7 @@ export default {
       },
       deep: true,
       immediate: true,
-    }
+    },
   },
   computed: {
     // 用户信息
@@ -108,98 +113,112 @@ export default {
           YQX: []
         }[this.orderInfo.orderStatus]
       }
+
+      // 已经加急
+      if (this.orderInfo.orderFlags.find(item => item.tag == 'JIA_JI')) {
+        btns = btns.filter(item => !new Set([4]).has(item))
+      } else {
+        btns = btns.filter(item => !new Set([5]).has(item))
+      }
+
+      // 已经异常
+      if (this.orderInfo.orderFlags.find(item => item.tag == 'YI_CHANGE')) {
+        btns = btns.filter(item => !new Set([3]).has(item))
+      }
+
       return btns
     },
     // 处理每个字段是否可编辑
     formOptions() {
+      var finish = !!~['YWG','YJS','YQX'].indexOf(this.orderInfo.orderStatus)
       return {
         // 基础信息--------------------
         // 客户名称
         userName: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         // 联系人
         linkName: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         // 客户电话
         userMobile: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...mobileRequired]
         },
         // 客户电话2
         userMobile2: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...mobile]
         },
         // gps地址
         gpsAddress: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         // 详细地址
         address: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: []
         },
         // 服务信息--------------------------------
         // 工单类型
-        orderType: {
+        orderSmallType: {
           isEdit: this.id ? false : true,
           isShow: true,
           isRules: [...required]
         },
-        // 预约上门日期
-        appointmentTime: {
-          isEdit: true,
+        orderChannelId: {
+          isEdit: this.id ? false : true,
           isShow: true,
           isRules: [...required]
         },
-        orderChannelId: {
-          isEdit: this.id ? false : true,
+        // 预约上门日期
+        appointmentTime: {
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         saleCompany: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: []
         },
         // 产品信息------------------------
         orderProducts: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         // 其它信息------------------------
         // 备注
         remark: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: []
         },
         // 派单信息-----------------------------
         // 服务商网点
         websitId: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         workerId: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
         orderWorkers: {
-          isEdit: true,
+          isEdit: !finish,
           isShow: true,
           isRules: [...required]
         },
@@ -226,10 +245,12 @@ export default {
           .then(([res, res1]) => {
             this.orderInfo = {
               ...res.data,
+              orderWorkers_cp: [...(res.data.orderWorkers || []).map(item => ({ ...item }))],
               orderProducts: res1.data || [],
-              workerId_fz: ""
+              workerId_fz: "",
             }
             cb && cb(this.orderInfo)
+            console.log(this.orderInfo)
           })
       } else {
         // 创建工单

+ 18 - 3
src/views/workOrder/workOrderPool/index.vue

@@ -69,7 +69,7 @@ export default {
       return [
         {
           name: '工单类型',
-          key: 'orderType',
+          key: 'orderSmallType',
           value: '',
           conditions: [{
             label: "全部",
@@ -199,8 +199,8 @@ export default {
         if (pam.orderStatus) {
           pam.params.push({ "param": "a.order_status", "compare": "=", "value": pam.orderStatus })
         }
-        if (pam.orderType) {
-          pam.params.push({ "param": "a.order_type", "compare": "=", "value": pam.orderType })
+        if (pam.orderSmallType) {
+          pam.params.push({ "param": "a.order_small_type", "compare": "=", "value": pam.orderSmallType })
         }
         cb && cb(pam)
         return orderBaseList(pam)
@@ -217,6 +217,21 @@ export default {
     exportList: orderBaseListExport,
     // 表格列解析渲染数据更改
     columnParsing(item, defaultData) {
+      if (item.jname === 'orderFlags') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {(row[column.columnAttributes.prop] || []).map(item => {
+                return (
+                  <div style="display: inline-block;border:1px solid #409EFF; color:#409EFF;padding:0 2px;border-radius: 4px;margin:2px 2px 0 0;">
+                    {item.tagName}
+                  </div>
+                )
+              })}
+            </div>
+          )
+        }
+      }
       return defaultData
     },
     // 监听勾选变化