浏览代码

feature(工单申请/销售):工单申请/销售前端页面修改

yanglingling 1 年之前
父节点
当前提交
45ecbafc8f

+ 26 - 21
src/views/work/train/sale/components/Edit.vue

@@ -27,30 +27,26 @@
           </el-form-item>
         </el-col>
         <el-col :span="24">
-          <el-form-item label="培训日期" prop="trainingDate">
+          <el-form-item label="期望培训日期" prop="expectTrainDate">
             <el-date-picker
-              v-model="form.trainingDate"
-              placeholder="选择培训日期"
+              v-model="form.expectTrainDate"
+              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="specificTime">
-            <el-date-picker
-              v-model="form.specificStartTime"
-              placeholder="开始时间"
-              style="width: 45%"
-              type="datetime"
-              value-format="yyyy-MM-dd HH:ss:mm" />
-            -
-            <el-date-picker
-              v-model="form.specificEndTime"
-              placeholder="结束时间"
-              style="width: 45%"
-              type="datetime"
-              value-format="yyyy-MM-dd HH:ss:mm" />
+          <el-form-item label="期望时间" prop="expectTime">
+            <el-time-picker
+              v-model="form.expectTime"
+              end-placeholder="结束时间"
+              format="HH:mm"
+              is-range
+              placeholder="选择时间范围"
+              range-separator="至"
+              start-placeholder="开始时间"
+              style="width: 100%" />
           </el-form-item>
         </el-col>
         <el-col :span="24">
@@ -100,19 +96,21 @@
           mainProduct: undefined,
           mainCustomer: undefined,
           trainees: undefined,
-          trainingDate: undefined,
-          specificStartTime: undefined,
-          specificEndTime: undefined,
+          expectTrainDate: undefined,
+          expectStartTime: undefined,
+          expectEndTime: undefined,
           trainTitle: undefined,
           instructorRequire: undefined,
           focusPoint: undefined,
+          expectTime: [new Date(2016, 9, 10, 0, 0), new Date(2016, 9, 10, 23, 59)],
         },
         rules: {
           distributorName: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           mainProduct: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           mainCustomer: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           trainees: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          trainingDate: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+          expectTrainDate: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+          expectTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           trainTitle: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           instructorRequire: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           focusPoint: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
@@ -134,6 +132,9 @@
           this.title = '编辑'
           this.dialogTyte = 'edit'
           this.form = Object.assign({}, row)
+          let time = []
+          time.push(new Date(this.form.expectStartTime), new Date(this.form.expectEndTime))
+          this.form.expectTime = time
         }
         this.dialogFormVisible = true
       },
@@ -157,6 +158,10 @@
       save() {
         this.$refs['form'].validate(async (valid) => {
           if (valid) {
+            let start = this.form.expectTime[0].setHours(this.form.expectTime[0].getHours() + 8)
+            let end = this.form.expectTime[1].setHours(this.form.expectTime[1].getHours() + 8)
+            this.form.expectStartTime = new Date(start)
+            this.form.expectEndTime = new Date(end)
             if (this.dialogTyte === 'add') {
               const { msg } = await Api.doAdd(this.form)
               this.loading = false

+ 34 - 27
src/views/work/train/sale/components/details.vue

@@ -3,35 +3,34 @@
     <el-dialog :title="title" :visible.sync="dialogFormVisible" @close="close">
       <el-form ref="form" :model="form" style="margin-top: -24px">
         <el-row :gutter="20" style="margin: 0px">
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="渠道名称:" style="margin: 0px">
               {{ form.distributorName }}
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="主营产品:" style="margin: 0px">
               {{ form.mainProduct }}
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="主要客户:" style="margin: 0px">
               {{ form.mainCustomer }}
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="参训人员:" style="margin: 0px">
               {{ form.trainees }}
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="培训日期:" style="margin: 0px">
-              {{ parseTime(form.trainingDate, '{y}-{m}-{d}') }}
+            <el-form-item label="期望培训日期:" style="margin: 0px">
+              {{ parseTime(form.expectTrainDate, '{y}-{m}-{d}') }}
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="具体时间:" style="margin: 0px">
-              {{ parseTime(form.specificStartTime, '{y}-{m}-{d}') }} 至
-              {{ parseTime(form.specificEndTime, '{y}-{m}-{d}') }}
+            <el-form-item label="期望时间:" style="margin: 0px">
+              {{ parseTime(form.expectStartTime, '{h}:{i}') }} - {{ parseTime(form.expectEndTime, '{h}:{i}') }}
             </el-form-item>
           </el-col>
           <el-col :span="24">
@@ -39,7 +38,7 @@
               {{ form.trainTitle }}
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="讲师要求:" style="margin: 0px">
               {{ form.instructorRequire }}
             </el-form-item>
@@ -49,12 +48,27 @@
               {{ form.focusPoint }}
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item v-if="form.trainInstructor != ''" label="培训讲师:" style="margin: 0px">
+              {{ form.trainInstructor }}
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item v-if="form.trainDate != ''" label="培训日期:" style="margin: 0px">
+              {{ parseTime(form.trainDate, '{y}-{m}-{d}') }}
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item v-if="form.specificStartTime != ''" label="培训时间:" style="margin: 0px">
+              {{ parseTime(form.specificStartTime, '{h}:{i}') }} - {{ parseTime(form.specificEndTime, '{h}:{i}') }}
+            </el-form-item>
+          </el-col>
           <el-col :span="24">
             <el-table ref="productTable" :data="list" style="width: 100%; margin-top: 10px">
-              <el-table-column label="讲解时长" prop="explainDuration" />
-              <el-table-column label="提问记录" prop="questionRecord" />
-              <el-table-column label="培训效果总结" prop="trainingSummary" />
-              <el-table-column label="下一步工作计划" prop="nextStep" />
+              <el-table-column label="讲解时长" prop="explainDuration" show-overflow-tooltip />
+              <el-table-column label="提问记录" prop="questionRecord" show-overflow-tooltip />
+              <el-table-column label="培训效果总结" prop="trainSummary" show-overflow-tooltip />
+              <el-table-column label="下一步工作计划" prop="nextStep" show-overflow-tooltip />
             </el-table>
           </el-col>
         </el-row>
@@ -83,7 +97,11 @@
           mainProduct: undefined,
           mainCustomer: undefined,
           trainees: undefined,
-          trainingDate: undefined,
+          expectTrainDate: undefined,
+          expectStartTime: undefined,
+          expectEndTime: undefined,
+          trainInstructor: undefined,
+          trainDate: undefined,
           specificStartTime: undefined,
           specificEndTime: undefined,
           trainTitle: undefined,
@@ -101,18 +119,7 @@
         this.id = row.id
         this.theProgress = row
         this.title = '详情'
-        this.form = {
-          distributorName: row.distributorName,
-          mainProduct: row.mainProduct,
-          mainCustomer: row.mainCustomer,
-          trainees: row.trainees,
-          trainingDate: row.trainingDate,
-          specificStartTime: row.specificStartTime,
-          specificEndTime: row.specificEndTime,
-          trainTitle: row.trainTitle,
-          instructorRequire: row.instructorRequire,
-          focusPoint: row.focusPoint,
-        }
+        this.form = row
         this.getOrderDetails()
         this.dialogFormVisible = true
       },

+ 15 - 6
src/views/work/train/sale/components/finish.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog title="总结" :visible.sync="dialogFormVisible" @close="close">
+  <el-dialog title="反馈" :visible.sync="dialogFormVisible" @close="close">
     <el-form ref="form" :model="form" :rules="rules">
       <el-row :gutter="20">
         <el-col :span="24">
@@ -13,8 +13,8 @@
           </el-form-item>
         </el-col>
         <el-col :span="24">
-          <el-form-item label="培训效果总结" prop="trainingSummary">
-            <el-input v-model="form.trainingSummary" :rows="2" type="textarea" />
+          <el-form-item label="培训效果总结" prop="trainSummary">
+            <el-input v-model="form.trainSummary" :rows="2" type="textarea" />
           </el-form-item>
         </el-col>
         <el-col :span="24">
@@ -40,12 +40,15 @@
       return {
         form: {
           orderId: undefined,
-          finishRemark: undefined,
+          explainDuration: undefined,
+          questionRecord: undefined,
+          trainSummary: undefined,
+          nextStep: undefined,
         },
         rules: {
           explainDuration: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           questionRecord: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
-          trainingSummary: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
+          trainSummary: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
           nextStep: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
         },
         dialogFormVisible: false,
@@ -54,7 +57,13 @@
     mounted() {},
     methods: {
       showEdit(row) {
-        this.form.applyId = row.id
+        this.form = {
+          applyId: row.id,
+          explainDuration: undefined,
+          questionRecord: undefined,
+          trainSummary: undefined,
+          nextStep: undefined,
+        }
         this.dialogFormVisible = true
       },
       close() {

+ 136 - 0
src/views/work/train/sale/components/sure.vue

@@ -0,0 +1,136 @@
+<template>
+  <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" @close="close('form')">
+    <el-form ref="form" label-width="120px" :model="form" :rules="rules">
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="培训讲师" prop="trainInstructor">
+            <el-input v-model="form.trainInstructor" :rows="2" type="textarea" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="培训日期" prop="trainDate">
+            <el-date-picker
+              v-model="form.trainDate"
+              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="specificTime">
+            <el-time-picker
+              v-model="form.specificTime"
+              end-placeholder="结束时间"
+              format="HH:mm"
+              is-range
+              placeholder="选择时间范围"
+              range-separator="至"
+              start-placeholder="开始时间"
+              style="width: 100%" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template #footer>
+      <el-button @click="close('form')">取 消</el-button>
+      <el-button :loading="loading" type="primary" @click="save">确 定</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+  import Api from '@/api/work/trainSale'
+
+  export default {
+    name: 'WorkOrderEdit',
+    props: {
+      businessInfo: {
+        type: Object,
+        default: () => {},
+      },
+    },
+    data() {
+      return {
+        loading: false,
+        form: {
+          trainInstructor: undefined,
+          trainDate: undefined,
+          specificStartTime: undefined,
+          specificEndTime: undefined,
+          specificTime: [new Date(2016, 9, 10, 0, 0), new Date(2016, 9, 10, 23, 59)],
+        },
+        rules: {
+          trainInstructor: [{ required: true, message: '不能为空', trigger: ['blur'] }],
+          trainDate: [{ required: true, message: '不能为空', trigger: ['change'] }],
+          specificTime: [{ required: true, message: '不能为空', trigger: ['change'] }],
+        },
+        title: '',
+        dialogTyte: '',
+        dialogFormVisible: false,
+        dingtalkForm: undefined,
+      }
+    },
+    mounted() {},
+    methods: {
+      showEdit(row) {
+        this.loading = false
+        if (!row) {
+          this.title = '添加'
+          this.dialogTyte = 'add'
+        } else {
+          this.title = '确认'
+          this.dialogTyte = 'edit'
+          this.form = Object.assign({}, row)
+          this.form.trainInstructor = row.instructorRequire
+          this.form.trainDate = row.expectTrainDate
+          this.form.specificTime = [new Date(row.expectStartTime), new Date(row.expectEndTime)]
+        }
+        this.dialogFormVisible = true
+      },
+      close(formName) {
+        this.$refs[formName].resetFields()
+        this.form = this.$options.data().form
+        if (this.dingtalkForm && this.dingtalkForm.items) {
+          this.dingtalkForm.items.splice(0, this.dingtalkForm.items.length)
+        }
+        this.dialogFormVisible = false
+      },
+      handleSelectDistributor() {
+        this.$refs.selectDistributor.open()
+      },
+      selectDistributor(val) {
+        if (val && val.length > 0) {
+          this.form.distributorId = val[0].id
+          this.form.distributorName = val.map((item) => item.distName).join()
+        }
+      },
+      save() {
+        this.$refs['form'].validate(async (valid) => {
+          if (valid) {
+            let start = this.form.specificTime[0].setHours(this.form.specificTime[0].getHours() + 8)
+            let end = this.form.specificTime[1].setHours(this.form.specificTime[1].getHours() + 8)
+            this.form.specificStartTime = new Date(start)
+            this.form.specificEndTime = new Date(end)
+            if (this.dialogTyte === 'add') {
+              const { msg } = await Api.doAdd(this.form)
+              this.loading = false
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+              this.$emit('fetch-data')
+              this.close('form')
+            } else if (this.dialogTyte === 'edit') {
+              this.form.applyType = '20'
+              const { msg } = await Api.doEdit(this.form)
+              this.loading = false
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+              this.$emit('fetch-data')
+              this.close('form')
+            }
+          } else {
+            return false
+          }
+        })
+      },
+    },
+  }
+</script>

+ 79 - 18
src/views/work/train/sale/index.vue

@@ -12,7 +12,7 @@
     <vab-query-form>
       <vab-query-form-left-panel :span="12">
         <el-button
-          v-permissions="['work:order:add']"
+          v-permissions="['work:sale:add']"
           icon="el-icon-plus"
           size="mini"
           type="primary"
@@ -40,21 +40,51 @@
         :sortable="item.sortable"
         :width="item.width">
         <template #default="{ row }">
-          <span v-if="item.prop === 'trainingDate'">
-            {{ parseTime(row.trainingDate, '{y}-{m}-{d}') }}
+          <el-button
+            v-if="item.prop === 'distributorName'"
+            style="font-size: 14px"
+            type="text"
+            @click="handleDetail(row)">
+            {{ row.distributorName }}
+          </el-button>
+          <span v-else-if="item.prop === 'expectTrainDate'">
+            {{ parseTime(row.expectTrainDate, '{y}-{m}-{d}') }}
           </span>
-          <span v-else-if="item.prop === 'specificTime'">
-            {{ parseTime(row.specificStartTime, '{y}-{m}-{d} {h}:{m}:{s}') }} -
-            {{ parseTime(row.specificEndTime, '{y}-{m}-{d} {h}:{m}:{s}') }}
+          <span v-else-if="item.prop === 'expectTime'">
+            {{ parseTime(row.expectStartTime, '{h}:{i}') }} -
+            {{ parseTime(row.expectEndTime, '{h}:{i}') }}
+          </span>
+          <span v-else-if="item.prop === 'trainDate' && row.trainDate != ''">
+            {{ parseTime(row.trainDate, '{y}-{m}-{d}') }}
+          </span>
+          <span v-else-if="item.prop === 'specificTime' && row.specificStartTime != ''">
+            {{ parseTime(row.specificStartTime, '{h}:{i}') }} -
+            {{ parseTime(row.specificEndTime, '{h}:{i}') }}
+          </span>
+          <span v-else-if="item.prop === 'applyType'">
+            <el-tag v-if="row.applyType == '10'">已提交</el-tag>
+            <el-tag v-else-if="row.applyType == '20'" type="warning">已确认</el-tag>
+            <el-tag v-else-if="row.applyType == '30'" type="success">总结完成</el-tag>
           </span>
           <span v-else>{{ row[item.prop] }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" fixed="right" label="操作" width="120">
         <template #default="{ row }">
-          <el-button type="text" @click="handleDetail(row)">查看</el-button>
-          <el-button type="text" @click="createOrder(row, 'edit')">编辑</el-button>
-          <el-button v-if="row.assess == 'yes'" type="text" @click="handleFinish(row)">总结</el-button>
+          <el-button
+            v-if="row.applyType == '10'"
+            v-permissions="['work:sale:edit']"
+            type="text"
+            @click="sureOrder(row, 'edit')">
+            确认
+          </el-button>
+          <el-button
+            v-if="row.applyType == '20'"
+            v-permissions="['work:sale:sure']"
+            type="text"
+            @click="handleFinish(row)">
+            反馈
+          </el-button>
         </template>
       </el-table-column>
       <template #empty>
@@ -74,6 +104,8 @@
     <finish ref="finish" @fetch-data="restFetchData" />
     <!-- 创建工单 -->
     <order-edit ref="order-edit" @fetch-data="restFetchData" />
+    <!-- 确认 -->
+    <Sure ref="sure" @fetch-data="restFetchData" />
     <!-- 详情 -->
     <Details ref="details" />
   </div>
@@ -86,16 +118,18 @@
   import { mapGetters } from 'vuex'
   import orderEdit from '@/views/work/train/sale/components/Edit'
   import Details from '@/views/work/train/sale/components/details'
+  import Sure from '@/views/work/train/sale/components/sure'
 
   export default {
     name: 'WorkOrder',
-    components: { Finish, Details, orderEdit },
+    components: { Finish, Details, orderEdit, Sure },
     data() {
       return {
         activeName: 'first',
         layout: 'total, sizes, prev, pager, next, jumper',
         queryForm: {
           distributorId: 0,
+          createdBy: 0,
           mainProduct: '',
           pageNum: 1,
           pageSize: 10,
@@ -122,18 +156,18 @@
           },
           {
             label: '参训人员',
-            width: '100px',
+            width: '200px',
             prop: 'trainees',
           },
           {
-            label: '培训日期',
-            width: '100px',
-            prop: 'trainingDate',
+            label: '期望培训日期',
+            width: '120px',
+            prop: 'expectTrainDate',
           },
           {
-            label: '具体时间',
-            width: '300px',
-            prop: 'specificTime',
+            label: '期望时间',
+            width: '120px',
+            prop: 'expectTime',
           },
           {
             label: '培训主题',
@@ -142,7 +176,7 @@
           },
           {
             label: '讲师要求',
-            width: '120px',
+            width: '200px',
             prop: 'instructorRequire',
           },
           {
@@ -150,6 +184,26 @@
             width: '280px',
             prop: 'focusPoint',
           },
+          {
+            label: '培训讲师',
+            width: '200px',
+            prop: 'trainInstructor',
+          },
+          {
+            label: '培训日期',
+            width: '120px',
+            prop: 'trainDate',
+          },
+          {
+            label: '培训时间',
+            width: '120px',
+            prop: 'specificTime',
+          },
+          {
+            label: '申请状态',
+            width: '120px',
+            prop: 'applyType',
+          },
         ],
         deliveryStatusOptions: [],
         productLineOptions: [],
@@ -158,6 +212,7 @@
     computed: {
       ...mapGetters({
         userId: 'user/id',
+        roleKeys: 'user/roleKeys',
       }),
     },
     activated() {
@@ -171,12 +226,18 @@
       createOrder(val, type) {
         this.$refs['order-edit'].showEdit(val, type)
       },
+      sureOrder(val, type) {
+        this.$refs['sure'].showEdit(val, type)
+      },
       restFetchData() {
         this.queryForm.pageNum = 1
         this.fetchData()
       },
       async fetchData() {
         this.listLoading = true
+        if (this.roleKeys.includes('SalesEngineer')) {
+          this.queryForm.createdBy = this.userId
+        }
         const params = { ...this.queryForm }
         const [err, res] = await to(Api.getList({ ...params }))
         this.listLoading = false