|
|
@@ -1,72 +1,163 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
- <ul class="records" :style="{ height: height }">
|
|
|
+ <vab-query-form>
|
|
|
+ <vab-query-form-top-panel>
|
|
|
+ <el-form :inline="true" :model="queryForm" @submit.native.prevent>
|
|
|
+ <el-form-item label="项目名">
|
|
|
+ <el-input
|
|
|
+ v-model="queryForm.nboName"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ placeholder="请选择项目名"
|
|
|
+ @keyup.enter.native="fetchData" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工单类型">
|
|
|
+ <el-select
|
|
|
+ v-model="queryForm.orderTypeName"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ placeholder="请选择工单类型"
|
|
|
+ @change="fetchData">
|
|
|
+ <el-option v-for="user in orderTypeList" :key="user.val" :label="user.val" :value="user.val" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="分派人员">
|
|
|
+ <el-input
|
|
|
+ v-model="queryForm.assignUserName"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ placeholder="请输入分派人员"
|
|
|
+ @keyup.enter.native="fetchData" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="时间">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryForm.trialTime"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ style="width: 100%"
|
|
|
+ type="datetimerange"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ @change="fetchData" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button icon="el-icon-search" type="primary" @click="fetchData">查询</el-button>
|
|
|
+ <el-button icon="el-icon-refresh-right" @click="reset">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </vab-query-form-top-panel>
|
|
|
+ </vab-query-form>
|
|
|
+ <el-empty v-if="dynamicsList.length == 0" :image-size="200" />
|
|
|
+ <ul v-else class="records" :style="{ height: height }">
|
|
|
<li v-for="(v, index) in dynamicsList" :key="index">
|
|
|
<div class="date">
|
|
|
- {{ parseTime(v.createdTime, '{y}-{m}-{d}') }}
|
|
|
- <h2>{{ parseTime(v.createdTime, '{y}-{m}-{d}').split('-')[2] }}</h2>
|
|
|
- <h3>{{ parseTime(v.createdTime, '{y}-{m}-{d}').split('-').splice(0, 2).join('.') }}</h3>
|
|
|
+ <h2>{{ parseTime(v.updatedTime, '{y}-{m}-{d}').split('-')[2] }}</h2>
|
|
|
+ <h3>{{ parseTime(v.updatedTime, '{y}-{m}-{d}').split('-').splice(0, 2).join('.') }}</h3>
|
|
|
</div>
|
|
|
<ul class="content">
|
|
|
<li>
|
|
|
<vab-icon class="user-avatar" icon="account-circle-fill" />
|
|
|
<div class="text">
|
|
|
- <p class="action">{{ v.assignUserName }} {{ v.orderTypeName }}</p>
|
|
|
- <p>{{ parseTime(v.updatedTime, '{y}-{m}-{d}') }}</p>
|
|
|
+ <p class="action">{{ v.custName }} - {{ v.orderTypeName }} - {{ v.assignUserName }}</p>
|
|
|
<el-row
|
|
|
v-if="v.orderTypeName == '产品试用申请(硬件)' || v.orderTypeName == '产品试用申请(软件)'"
|
|
|
:gutter="20">
|
|
|
<el-col v-if="v.feedbackTrail" :span="24">
|
|
|
- <p class="tit">支持人员总结:</p>
|
|
|
- <el-descriptions
|
|
|
- v-for="(row, idx) in v.feedbackTrail"
|
|
|
- v-show="idx < (v.showLength ? v.showLength : 3)"
|
|
|
- :key="idx"
|
|
|
- border
|
|
|
- :column="2"
|
|
|
- :content-style="CS"
|
|
|
- :label-style="LS">
|
|
|
- <el-descriptions-item label="反馈时间">
|
|
|
- {{ row.feedbackTrialTime }} {{ v.showLength }}
|
|
|
- </el-descriptions-item>
|
|
|
- <el-descriptions-item label="试用反馈类型">
|
|
|
- {{ tryType[row.feedbackTrialType] }}
|
|
|
- </el-descriptions-item>
|
|
|
- <el-descriptions-item label="总结/问题">
|
|
|
- {{ row.feedbackTrialContent }}
|
|
|
- </el-descriptions-item>
|
|
|
- <el-descriptions-item label="客户/经销商反馈">
|
|
|
- {{ row.feedbackTrialDist }}
|
|
|
- </el-descriptions-item>
|
|
|
- <el-descriptions-item label="计划">
|
|
|
- {{ row.feedbackTrialPlan }}
|
|
|
- </el-descriptions-item>
|
|
|
- <el-descriptions-item label="更新时间">
|
|
|
- {{ parseTime(row.feedbackSupportTime, '{y}-{m}-{d}') }}
|
|
|
- </el-descriptions-item>
|
|
|
- </el-descriptions>
|
|
|
- <div v-if="v.feedbackTrail && v.feedbackTrail.length > 3" style="margin-top: 10px">
|
|
|
- <el-button size="mini" @click="changeLength(index, 3)">收起</el-button>
|
|
|
+ <p class="tit">试用开始反馈:</p>
|
|
|
+ <div v-for="(row, idx) in startList(v.feedbackTrail)" :key="idx">
|
|
|
+ <div>
|
|
|
+ <el-descriptions border :column="2" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions-item label="反馈时间">
|
|
|
+ {{ parseTime(row.feedbackTrialTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="更新时间">
|
|
|
+ {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ <el-descriptions border :column="1" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions-item label="总结/问题">
|
|
|
+ {{ row.feedbackTrialContent }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="客户/经销商反馈">
|
|
|
+ {{ row.feedbackTrialDist }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="计划">
|
|
|
+ {{ row.feedbackTrialPlan }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="v.feedbackTrail" :span="24">
|
|
|
+ <p class="tit">试用过程反馈:</p>
|
|
|
+ <div v-for="(row, idx) in processList(v.feedbackTrail)" :key="idx">
|
|
|
+ <div v-show="idx < (v.showLength ? v.showLength : 1)">
|
|
|
+ <el-descriptions border :column="2" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions-item label="反馈时间">
|
|
|
+ {{ parseTime(row.feedbackTrialTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="更新时间">
|
|
|
+ {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ <el-descriptions border :column="1" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions-item label="总结/问题">
|
|
|
+ {{ row.feedbackTrialContent }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="客户/经销商反馈">
|
|
|
+ {{ row.feedbackTrialDist }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="计划">
|
|
|
+ {{ row.feedbackTrialPlan }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="v.feedbackTrail && processList(v.feedbackTrail).length > 1" style="margin-top: 10px">
|
|
|
+ <el-button size="mini" @click="changeLength(index, 1)">收起</el-button>
|
|
|
<el-button size="mini" @click="changeLength(index, 999)">展开</el-button>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
+ <el-col v-if="v.feedbackTrail" :span="24">
|
|
|
+ <p class="tit">试用总结反馈:</p>
|
|
|
+ <div v-for="(row, idx) in endList(v.feedbackTrail)" :key="idx">
|
|
|
+ <div>
|
|
|
+ <el-descriptions border :column="2" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions-item label="反馈时间">
|
|
|
+ {{ parseTime(row.feedbackTrialTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="更新时间">
|
|
|
+ {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ <el-descriptions border :column="1" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions-item label="总结/问题">
|
|
|
+ {{ row.feedbackTrialContent }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="客户/经销商反馈">
|
|
|
+ {{ row.feedbackTrialDist }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="计划">
|
|
|
+ {{ row.feedbackTrialPlan }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
|
<el-row v-if="v.orderTypeName == '技术文件支持' || v.orderTypeName == '售前讲解支持'" :gutter="20">
|
|
|
<el-col v-if="v.feedbackSupportTime" :span="24">
|
|
|
<p class="tit">支持人员总结:</p>
|
|
|
- <el-descriptions border :column="2" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions border :column="1" :content-style="CS" :label-style="LS">
|
|
|
<el-descriptions-item label="反馈时间">{{ v.feedbackSupportTime }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="本次讲解情况反馈">
|
|
|
{{ v.feedbackSupportContent }}
|
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item label="更新时间">
|
|
|
- {{ parseTime(v.feedbackSupportTime, '{y}-{m}-{d}') }}
|
|
|
- </el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
</el-col>
|
|
|
<el-col v-if="v.feedbackSaleTime" :span="24">
|
|
|
<p class="tit">销售人员反馈:</p>
|
|
|
- <el-descriptions border :column="2" :content-style="CS" :label-style="LS">
|
|
|
+ <el-descriptions border :column="1" :content-style="CS" :label-style="LS">
|
|
|
<el-descriptions-item label="反馈时间">{{ v.feedbackSaleTime }}</el-descriptions-item>
|
|
|
<el-descriptions-item v-if="v.orderTypeName == '售前讲解支持'" label="会议纪要">
|
|
|
{{ v.feedbackSaleMeeting }}
|
|
|
@@ -80,9 +171,6 @@
|
|
|
<el-descriptions-item label="下一步计划">
|
|
|
{{ v.feedbackSaleNext }}
|
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item label="更新时间">
|
|
|
- {{ parseTime(v.feedbackSaleTime, '{y}-{m}-{d}') }}
|
|
|
- </el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -91,14 +179,6 @@
|
|
|
</ul>
|
|
|
</li>
|
|
|
</ul>
|
|
|
- <el-pagination
|
|
|
- background
|
|
|
- :current-page="queryForm.pageNum"
|
|
|
- :layout="layout"
|
|
|
- :page-size="queryForm.pageSize"
|
|
|
- :total="total"
|
|
|
- @current-change="handleCurrentChange"
|
|
|
- @size-change="handleSizeChange" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -110,49 +190,112 @@
|
|
|
data() {
|
|
|
return {
|
|
|
LS: {
|
|
|
- width: '15%',
|
|
|
+ width: '13%',
|
|
|
},
|
|
|
CS: {
|
|
|
- width: '35%',
|
|
|
+ width: '150px',
|
|
|
},
|
|
|
+ orderTypeList: [
|
|
|
+ {
|
|
|
+ val: '技术文件支持',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ val: '售前讲解支持',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ val: '产品试用申请(软件)',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ val: '产品试用申请(硬件)',
|
|
|
+ },
|
|
|
+ ],
|
|
|
tryType: {
|
|
|
10: '试用启动反馈',
|
|
|
20: '试用过程反馈',
|
|
|
30: '试用总结反馈',
|
|
|
},
|
|
|
- height: this.$baseTableHeight(0),
|
|
|
- layout: 'total, sizes, prev, pager, next, jumper',
|
|
|
- total: 0,
|
|
|
+ height: this.$baseTableHeight(1),
|
|
|
dynamicsList: [],
|
|
|
queryForm: {
|
|
|
- pageNum: 1,
|
|
|
- pageSize: 10,
|
|
|
+ nboName: '',
|
|
|
+ orderTypeName: '',
|
|
|
+ assignUserName: '',
|
|
|
+ trialTime: [this.getFirstDay(), this.getLastDay()],
|
|
|
+ updatedTimeStart: this.getFirstDay(),
|
|
|
+ updatedTimeEnd: this.getLastDay(),
|
|
|
},
|
|
|
}
|
|
|
},
|
|
|
+ computed: {
|
|
|
+ startList() {
|
|
|
+ return function (list) {
|
|
|
+ return list.filter((item) => item.feedbackTrialType == 10)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ processList() {
|
|
|
+ return function (list) {
|
|
|
+ return list.filter((item) => item.feedbackTrialType == 20)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ endList() {
|
|
|
+ return function (list) {
|
|
|
+ return list.filter((item) => item.feedbackTrialType == 30)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
mounted() {
|
|
|
this.fetchData()
|
|
|
+ console.log(this.getFirstDay(), this.getLastDay())
|
|
|
},
|
|
|
methods: {
|
|
|
+ getFirstDay() {
|
|
|
+ var y = new Date().getFullYear() //获取年份
|
|
|
+ var m = new Date().getMonth() + 1 //获取月份
|
|
|
+ var d = '01'
|
|
|
+ m = m < 10 ? '0' + m : m //月份补 0
|
|
|
+
|
|
|
+ return [y, m, d].join('-') + ' 00:00:00'
|
|
|
+ },
|
|
|
+ getLastDay() {
|
|
|
+ var y = new Date().getFullYear() //获取年份
|
|
|
+ var m = new Date().getMonth() + 1 //获取月份
|
|
|
+ var d = new Date(y, m, 0).getDate() //获取当月最后一日
|
|
|
+ m = m < 10 ? '0' + m : m //月份补 0
|
|
|
+ d = d < 10 ? '0' + d : d //日数补 0
|
|
|
+
|
|
|
+ return [y, m, d].join('-') + ' 00:00:00'
|
|
|
+ },
|
|
|
+ reset() {
|
|
|
+ this.queryForm = {
|
|
|
+ nboName: '',
|
|
|
+ orderTypeName: '',
|
|
|
+ assignUserName: '',
|
|
|
+ trialTime: [this.getFirstDay(), this.getLastDay()],
|
|
|
+ updatedTimeStart: this.getFirstDay(),
|
|
|
+ updatedTimeEnd: this.getLastDay(),
|
|
|
+ }
|
|
|
+ this.fetchData()
|
|
|
+ },
|
|
|
changeLength(index, length) {
|
|
|
this.$set(this.dynamicsList[index], 'showLength', length)
|
|
|
},
|
|
|
async fetchData() {
|
|
|
- const [err, res] = await to(workApi.getListFull(this.queryForm))
|
|
|
+ let params = this.queryForm
|
|
|
+ console.log(params)
|
|
|
+ if (params.trialTime && params.trialTime.length == 2) {
|
|
|
+ params.updatedTimeStart = params.trialTime[0]
|
|
|
+ params.updatedTimeEnd = params.trialTime[1]
|
|
|
+ } else {
|
|
|
+ params.updatedTimeStart = ''
|
|
|
+ params.updatedTimeEnd = ''
|
|
|
+ }
|
|
|
+ const [err, res] = await to(workApi.getListFull(params))
|
|
|
if (err) return
|
|
|
if (res.code == 200) {
|
|
|
this.dynamicsList = res.data.list
|
|
|
this.total = res.data.total
|
|
|
}
|
|
|
},
|
|
|
- handleSizeChange(val) {
|
|
|
- this.queryForm.pageSize = val
|
|
|
- this.fetchData()
|
|
|
- },
|
|
|
- handleCurrentChange(val) {
|
|
|
- this.queryForm.pageNum = val
|
|
|
- this.fetchData()
|
|
|
- },
|
|
|
},
|
|
|
}
|
|
|
</script>
|