StatutoryLeaveModal.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <template>
  2. <j-modal
  3. :title="title"
  4. :width="800"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. switchFullscreen
  8. @ok="handleOk"
  9. @cancel="handleCancel"
  10. cancelText="关闭">
  11. <a-spin :spinning="confirmLoading">
  12. <a-form :form="form">
  13. <a-form-item
  14. :labelCol="labelCol"
  15. :wrapperCol="wrapperCol"
  16. label="假期名称">
  17. <a-input :maxLength="10" placeholder="请输入假期名称" v-decorator="['name', validatorRules.name]" style="width: 180px;"/>
  18. </a-form-item>
  19. <a-form-item
  20. :labelCol="labelCol"
  21. :wrapperCol="wrapperCol"
  22. label="假期类型">
  23. <a-select placeholder="请选择假期类型" v-model="type" :getPopupContainer= "(target) => target.parentNode">
  24. <a-select-option value="1">班</a-select-option>
  25. <a-select-option value="2">休</a-select-option>
  26. </a-select>
  27. </a-form-item>
  28. <a-form-item
  29. :labelCol="labelCol"
  30. :wrapperCol="wrapperCol"
  31. label="法">
  32. <a-select placeholder="请选择" v-model="isF" :getPopupContainer= "(target) => target.parentNode">
  33. <a-select-option value="2">否</a-select-option>
  34. <a-select-option value="1">是</a-select-option>
  35. </a-select>
  36. </a-form-item>
  37. <a-form-item
  38. :labelCol="labelCol"
  39. :wrapperCol="wrapperCol"
  40. label="假期时间">
  41. <a-date-picker format='YYYY-MM-DD' v-decorator="[ 'startDate', validatorRules.startDate]" />
  42. </a-form-item>
  43. <!-- <a-form-item
  44. :labelCol="labelCol"
  45. :wrapperCol="wrapperCol"
  46. label="假期结束时间">
  47. <a-date-picker :disabled-date="disabledDate" format='YYYY-MM-DD' v-decorator="[ 'endDate', validatorRules.endDate]" />
  48. </a-form-item> -->
  49. <a-form-item
  50. :labelCol="labelCol"
  51. :wrapperCol="wrapperCol"
  52. label="日薪资倍数" >
  53. <a-input-number id="inputNumber" :min="1" placeholder="请输入日薪资倍数" v-decorator="['sum',{}]" style="width: 180px;"/>
  54. </a-form-item>
  55. </a-form>
  56. </a-spin>
  57. </j-modal>
  58. </template>
  59. <script>
  60. import { httpAction,getAction } from '@/api/manage'
  61. import pick from 'lodash.pick'
  62. import moment from "moment"
  63. export default {
  64. name: "StatutoryLeaveModal",
  65. data () {
  66. return {
  67. title:"操作",
  68. visible: false,
  69. type:"2",
  70. id:null,
  71. isF:"2",
  72. model: {},
  73. date:null,
  74. labelCol: {
  75. xs: { span: 24 },
  76. sm: { span: 5 },
  77. },
  78. wrapperCol: {
  79. xs: { span: 24 },
  80. sm: { span: 16 },
  81. },
  82. confirmLoading: false,
  83. form: this.$form.createForm(this),
  84. validatorRules:{
  85. name:{
  86. rules: [{
  87. required: true, message: '请输入假期名称!'
  88. }]
  89. },
  90. startDate:{
  91. rules: [{
  92. required: true, message: '请选择开始时间!'
  93. },
  94. {validator: this.validatestartDate}
  95. ]
  96. },
  97. endDate:{
  98. rules: [{
  99. required: true, message: '请选择结束时间!'
  100. },
  101. {validator: this.validateendDate}
  102. ]
  103. }
  104. },
  105. url: {
  106. add: "/statutoryleave/statutoryLeave/add",
  107. edit: "/statutoryleave/statutoryLeave/edit",
  108. getOne:"/statutoryleave/statutoryLeave/queryByDate"
  109. },
  110. }
  111. },
  112. created () {
  113. },
  114. methods: {
  115. disabledDate(current) {
  116. var startDate= this.form.getFieldValue('startDate');
  117. return current < moment(startDate).subtract(0, 'day');
  118. },
  119. add () {
  120. this.edit({});
  121. },
  122. validateendDate(rule, value, callback) {
  123. if (!value) {
  124. callback()
  125. } else {
  126. callback()
  127. this.date=2;
  128. this.queryDate(value.format('YYYY-MM-DD HH:mm:ss'))
  129. }
  130. },
  131. validatestartDate(rule, value, callback) {
  132. if (!value) {
  133. callback()
  134. } else {
  135. callback()
  136. this.date=1;
  137. this.queryDate(value.format('YYYY-MM-DD HH:mm:ss'))
  138. var end=this.form.getFieldValue('endDate');
  139. if(end!=null){
  140. var start=new Date(value);
  141. var ends=new Date(end);
  142. if(ends.getTime()<start.getTime()){
  143. this.form.setFieldsValue({
  144. endDate:null
  145. })
  146. }
  147. }
  148. }
  149. },
  150. queryDate(e,a){
  151. getAction(this.url.getOne,{startDate:e,id:this.id}).then((res)=>{
  152. if(res.success){
  153. if(res.result!=null){
  154. if(this.date==1){
  155. this.form.setFieldsValue({
  156. startDate:null
  157. })
  158. }else{
  159. this.form.setFieldsValue({
  160. endDate:null
  161. })
  162. }
  163. this.$message.warning("该时间段存在假期!");
  164. }
  165. }
  166. })
  167. },
  168. edit (record) {
  169. this.form.resetFields();
  170. if(record.type!=null&&record.type!=""){
  171. if(record.type=='班'){
  172. this.type="1";
  173. }else{
  174. this.type="2";
  175. }
  176. }
  177. this.model = Object.assign({}, record);
  178. this.visible = true;
  179. this.id=record.id;
  180. if(record.isF!=null&&record.isF!=""){
  181. this.isF=record.isF;
  182. }
  183. this.$nextTick(() => {
  184. this.form.setFieldsValue(pick(this.model,'name','sum'))
  185. //时间格式化
  186. this.form.setFieldsValue({startDate:this.model.startDate?moment(this.model.startDate):null})
  187. this.form.setFieldsValue({endDate:this.model.endDate?moment(this.model.endDate):null})
  188. });
  189. },
  190. close () {
  191. this.$emit('close');
  192. this.visible = false;
  193. this.type="2";
  194. this.isF='2';
  195. },
  196. handleOk () {
  197. const that = this;
  198. // 触发表单验证
  199. this.form.validateFields((err, values) => {
  200. if (!err) {
  201. that.confirmLoading = true;
  202. let httpurl = '';
  203. let method = '';
  204. if(!this.model.id){
  205. httpurl+=this.url.add;
  206. method = 'post';
  207. }else{
  208. httpurl+=this.url.edit;
  209. method = 'put';
  210. }
  211. let formData = Object.assign(this.model, values);
  212. //时间格式化
  213. formData.startDate = formData.startDate?formData.startDate.format('YYYY-MM-DD HH:mm:ss'):null;
  214. //formData.endDate = formData.endDate?formData.endDate.format('YYYY-MM-DD HH:mm:ss'):null;
  215. formData.type=this.type;
  216. formData.isF=this.isF;
  217. httpAction(httpurl,formData,method).then((res)=>{
  218. if(res.success){
  219. that.$message.success(res.message);
  220. that.$emit('ok');
  221. }else{
  222. that.$message.warning(res.message);
  223. }
  224. }).finally(() => {
  225. that.confirmLoading = false;
  226. that.close();
  227. })
  228. }
  229. })
  230. },
  231. handleCancel () {
  232. this.close()
  233. },
  234. }
  235. }
  236. </script>
  237. <style lang="less" scoped>
  238. </style>