Pārlūkot izejas kodu

Merge branch 'greenUrgent' into allTestUrgent

qymljy 4 mēneši atpakaļ
vecāks
revīzija
b27a52cee3

+ 5 - 0
src/HDrpManagement/serveBill/index.vue

@@ -148,6 +148,11 @@
               $t(scope.data.column.data[[scope.data.column.columnname]] || '--')
             }}</span>
         </div>
+        <div v-else-if="scope.data.column.columnname == 'status_workorder'">
+          <span :style="tool.getStatusColor(scope.data.column.data[[scope.data.column.columnname]])">{{
+              $t(scope.data.column.data[[scope.data.column.columnname]] || '--')
+            }}</span>
+        </div>
         <div v-else-if="scope.data.column.columnname == 'province'">
           {{ `${scope.data.column.data.province}-${scope.data.column.data.city}-${scope.data.column.data.county}` }}
         </div>

+ 7 - 0
src/HDrpManagement/serveBill/modules/detail.vue

@@ -253,6 +253,13 @@ export default {
         {label:'业务员电话',value:this.mainData.saler_phonenumber ? this.mainData.saler_phonenumber : ''},
         {label:'项目名称',value:this.mainData.projectnote ? this.mainData.projectnote : ''},
         {label:'历史服务次数',value:this.mainData.historicalservicesqty ? this.mainData.historicalservicesqty : ''},
+        {label:'工单状态',value:this.mainData.status_workorder ? this.mainData.status_workorder : '',
+          style:function () {
+            let style = that.tool.getStatusColor(that.mainData.status_workorder)
+            return style
+          }
+        },
+        {label:'工单完成时间',value:this.mainData.finishdate_workorder ? this.mainData.finishdate_workorder : ''},
         {label:'异常类型',value:this.mainData.exception_type ? this.mainData.exception_type : ''},
         {label:'服务等级',value:this.mainData.service_level ? this.mainData.service_level : '',
           style:function () {

+ 5 - 0
src/HDrpManagement/serveBillMag/index.vue

@@ -151,6 +151,11 @@
               $t(scope.data.column.data[[scope.data.column.columnname]] || '--')
             }}</span>
         </div>
+        <div v-else-if="scope.data.column.columnname == 'status_workorder'">
+          <span :style="tool.getStatusColor(scope.data.column.data[[scope.data.column.columnname]])">{{
+              $t(scope.data.column.data[[scope.data.column.columnname]] || '--')
+            }}</span>
+        </div>
         <div v-else-if="scope.data.column.columnname == 'province'">
           {{
             `${scope.data.column.data.province}-${scope.data.column.data.city}-${scope.data.column.data.county}`

+ 7 - 0
src/HDrpManagement/serveBillMag/modules/detail.vue

@@ -204,6 +204,13 @@ export default {
         {label:'业务员电话',value:this.mainData.saler_phonenumber ? this.mainData.saler_phonenumber : ''},
         {label:'项目名称',value:this.mainData.projectnote ? this.mainData.projectnote : ''},
         {label:'历史服务次数',value:this.mainData.historicalservicesqty ? this.mainData.historicalservicesqty : ''},
+        {label:'工单状态',value:this.mainData.status_workorder ? this.mainData.status_workorder : '',
+          style:function () {
+            let style = that.tool.getStatusColor(that.mainData.status_workorder)
+            return style
+          }
+        },
+        {label:'工单完成时间',value:this.mainData.finishdate_workorder ? this.mainData.finishdate_workorder : ''},
         {label:'异常类型',value:this.mainData.exception_type ? this.mainData.exception_type : ''},
         {label:'服务等级',value:this.mainData.service_level ? this.mainData.service_level : '',
           style:function () {

+ 169 - 0
src/HDrpManagement/serveWorkBill/components/acceptingOrders.vue

@@ -0,0 +1,169 @@
+<template>
+  <div>
+    <el-button size="mini" :type="!data.isleader?'':'primary'" @click="checkBtn" :disabled="!data.isleader">{{
+        $t("接单")
+      }}</el-button>
+    <el-drawer
+        :title="$t(`接单确认信息`)"
+        append-to-body
+        :show-close="false"
+        :visible.sync="drawShow"
+        @close="onClose"
+        size="800px"
+    >
+      <div class="drawer__panel">
+        <el-row :gutter="20">
+          <el-form
+              :model="form"
+              :rules="rules"
+              ref="form"
+              :label-width="tool.onlyZh('140px')"
+              label-position="top"
+              size="mini"
+          >
+            <el-col :span="24">
+              <el-form-item :label="$t(`是否外包工单:`)" prop="isout">
+                <el-radio-group v-model="form.isout">
+                  <el-radio :label="1">{{ $t("是") }}</el-radio>
+                  <el-radio :label="0">{{ $t("否") }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" v-if="form.isout">
+              <el-form-item :label="$t(`服务负责人:`)" prop="isout">
+                <el-select v-model="form.userid" placeholder="请选择服务负责人" style="width: 100%" size="small" @change="nameChange">
+                  <el-option
+                      v-for="item in optionNames"
+                      :key="item.index"
+                      :label="item.username"
+                      :value="item.userid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" v-if="form.isout">
+              <el-form-item :label="$t('服务负责人电话')" prop="phonenumber">
+                <el-input
+                    disabled
+                    v-model="form.phonenumber"
+                    :placeholder="$t(`服务负责人电话`)"
+                ></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button
+            size="small"
+            @click="drawShow = false"
+            class="normal-btn-width"
+        >{{ $t("取 消") }}</el-button
+        >
+        <el-button
+            size="small"
+            type="warning"
+            @click="onSubmit"
+            class="normal-btn-width btn-warning"
+        >{{ $t("确 定") }}</el-button
+        >
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "acceptingOrders",
+  props:["data",'team_userid'],
+  data(){
+    return {
+      drawShow:false,
+      form:{
+        "sa_workorderid": this.$route.query.id,
+        "isout":'', //是否外包
+        "userid": this.team_userid, //1566
+        "phonenumber":""
+      },
+      rules:{
+        isout: [
+          {
+            required: true,
+            message: this.$t("请选择是否外包工单"),
+            trigger: "change",
+          },
+        ],
+        userid: [
+          {
+            required: true,
+            message: this.$t("请选择服务负责人"),
+            trigger: "change",
+          },
+        ],
+        phonenumber: [
+          {
+            required: true,
+            message: this.$t("服务负责人电话不可为空"),
+            trigger: "change",
+          },
+        ],
+      },
+      personName:'',
+      optionNames:[]
+    }
+  },
+  methods:{
+    checkBtn(){
+      this.drawShow = true
+      this.form.isout = this.data.isout
+      this.queryPerson()
+    },
+    onSubmit(){
+      this.$refs.form.validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          id:'20230210101103',
+          content:this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.drawShow = false
+          this.$emit('onSuccess')
+        })
+      })
+    },
+    async queryPerson(){
+      const res = await this.$api.requested({
+        id:20230213143003,
+        content:{
+          pageNumber:1,
+          pageSize:999,
+        }
+      })
+      this.optionNames = res.data.map(item => {
+        return {
+          "username":item.username,
+          "userid":item.userid,
+          "phonenumber":item.phonenumber
+        }
+      })
+    },
+    onClose(){
+      this.form.userid = ''
+      this.form.phonenumber = ''
+    },
+    nameChange(){
+      console.log('输出')
+      console.log(this.form.userid)
+      this.optionNames.forEach(item => {
+        if (item.userid == this.form.userid){
+          this.form.phonenumber = item.phonenumber
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 194 - 0
src/HDrpManagement/serveWorkBill/components/checkInfo.vue

@@ -0,0 +1,194 @@
+<template>
+  <div>
+    <el-button size="mini" :type="!data.isServerMag && !data.isleader?'':'primary'" @click="checkBtn"
+               v-if="data.status == '待接单' || data.status == '待开始'" :disabled="!data.isServerMag && !data.isleader">{{
+        $t("确认信息")
+      }}</el-button>
+    <el-drawer
+        :title="$t(`确认工单信息`)"
+        append-to-body
+        :show-close="false"
+        :visible.sync="drawShow"
+        size="800px"
+    >
+      <div class="drawer__panel" >
+        <el-row :gutter="20">
+          <el-form
+              :model="form"
+              :rules="rules"
+              ref="form"
+              :label-width="tool.onlyZh('140px')"
+              label-position="top"
+              size="mini"
+              :disabled="data.status == '待开始'"
+          >
+            <el-col :span="24">
+              <el-form-item :label="$t(`是否为我司出货产品:`)" prop="isouritem" >
+                <el-radio-group v-model="form.isouritem">
+                  <el-radio :label="1">{{ $t("是") }}</el-radio>
+                  <el-radio :label="0">{{ $t("否") }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item :label="$t(`是否在保质期内:`)" prop="inqualityguaranteeperiod">
+                <el-radio-group v-model="form.inqualityguaranteeperiod">
+                  <el-radio :label="1">{{ $t("是") }}</el-radio>
+                  <el-radio :label="0">{{ $t("否") }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item :label="$t(`确认客诉异常描述是否属实:`)" prop="isfact">
+                <el-radio-group v-model="form.isfact">
+                  <el-radio :label="1">{{ $t("是") }}</el-radio>
+                  <el-radio :label="0">{{ $t("否") }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item :label="$t('备注')" prop="remarks">
+                <el-input
+                    type="textarea"
+                    v-model="form.remarks"
+                    :placeholder="$t(`请输入备注`)"
+                ></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item  :label="$t(`上传附件`)+':'">
+                <uploadFile
+                    @uploadGet="loading = true"
+                    ref="uploadRef"
+                    class="inline-16"
+                    :folderid="folderid"
+                    :bindData="{
+                    ownertable: 'sa_workorder',
+                    ownerid: $route.query.id,
+                    usetype: 'default',
+                  }"
+                    :ownerid="$route.query.id"
+                    @onSuccess="uploadSuccess"
+                ></uploadFile>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button
+            size="small"
+            @click="drawShow = false"
+            class="normal-btn-width"
+        >{{ $t("取 消") }}</el-button
+        >
+        <el-button
+            size="small"
+            type="warning"
+            @click="onSubmit"
+            class="normal-btn-width btn-warning"
+        >{{ $t("确 定") }}</el-button
+        >
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import uploadFile from "./upload";
+export default {
+  name: "checkInfo",
+  props:['data'],
+  components:{uploadFile},
+  data(){
+    return {
+      drawShow:false,
+      loading:false,
+      form:{
+        "sa_workorderid": "",
+        "isouritem": 1, //是否为我司产品
+        "inqualityguaranteeperiod": 1, //是否在保
+        "isfact": 0, //异常属实
+        "remarks": ""
+      },
+      rules:{
+        isouritem: [
+          {
+            required: true,
+            message: this.$t("请选择是否为我司出货产品"),
+            trigger: "change",
+          },
+        ],
+        inqualityguaranteeperiod: [
+          {
+            required: true,
+            message: this.$t("请选择是否在保质期内"),
+            trigger: "change",
+          },
+        ],
+        isfact: [
+          {
+            required: true,
+            message: this.$t("请确认客诉异常描述是否属实"),
+            trigger: "change",
+          },
+        ],
+      },
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+    }
+  },
+  methods:{
+    checkBtn(){
+      this.drawShow = true
+      this.uploadSuccess()
+      this.form = {
+        "sa_workorderid": this.data.sa_workorderid,
+        "isouritem": this.data.isouritem, //是否为我司产品
+        "inqualityguaranteeperiod": this.data.inqualityguaranteeperiod, //是否在保
+        "isfact": this.data.isfact, //异常属实
+        "remarks": this.data.remarks
+      }
+    },
+    onSubmit(){
+      this.$refs.form.validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          id:'2026012714172302',
+          content:this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.drawShow = false
+          this.$emit('onSuccess')
+        })
+      })
+    },
+    async uploadSuccess(res1){
+      this.listFile = []
+      this.attachmentids = res1?res1.data.attachmentids:[]
+      const res = await this.$api.requested({
+        classname: "system.attachment.Attachment",
+        method: "queryFileLink",
+        content: {
+          ownertable: "sa_workorder",
+          ownerid: this.$route.query.id,
+          usetype: "",
+        },
+      });
+      this.$refs.uploadRef.listFile = res.data.map((item) => {
+        return {
+          name: item.document,
+          url: item.url,
+          linksid: item.linksid,
+          attachmentid:item.attachmentid
+        };
+      });
+      this.listFile = this.$refs.uploadRef.listFile
+      this.loading = false;
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 8 - 6
src/HDrpManagement/serveWorkBill/components/edit.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" :type="editDis?'':'primary'" @click="editBtn" :disabled="editDis">{{
+    <el-button v-if="data.status != '已完成' && data.status != '已中止'" size="mini" :type="editDis && !data.isServerMag?'':'primary'" @click="editBtn" :disabled="editDis && !data.isServerMag">{{
       $t("编 辑")
     }}</el-button>
     <el-drawer
@@ -463,11 +463,13 @@ export default {
   mounted() {
     console.log(this.data,'输出data的数据222')
     this.editDis = true
-    this.data.team.forEach(item =>{
-      if (item.userid == this.userid){
-        this.editDis = false
-      }
-    })
+    if (this.data){
+      this.data.team.forEach(item =>{
+        if (item.userid == this.userid && item.isleader){
+          this.editDis = false
+        }
+      })
+    }
   },
   created() {},
 };

+ 157 - 0
src/HDrpManagement/serveWorkBill/components/upload.vue

@@ -0,0 +1,157 @@
+<template>
+  <el-upload
+      ref="uploadMy"
+      class="upload-demo"
+      action="#"
+      :accept='accept'
+      :on-preview="handlePreview"
+      :on-progress="handleProgress"
+      :on-remove="handleRemove"
+      :before-remove="beforeRemove"
+      :on-change="handleChange"
+      multiple
+      :auto-upload="false"
+      :file-list="listFile">
+    <el-button icon="el-icon-upload2" type="primary" size="mini" >上传文件</el-button>
+  </el-upload>
+</template>
+
+<script>
+export default {
+  name: "index",
+  props:["bindData","folderid",'title','accept'],
+  data() {
+    return {
+      listFile: [],
+      params: {
+        "classname": "system.attachment.huawei.OBS",
+        "method": "getFileName",
+        "content": {
+          "filename": '',
+          "filetype": '',
+          "parentid": ""//归属文件夹ID
+        }
+      },
+      count:0,
+      file: {},
+      filelist: [],
+      oldCount:0
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    async handleRemove(file, fileList) {
+      this.$emit('uploadGet')
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "deleteFileLink",
+        "content": {
+          "linksids":[file.linksid]
+        }
+      })
+      this.oldCount = this.oldCount - 1
+      this.$emit('onSuccess',res)
+    },
+    handleProgress(file,fileList){
+
+    },
+    handlePreview(file) {
+      /*this.fileList = fileList*/
+    },
+    beforeRemove(file, fileList) {
+      return this.$confirm(`确定移除 ${ file.name }?`);
+    },
+    handleChange (file, filelist) {
+      this.$emit('uploadGet')
+      this.filelist = []
+      this.filelist = filelist
+      var index = file.raw.name.lastIndexOf(".");
+      var ext = file.name.substr(index + 1);
+      this.params.content.filename = file.raw.name
+      this.params.content.filetype = ext
+      this.getUploadUrl(file, ext)
+    },
+
+    // 获取华为云上传地址
+    async getUploadUrl (file, ext) {
+      this.params.content.parentid = this.folderid
+      const res = await this.$api.requested(this.params)
+      let url = res.data.uploadurl
+      let obsfilename = res.data.serialfilename
+
+      this.upoladFileToServer(url, file, ext, obsfilename)
+    },
+
+    // 上传到华为云
+    async upoladFileToServer (url, file, ext, obsfilename) {
+      console.log(file)
+      let THIS = this
+      let config = {
+        headers: ext === 'pdf' ? { 'Content-Type': 'application/pdf' } : ext === 'svg'?{ 'Content-Type': 'image/svg+xml' } : { 'Content-Type': 'application/octet-stream' },
+        onUploadProgress: function (progressEvent) {
+          let percent = progressEvent.loaded / progressEvent.total * 100
+          THIS.filelist.forEach(e => {
+            if (e.uid === file.uid) {
+              THIS.$set(e, 'type', ext.toUpperCase());
+              THIS.$set(e, 'progress', percent);
+            }
+          })
+        },
+      }
+      const res = await this.$upload.hw_upload(url, file.raw, config)
+      this.createFileRecord(obsfilename)
+    },
+
+    // 上传成功以后生成附件记录
+    async createFileRecord (obsfilename,attinfos) {
+      let obj = {
+        "serialfilename": obsfilename
+      }
+      obj = Object.assign({},obj,this.bindData)
+      let param = {
+        "classname": "system.attachment.huawei.OBS",
+        "method": "uploadSuccess",
+        "content":obj
+      }
+      const res = await this.$api.requested(param)
+      console.log("上传文件",res)
+      this.count++
+      console.log(this.count,'count')
+      console.log(this.filelist.length,'length')
+      if (this.count == this.filelist.length - this.oldCount) {
+        this.oldCount = this.oldCount +  this.count
+        this.count = 0
+        console.log(this.count,'count')
+        console.log('触发');
+        this.$refs.uploadMy.clearFiles()
+        this.filelist = []
+        this.$emit('onSuccess',res)
+      }
+      // if (res.code ===  1) {
+      //   this.$emit('onSuccess',res)
+      // }
+    },
+    async uploadSuccess(){
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "queryFileLink",
+        "content": {
+          "ownertable": 'sa_quotedprice',
+          "ownerid": this.ownerid,
+          "usetype":""
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+/deep/ .el-upload {
+  display: inline-block;
+   text-align: left;
+  cursor: pointer;
+  outline: 0;
+}
+</style>

+ 259 - 145
src/HDrpManagement/serveWorkBill/modules/detail.vue

@@ -9,48 +9,67 @@
       turnPageId="20221031141102"
       idname="sa_workorderid"
       ownertable="sa_workorder"
+      tabName="tab1"
+      SalesmanQ="不执行"
       tags=""
-      :tabs="
-        mainData.actiontype == '工序模板'
-          ? ['工序详情', '确认单', '服务团队', '工单物料', '详细信息']
-          : ['服务商品', '确认单', '服务团队', '详细信息']
-      "
+      :tabs="['服务申请','服务工单','服务改善']"
       @pageChange="pageChange"
       @onEditSuccess="queryMainData($route.query.id)"
     >
       <div slot="tags"></div>
       <div slot="customOperation">
-        <!-- <customBtn
-          btnName="接单"
-          message="确认接单当前服务工单吗?"
-          idName="20230210101103"
-          keyName="sa_workorderid"
-          :id="$route.query.id"
-          @onSuccess="queryMainData"
-          class="inline-16"
-          v-if="mainData.status == '新建' && tool.checkAuth($route.name,'join')"
-        />
+        <checkInfo :data="mainData" class="inline-16" @onSuccess="queryMainData"></checkInfo>
+        <transferWorkOrder btnType="primary" btnTitle="转工单" class="inline-16" @dialogShow="queryPerson" :disabledSubmit="personName == ''"
+        @onSubmit="transferWorkSubmit" v-if="mainData.status == '待接单'" ref="transferWorkRef" :data="mainData" :disabled="!mainData.isServerMag && !mainData.isleader">
+          <template slot="formRule">
+            <div>
+              <span style="color: red">*</span>{{$t(`请选择工单负责人`)}}
+            </div>
+            <div style="margin-top: 10px;width: 100%">
+              <el-select v-model="personName" placeholder="请选择" style="width: 100%" size="small">
+                <el-option
+                    v-for="item in optionNames"
+                    :key="item.index"
+                    :label="item.username"
+                    :value="item.userid">
+                </el-option>
+              </el-select>
+            </div>
+          </template>
+        </transferWorkOrder>
+        <acceptingOrders :data="mainData" class="inline-16" v-if="mainData.status == '待接单'" :team_userid="team_userid" @onSuccess="queryMainData"></acceptingOrders>
+<!--         <customBtn-->
+<!--          btnName="接单"-->
+<!--          message="确认接单当前服务工单吗?"-->
+<!--          idName="20230210101103"-->
+<!--          keyName="sa_workorderid"-->
+<!--          :id="$route.query.id"-->
+<!--          @onSuccess="queryMainData"-->
+<!--          class="inline-16"-->
+<!--        />-->
         <customBtn
-          btnName="开始"
+          btnName="开始工单"
           message="确认开始当前服务工单吗?"
           idName="20230209144503"
           keyName="sa_workorderid"
+          :disabled="!mainData.isleader"
           :id="$route.query.id"
           @onSuccess="queryMainData"
           class="inline-16"
-          v-if="mainData.status == '待开始' && tool.checkAuth($route.name,'start')"
+          v-if="mainData.status == '待开始'"
 
-        /> -->
+        />
         <customBtn
           btnName="暂停"
           message="确认暂停当前服务工单吗?"
           idName="20230209144603"
           keyName="sa_workorderid"
           :id="$route.query.id"
+          :disabled="!mainData.isleader"
           @onSuccess="queryMainData"
           class="inline-16"
           v-if="
-            mainData.status == '进行中' && tool.checkAuth($route.name, 'stop')
+            mainData.status == '进行中'
           "
         />
         <customBtn
@@ -58,125 +77,61 @@
           message="确认启用当前服务工单吗?"
           idName="20230209144703"
           keyName="sa_workorderid"
+          :disabled="!mainData.isleader"
           :id="$route.query.id"
           @onSuccess="queryMainData"
           class="inline-16"
           v-if="
-            mainData.status == '暂停' && tool.checkAuth($route.name, 'used')
+            mainData.status == '暂停'
           "
         />
-        <!-- <customBtn
-          btnName="完结"
-          message="确认完结当前服务工单吗?"
-          idName="20230209144903"
-          keyName="sa_workorderid"
-          :id="$route.query.id"
-          @onSuccess="queryMainData"
-          class="inline-16"
-          v-if="mainData.status != '新建' && tool.checkAuth($route.name,'complete')"
+        <customBtn
+            btnName="完结工单"
+            message="确认完结当前服务工单吗?"
+            idName="20230209144903"
+            keyName="sa_workorderid"
+            :disabled="!mainData.isleader"
+            :id="$route.query.id"
+            @onSuccess="queryMainData"
+            class="inline-16"
+            v-if="mainData.status == '进行中'"
 
-        /> -->
+        />
         <customBtn
-          btnName="作废"
-          message="确认作废当前服务工单吗?"
-          idName="20230209144803"
-          keyName="sa_workorderid"
-          :id="$route.query.id"
-          @onSuccess="queryMainData"
-          class="inline-16"
-          v-if="
-            mainData.status != '完结' && tool.checkAuth($route.name, 'delete')
-          "
+            btnName="中止"
+            message="确认中止当前服务申请单吗?"
+            idName="2026012414051502"
+            keyName="sa_serviceorderid"
+            :id="$route.query.id"
+            :dialog="true"
+            :checkString="true"
+            dialogTitle="请输入中止原因"
+            :disabled="!mainData.isleader"
+            dialogKey="abortreason"
+            @onSuccess="queryMainData"
+            errorMessage="中止原因不可为空"
+            v-if="mainData.status != '已完成' && mainData.status != '已中止'"
+            class="inline-16"
+
         />
+<!--        <customBtn-->
+<!--          btnName="作废"-->
+<!--          message="确认作废当前服务工单吗?"-->
+<!--          idName="20230209144803"-->
+<!--          keyName="sa_workorderid"-->
+<!--          :id="$route.query.id"-->
+<!--          @onSuccess="queryMainData"-->
+<!--          class="inline-16"-->
+<!--          v-if="-->
+<!--            mainData.status != '完结' && tool.checkAuth($route.name, 'delete')-->
+<!--          "-->
+<!--        />-->
       </div>
-      <div slot="slot0" v-if="mainData.actiontype == '工序模板'">
-        <taskDetail :data="nodes">
-          <template v-slot:detail="scope">
-            <taskListDetail
-              class="inline-16"
-              :data="scope.data"
-            ></taskListDetail>
-          </template>
-          <!-- <template v-slot:edit="scope">
-            <taskListEdit class="inline-16" :data="scope.data"/>
-          </template> -->
-        </taskDetail>
-      </div>
-      <div slot="slot1" v-if="mainData.actiontype == '工序模板'">
-        <checkBill ref="checkBillRef">
-          <template v-slot:download="scope">
-            <el-button
-              v-if="tool.checkAuth($route.name, 'checkBillDetail')"
-              type="text"
-              size="mini"
-              @click="downLoadBill(scope.data)"
-              >{{ $t("单 据 下 载") }}</el-button
-            >
-          </template>
-        </checkBill>
-      </div>
-      <div slot="slot2" v-if="mainData.actiontype == '工序模板'">
-        <teamList
-          v-if="tool.checkAuth($route.name, 'teamList')"
-          ref="teamList"
-          :data="mainData.team"
-        >
-          <selectTeam ref="team" @teamChange="teamChange" slot="add">
-            <el-button
-              v-if="tool.checkAuth($route.name, 'teamHandle') && mainData.status !== '已完成'"
-              class="button-new-tag"
-              size="small"
-              type="primary"
-              @click="$refs.team.dialogFormVisible = true"
-              >{{ $t("添 加") }}</el-button
-            >
-          </selectTeam>
-        </teamList>
-      </div>
-      <div slot="slot3" v-if="mainData.actiontype == '工序模板'">
-        <Items :data="mainData"></Items>
-      </div>
-      <div slot="slot4" v-if="mainData.actiontype == '工序模板'">
-        <detailInfo :more="true" :data="detailInfo"></detailInfo>
-      </div>
+      <div slot="slot0">
 
-      <div slot="slot0" v-if="mainData.actiontype != '工序模板'">
-        <Items :data="mainData"></Items>
-      </div>
-      <div slot="slot1" v-if="mainData.actiontype != '工序模板'">
-        <checkBill>
-          <template v-slot:download="scope">
-            <el-button
-              v-if="tool.checkAuth($route.name, 'checkBillDetail')"
-              type="text"
-              size="mini"
-              @click="downLoadBill(scope.data)"
-              >{{ $t("单 据 下 载") }}</el-button
-            >
-          </template>
-        </checkBill>
-      </div>
-      <div slot="slot2" v-if="mainData.actiontype != '工序模板'">
-        <teamList
-          v-if="tool.checkAuth($route.name, 'teamList') "
-          ref="teamList"
-          :data="mainData.team"
-          :status="mainData.status"
-        >
-          <selectTeam ref="team" @teamChange="teamChange" slot="add">
-            <el-button
-              v-if="tool.checkAuth($route.name, 'teamHandle') && mainData.status !== '已完成'"
-              class="button-new-tag"
-              size="small"
-              type="primary"
-              @click="$refs.team.dialogFormVisible = true"
-              >{{ $t("添 加") }}</el-button
-            >
-          </selectTeam>
-        </teamList>
       </div>
-      <div slot="slot3" v-if="mainData.actiontype != '工序模板'">
-        <detailInfo :more="true" :data="detailInfo"></detailInfo>
+      <div slot="slot1">
+        <serviceWorkOrder ref="serviceWorkOrderRef" :data="mainData" :detailInfo="detailInfo" :nodes="nodes"></serviceWorkOrder>
       </div>
     </basicDetails>
   </div>
@@ -191,17 +146,28 @@ import checkBill from "./checkBill/index";
 import teamList from "./teamList/index";
 import Items from "./items/index";
 import selectTeam from "../components/teamSelect";
+import serviceWorkOrder from '../modules/serviceWorkOrder/index'
+import checkInfo from '../components/checkInfo'
+import transferWorkOrder from '@/components/dialogTemplate/index2'
+import acceptingOrders from '../components/acceptingOrders'
 import { log } from "@antv/g2plot/lib/utils";
 export default {
   name: "detail",
   data() {
     return {
-      mainData: "",
+      mainData: {isServerMag:false,isleader:false},
       mainAreaData: {},
       detailInfo: "",
       nodes: [],
       active_accoun:JSON.parse(sessionStorage.getItem('active_account')),
-      folderid:JSON.parse(sessionStorage.getItem('folderid'))
+      folderid:JSON.parse(sessionStorage.getItem('folderid')),
+      team_name:'',
+      team_phone_number:'',
+      personName:'',
+      optionNames:[],
+      hrid:JSON.parse(sessionStorage.getItem('active_account')).hrid,
+      userid:JSON.parse(sessionStorage.getItem('active_account')).userid,
+      team_userid:''
     };
   },
   components: {
@@ -213,20 +179,53 @@ export default {
     teamList,
     Items,
     selectTeam,
+    serviceWorkOrder,
+    checkInfo,
+    transferWorkOrder,
+    acceptingOrders
   },
   methods: {
     async queryMainData(id) {
+      this.mainData.isServerMag = false
+      this.mainData.isleader = false
+      if (this.hrid !== 0){
+        const res_hrid = await this.$api.requested({
+          classname: 'webmanage.hr.hr',
+          method:"query_hrMain",
+          content: {
+            hrid: this.hrid
+          },
+        })
+        if (res_hrid.data && res_hrid.data.userrole.length > 0){
+          res_hrid.data.userrole.forEach(item => {
+            if (item.rolename == 'SHZG' && item.remarks == '服务主管'){
+              this.mainData.isServerMag = true
+            }
+          })
+        }
+      }
       const res = await this.$api.requested({
         id: 20230208140103,
         content: {
           sa_workorderid: this.$route.query.id,
         },
       });
-      this.mainData = res.data;
+      this.mainData = Object.assign({}, this.mainData, res.data);
+      console.log(res.data,'输出33');
+      res.data.team.forEach(item => {
+        if (item.isleader){
+          this.team_name = item.name
+          this.team_phone_number = item.phonenumber
+          this.team_userid = item.userid
+          if (item.userid == this.userid){
+            this.mainData.isleader = true
+          }
+        }
+      })
       this.changeDataStructure();
-      console.log(res.data);
 
       this.nodes = this.createTreeData(res.data.nodes);
+      this.mainData.actiontype == '工序模板'?this.$refs.serviceWorkOrderRef.activeName = '工序详情' : this.$refs.serviceWorkOrderRef.activeName = '服务商品'
       console.log(this.nodes);
     },
     downLoadBill(data) {
@@ -279,7 +278,7 @@ export default {
         },
         {
           label: "负责人",
-          value: this.mainData.projectleader,
+          value: this.team_name,
         },
         {
           label: "状态",
@@ -314,6 +313,52 @@ export default {
           label: "地址",
           value: this.mainData.address,
         },
+
+        {
+          label: "关联订单",
+          value: this.mainData.sonum,
+        },
+        {
+          label: "现场联系人",
+          value: this.mainData.scenecontact,
+        },
+        {
+          label: "身份备注",
+          value: this.mainData.scenecontactrole,
+        },
+        {
+          label: "现场联系人电话",
+          value: this.mainData.scenecontactphonenumber,
+        },
+        {
+          label: "应用系统",
+          value: this.mainData.class1,
+        },
+        {
+          label: "客诉大类",
+          value: this.mainData.class2,
+        },
+        {
+          label: "问题描述",
+          value: this.mainData.reason,
+        },
+        {
+          label: "服务负责人电话",
+          value: this.team_phone_number,
+        },
+        {
+          label: "异常类型",
+          value: this.mainData.exception_type,
+        },
+        {
+          label: "服务等级",
+          value: this.mainData.service_level,
+        },
+        {
+          label: "项目名称",
+          value: this.mainData.projectname,
+        },
+
         {
           label: "创建时间",
           value: this.mainData.createdate,
@@ -326,12 +371,13 @@ export default {
           label: "操作类型",
           value: this.mainData.actiontype,
         },
+        { label:'备注',  value: this.mainData.remarks}
       ];
       this.detailInfo = [
         {
           title: "基本信息",
           info: [
-            { label: "单号", value: this.mainData.billno },
+            { label: "单号", value: this.mainData.billno },
             { label: "申请单号", value: this.mainData.servicebillno },
             {
               label: "状态",
@@ -341,27 +387,63 @@ export default {
                 return style;
               },
             },
-            { label: "企业编号", value: this.mainData.agentnum },
-            { label: "企业名称", value: this.mainData.enterprise },
-            { label:'客诉大类',  value: this.mainData.class2},
-            { label:'申请原因',  value: this.mainData.reason},
-            { label: "服务联系人", value: this.mainData.scenecontact },
-            {
-              label: "联系人电话",
-              value: this.mainData.scenecontactphonenumber,
+            { label:'服务类型',value:this.mainData.servicetype,
+              style:function () {
+                let style = that.tool.getStatusColor(that.mainData.servicetype)
+                return style
+              }
             },
-            { label: "工单负责人", value: this.mainData.projectleader },
             { label: "工单类型", value: this.mainData.type },
-            { label: "工单模板", value: this.mainData.name },
+            { label:'关联订单',value:this.mainData.sonum},
+            { label: "企业名称", value: this.mainData.enterprise },
+            { label: "企业编号", value: this.mainData.agentnum },
+            { label: "项目名称", value: this.mainData.projectname},
             {
               label: "省市县",
               value: `${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`,
             },
-            { label: "地址", value: this.mainData.address },
-            { label: "创建人", value: this.mainData.createby },
-            { label: "创建时间", value: this.mainData.createdate },
+            { label:'详细地址',value:this.mainData.address ? this.mainData.address : ''},
+            { label: "现场联系人", value: this.mainData.scenecontact },
+            { label:'身份备注',value:this.mainData.scenecontactrole},
+            { label:'现场联系人电话',value:this.mainData.scenecontactphonenumber},
+            { label:'应用系统',value:this.mainData.class1},
+            { label:'客诉大类',value:this.mainData.class2},
+            { label:'问题描述',value:this.mainData.reason},
+            { label:'是否外包工单',value:this.mainData.isout?'是':'否'},
+            { label:'服务负责人',value:this.team_name},
+            { label:'服务负责人电话',value:this.team_phone_number},
+            { label:'异常类型',value:this.exception_type},
+            { label: "业务员", value: this.mainData.saler_name},
+            { label: "业务员电话",value: this.mainData.salerphonenumber},
+            {
+              label: "服务等级",
+              value: this.mainData.service_level,
+              style:function () {
+                let style = that.tool.getStatusColor(that.mainData.service_level)
+                return style
+              }
+            },
+            { label: "确认客诉异常描述是否属实", value: this.mainData.isfact?'是':'否'},
+            { label: "是否为我司出货产品",value: this.mainData.isouritem?'是':'否'},
+            { label: "是否在保质期内", value: this.mainData.inqualityguaranteeperiod?'是':'否'},
+            { label:'备注',  value: this.mainData.remarks},
           ],
         },
+        {
+          title:'系统信息',
+          info: [
+            {label:'创建时间',value:this.mainData.createdate},
+            {label:'最近编辑时间',value:this.mainData.changedate},
+            {label:'最近编辑人',value:this.mainData.changeby},
+
+            {label:'接单时间',value:this.mainData.takedate},
+            {label:'开始工单时间',value:this.mainData.startdate},
+            {label:'完成时间',value:this.mainData.finishdate},
+            {label:'中止时间',value:this.mainData.abortdate},
+            {label:'中止原因',value:this.mainData.abortreason},
+
+          ]
+        }
       ];
     },
     createTreeData(array) {
@@ -427,6 +509,38 @@ export default {
       this.queryMainData(this.$route.query.id);
       this.$emit("onSuccess");
     },
+    async queryPerson(){
+      const res = await this.$api.requested({
+        id:20230213143003,
+        content:{
+          pageNumber:1,
+          pageSize:999,
+        }
+      })
+      console.log(res.data,'333')
+      this.optionNames = res.data.map(item => {
+        return {
+          "username":item.username,
+          "userid":item.userid
+        }
+      })
+
+    },
+    async transferWorkSubmit(){
+      console.log('执行222')
+      const res = await this.$api.requested({
+        "content": {
+          "sa_workorderid": this.$route.query.id,
+          "userid": this.personName //1566
+        },
+        "id": 2026012714183302,
+      })
+      this.tool.showMessage(res,()=>{
+        this.$refs.transferWorkRef.dialogTableVisible = false
+        this.personName = ''
+        this.queryMainData()
+      })
+    }
   },
   mounted() {
     this.queryMainData(this.$route.query.id);

+ 160 - 0
src/HDrpManagement/serveWorkBill/modules/serviceWorkOrder/index.vue

@@ -0,0 +1,160 @@
+<template>
+  <div>
+    <el-tabs type="border-card" v-model="activeName" v-if="data.actiontype == '工序模板'">
+      <el-tab-pane label="工序详情" name="工序详情">
+        <taskDetail :data="nodes">
+          <template v-slot:detail="scope">
+            <taskListDetail
+                class="inline-16"
+                :data="scope.data"
+            ></taskListDetail>
+          </template>
+          <!-- <template v-slot:edit="scope">
+            <taskListEdit class="inline-16" :data="scope.data"/>
+          </template> -->
+        </taskDetail>
+      </el-tab-pane>
+      <el-tab-pane label="工单物料" name="工单物料">
+        <Items :data="data"></Items>
+      </el-tab-pane>
+      <el-tab-pane label="服务确认单" name="服务确认单">
+        <checkBill ref="checkBillRef">
+          <template v-slot:download="scope">
+            <el-button
+                v-if="tool.checkAuth($route.name, 'checkBillDetail')"
+                type="text"
+                size="mini"
+                @click="downLoadBill(scope.data)"
+            >{{ $t("单 据 下 载") }}</el-button
+            >
+          </template>
+        </checkBill>
+      </el-tab-pane>
+      <el-tab-pane label="服务团队" name="服务团队">
+        <teamList
+            v-if="tool.checkAuth($route.name, 'teamList')"
+            ref="teamList"
+            :data="data.team"
+        >
+          <selectTeam ref="team" @teamChange="teamChange" slot="add">
+            <el-button
+                v-if="tool.checkAuth($route.name, 'teamHandle') && data.status !== '已完成'"
+                class="button-new-tag"
+                size="small"
+                type="primary"
+                @click="$refs.team.dialogFormVisible = true"
+            >{{ $t("添 加") }}</el-button
+            >
+          </selectTeam>
+        </teamList>
+      </el-tab-pane>
+      <el-tab-pane label="工单信息" name="工单信息">
+        <detailInfo :more="true"  :data="detailInfo"></detailInfo>
+      </el-tab-pane>
+    </el-tabs>
+    <el-tabs type="border-card" v-model="activeName" v-else>
+      <el-tab-pane label="服务商品" name="服务商品">
+        <Items :data="data"></Items>
+      </el-tab-pane>
+      <el-tab-pane label="服务确认单" name="服务确认单">
+        <checkBill ref="checkBillRef">
+          <template v-slot:download="scope">
+            <el-button
+                v-if="tool.checkAuth($route.name, 'checkBillDetail')"
+                type="text"
+                size="mini"
+                @click="downLoadBill(scope.data)"
+            >{{ $t("单 据 下 载") }}</el-button
+            >
+          </template>
+        </checkBill>
+      </el-tab-pane>
+      <el-tab-pane label="服务团队" name="服务团队">
+        <teamList
+            v-if="tool.checkAuth($route.name, 'teamList')"
+            ref="teamList"
+            :data="data.team"
+        >
+          <selectTeam ref="team" @teamChange="teamChange" slot="add">
+            <el-button
+                v-if="tool.checkAuth($route.name, 'teamHandle') && data.status !== '已完成'"
+                class="button-new-tag"
+                size="small"
+                type="primary"
+                @click="$refs.team.dialogFormVisible = true"
+            >{{ $t("添 加") }}</el-button
+            >
+          </selectTeam>
+        </teamList>
+      </el-tab-pane>
+      <el-tab-pane label="工单信息" name="工单信息">
+        <detailInfo :more="true"  :data="detailInfo"></detailInfo>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import detailInfo from '@/components/detailInfo/index'
+import taskDetail from "../taskDetail/index";
+import taskListDetail from "../taskDetail/taskListDetail";
+import taskListEdit from "../taskDetail/taskListEdit";
+import Items from "../items/index";
+import checkBill from "../checkBill/index";
+import teamList from "../teamList/index";
+import selectTeam from "../../components/teamSelect";
+export default {
+  name: "index",
+  props:['data','detailInfo','nodes'],
+  components:{detailInfo,taskDetail,taskListDetail,taskListEdit,Items,checkBill,teamList,selectTeam},
+  data(){
+    return {
+      activeName:'服务商品',
+      active_accoun:JSON.parse(sessionStorage.getItem('active_account')),
+      folderid:JSON.parse(sessionStorage.getItem('folderid'))
+    }
+  },
+  methods:{
+    downLoadBill(data) {
+      let result = data.attinfos.filter(
+          (item) => item.usetype == "comfirmbill"
+      );
+      let http = location.href.substring(0,5) == 'https'?'https://oms.idcgroup.com.cn:8079/yosweb/#/printTable?':'http://61.164.207.46:8000/yosweb/#/printTable?'
+      let token = 'token=' + this.active_accoun.token
+      let parentid = '&parentid=' + this.folderid.appfolderid
+      let ownerid = '&ownerid=' + data.sa_workorder_confirmationid
+      let action = '&action=1'
+      let urlNew = http + token + parentid + ownerid + action
+      if (result.length == 0)
+        window.open(urlNew);
+      window.open(result[result.length - 1].url, "_self");
+      this.$refs.checkBillRef.listData()
+    },
+    async teamChange(data) {
+      let result = data.map((item) => {
+        return item.userid;
+      });
+      const res = await this.$api.requested({
+        id: 20220930103603,
+        content: {
+          ownertable: "sa_workorder",
+          ownerid: this.$route.query.id,
+          justuserids: false,
+          userids: result,
+        },
+      });
+      this.tool.showMessage(res, () => {
+        this.$refs.team.dialogFormVisible = false;
+        this.$refs.teamList.listData();
+      });
+    },
+  },
+  mounted() {
+  }
+
+}
+</script>
+
+<style scoped>
+
+</style>

+ 2 - 2
src/components/dialogTemplate/index2.vue

@@ -5,7 +5,7 @@
       <slot name="formRule"></slot>
       <div slot="footer" class="dialog-footer">
         <el-button @click="onCancel" size="small">{{$t(`取 消`)}}</el-button>
-        <el-button type="primary" @click="onSubmit" size="small">{{$t(`确 定`)}}</el-button>
+        <el-button :type="disabled?'':'primary'" @click="onSubmit" size="small" :disabled="disabledSubmit">{{$t(`确 定`)}}</el-button>
       </div>
     </el-dialog>
   </div>
@@ -14,7 +14,7 @@
 <script>
 export default {
   name: "index2",
-  props:["btnTitle","disabled","btnType","content",'dialogTitle'],
+  props:["btnTitle","disabled","btnType","content",'dialogTitle','disabledSubmit'],
   data(){
     return {
       dialogTableVisible:false,

+ 7 - 2
src/components/normal-basic-layout-new/details/modules/tabs/tab.vue

@@ -35,7 +35,7 @@ import datalog from '../datalog/index.vue'
 import followTable from '../followTable/index'
 
 export default {
-  props:['tabs','editData','ownertable','idname','status','ownerid','disabled','isFollow'],
+  props:['tabs','editData','ownertable','idname','status','ownerid','disabled','isFollow','SalesmanQ'],
   components:{
     attachmentList,
     upload,
@@ -98,7 +98,12 @@ export default {
         this.activeName = 'tab0'
       }
     }, 1000);
-    this.isSalesman()
+    if (this.SalesmanQ == '不执行'){
+
+    }else {
+      this.isSalesman()
+    }
+
   },
   watch: {
     activeName (val) {

+ 2 - 2
src/components/normal-basic-layout/details/index.vue

@@ -89,7 +89,7 @@
         <el-col style="flex:1 0 auto;" :span="activeApp.isdatateam?18:activeApp.isdatafollowup?18:24">
           <slot name="customBefore"></slot>
           <tabTemp ref="tabRef" :disabled="disabled" :status="status" :tabs="tabs" :editData="editData" :idname="idname" :attachmentDisabled="attachmentDisabled" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)"
-                   @onTabClick="onTabClick" @newFollow="newFollow" @hrMain="hrMain" :isFollow="activeApp.isdatafollowup">
+                   @onTabClick="onTabClick" @newFollow="newFollow" @hrMain="hrMain" :isFollow="activeApp.isdatafollowup" :tabName="tabName">
             <div :slot="'slot' + index" v-for="(tab,index) in tabs" :key="tab.index">
               <slot :name="'slot' + index"></slot>
             </div>
@@ -140,7 +140,7 @@ import {mapGetters} from 'vuex'
 export default {
   props:['titleText','mainAreaData','turnPageId','delApiId','idname','ownertable','formPath','oldFormPath','editData','tags','tabs','statusCheck','pageChange','justsaler',
     'mainData','status','typeTask','isGroup','isBatch','modelName','isDelete','column','attachmentDisabled','disabled','isGoDetail','detailPath','nowDetailPath','detailId',
-  'isAdmin','btnNameReport','delHide'],
+  'isAdmin','btnNameReport','delHide','tabName','SalesmanQ'],
   data () {
     return {
       drawer:false,

+ 7 - 3
src/components/normal-basic-layout/details/modules/tabs/tab.vue

@@ -35,7 +35,7 @@ import datalog from '../datalog/index.vue'
 import followTable from '../followTable/index'
 
 export default {
-  props:['tabs','editData','ownertable','idname','status','attachmentDisabled','disabled','isFollow'],
+  props:['tabs','editData','ownertable','idname','status','attachmentDisabled','disabled','isFollow','tabName','SalesmanQ'],
   components:{
     attachmentList,
     upload,
@@ -97,10 +97,14 @@ export default {
       if (this.tabs.length == 0 && this.$route.path !== '/contractDetail') {
         this.activeName = 'file'
       } else {
-        this.activeName = 'tab0'
+        this.activeName = this.tabName?this.tabName:'tab0'
       }
     }, 100);
-    this.isSalesman()
+    if (this.SalesmanQ == '不执行'){
+
+    }else {
+      this.isSalesman()
+    }
   },
   watch: {
     activeName (val) {