Detail.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <template>
  2. <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" @close="close">
  3. <el-descriptions class="margin-top" :column="2" border>
  4. <el-descriptions-item>
  5. <template slot="label">培训主题</template>
  6. {{ detail.trainTitle }}
  7. </el-descriptions-item>
  8. <el-descriptions-item>
  9. <template slot="label">培训日期</template>
  10. {{ detail.trainDate }}
  11. </el-descriptions-item>
  12. <el-descriptions-item>
  13. <template slot="label">培训开始时间</template>
  14. {{ detail.trainConcreteStartTime }}
  15. </el-descriptions-item>
  16. <el-descriptions-item>
  17. <template slot="label">培训结束时间</template>
  18. {{ detail.trainConcreteEndTime }}
  19. </el-descriptions-item>
  20. </el-descriptions>
  21. <vxe-table
  22. ref="feedBackRef"
  23. class="mt10"
  24. border
  25. resizable
  26. show-overflow
  27. :data="detail.feedbackDetailList"
  28. :edit-config="{ trigger: 'click', mode: 'cell' }"
  29. style="height: 300px">
  30. <vxe-column type="seq" width="60" />
  31. <vxe-column field="saleName" title="销售工程师" width="100" />
  32. <vxe-column field="distributorName" title="渠道名称" width="100" />
  33. <vxe-column field="trainingPersNum" title="参训人数" width="100">
  34. <template #default="{ row }" v-if="type == 'edit'">
  35. <vxe-input
  36. v-model.number="row.trainingPersNum"
  37. type="text"
  38. :disabled="type == 'detail'"
  39. placeholder="请输入参训人数" />
  40. </template>
  41. <template #default="{ row }" v-else>
  42. {{ row.trainingPersNum }}
  43. </template>
  44. </vxe-column>
  45. <vxe-column field="distributorFeedback" title="经销商反馈">
  46. <template #default="{ row }" v-if="type == 'edit'">
  47. <vxe-input
  48. v-model="row.distributorFeedback"
  49. type="text"
  50. :disabled="type == 'detail'"
  51. placeholder="请输入经销商反馈" />
  52. </template>
  53. <template #default="{ row }" v-else>
  54. {{ row.distributorFeedback }}
  55. </template>
  56. </vxe-column>
  57. </vxe-table>
  58. <template #footer>
  59. <el-button @click="close">取 消</el-button>
  60. <el-button v-if="!form.id" :loading="loading" type="primary" @click="save">确 定</el-button>
  61. </template>
  62. <!-- 选择支持人员弹窗 -->
  63. <select-user ref="selectUser" @save="selectUser" />
  64. <!-- 选择经销商弹窗 -->
  65. <select-distributor ref="selectDistributor" :multiple="true" :query-params="queryParams" @save="saveDistributors" />
  66. </el-dialog>
  67. </template>
  68. <script>
  69. import api from '@/api/work/trainHead'
  70. import to from 'await-to-js'
  71. import typeApi from '@/api/work/type'
  72. import SelectUser from '@/components/select/SelectUser'
  73. import { mapGetters } from 'vuex'
  74. import SelectDistributor from '@/components/select/SelectDistributor'
  75. export default {
  76. name: 'WorkOrderEdit',
  77. components: {
  78. SelectUser,
  79. SelectDistributor,
  80. },
  81. props: {
  82. businessInfo: {
  83. type: Object,
  84. default: () => {},
  85. },
  86. },
  87. data() {
  88. return {
  89. sexList: [
  90. { distributorId: 1, distributorName: 'a' },
  91. { distributorId: 2, distributorName: 'b' },
  92. { distributorId: 3, distributorName: 'c' },
  93. ],
  94. userList: [
  95. { saleId: 1, saleName: '工程师1' },
  96. { saleId: 2, saleName: '工程师2' },
  97. { saleId: 3, saleName: '工程师3' },
  98. ],
  99. type: '',
  100. row: {},
  101. index: 0,
  102. queryParams: {
  103. distType: '',
  104. },
  105. loading: false,
  106. form: {
  107. id: undefined,
  108. trainTitle: undefined,
  109. trainDate: undefined,
  110. trainConcreteStartTime: undefined,
  111. trainConcreteEndTime: undefined,
  112. feedbackList: [],
  113. },
  114. rules: {
  115. trainTitle: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  116. trainDate: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  117. trainConcreteStartTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  118. trainConcreteEndTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  119. },
  120. title: '',
  121. dialogFormVisible: false,
  122. orderTypeList: [],
  123. dingtalkForm: undefined,
  124. detail: {
  125. id: '',
  126. trainTitle: '',
  127. trainDate: '',
  128. trainConcreteStartTime: '',
  129. trainConcreteEndTime: '',
  130. feedbackDetailList: [],
  131. },
  132. }
  133. },
  134. computed: {
  135. ...mapGetters({
  136. userId: 'user/id',
  137. nickName: 'user/nickName',
  138. }),
  139. },
  140. mounted() {},
  141. methods: {
  142. DeleteData(row) {
  143. const $table = this.$refs.feedBackRef
  144. $table.remove(row)
  145. },
  146. createFeedBack() {
  147. const $table = this.$refs.feedBackRef
  148. $table.insertAt(
  149. {
  150. sale: {},
  151. distributorList: [],
  152. },
  153. 0
  154. )
  155. // if (this.form.feedbackList == undefined) {
  156. // this.form.feedbackList = []
  157. // }
  158. // this.form.feedbackList.push({
  159. // saleId: '',
  160. // saleName: '',
  161. // distributorId: '',
  162. // distributorName: '',
  163. // })
  164. },
  165. deleteFeedBack(row) {
  166. // const index = this.form.feedbackList.findIndex((item) => {
  167. // item == row
  168. // })
  169. // this.form.feedbackList.splice(index, 1)
  170. const $table = this.$refs.feedBackRef
  171. $table.remove(row)
  172. },
  173. async getOrderTypeList() {
  174. this.orderTypeList.splice(0, this.orderTypeList.length)
  175. const { data } = await typeApi.getList()
  176. for (let item of data.list) {
  177. this.orderTypeList.push(item)
  178. }
  179. this.changeOrderType()
  180. },
  181. changeOrderType() {},
  182. // handleUploadFile(file) {
  183. // this.form.file = file
  184. // },
  185. handleSelectUser(rowIndex) {
  186. // Object.assign(this.row, rowIndex)
  187. this.index = rowIndex
  188. // const index = this.form.feedbackList.findIndex(item=>{
  189. // item==row
  190. // })
  191. this.$refs.selectUser.open()
  192. },
  193. selectUser(val) {
  194. if (val && val.length > 0) {
  195. // const $table = this.$refs.feedBackRef
  196. // const index = this.form.feedbackList.findIndex((item) => {
  197. // item == this.row
  198. // })
  199. this.$refs.feedBackRef.updateData(this.index, { saleId: val[0].id })
  200. this.$refs.feedBackRef.updateData(this.index, { saleName: val.map((item) => item.nickName).join() })
  201. console.log(' this.$refs.feedBackRef', this.$refs.feedBackRef)
  202. let data = this.$refs.feedBackRef.getRecordset()
  203. console.log('data', data)
  204. // this.row.saleId = val[0].id
  205. // this.row.saleName = val.map((item) => item.nickName).join()
  206. // this.$refs.feedBackRef.reload()
  207. // console.log('index', this.index)
  208. // console.log("val-------",val);
  209. // console.log("item",this.row);
  210. // console.log('this.form.feedbackList[index]', this.form.feedbackList[index])
  211. // this.row.saleId = val[0].id
  212. // this.row.saleName = val.map((item) => item.nickName).join()
  213. // this.form.feedbackList[this.index] = {
  214. // saleId: val[0].id,
  215. // saleName: val.map((item) => item.nickName).join(),
  216. // distributorId: this.row.distributorId,
  217. // distributorName: this.row.distributorName,
  218. // }
  219. console.log('this.form.feedbackList', this.form.feedbackList)
  220. console.log('row222', this.row)
  221. }
  222. },
  223. async showEdit(id, type) {
  224. console.log('id222', id)
  225. console.log('type', type)
  226. this.loading = false
  227. if (type == 'edit') {
  228. this.title = '反馈'
  229. } else {
  230. this.title = '详情'
  231. }
  232. this.type = type
  233. // this.form.saleId = this.userId
  234. // this.form.saleName = this.nickName
  235. this.listLoading = true
  236. const [err, res] = await to(api.getFeedBackDetail({ id: id }))
  237. if (err) return (this.listLoading = false)
  238. this.detail = res.data || {}
  239. // this.$nextTick(() => this.$refs.table.doLayout())
  240. this.dialogFormVisible = true
  241. },
  242. close() {
  243. // this.$refs['dingTalkFrom'].resetForm()
  244. // this.$refs['form'].resetFields()
  245. this.form = this.$options.data().form
  246. this.dialogFormVisible = false
  247. },
  248. //
  249. handleSelectDistributor(type) {
  250. this.queryParams.distType = type
  251. this.$refs.selectDistributor.open()
  252. },
  253. // 选中数据
  254. saveDistributors() {},
  255. async save() {
  256. // const $table = this.$refs.feedBackRef
  257. // let insertList = $table.getInsertRecords()
  258. // let removeList = $table.getRemoveRecords()
  259. // let updateList = $table.getUpdateRecords()
  260. // if (insertList.length > 0) {
  261. // insertList.map((item) => (item.operate = '10'))
  262. // }
  263. // if (updateList.length > 0) {
  264. // updateList.map((item) => (item.operate = '20'))
  265. // }
  266. // if (removeList.length > 0) {
  267. // removeList.map((item) => (item.operate = '30'))
  268. // }
  269. console.log('detail.feedbackDetailList', this.detail.feedbackDetailList)
  270. // this.detail.feedbackDetailList = [...insertList, ...updateList, ...removeList]
  271. // console.log(" this.detail.feedbackDetailList", this.detail.feedbackDetailList);
  272. // return
  273. const { msg } = await api.FeedBackTrain({ feedBackTrainList: this.detail.feedbackDetailList })
  274. // this.loading = false
  275. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  276. this.$emit('fetch-data')
  277. this.close()
  278. },
  279. },
  280. }
  281. </script>