Edit.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" @close="close('form')">
  3. <el-form ref="form" label-width="120px" :model="form" :rules="rules">
  4. <el-row :gutter="20">
  5. <el-col :span="24">
  6. <el-form-item label="渠道名称" prop="distributorName">
  7. <el-input
  8. v-model="form.distributorName"
  9. readonly
  10. suffix-icon="el-icon-search"
  11. @focus="handleSelectDistributor" />
  12. </el-form-item>
  13. </el-col>
  14. <el-col :span="24">
  15. <el-form-item label="主营产品" prop="mainProduct">
  16. <el-input v-model="form.mainProduct" :rows="2" type="textarea" />
  17. </el-form-item>
  18. </el-col>
  19. <el-col :span="24">
  20. <el-form-item label="主要客户" prop="mainCustomer">
  21. <el-input v-model="form.mainCustomer" :rows="2" type="textarea" />
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="24">
  25. <el-form-item label="参训人员及职位" prop="trainees">
  26. <el-input v-model="form.trainees" :rows="2" type="textarea" />
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="24">
  30. <el-form-item label="期望培训日期" prop="expectTrainDate">
  31. <el-date-picker
  32. v-model="form.expectTrainDate"
  33. placeholder="选择期望培训日期"
  34. style="width: 100%"
  35. type="date"
  36. value-format="yyyy-MM-dd" />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="24">
  40. <el-form-item label="期望时间" prop="expectTime">
  41. <el-time-picker
  42. v-model="form.expectTime"
  43. end-placeholder="结束时间"
  44. format="HH:mm"
  45. is-range
  46. placeholder="选择时间范围"
  47. range-separator="至"
  48. start-placeholder="开始时间"
  49. style="width: 100%" />
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="24">
  53. <el-form-item label="培训主题" prop="trainTitle">
  54. <el-input v-model="form.trainTitle" />
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="24">
  58. <el-form-item label="讲师要求" prop="instructorRequire">
  59. <el-select v-model="form.instructorRequire" placeholder="请选择" style="width: 100%">
  60. <el-option v-for="item in options" :key="item.nickName" :label="item.nickName" :value="item.nickName" />
  61. </el-select>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="24">
  65. <el-form-item label="渠道关注要点" prop="focusPoint">
  66. <el-input v-model="form.focusPoint" :rows="2" type="textarea" />
  67. </el-form-item>
  68. </el-col>
  69. </el-row>
  70. </el-form>
  71. <template #footer>
  72. <el-button @click="close('form')">取 消</el-button>
  73. <el-button :loading="loading" type="primary" @click="save">确 定</el-button>
  74. </template>
  75. <!-- 选择经销商弹窗 -->
  76. <select-distributor ref="selectDistributor" @save="selectDistributor" />
  77. </el-dialog>
  78. </template>
  79. <script>
  80. import Api from '@/api/work/trainSale'
  81. import userApi from '@/api/system/user'
  82. import to from 'await-to-js'
  83. import SelectDistributor from '@/components/select/SelectDistributor'
  84. export default {
  85. name: 'WorkOrderEdit',
  86. components: { SelectDistributor },
  87. props: {
  88. businessInfo: {
  89. type: Object,
  90. default: () => {},
  91. },
  92. },
  93. data() {
  94. return {
  95. loading: false,
  96. form: {
  97. distributorName: undefined,
  98. mainProduct: undefined,
  99. mainCustomer: undefined,
  100. trainees: undefined,
  101. expectTrainDate: undefined,
  102. expectStartTime: undefined,
  103. expectEndTime: undefined,
  104. trainTitle: undefined,
  105. instructorRequire: undefined,
  106. focusPoint: undefined,
  107. expectTime: [new Date(2016, 9, 10, 0, 0), new Date(2016, 9, 10, 23, 59)],
  108. },
  109. rules: {
  110. distributorName: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  111. mainProduct: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  112. mainCustomer: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  113. trainees: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  114. expectTrainDate: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  115. expectTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  116. trainTitle: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  117. instructorRequire: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  118. focusPoint: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  119. },
  120. title: '',
  121. dialogTyte: '',
  122. dialogFormVisible: false,
  123. dingtalkForm: undefined,
  124. options: [],
  125. }
  126. },
  127. mounted() {},
  128. methods: {
  129. async getUser() {
  130. const [err, res] = await to(userApi.getList({ orderBy: 'userName', pageNum: 1, pageSize: 100, status: '10' }))
  131. if (err) return
  132. if (res.code == 200 && res.data) {
  133. this.options = res.data.list
  134. }
  135. },
  136. showEdit(row) {
  137. this.getUser()
  138. this.loading = false
  139. if (!row) {
  140. this.title = '添加'
  141. this.dialogTyte = 'add'
  142. } else {
  143. this.title = '编辑'
  144. this.dialogTyte = 'edit'
  145. this.form = Object.assign({}, row)
  146. let time = []
  147. time.push(new Date(this.form.expectStartTime), new Date(this.form.expectEndTime))
  148. this.form.expectTime = time
  149. }
  150. this.dialogFormVisible = true
  151. },
  152. close(formName) {
  153. this.$refs[formName].resetFields()
  154. this.form = this.$options.data().form
  155. if (this.dingtalkForm && this.dingtalkForm.items) {
  156. this.dingtalkForm.items.splice(0, this.dingtalkForm.items.length)
  157. }
  158. this.dialogFormVisible = false
  159. },
  160. handleSelectDistributor() {
  161. this.$refs.selectDistributor.open()
  162. },
  163. selectDistributor(val) {
  164. if (val && val.length > 0) {
  165. this.form.distributorId = val[0].id
  166. this.form.distributorName = val.map((item) => item.distName).join()
  167. }
  168. },
  169. save() {
  170. this.$refs['form'].validate(async (valid) => {
  171. if (valid) {
  172. let start = this.form.expectTime[0].setHours(this.form.expectTime[0].getHours() + 8)
  173. let end = this.form.expectTime[1].setHours(this.form.expectTime[1].getHours() + 8)
  174. this.form.expectStartTime = new Date(start)
  175. this.form.expectEndTime = new Date(end)
  176. if (this.dialogTyte === 'add') {
  177. const { msg } = await Api.doAdd(this.form)
  178. this.loading = false
  179. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  180. this.$emit('fetch-data')
  181. this.close('form')
  182. } else if (this.dialogTyte === 'edit') {
  183. const { msg } = await Api.doEdit(this.form)
  184. this.loading = false
  185. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  186. this.$emit('fetch-data')
  187. this.close('form')
  188. }
  189. } else {
  190. return false
  191. }
  192. })
  193. },
  194. },
  195. }
  196. </script>