add-dispatch-dialog.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <template>
  2. <my-dialog
  3. :visible="visible"
  4. :header="`${isEdit ? '修改' : '新增'}派单`"
  5. :width="840"
  6. :closeOnOverlayClick="false"
  7. attach="body"
  8. @close="emit('update:visible', false)"
  9. >
  10. <t-form ref="formRef" :data="formData" :rules="rules" labelWidth="120px">
  11. <t-row :gutter="[0, 20]">
  12. <t-col :span="6">
  13. <t-form-item label="项目单号" name="crmNo">
  14. <t-input v-model="formData.crmNo" clearable></t-input>
  15. </t-form-item>
  16. </t-col>
  17. <t-col :span="6">
  18. <t-form-item label="项目名称" name="name">
  19. <t-input v-model="formData.name" clearable></t-input>
  20. </t-form-item>
  21. </t-col>
  22. <t-col :span="6">
  23. <t-form-item label="派单时间" name="beginTime">
  24. <t-date-picker
  25. v-model="formData.beginTime"
  26. value-type="time-stamp"
  27. enable-time-picker
  28. format="YYYY/MM/DD HH:mm"
  29. :time-picker-props="{ format: 'HH:mm' }"
  30. />
  31. </t-form-item>
  32. </t-col>
  33. <t-col :span="6">
  34. <t-form-item label="客户经理" name="crmUserId">
  35. <select-type-user
  36. v-model="formData.crmUserId"
  37. type="ACCOUNT_MANAGER"
  38. ></select-type-user>
  39. </t-form-item>
  40. </t-col>
  41. <t-col :span="6">
  42. <t-form-item label="客户类型" name="customType">
  43. <t-select v-model="formData.customType" @change="customTypeChange">
  44. <t-option
  45. v-for="(val, key) in CUSTOMER_TYPE"
  46. :key="key"
  47. :label="val"
  48. :value="key"
  49. />
  50. </t-select>
  51. </t-form-item>
  52. </t-col>
  53. <t-col :span="6">
  54. <t-form-item label="客户名称" name="customId">
  55. <select-customer
  56. v-model="formData.customId"
  57. :type="formData.customType"
  58. type-required
  59. ></select-customer>
  60. </t-form-item>
  61. </t-col>
  62. <t-col :span="6">
  63. <t-form-item label="考试开始时间">
  64. <t-date-picker
  65. v-model="formData.examStartTime"
  66. value-type="time-stamp"
  67. enable-time-picker
  68. format="YYYY/MM/DD HH:mm"
  69. :time-picker-props="{ format: 'HH:mm' }"
  70. />
  71. </t-form-item>
  72. </t-col>
  73. <t-col :span="6">
  74. <t-form-item label="考试结束时间">
  75. <t-date-picker
  76. v-model="formData.examEndTime"
  77. value-type="time-stamp"
  78. enable-time-picker
  79. format="YYYY/MM/DD HH:mm"
  80. :time-picker-props="{ format: 'HH:mm' }"
  81. />
  82. </t-form-item>
  83. </t-col>
  84. <t-col :span="6">
  85. <t-form-item label="实施产品" name="productId">
  86. <select-product
  87. v-model="formData.productId"
  88. clearable
  89. :productType="formData.customType"
  90. ></select-product>
  91. </t-form-item>
  92. </t-col>
  93. <t-col :span="6">
  94. <t-form-item label="服务单元">
  95. <select-service-unit
  96. v-if="visible"
  97. v-model="formData.serviceId"
  98. :filterParams="{
  99. statusList: ['PUBLISH'],
  100. type: formData.customType,
  101. }"
  102. ></select-service-unit>
  103. </t-form-item>
  104. </t-col>
  105. </t-row>
  106. </t-form>
  107. <template #foot>
  108. <t-button theme="default" @click="emit('update:visible', false)"
  109. >取消</t-button
  110. >
  111. <t-button theme="primary" @click="save">保存</t-button>
  112. </template>
  113. </my-dialog>
  114. </template>
  115. <script setup name="AddDispatchDialog">
  116. import { ref } from 'vue';
  117. import { MessagePlugin } from 'tdesign-vue-next';
  118. import useClearDialog from '@/hooks/useClearDialog';
  119. import { dispatchEditApi } from '@/api/service-unit';
  120. import { CUSTOMER_TYPE } from '@/config/constants';
  121. const props = defineProps({
  122. visible: Boolean,
  123. curRow: Object,
  124. });
  125. const emit = defineEmits(['update:visible']);
  126. const formRef = ref(null);
  127. const { formData, isEdit } = useClearDialog(
  128. {
  129. id: null,
  130. crmNo: '',
  131. name: '',
  132. beginTime: null,
  133. serviceId: null,
  134. crmUserId: null,
  135. customType: null,
  136. customId: null,
  137. examStartTime: null,
  138. examEndTime: null,
  139. productId: null,
  140. leadId: null,
  141. },
  142. props,
  143. formRef,
  144. () => {
  145. for (let key in formData) {
  146. formData[key] = props.curRow[key];
  147. }
  148. }
  149. );
  150. const rules = {
  151. crmNo: [
  152. {
  153. required: true,
  154. message: '项目单号必填',
  155. type: 'error',
  156. trigger: 'change',
  157. },
  158. {
  159. max: 100,
  160. message: '至多需要100个字',
  161. type: 'error',
  162. trigger: 'change',
  163. },
  164. ],
  165. name: [
  166. {
  167. required: true,
  168. message: '项目名称必填',
  169. type: 'error',
  170. trigger: 'change',
  171. },
  172. {
  173. max: 100,
  174. message: '至多需要100个字',
  175. type: 'error',
  176. trigger: 'change',
  177. },
  178. ],
  179. beginTime: [
  180. {
  181. required: true,
  182. message: '派单时间必选',
  183. type: 'error',
  184. trigger: 'change',
  185. },
  186. ],
  187. crmUserId: [
  188. {
  189. required: true,
  190. message: '客户经理必选',
  191. type: 'error',
  192. trigger: 'change',
  193. },
  194. ],
  195. customType: [
  196. {
  197. required: true,
  198. message: '客户类型必选',
  199. type: 'error',
  200. trigger: 'change',
  201. },
  202. ],
  203. customId: [
  204. {
  205. required: true,
  206. message: '客户必选',
  207. type: 'error',
  208. trigger: 'change',
  209. },
  210. ],
  211. productId: [
  212. {
  213. required: true,
  214. message: '实施产品必选',
  215. type: 'error',
  216. trigger: 'change',
  217. },
  218. ],
  219. };
  220. const customTypeChange = () => {
  221. formData.customId = null;
  222. };
  223. const save = async () => {
  224. if (formData.examStartTime > formData.examEndTime) {
  225. MessagePlugin.error('考试开始时间不得迟于考试结束时间');
  226. return;
  227. }
  228. const valid = await formRef.value.validate();
  229. if (valid !== true) return;
  230. const res = await dispatchEditApi(formData).catch(() => {});
  231. if (!res) return;
  232. MessagePlugin.success('保存成功');
  233. emit('update:visible', false);
  234. emit('success');
  235. };
  236. </script>