index.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <zj-page-container>
  3. <zj-page-fill class="neibuview">
  4. <zj-form-container ref="formRef" :form-data="orderInfo" :form-attributes="{ size: 'mini' }">
  5. <zj-form-module
  6. title="预单信息"
  7. label-width="110px"
  8. :form-data="orderInfo"
  9. :form-items="serviceInfo"
  10. ></zj-form-module>
  11. <zj-form-module
  12. title="已选工单"
  13. label-width="100px"
  14. :form-data="orderInfo"
  15. :form-items="selectedItems"
  16. ></zj-form-module>
  17. </zj-form-container>
  18. </zj-page-fill>
  19. <!-- 操作按钮 -->
  20. <div>
  21. <div style="box-sizing: border-box; padding: 16px; text-align: right">
  22. <el-button size="mini" @click="$emit('close')"> 取消 </el-button>
  23. <el-button type="primary" size="mini" @click="allVerify"> 确定 </el-button>
  24. </div>
  25. </div>
  26. </zj-page-container>
  27. </template>
  28. <script>
  29. import showRecordSelected from '../mixins/showRecordSelected.js'
  30. import { required } from '@/components/template/rules_verify.js'
  31. import { changeOrderChangeAppointmentTime } from '@/api/workOrderPool.js'
  32. import { addHours } from '@/utils/common.js'
  33. export default {
  34. mixins: [showRecordSelected],
  35. data() {
  36. return {
  37. orderInfo: {
  38. appointmentTime: '',
  39. appointmentEndTime: '',
  40. recordSelected: [],
  41. remark: ''
  42. }
  43. }
  44. },
  45. computed: {
  46. serviceInfo() {
  47. return [
  48. // {
  49. // isShow: this.formOptions.appointmentTime.isShow,
  50. // name: 'el-date-picker',
  51. // md: 8,
  52. // attributes: {
  53. // disabled: !this.formOptions.appointmentTime.isEdit,
  54. // style: { width: '100%' },
  55. // placeholder: '请选择',
  56. // 'value-format': 'yyyy-MM-dd HH:mm:ss',
  57. // 'picker-options': {
  58. // disabledDate: time => {
  59. // return time.getTime() < Date.now() - 86400000
  60. // }
  61. // }
  62. // },
  63. // formItemAttributes: {
  64. // label: '预约上门日期',
  65. // prop: 'appointmentTime',
  66. // rules: this.formOptions.appointmentTime.isRules
  67. // }
  68. // },
  69. {
  70. isShow: this.formOptions.appointmentTime.isShow,
  71. name: 'el-date-picker',
  72. md: 8,
  73. attributes: {
  74. disabled: !this.formOptions.appointmentTime.isEdit,
  75. 'picker-options': 'pickerOptions11',
  76. 'popper-class': 'custom-popper11',
  77. 'append-to-body': true,
  78. style: { width: '100%' },
  79. type: 'datetime',
  80. placeholder: '请选择',
  81. 'value-format': 'yyyy-MM-dd HH:mm:ss',
  82. 'picker-options': {
  83. disabledDate: time => {
  84. return time.getTime() < Date.now() - 86400000
  85. }
  86. }
  87. },
  88. events: {
  89. change: value => {
  90. if (value && new Date(value).getTime() < new Date().getTime() - 2000) {
  91. this.orderInfo.appointmentTime = ''
  92. this.$message.warning('必须大于当前时间')
  93. } else {
  94. this.orderInfo.appointmentEndTime = ''
  95. }
  96. }
  97. },
  98. formItemAttributes: {
  99. label: '预约开始时间',
  100. prop: 'appointmentTime',
  101. rules: this.formOptions.appointmentTime.isRules
  102. }
  103. },
  104. {
  105. isShow: this.formOptions.appointmentTime.isShow,
  106. name: 'el-date-picker',
  107. md: 8,
  108. attributes: {
  109. disabled: !this.formOptions.appointmentTime.isEdit,
  110. 'picker-options': 'pickerOptions11',
  111. 'popper-class': 'custom-popper11',
  112. 'append-to-body': true,
  113. style: { width: '100%' },
  114. type: 'datetime',
  115. placeholder: '请选择',
  116. 'value-format': 'yyyy-MM-dd HH:mm:ss',
  117. 'picker-options': {
  118. disabledDate: time => {
  119. var data = this.orderInfo?.appointmentTime?.split(' ')?.[0]
  120. return (
  121. time.getTime() < new Date(data ? `${data} 00:00:00` : '').getTime() ||
  122. time.getTime() > new Date(data ? `${data} 00:00:00` : '').getTime()
  123. )
  124. }
  125. }
  126. },
  127. events: {
  128. change: value => {
  129. if (value && new Date(value).getTime() < new Date().getTime() - 2000) {
  130. this.orderInfo.appointmentEndTime = ''
  131. this.$message.warning('必须大于当前时间')
  132. } else if (value && new Date(value).getTime() < new Date(this.orderInfo?.appointmentTime).getTime()) {
  133. this.orderInfo.appointmentTime = value
  134. }
  135. }
  136. },
  137. formItemAttributes: {
  138. label: '预约结束时间',
  139. prop: 'appointmentEndTime',
  140. rules: this.formOptions.appointmentTime.isRules
  141. }
  142. },
  143. {
  144. name: 'el-input',
  145. md: 24,
  146. attributes: {
  147. type: 'textarea',
  148. rows: 3,
  149. placeholder: '请输入'
  150. },
  151. formItemAttributes: {
  152. label: '备注',
  153. prop: 'remark'
  154. }
  155. }
  156. ]
  157. },
  158. formOptions() {
  159. return {
  160. appointmentTime: {
  161. isEdit: true,
  162. isShow: true,
  163. isRules: [...required]
  164. }
  165. }
  166. }
  167. },
  168. methods: {
  169. allVerify() {
  170. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  171. if (valid) {
  172. changeOrderChangeAppointmentTime({
  173. ids: this.orderInfo.recordSelected.map(item => item.id),
  174. appointmentTime: this.orderInfo.appointmentTime,
  175. appointmentEndTime: this.orderInfo.appointmentEndTime,
  176. remark: this.orderInfo.remark
  177. }).then(res => {
  178. this.$message({
  179. type: 'success',
  180. message: '约单成功!'
  181. })
  182. this.$emit('close')
  183. })
  184. }
  185. })
  186. }
  187. }
  188. }
  189. </script>
  190. <style lang="scss" scoped>
  191. .neibuview {
  192. box-sizing: border-box;
  193. padding-left: 16px;
  194. ::v-deep & > .zj-page-fill-scroll {
  195. box-sizing: border-box;
  196. padding-right: 16px;
  197. & > div:nth-child(1) {
  198. margin-top: 20px;
  199. }
  200. }
  201. }
  202. </style>