Bladeren bron

feature:培训工单功能修改

Sun Xinyuan 1 jaar geleden
bovenliggende
commit
630e16cb30

+ 110 - 158
src/views/work/train/head/components/CreateTrainHead.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" @close="close">
+  <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" width="1000px" @close="close">
     <el-form ref="form" label-position="top" :model="form" :rules="rules">
       <el-row :gutter="20">
         <!-- <el-col :span="12">
@@ -13,12 +13,12 @@
             <!-- <el-input v-model="form.trainTitle" readonly suffix-icon="el-icon-search" @focus="handleSelectUser" /> -->
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="24">
           <el-form-item label="培训日期" prop="trainDate">
-            <el-date-picker v-model="form.trainDate" type="date" placeholder="选择日期" style="width: 400px" />
+            <el-date-picker v-model="form.trainDate" type="date" placeholder="选择日期" style="width: 100%" />
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="24">
           <el-form-item label="培训时间" prop="trainConcreteStartTime">
             <el-time-select
               v-model="form.trainConcreteStartTime"
@@ -28,7 +28,7 @@
                 end: '18:30',
               }"
               placeholder="选择培训开始时间"
-              style="width: 200px" />
+              style="width: 49%" />
             <el-time-select
               v-model="form.trainConcreteEndTime"
               :picker-options="{
@@ -38,7 +38,7 @@
                 minTime: form.trainConcreteStartTime,
               }"
               placeholder="选择培训结束时间"
-              style="margin-left: 10px; width: 200px" />
+              style="margin-left: 10px; width: 49%" />
           </el-form-item>
           <!-- <el-form-item label="培训结束时间" prop="trainConcreteEndTime">
 
@@ -46,87 +46,42 @@
         </el-col>
       </el-row>
     </el-form>
-    <el-button icon="el-icon-plus" type="primary" @click="createFeedBack">添加工程师</el-button>
-    <div   style="height: 400px">
-      <vxe-table
-        ref="feedBackRef"
-        border
-        resizable
-        show-overflow
-        :data="form.feedbackList"
-        :edit-config="{ trigger: 'click', mode: 'cell' }"
-        style="height: auto">
-        <vxe-column type="seq" width="60" />
-        <vxe-column field="saleName" title="销售工程师" :edit-render="{}">
-          <template #default="{ row }">
-            {{ row.sale.saleName }}
-          </template>
-          <template #edit="{ row }">
-            <vxe-select v-model="row.sale" style="height: 50px">
-              <vxe-option
-                v-for="(item, index) in userList"
-                :key="item.saleId"
-                :value="userList[index]"
-                :label="item.saleName" />
-            </vxe-select>
-          </template>
-        </vxe-column>
-        <!-- <vxe-column field="distributorName" title="渠道名称">
-
-        <template #default="{ row }">
-          <vxe-input v-model="row.role" type="text" placeholder="请输入昵称" />
-        </template>
-      </vxe-column> -->
-
-        <vxe-column field="distributorList" title="渠道名称" :edit-render="{}">
-          <template #default="{ row }">
-            <span v-for="(item, index) in row.distributorList" :key="item.distributorId">
-              {{ item.distributorName }}
-              <span v-if="index == row.distributorList.length">,</span>
-            </span>
-          </template>
-          <template #edit="{ row }">
-            <vxe-select v-model="row.distributorList" multiple>
-              <vxe-option
-                v-for="(item, index) in sexList"
-                :key="item.distributorId"
-                :value="sexList[index]"
-                :label="item.distributorName" />
-            </vxe-select>
-          </template>
-        </vxe-column>
-        <vxe-column title="操作" fixed="right">
-          <template #default="{ row }">
-            <vxe-button type="text" status="primary" content="删除" @click="DeleteData(row)" />
-          </template>
-        </vxe-column>
-      </vxe-table>
-    </div>
+    <el-button icon="el-icon-plus" type="primary" @click="createFeedBack">添加销售工程师</el-button>
 
-    <!-- <el-table :data="form.feedbackList" border style="width: 100%">
-      <el-table-column align="center" label="序号" width="80">
+    <el-table :data="form.saleList" border style="width: 100%; margin-top: 10px">
+      <el-table-column align="center" label="序号" width="50">
         <template #default="{ $index }">
           {{ $index + 1 }}
         </template>
       </el-table-column>
-      <el-table-column prop="saleName" label="销售工程师">
-        <template #default="{ $index }">
-          <el-input v-model="form.feedbackList[$index].saleName" @focus="handleSelectUser($index)" />
+      <el-table-column prop="saleName" label="销售工程师" min-width="140" />
+
+      <el-table-column fixed="right" label="操作" width="100">
+        <template slot-scope="scope">
+          <!-- <el-button type="text" @click="scope.row" size="small">编辑</el-button> -->
+          <el-button type="text" @click="deleteFeedBack(scope.$index)" size="small">删除</el-button>
         </template>
       </el-table-column>
-      <el-table-column prop="distributorName" label="渠道名称">
-        <template slot-scope="scope">
-          <el-input v-model="scope.row.distributorName" />
+    </el-table>
+
+    <el-button icon="el-icon-plus" type="primary" @click="AddDis" style="margin-top: 10px">添加渠道</el-button>
+
+    <el-table :data="form.distributorList" border style="width: 100%; margin-top: 10px">
+      <el-table-column align="center" label="序号" width="50">
+        <template #default="{ $index }">
+          {{ $index + 1 }}
         </template>
       </el-table-column>
+      <el-table-column prop="distributorName" label="渠道名称" min-width="140" />
+      <el-table-column prop="saleName" label="销售工程师" min-width="140" />
 
       <el-table-column fixed="right" label="操作" width="100">
         <template slot-scope="scope">
-          <el-button type="text" @click="scope.row" size="small">编辑</el-button>
-          <el-button type="text" @click="deleteFeedBack(scope.row)" size="small">删除</el-button>
+          <!-- <el-button type="text" @click="scope.row" size="small">编辑</el-button> -->
+          <el-button type="text" @click="deleteDis(scope.$index)" size="small">删除</el-button>
         </template>
       </el-table-column>
-    </el-table> -->
+    </el-table>
 
     <template #footer>
       <el-button @click="close">取 消</el-button>
@@ -135,8 +90,8 @@
 
     <!-- 选择支持人员弹窗 -->
     <select-user ref="selectUser" @save="selectUser" />
-    <!-- 选择经销商弹窗 -->
-    <select-distributor ref="selectDistributor" :multiple="true" :query-params="queryParams" @save="saveDistributors" />
+    <!-- 选择渠道弹窗 -->
+    <select-distributor ref="selectDistributor" :query-params="queryParams" @save="selectDistributor" />
   </el-dialog>
 </template>
 
@@ -185,7 +140,8 @@
           trainDate: undefined,
           trainConcreteStartTime: undefined,
           trainConcreteEndTime: undefined,
-          feedbackList: [],
+          saleList: [],
+          distributorList: [],
         },
         rules: {
           trainTitle: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
@@ -212,32 +168,30 @@
         $table.remove(row)
       },
       createFeedBack() {
-        const $table = this.$refs.feedBackRef
-
-        $table.insertAt(
-          {
-            sale: {},
-            distributorList: [],
-          },
-          0
-        )
-        // if (this.form.feedbackList == undefined) {
-        //   this.form.feedbackList = []
-        // }
-        // this.form.feedbackList.push({
-        //   saleId: '',
-        //   saleName: '',
-        //   distributorId: '',
-        //   distributorName: '',
-        // })
+        this.$refs.selectUser.open()
       },
-      deleteFeedBack(row) {
-        // const index = this.form.feedbackList.findIndex((item) => {
-        //   item == row
-        // })
-        // this.form.feedbackList.splice(index, 1)
-        const $table = this.$refs.feedBackRef
-        $table.remove(row)
+      AddDis() {
+        // belongSaleId
+        if (this.form.saleList.length == 0) {
+          this.$message({
+            message: '请先添加销售',
+            type: 'warning',
+          })
+          return
+        } else {
+          let belongSaleIdList = []
+          this.form.saleList.forEach((item) => {
+            belongSaleIdList.push(item.saleId)
+          })
+          this.queryParams.belongSaleIdList = belongSaleIdList
+          this.$refs.selectDistributor.open()
+        }
+      },
+      deleteFeedBack(index) {
+        this.form.saleList.splice(index, 1)
+      },
+      deleteDis(index) {
+        this.form.distributorList.splice(index, 1)
       },
       async getOrderTypeList() {
         this.orderTypeList.splice(0, this.orderTypeList.length)
@@ -251,48 +205,29 @@
       // handleUploadFile(file) {
       //   this.form.file = file
       // },
-      handleSelectUser(rowIndex) {
-        // Object.assign(this.row, rowIndex)
-        this.index = rowIndex
-        // const index = this.form.feedbackList.findIndex(item=>{
-        //   item==row
-        // })
+      handleSelectUser(row) {
+        this.row = row
+
         this.$refs.selectUser.open()
       },
       selectUser(val) {
+        console.log('select+++++++++++++++++++')
         if (val && val.length > 0) {
-          // const $table = this.$refs.feedBackRef
-
-          // const index = this.form.feedbackList.findIndex((item) => {
-          //   item == this.row
-          // })
-
-          this.$refs.feedBackRef.updateData(this.index, { saleId: val[0].id })
-          this.$refs.feedBackRef.updateData(this.index, { saleName: val.map((item) => item.nickName).join() })
-          console.log(' this.$refs.feedBackRef', this.$refs.feedBackRef)
-          let data = this.$refs.feedBackRef.getRecordset()
-          console.log('data', data)
+          let saleId = val[0].id
+          let saleName = val.map((item) => item.nickName).join()
 
-          // this.row.saleId = val[0].id
-          // this.row.saleName = val.map((item) => item.nickName).join()
-
-          // this.$refs.feedBackRef.reload()
-
-          // console.log('index', this.index)
-          // console.log("val-------",val);
-          // console.log("item",this.row);
-          // console.log('this.form.feedbackList[index]', this.form.feedbackList[index])
-          // this.row.saleId = val[0].id
-          // this.row.saleName = val.map((item) => item.nickName).join()
-          // this.form.feedbackList[this.index] = {
-          //   saleId: val[0].id,
-          //   saleName: val.map((item) => item.nickName).join(),
-          //   distributorId: this.row.distributorId,
-          //   distributorName: this.row.distributorName,
-          // }
-          console.log('this.form.feedbackList', this.form.feedbackList)
-
-          console.log('row222', this.row)
+          let flag = true
+          this.form.saleList.forEach((item) => {
+            if (parseInt(item.saleId) == parseInt(saleId)) {
+              flag = false
+            }
+          })
+          if (flag) {
+            this.form.saleList.push({
+              saleId: saleId,
+              saleName: saleName,
+            })
+          }
         }
       },
       async showEdit(id) {
@@ -310,22 +245,20 @@
           this.form.trainConcreteStartTime = res.data.trainConcreteStartTime
           this.form.trainDate = res.data.trainDate
           this.form.trainTitle = res.data.trainTitle
-          this.form.feedbackList = res.data.feedbackList
-          this.form.feedbackList.forEach((item) => {
+          this.form.saleList = res.data.saleList
+          this.form.saleList.forEach((item) => {
             item.sale = {
               saleId: item.saleId,
               saleName: item.saleName,
             }
           })
 
-          console.log('this.form.feedbackList', this.form.feedbackList)
+          console.log('this.form.saleList', this.form.saleList)
         }
 
         this.dialogFormVisible = true
       },
       close() {
-        // this.$refs['dingTalkFrom'].resetForm()
-        // this.$refs['form'].resetFields()
         this.form = this.$options.data().form
         this.dialogFormVisible = false
       },
@@ -336,25 +269,44 @@
       },
       // 选中数据
       saveDistributors() {},
+      selectDistributor(val) {
+        if (val && val.length > 0) {
+          let flag = true
+          this.form.distributorList.forEach((item) => {
+            if (parseInt(item.distributorId) == parseInt(val[0].id)) {
+              flag = false
+            }
+          })
+          if (flag) {
+            this.form.distributorList.push({
+              saleId: parseInt(val.map((item) => item.belongSaleId).join()),
+              saleName: val.map((item) => item.belongSale).join(),
+              distributorId: val[0].id,
+              distributorName: val.map((item) => item.distName).join(),
+            })
+          } else {
+            console.log(111111)
+          }
+        }
+      },
       save() {
-        // let dingValid = this.$refs['form'].validateForm()
         this.$refs['form'].validate(async (valid) => {
           if (valid) {
             // this.loading = true
-            const $table = this.$refs.feedBackRef
-            let insertList = $table.getInsertRecords()
-            let removeList = $table.getRemoveRecords()
-            let updateList = $table.getUpdateRecords()
-            if (insertList.length > 0) {
-              insertList.map((item) => (item.operate = '10'))
-            }
-            if (updateList.length > 0) {
-              updateList.map((item) => (item.operate = '20'))
-            }
-            if (removeList.length > 0) {
-              removeList.map((item) => (item.operate = '30'))
-            }
-            this.form.feedbackList = [...insertList, ...updateList, ...removeList]
+            // const $table = this.$refs.feedBackRef
+            // let insertList = $table.getInsertRecords()
+            // let removeList = $table.getRemoveRecords()
+            // let updateList = $table.getUpdateRecords()
+            // if (insertList.length > 0) {
+            //   insertList.map((item) => (item.operate = '10'))
+            // }
+            // if (updateList.length > 0) {
+            //   updateList.map((item) => (item.operate = '20'))
+            // }
+            // if (removeList.length > 0) {
+            //   removeList.map((item) => (item.operate = '30'))
+            // }
+            // this.form.saleList = [...insertList, ...updateList, ...removeList]
             this.form.trainConcreteStartTime = '2024-01-11T' + this.form.trainConcreteStartTime + ':00.000Z'
             this.form.trainConcreteEndTime = '2024-01-11T' + this.form.trainConcreteEndTime + ':00.000Z'
             const { msg } = await api.Create(this.form)

+ 42 - 78
src/views/work/train/head/components/Detail.vue

@@ -1,21 +1,18 @@
 <template>
-  <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" @close="close">
-    <el-descriptions class="margin-top" :column="2" border>
+  <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" width="1000px" @close="close">
+    <el-descriptions class="margin-top mb10" :column="2" border>
       <el-descriptions-item>
         <template slot="label">培训主题</template>
         {{ detail.trainTitle }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label">培训日期</template>
-        {{ detail.trainDate }}
+        {{ parseTime(detail.trainDate, '{y}-{m}-{d}') }}
       </el-descriptions-item>
       <el-descriptions-item>
-        <template slot="label">培训开始时间</template>
-        {{ detail.trainConcreteStartTime }}
-      </el-descriptions-item>
-      <el-descriptions-item>
-        <template slot="label">培训结束时间</template>
-        {{ detail.trainConcreteEndTime }}
+        <template slot="label">培训时间</template>
+        {{ parseTime(detail.trainConcreteStartTime, '{h}:{i}') }}--
+        {{ parseTime(detail.trainConcreteEndTime, '{h}:{i}') }}
       </el-descriptions-item>
     </el-descriptions>
 
@@ -25,38 +22,35 @@
       border
       resizable
       show-overflow
-      :data="detail.feedbackDetailList"
+      :data="detail.distributorList"
       :edit-config="{ trigger: 'click', mode: 'cell' }"
-      style="height: 300px">
-      <vxe-column type="seq" width="60" />
-      <vxe-column field="saleName" title="销售工程师" width="100" />
-      <vxe-column field="distributorName" title="渠道名称" width="100" />
+      style="height: 300px; margin-top: 10px; width: 960px">
+      <vxe-column type="seq" width="50" title="序号" />
+      <vxe-column field="saleName" title="销售工程师" width="120" />
+      <vxe-column field="distributorName" title="渠道名称" width="180" />
 
-      <vxe-column field="trainingPersNum" title="参训人数" width="100">
-        <template #default="{ row }" v-if="type == 'edit'">
-          <vxe-input
-            v-model.number="row.trainingPersNum"
-            type="text"
-            :disabled="type == 'detail'"
-            placeholder="请输入参训人数" />
-        </template>
-        <template #default="{ row }" v-else>
-          {{ row.trainingPersNum }}
-        </template>
-      </vxe-column>
-      <vxe-column field="distributorFeedback" title="经销商反馈">
-        <template #default="{ row }" v-if="type == 'edit'">
-          <vxe-input
-            v-model="row.distributorFeedback"
-            type="text"
-            :disabled="type == 'detail'"
-            placeholder="请输入经销商反馈" />
-        </template>
-        <template #default="{ row }" v-else>
-          {{ row.distributorFeedback }}
+      <vxe-column field="trainingPersNum" title="参训人数" width="120" />
+
+      <vxe-column field="distributorFeedback" title="渠道反馈" width="320" />
+      <vxe-column field="updatedTime" title="反馈时间" width="170">
+        <template #default="{ row }">
+          {{ parseTime(row.updatedTime, '{y}-{m}-{d} {h}:{i}') }}
         </template>
       </vxe-column>
     </vxe-table>
+    <!-- <vxe-table
+      ref="SaleListRef"
+      class="mt10"
+      border
+      resizable
+      show-overflow
+      :data="detail.SaleList"
+      :edit-config="{ trigger: 'click', mode: 'cell' }"
+    >
+      <vxe-column type="seq" width="50" title="序号" />
+      <vxe-column field="saleName" title="销售工程师" width="120" />
+    
+    </vxe-table> -->
 
     <template #footer>
       <el-button @click="close">取 消</el-button>
@@ -65,7 +59,7 @@
 
     <!-- 选择支持人员弹窗 -->
     <select-user ref="selectUser" @save="selectUser" />
-    <!-- 选择经销商弹窗 -->
+    <!-- 选择渠道弹窗 -->
     <select-distributor ref="selectDistributor" :multiple="true" :query-params="queryParams" @save="saveDistributors" />
   </el-dialog>
 </template>
@@ -123,7 +117,7 @@
           trainConcreteStartTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           trainConcreteEndTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
         },
-        title: '',
+        title: '培训工单详情',
         dialogFormVisible: false,
         orderTypeList: [],
         dingtalkForm: undefined,
@@ -199,54 +193,24 @@
       },
       selectUser(val) {
         if (val && val.length > 0) {
-          // const $table = this.$refs.feedBackRef
-
-          // const index = this.form.feedbackList.findIndex((item) => {
-          //   item == this.row
-          // })
-
           this.$refs.feedBackRef.updateData(this.index, { saleId: val[0].id })
           this.$refs.feedBackRef.updateData(this.index, { saleName: val.map((item) => item.nickName).join() })
-          console.log(' this.$refs.feedBackRef', this.$refs.feedBackRef)
-          let data = this.$refs.feedBackRef.getRecordset()
-          console.log('data', data)
-
-          // this.row.saleId = val[0].id
-          // this.row.saleName = val.map((item) => item.nickName).join()
-
-          // this.$refs.feedBackRef.reload()
-
-          // console.log('index', this.index)
-          // console.log("val-------",val);
-          // console.log("item",this.row);
-          // console.log('this.form.feedbackList[index]', this.form.feedbackList[index])
-          // this.row.saleId = val[0].id
-          // this.row.saleName = val.map((item) => item.nickName).join()
-          // this.form.feedbackList[this.index] = {
-          //   saleId: val[0].id,
-          //   saleName: val.map((item) => item.nickName).join(),
-          //   distributorId: this.row.distributorId,
-          //   distributorName: this.row.distributorName,
-          // }
-          console.log('this.form.feedbackList', this.form.feedbackList)
 
           console.log('row222', this.row)
         }
       },
-      async showEdit(id, type) {
-        console.log('id222', id)
-        console.log('type', type)
+      async showEdit(id) {
         this.loading = false
-        if (type == 'edit') {
-          this.title = '反馈'
-        } else {
-          this.title = '详情'
-        }
-        this.type = type
+        // if (type == 'edit') {
+        //   this.title = '反馈'
+        // } else {
+        //   this.title = '详情'
+        // }
+        // this.type = type
         // this.form.saleId = this.userId
         // this.form.saleName = this.nickName
         this.listLoading = true
-        const [err, res] = await to(api.getFeedBackDetail({ id: id }))
+        const [err, res] = await to(api.getDetail({ id: id }))
         if (err) return (this.listLoading = false)
 
         this.detail = res.data || {}
@@ -282,11 +246,11 @@
         // if (removeList.length > 0) {
         //   removeList.map((item) => (item.operate = '30'))
         // }
-        console.log('detail.feedbackDetailList', this.detail.feedbackDetailList)
+        console.log('detail.distributorList', this.detail.distributorList)
         // this.detail.feedbackDetailList = [...insertList, ...updateList, ...removeList]
         // console.log(" this.detail.feedbackDetailList", this.detail.feedbackDetailList);
         // return
-        const { msg } = await api.FeedBackTrain({ feedBackTrainList: this.detail.feedbackDetailList })
+        const { msg } = await api.FeedBackTrain({ feedBackTrainList: this.detail.distributorList })
         // this.loading = false
         this.$baseMessage(msg, 'success', 'vab-hey-message-success')
         this.$emit('fetch-data')

+ 272 - 0
src/views/work/train/head/components/FeedBackDetail.vue

@@ -0,0 +1,272 @@
+<template>
+  <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" width="1000px" @close="close">
+    <el-descriptions class="margin-top mb10" :column="2" border>
+      <el-descriptions-item style="width: 50%">
+        <template slot="label">培训主题</template>
+        {{ detail.trainTitle }}
+      </el-descriptions-item>
+      <el-descriptions-item style="width: 50%">
+        <template slot="label">培训日期</template>
+         {{ parseTime(detail.trainDate, '{y}-{m}-{d}') }}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label">培训时间</template>
+        {{ parseTime(detail.trainConcreteStartTime, '{h}:{i}') }}--
+        {{ parseTime(detail.trainConcreteEndTime, '{h}:{i}') }}
+      </el-descriptions-item>
+    </el-descriptions>
+
+    <vxe-table
+      ref="feedBackRef"
+      class="mt10"
+      border
+      resizable
+      show-overflow
+      :data="detail.distributorList"
+      :edit-config="{ trigger: 'click', mode: 'cell' }"
+      style="height: 300px; margin-top: 10px">
+      <vxe-column type="seq" width="50" title="序号" />
+      <vxe-column field="distributorName" title="渠道名称" width="180" />
+
+      <vxe-column field="trainingPersNum" title="参训人数" width="120">
+        <template #default="{ row }">
+          <vxe-input
+            v-model.number="row.trainingPersNum"
+            type="number"
+            :disabled="type == 'detail'"
+            placeholder="参训人数" />
+        </template>
+      </vxe-column>
+      <vxe-column field="distributorFeedback" title="渠道反馈">
+        <template #default="{ row }">
+          <vxe-input
+            v-model="row.distributorFeedback"
+            type="text"
+            :disabled="type == 'detail'"
+            placeholder="请输入渠道反馈" />
+        </template>
+      </vxe-column>
+    </vxe-table>
+
+    <template #footer>
+      <el-button @click="close">取 消</el-button>
+      <el-button v-if="!form.id" :loading="loading" type="primary" @click="save">确 定</el-button>
+    </template>
+
+    <!-- 选择支持人员弹窗 -->
+    <select-user ref="selectUser" @save="selectUser" />
+    <!-- 选择渠道弹窗 -->
+    <select-distributor ref="selectDistributor" :multiple="true" :query-params="queryParams" @save="saveDistributors" />
+  </el-dialog>
+</template>
+
+<script>
+  import api from '@/api/work/trainHead'
+  import to from 'await-to-js'
+  import typeApi from '@/api/work/type'
+  import SelectUser from '@/components/select/SelectUser'
+  import { mapGetters } from 'vuex'
+  import SelectDistributor from '@/components/select/SelectDistributor'
+
+  export default {
+    name: 'WorkOrderEdit',
+    components: {
+      SelectUser,
+      SelectDistributor,
+    },
+    props: {
+      businessInfo: {
+        type: Object,
+        default: () => {},
+      },
+    },
+    data() {
+      return {
+        sexList: [
+          { distributorId: 1, distributorName: 'a' },
+          { distributorId: 2, distributorName: 'b' },
+          { distributorId: 3, distributorName: 'c' },
+        ],
+        userList: [
+          { saleId: 1, saleName: '工程师1' },
+          { saleId: 2, saleName: '工程师2' },
+          { saleId: 3, saleName: '工程师3' },
+        ],
+        type: '',
+        row: {},
+        index: 0,
+        queryParams: {
+          distType: '',
+        },
+        loading: false,
+        form: {
+          id: undefined,
+          trainTitle: undefined,
+          trainDate: undefined,
+          trainConcreteStartTime: undefined,
+          trainConcreteEndTime: undefined,
+          feedbackList: [],
+        },
+        rules: {
+          trainTitle: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+          trainDate: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+          trainConcreteStartTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+          trainConcreteEndTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+        },
+        title: '培训工单反馈',
+        dialogFormVisible: false,
+        orderTypeList: [],
+        dingtalkForm: undefined,
+        detail: {
+          id: '',
+          trainTitle: '',
+          trainDate: '',
+          trainConcreteStartTime: '',
+          trainConcreteEndTime: '',
+          feedbackDetailList: [],
+        },
+      }
+    },
+    computed: {
+      ...mapGetters({
+        userId: 'user/id',
+        nickName: 'user/nickName',
+      }),
+    },
+    mounted() {},
+    methods: {
+      DeleteData(row) {
+        const $table = this.$refs.feedBackRef
+        $table.remove(row)
+      },
+      createFeedBack() {
+        const $table = this.$refs.feedBackRef
+
+        $table.insertAt(
+          {
+            sale: {},
+            distributorList: [],
+          },
+          0
+        )
+        // if (this.form.feedbackList == undefined) {
+        //   this.form.feedbackList = []
+        // }
+        // this.form.feedbackList.push({
+        //   saleId: '',
+        //   saleName: '',
+        //   distributorId: '',
+        //   distributorName: '',
+        // })
+      },
+      deleteFeedBack(row) {
+        // const index = this.form.feedbackList.findIndex((item) => {
+        //   item == row
+        // })
+        // this.form.feedbackList.splice(index, 1)
+        const $table = this.$refs.feedBackRef
+        $table.remove(row)
+      },
+      async getOrderTypeList() {
+        this.orderTypeList.splice(0, this.orderTypeList.length)
+        const { data } = await typeApi.getList()
+        for (let item of data.list) {
+          this.orderTypeList.push(item)
+        }
+        this.changeOrderType()
+      },
+      changeOrderType() {},
+      // handleUploadFile(file) {
+      //   this.form.file = file
+      // },
+      handleSelectUser(rowIndex) {
+        // Object.assign(this.row, rowIndex)
+        this.index = rowIndex
+        // const index = this.form.feedbackList.findIndex(item=>{
+        //   item==row
+        // })
+        this.$refs.selectUser.open()
+      },
+      selectUser(val) {
+        if (val && val.length > 0) {
+          // const $table = this.$refs.feedBackRef
+
+          // const index = this.form.feedbackList.findIndex((item) => {
+          //   item == this.row
+          // })
+
+          this.$refs.feedBackRef.updateData(this.index, { saleId: val[0].id })
+          this.$refs.feedBackRef.updateData(this.index, { saleName: val.map((item) => item.nickName).join() })
+          console.log(' this.$refs.feedBackRef', this.$refs.feedBackRef)
+          let data = this.$refs.feedBackRef.getRecordset()
+          console.log('data', data)
+
+          console.log('this.form.feedbackList', this.form.feedbackList)
+
+          console.log('row222', this.row)
+        }
+      },
+      async showEdit(id) {
+        this.loading = false
+        // if (type == 'edit') {
+        //   this.title = '反馈'
+        // } else {
+        //   this.title = '详情'
+        // }
+        // this.type = type
+        // this.form.saleId = this.userId
+        // this.form.saleName = this.nickName
+        this.listLoading = true
+        const [err, res] = await to(api.getFeedBackDetail({ id: id }))
+        if (err) return (this.listLoading = false)
+
+        this.detail = res.data || {}
+
+        this.detail.distributorList.forEach((item) => {
+          if (item.trainingPersNum == 0) {
+            item.trainingPersNum = ''
+          }
+        })
+
+        this.dialogFormVisible = true
+      },
+      close() {
+        // this.$refs['dingTalkFrom'].resetForm()
+        // this.$refs['form'].resetFields()
+        this.form = this.$options.data().form
+        this.dialogFormVisible = false
+      },
+      //
+      handleSelectDistributor(type) {
+        this.queryParams.distType = type
+        this.$refs.selectDistributor.open()
+      },
+      // 选中数据
+      saveDistributors() {},
+      async save() {
+        // const $table = this.$refs.feedBackRef
+        // let insertList = $table.getInsertRecords()
+        // let removeList = $table.getRemoveRecords()
+        // let updateList = $table.getUpdateRecords()
+        // if (insertList.length > 0) {
+        //   insertList.map((item) => (item.operate = '10'))
+        // }
+        // if (updateList.length > 0) {
+        //   updateList.map((item) => (item.operate = '20'))
+        // }
+        // if (removeList.length > 0) {
+        //   removeList.map((item) => (item.operate = '30'))
+        // }
+        console.log('detail.distributorList', this.detail.distributorList)
+        // this.detail.feedbackDetailList = [...insertList, ...updateList, ...removeList]
+        // console.log(" this.detail.feedbackDetailList", this.detail.feedbackDetailList);
+        // return
+        const { msg } = await api.FeedBackTrain({ feedBackTrainList: this.detail.distributorList })
+        // this.loading = false
+        this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+        this.$emit('fetch-data')
+        this.close()
+      },
+    },
+  }
+</script>

+ 0 - 136
src/views/work/train/head/components/Feedback.vue

@@ -1,136 +0,0 @@
-<template>
-  <el-dialog :title="title" :visible.sync="dialogFormVisible" @close="close">
-    <el-form ref="form" label-position="top" :model="form" :rules="rules">
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="工单编号" prop="id">
-            <el-input v-model="form.id" disabled readonly />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="工单状态" prop="orderStatus">
-            <el-input
-              disabled
-              readonly
-              suffix-icon="el-icon-search"
-              :value="selectDictLabel(orderStatusOptions, form.orderStatus)" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="工单类型" prop="orderTypeName">
-            <el-input v-model="form.orderTypeName" disabled readonly />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="支持人员" prop="assignUserName">
-            <el-input v-model="form.assignUserName" disabled readonly suffix-icon="el-icon-search" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="关联客户" prop="custName">
-            <el-input v-model="form.custName" disabled readonly />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="关联项目" prop="nboName">
-            <el-input v-model="form.nboName" disabled readonly suffix-icon="el-icon-search" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="完成信息" prop="finishRemark">
-            <el-input
-              v-model="form.finishRemark"
-              placeholder="请输入完成信息"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-        <!-- <el-col :span="12">
-          <el-form-item label="备注" prop="remark">
-            <el-input v-model="form.remark" placeholder="请输入内容" :rows="5" show-word-limit type="textarea" />
-          </el-form-item>
-        </el-col> -->
-      </el-row>
-    </el-form>
-    <template #footer>
-      <el-button @click="close">取 消</el-button>
-      <el-button type="primary" @click="save">确 定</el-button>
-    </template>
-
-    <!-- 选择支持人员弹窗 -->
-    <select-user ref="selectUser" @save="selectUser" />
-  </el-dialog>
-</template>
-
-<script>
-  import workApi from '@/api/work/index'
-  import SelectUser from '@/components/select/SelectUser'
-
-  export default {
-    name: 'WorkOrderFeedback',
-    components: {
-      SelectUser,
-    },
-    props: {
-      orderStatusOptions: {
-        type: Array,
-        default: () => [],
-      },
-    },
-    data() {
-      return {
-        form: {
-          orderId: undefined,
-          finishRemark: undefined,
-        },
-        rules: {
-          orderId: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          finishRemark: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-        },
-        title: '',
-        dialogFormVisible: false,
-        orderTypeList: [],
-        dingtalkForm: undefined,
-      }
-    },
-    mounted() {},
-    methods: {
-      handleSelectUser() {
-        this.$refs.selectUser.open()
-      },
-      selectUser(val) {
-        if (val && val.length > 0) {
-          this.form.assignUserId = val[0].id
-          this.form.assignUserName = val.map((item) => item.nickName).join()
-        }
-      },
-      showEdit(row) {
-        this.title = row.name
-        this.form = Object.assign({}, row)
-        this.dialogFormVisible = true
-      },
-      close() {
-        this.$refs['form'].resetFields()
-        this.form = this.$options.data().form
-        this.dialogFormVisible = false
-      },
-      save() {
-        this.$refs['form'].validate(async (valid) => {
-          if (valid) {
-            const { msg } = await workApi.finishWorkOrder(this.form)
-            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
-            this.$emit('fetch-data')
-            this.close()
-          }
-        })
-      },
-    },
-  }
-</script>

+ 0 - 309
src/views/work/train/head/components/FeedbackRecord.vue

@@ -1,309 +0,0 @@
-<template>
-  <div style="height: 100%; overflow: auto">
-    <div v-if="type == 'try'">
-      <el-table border :data="detail.feedbackTrail">
-        <el-table-column
-          v-for="(item, index) in tryColumns"
-          :key="index"
-          align="center"
-          height="calc(100% - 42px)"
-          :label="item.label"
-          :min-width="item.width"
-          :prop="item.prop"
-          show-overflow-tooltip>
-          <template #default="{ row }">
-            <el-button v-if="item.prop === 'id'" style="font-size: 14px" type="text" @click="handleDetail(row)">
-              {{ row.id }}
-            </el-button>
-            <span v-else-if="item.prop === 'feedbackTrialType'">
-              {{ tryType[row.feedbackTrialType] }}
-            </span>
-            <span v-else-if="item.prop === 'feedbackTrialTime'">
-              {{ parseTime(row.feedbackTrialTime, '{y}-{m}-{d}') }}
-            </span>
-            <span v-else>{{ row[item.prop] }}</span>
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-    <div v-if="type == 'support'">
-      <el-empty v-if="!detail.feedbackSupportTime" :image-size="200" />
-      <el-descriptions v-else border :column="1" :label-style="{ width: '130px' }">
-        <el-descriptions-item label="反馈时间">{{ detail.feedbackSupportTime }}</el-descriptions-item>
-        <el-descriptions-item label="本次讲解情况反馈">
-          <span v-html="detail.feedbackSupportContent.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-      </el-descriptions>
-    </div>
-    <div v-if="type == 'sale'">
-      <el-empty v-if="!detail.feedbackSaleTime" :image-size="200" />
-      <el-descriptions
-        v-else-if="detail.orderTypeName == '技术文件支持'"
-        border
-        :column="1"
-        :label-style="{ width: '130px' }">
-        <el-descriptions-item label="反馈时间">{{ detail.feedbackSaleTime }}</el-descriptions-item>
-        <el-descriptions-item label="用户反馈">
-          <span v-html="detail.feedbackSaleUser.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-        <el-descriptions-item label="下一步计划">
-          <span v-html="detail.feedbackSaleNext.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-        <el-descriptions-item label="技术支持满意度">
-          {{ detail.satisfactionRating ? detail.satisfactionRating + '分' : '' }}
-        </el-descriptions-item>
-        <el-descriptions-item label="技术支持提升建议">
-          <span v-html="detail.promotionProposal.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-      </el-descriptions>
-      <el-descriptions
-        v-else-if="detail.orderTypeName == '售前讲解支持' || detail.orderTypeName == '经销商支持'"
-        border
-        :column="1"
-        :label-style="{ width: '130px' }">
-        <el-descriptions-item label="反馈时间">
-          <span v-html="detail.feedbackSaleTime.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-        <el-descriptions-item label="会议纪要">
-          <span v-html="detail.feedbackSaleMeeting.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-        <el-descriptions-item label="客户/经销商反馈">
-          <span v-html="detail.feedbackSaleDist.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-        <el-descriptions-item label="下一步计划">
-          <span v-html="detail.feedbackSaleNext.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-        <el-descriptions-item label="技术支持满意度">
-          {{ detail.satisfactionRating ? detail.satisfactionRating + '分' : '' }}
-        </el-descriptions-item>
-        <el-descriptions-item label="技术支持提升建议">
-          <span v-html="detail.promotionProposal.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-      </el-descriptions>
-      <el-descriptions
-        v-else-if="detail.orderTypeName == '售后运维工单'"
-        border
-        :column="1"
-        :label-style="{ width: '130px' }">
-        <el-descriptions-item label="反馈时间">{{ detail.feedbackSaleTime }}</el-descriptions-item>
-        <el-descriptions-item label="工单反馈">
-          <span v-html="detail.feedbackSaleOrder.replace(/\n/g, '<br>')"></span>
-        </el-descriptions-item>
-      </el-descriptions>
-    </div>
-    <try-feedback-detail ref="tryFB" />
-  </div>
-</template>
-
-<script>
-  import TryFeedbackDetail from '@/views/work/order/components/TryFeedbackDetail'
-
-  export default {
-    name: 'DetailsContract',
-    components: { TryFeedbackDetail },
-
-    props: {
-      detail: {
-        type: [Object, String],
-        required: true,
-      },
-      type: {
-        type: String,
-        required: true,
-      },
-    },
-    data() {
-      return {
-        tryType: {
-          10: '试用启动反馈',
-          20: '试用过程反馈',
-          30: '试用总结反馈',
-        },
-        tryColumns: [
-          {
-            label: '编号',
-            width: '40px',
-            prop: 'id',
-            disableCheck: true,
-          },
-          {
-            label: '试用反馈类型',
-            width: '100px',
-            prop: 'feedbackTrialType',
-            sortable: false,
-            disableCheck: false,
-          },
-          {
-            label: '总结/问题',
-            width: 'auto',
-            prop: 'feedbackTrialContent',
-            sortable: false,
-            disableCheck: false,
-          },
-          {
-            label: '客户/经销商反馈',
-            width: 'auto',
-            prop: 'feedbackTrialDist',
-            sortable: false,
-            disableCheck: false,
-          },
-          {
-            label: '计划',
-            width: 'auto',
-            prop: 'feedbackTrialPlan',
-            sortable: false,
-            disableCheck: false,
-          },
-          {
-            label: '反馈时间',
-            width: '80px',
-            prop: 'feedbackTrialTime',
-            sortable: false,
-            disableCheck: false,
-          },
-        ],
-        list: [],
-      }
-    },
-    mounted() {},
-    methods: {
-      handleDetail(row) {
-        this.$refs.tryFB.open(row)
-      },
-    },
-  }
-</script>
-
-<style lang="scss" scoped>
-  .follow {
-    height: 100%;
-    padding: 10px 20px;
-    overflow: auto;
-
-    > li {
-      display: flex;
-
-      + li {
-        margin-top: 10px;
-      }
-    }
-
-    .date {
-      width: 100px;
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-
-      h2,
-      h3 {
-        margin: 0;
-      }
-
-      h2 {
-        font-size: 26px;
-        line-height: 32px;
-      }
-    }
-
-    .content {
-      flex: 1;
-      list-style: none;
-
-      > li {
-        border: 1px solid rgb(215, 232, 244);
-        background: rgb(247, 251, 254);
-        border-radius: 4px;
-        padding: 8px;
-        overflow: hidden;
-
-        .text-container {
-          display: flex;
-        }
-
-        .comments {
-          padding-left: 60px;
-          margin-top: 10px;
-          max-height: 190px;
-          overflow: auto;
-
-          li {
-            display: flex;
-            border-top: 1px solid #e3e5e7;
-
-            .text {
-              flex: 1;
-              padding: 0 10px;
-
-              p {
-                font-weight: 500;
-                margin: 0;
-                line-height: 32px;
-              }
-
-              p:first-child {
-                line-height: 30px;
-                font-weight: bold;
-              }
-
-              p:last-child {
-                font-size: 12px;
-                color: #9499a0;
-                text-align: right;
-              }
-            }
-          }
-        }
-
-        + li {
-          margin-top: 10px;
-        }
-      }
-
-      .user-avatar {
-        font-size: 40px;
-      }
-
-      .text {
-        flex: 1;
-        padding-left: 20px;
-        padding-right: 10px;
-
-        p {
-          font-weight: 500;
-          margin: 0;
-          line-height: 32px;
-
-          span {
-            color: #1d66dc;
-          }
-        }
-
-        .action {
-          display: flex;
-          justify-content: space-between;
-
-          span:first-child {
-            font-weight: bold;
-            color: #333;
-          }
-        }
-
-        .footer {
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-        }
-      }
-    }
-  }
-
-  .no-follow {
-    height: 100%;
-    width: 100%;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-size: 12px;
-    color: rgba(0, 0, 0, 0.65);
-  }
-</style>

+ 0 - 171
src/views/work/train/head/components/SaleFeedback.vue

@@ -1,171 +0,0 @@
-<template>
-  <el-dialog title="销售反馈" :visible.sync="dialogFormVisible" width="500px" @close="close">
-    <el-form
-      ref="form"
-      label-position="top"
-      :model="form"
-      :rules="rules"
-      style="max-height: 550px; overflow-y: scroll; overflow-x: hidden">
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="反馈时间" prop="feedbackSaleTime">
-            <el-date-picker
-              v-model="form.feedbackSaleTime"
-              placeholder="选择反馈时间"
-              style="width: 100%"
-              type="date"
-              value-format="yyyy-MM-dd" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <!-- 售前讲解 -->
-      <el-row v-if="workType == '售前讲解支持' || workType == '经销商支持'">
-        <el-col :span="24">
-          <el-form-item label="会议纪要" prop="feedbackSaleMeeting">
-            <el-input
-              v-model="form.feedbackSaleMeeting"
-              placeholder="会议纪要"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="客户/经销商反馈" prop="feedbackSaleDist">
-            <el-input
-              v-model="form.feedbackSaleDist"
-              placeholder="客户/经销商反馈"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <!-- END -->
-      <!-- 技术文件 -->
-      <el-row v-if="workType == '技术文件支持'">
-        <el-col :span="24">
-          <el-form-item label="用户反馈" prop="feedbackSaleUser">
-            <el-input
-              v-model="form.feedbackSaleUser"
-              placeholder="用户反馈"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <!-- END -->
-      <el-row v-if="workType == '售前讲解支持' || workType == '技术文件支持' || workType == '经销商支持'">
-        <el-col :span="24">
-          <el-form-item label="下一步计划" prop="feedbackSaleNext">
-            <el-input
-              v-model="form.feedbackSaleNext"
-              placeholder="下一步计划"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <!-- 技术文件 -->
-      <el-row v-if="workType == '售后运维工单'">
-        <el-col :span="24">
-          <el-form-item label="工单反馈" prop="feedbackSaleOrder">
-            <el-input
-              v-model="form.feedbackSaleOrder"
-              placeholder="问题是否已解决、用户是否满意"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <!-- END -->
-      <el-row v-if="workType == '售前讲解支持' || workType == '技术文件支持' || workType == '经销商支持'">
-        <el-col :span="24">
-          <el-form-item label="技术支持满意度" prop="satisfactionRating">
-            <el-radio-group v-model="form.satisfactionRating">
-              <el-radio label="1">1分</el-radio>
-              <el-radio label="2">2分</el-radio>
-              <el-radio label="3">3分</el-radio>
-              <el-radio label="4">4分</el-radio>
-              <el-radio label="5">5分</el-radio>
-            </el-radio-group>
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="技术支持提升建议" prop="promotionProposal">
-            <el-input
-              v-model="form.promotionProposal"
-              placeholder="技术支持提升建议"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <template #footer>
-      <el-button @click="close">取 消</el-button>
-      <el-button type="primary" @click="save">确 定</el-button>
-    </template>
-  </el-dialog>
-</template>
-
-<script>
-  import workOrderApi from '@/api/work/index'
-  export default {
-    name: 'WorkOrderFeedback',
-    data() {
-      return {
-        workType: '',
-        form: {
-          feedbackSaleTime: '',
-          feedbackSaleMeeting: '',
-          feedbackSaleDist: '',
-          feedbackSaleUser: '',
-          feedbackSaleNext: '',
-          feedbackSaleOrder: '',
-          orderId: '',
-          satisfactionRating: '',
-          promotionProposal: '',
-        },
-        rules: {
-          feedbackSaleTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackSaleMeeting: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackSaleDist: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackSaleUser: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackSaleNext: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackSaleOrder: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          satisfactionRating: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-        },
-        dialogFormVisible: false,
-      }
-    },
-    mounted() {},
-    methods: {
-      open(row) {
-        console.log(row)
-        this.form.orderId = row.id
-        this.workType = row.orderTypeName
-        this.dialogFormVisible = true
-      },
-      close() {
-        this.$refs['form'].resetFields()
-        this.form = this.$options.data().form
-        this.dialogFormVisible = false
-      },
-      save() {
-        this.$refs['form'].validate(async (valid) => {
-          if (valid) {
-            const { msg } = await workOrderApi.feedbackSale(this.form)
-            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
-            this.$emit('update-detail')
-            this.close()
-          }
-        })
-      },
-    },
-  }
-</script>

+ 0 - 77
src/views/work/train/head/components/SupportFeedback.vue

@@ -1,77 +0,0 @@
-<template>
-  <el-dialog title="支持人员总结" :visible.sync="dialogFormVisible" width="600px" @close="close">
-    <el-form ref="form" label-position="top" :model="form" :rules="rules">
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="反馈时间" prop="feedbackSupportTime">
-            <el-date-picker
-              v-model="form.feedbackSupportTime"
-              placeholder="选择反馈时间"
-              style="width: 100%"
-              type="date"
-              value-format="yyyy-MM-dd" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="本次情况反馈" prop="feedbackSupportContent">
-            <el-input
-              v-model="form.feedbackSupportContent"
-              placeholder="本次情况反馈"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <template #footer>
-      <el-button @click="close">取 消</el-button>
-      <el-button type="primary" @click="save">确 定</el-button>
-    </template>
-  </el-dialog>
-</template>
-
-<script>
-  import workOrderApi from '@/api/work/index'
-  export default {
-    name: 'WorkOrderFeedback',
-    data() {
-      return {
-        workType: '',
-        form: {
-          feedbackSupportContent: '',
-          feedbackSupportTime: '',
-          orderId: '',
-        },
-        rules: {
-          feedbackSupportContent: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackSupportTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-        },
-        dialogFormVisible: false,
-      }
-    },
-    mounted() {},
-    methods: {
-      open(row) {
-        console.log(row)
-        this.form.orderId = row.id
-        this.dialogFormVisible = true
-      },
-      close() {
-        this.$refs['form'].resetFields()
-        this.form = this.$options.data().form
-        this.dialogFormVisible = false
-      },
-      save() {
-        this.$refs['form'].validate(async (valid) => {
-          if (valid) {
-            const { msg } = await workOrderApi.feedbackSupport(this.form)
-            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
-            this.$emit('update-detail')
-            this.close()
-          }
-        })
-      },
-    },
-  }
-</script>

+ 0 - 143
src/views/work/train/head/components/TryFeedback.vue

@@ -1,143 +0,0 @@
-<template>
-  <el-dialog title="试用反馈" :visible.sync="dialogFormVisible" width="600px" @close="close">
-    <el-form ref="form" label-position="top" :model="form" :rules="rules">
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="反馈时间" prop="feedbackTrialTime">
-            <el-date-picker
-              v-model="form.feedbackTrialTime"
-              placeholder="选择反馈时间"
-              style="width: 100%"
-              type="date"
-              value-format="yyyy-MM-dd" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item :label="summarizeLabel" prop="feedbackTrialContent">
-            <el-input
-              v-model="form.feedbackTrialContent"
-              :placeholder="summarizeLabel"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="客户/经销商反馈" prop="feedbackTrialDist">
-            <el-input
-              v-model="form.feedbackTrialDist"
-              placeholder="客户/经销商反馈"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item :label="nextPlanLabel" prop="feedbackTrialPlan">
-            <el-input
-              v-model="form.feedbackTrialPlan"
-              :placeholder="nextPlanLabel"
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <template #footer>
-      <el-button @click="close">取 消</el-button>
-      <el-button type="primary" @click="save">确 定</el-button>
-    </template>
-  </el-dialog>
-</template>
-
-<script>
-  import workOrderApi from '@/api/work/index'
-  export default {
-    name: 'WorkOrderFeedback',
-    data() {
-      return {
-        workType: '',
-        fbType: '',
-        form: {
-          feedbackTrialTime: '',
-          feedbackTrialContent: '',
-          feedbackTrialDist: '',
-          feedbackTrialPlan: '',
-          workOrderId: '',
-        },
-        rules: {
-          feedbackTrialTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackTrialContent: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackTrialDist: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackTrialPlan: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-        },
-        feedbackTrialTypeObj: {
-          start: '10',
-          process: '20',
-          summarize: '30',
-        },
-        dialogFormVisible: false,
-      }
-    },
-    computed: {
-      summarizeLabel() {
-        let str = ''
-        switch (this.fbType) {
-          case 'start':
-            str = this.workType == '产品试用申请(软件)' ? '部署安装总结' : '会议总结'
-            break
-          case 'process':
-            str = '过程问题'
-            break
-          case 'summarize':
-            str = '使用总结'
-            break
-        }
-        return str
-      },
-      nextPlanLabel() {
-        let str = ''
-        switch (this.fbType) {
-          case 'start':
-            str = '跟进计划'
-            break
-          case 'process':
-            str = '跟进计划'
-            break
-          case 'summarize':
-            str = '下一步计划'
-            break
-        }
-        return str
-      },
-    },
-    mounted() {},
-    methods: {
-      open(row, type) {
-        console.log(row, type)
-        this.form.workOrderId = row.id
-        this.workType = row.orderTypeName
-        this.fbType = type
-        this.dialogFormVisible = true
-      },
-      close() {
-        this.$refs['form'].resetFields()
-        this.form = this.$options.data().form
-        this.dialogFormVisible = false
-      },
-      save() {
-        this.$refs['form'].validate(async (valid) => {
-          if (valid) {
-            let params = Object.assign(this.form)
-            params.feedbackTrialType = this.feedbackTrialTypeObj[this.fbType]
-            const { msg } = await workOrderApi.feedbackTrail(params)
-            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
-            this.$emit('update-detail')
-            this.close()
-          }
-        })
-      },
-    },
-  }
-</script>

+ 0 - 122
src/views/work/train/head/components/TryFeedbackDetail.vue

@@ -1,122 +0,0 @@
-<template>
-  <el-dialog title="试用反馈" :visible.sync="dialogFormVisible" width="600px" @close="close">
-    <el-form ref="form" label-position="top" :model="form" :rules="rules">
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="反馈时间" prop="feedbackTrialTime">
-            <el-date-picker
-              v-model="form.feedbackTrialTime"
-              placeholder="选择反馈时间"
-              readonly
-              style="width: 100%"
-              type="date"
-              value-format="yyyy-MM-dd" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item :label="summarizeLabel" prop="feedbackTrialContent">
-            <el-input
-              v-model="form.feedbackTrialContent"
-              :placeholder="summarizeLabel"
-              readonly
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="客户/经销商反馈" prop="feedbackTrialDist">
-            <el-input
-              v-model="form.feedbackTrialDist"
-              placeholder="客户/经销商反馈"
-              readonly
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item :label="nextPlanLabel" prop="feedbackTrialPlan">
-            <el-input
-              v-model="form.feedbackTrialPlan"
-              :placeholder="nextPlanLabel"
-              readonly
-              :rows="5"
-              show-word-limit
-              type="textarea" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <template #footer>
-      <el-button @click="close">取 消</el-button>
-    </template>
-  </el-dialog>
-</template>
-
-<script>
-  export default {
-    name: 'WorkOrderFeedback',
-    data() {
-      return {
-        workType: '',
-        fbType: '',
-        form: {},
-        rules: {
-          feedbackTrialTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackTrialContent: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackTrialDist: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          feedbackTrialPlan: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-        },
-        feedbackTrialTypeObj: {
-          start: '10',
-          process: '20',
-          summarize: '30',
-        },
-        dialogFormVisible: false,
-      }
-    },
-    computed: {
-      summarizeLabel() {
-        let str = ''
-        switch (this.form.feedbackTrialType) {
-          case '10':
-            str = '总结'
-            break
-          case '20':
-            str = '过程问题'
-            break
-          case '30':
-            str = '使用总结'
-            break
-        }
-        return str
-      },
-      nextPlanLabel() {
-        let str = ''
-        switch (this.form.feedbackTrialType) {
-          case '10':
-            str = '跟进计划'
-            break
-          case '20':
-            str = '跟进计划'
-            break
-          case '30':
-            str = '下一步计划'
-            break
-        }
-        return str
-      },
-    },
-    mounted() {},
-    methods: {
-      open(row) {
-        this.form = row
-        this.dialogFormVisible = true
-      },
-      close() {
-        this.dialogFormVisible = false
-      },
-    },
-  }
-</script>

+ 32 - 21
src/views/work/train/head/index.vue

@@ -57,24 +57,29 @@
           <el-button v-if="item.prop === 'id'" style="font-size: 14px" type="text" @click="handleDetail(row)">
             {{ row.id }}
           </el-button>
+          <span v-else-if="item.prop === 'trainTitle'">
+            <el-button type="text" @click="toDetail(row.id, 'detail')">{{ row.trainTitle }}</el-button>
+          </span>
           <span v-else-if="item.prop === 'createdTime'">
             {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
           </span>
           <span v-else-if="item.prop === 'trainDate'">
-            {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
+            {{ parseTime(row.trainDate, '{y}-{m}-{d}') }}
           </span>
-          <span v-else-if="item.prop === 'trainConcreteTime'">
-            {{ overdue(row.trainConcreteTime) }}
+          <span v-else-if="item.prop === 'trainConcreteStartTime'">
+            <!-- {{ parseTime(row.specificStartTime, ' {h}:{m}:{s}') }} -- -->
+            {{ parseTime(row.trainConcreteStartTime, '{h}:{i}') }}--
+            {{ parseTime(row.trainConcreteEndTime, '{h}:{i}') }}
           </span>
+          <!-- <span v-else-if="item.prop === 'trainConcreteEndTime'">
+           {{ parseTime(row.trainConcreteEndTime, ' {h}:{m}:{s}') }} 
+          </span> -->
           <span v-else>{{ row[item.prop] }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" fixed="right" label="操作" width="200">
         <template #default="{ row }">
-          <el-button type="text" @click="del(row.id)">删除</el-button>
-          <el-button type="text" @click="createOrder(row.id)">修改</el-button>
-          <el-button type="text" @click="toDetail(row.id,'edit')">反馈</el-button>
-          <el-button type="text" @click="toDetail(row.id,'detail')">详情</el-button>
+          <el-button type="text" @click="toFeedBack(row.id, 'edit')">反馈</el-button>
         </template>
       </el-table-column>
       <template #empty>
@@ -92,9 +97,10 @@
       @size-change="handleSizeChange" />
     <!--创建工单-->
     <edit ref="edit" @fetch-data="fetchData" />
-    <!-- 创建经销商支持工单 -->
+    <!-- 创建渠道支持工单 -->
     <createTrainHead ref="createTrainHead" @fetch-data="fetchData" />
-    <Detail ref="DetailRef" @fetch-data="fetchData" />
+    <FeedBackDetail ref="DetailRef" @fetch-data="fetchData" />
+    <Detail ref="ToDetailRef" @fetch-data="fetchData" />
   </div>
 </template>
 
@@ -104,11 +110,12 @@
   import TableTool from '@/components/table/TableTool'
   import Edit from './components/Edit'
   import createTrainHead from './components/CreateTrainHead'
+  import FeedBackDetail from './components/FeedBackDetail'
   import Detail from './components/Detail'
 
   export default {
     name: 'WorkOrder',
-    components: { TableTool, Edit, createTrainHead, Detail },
+    components: { TableTool, Edit, createTrainHead, FeedBackDetail, Detail },
     data() {
       return {
         activeName: 'first',
@@ -129,12 +136,12 @@
         showColumns: [],
         productLineOptions: [],
         columns: [
-          {
-            label: '工单编号',
-            width: '80px',
-            prop: 'id',
-            disableCheck: true,
-          },
+          // {
+          //   label: '工单编号',
+          //   width: '80px',
+          //   prop: 'id',
+          //   disableCheck: true,
+          // },
           {
             label: '培训主题',
             width: '320px',
@@ -148,8 +155,8 @@
           },
           {
             label: '培训具体时间',
-            width: '100px',
-            prop: 'trainConcreteTime',
+            width: '200px',
+            prop: 'trainConcreteStartTime',
           },
           {
             label: '创建时间',
@@ -178,9 +185,13 @@
       createOrder(id) {
         this.$refs['createTrainHead'].showEdit(id)
       },
-      toDetail(id,type) {
-        console.log("id",id);
-        this.$refs['DetailRef'].showEdit(id,type)
+      toFeedBack(id) {
+        console.log('id', id)
+        this.$refs['DetailRef'].showEdit(id)
+      },
+      toDetail(id) {
+        console.log('id', id)
+        this.$refs['ToDetailRef'].showEdit(id)
       },
       async del(id) {
         const [err, res] = await to(api.DeleteByIds({ ids: [id] }))