Form.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. <template>
  2. <div>
  3. <common @asynCallBack="asynCallBack"></common>
  4. <top-header :pageTitle="pageTitle"></top-header>
  5. <div class="mui-content margin60">
  6. <div class="mui-content-padded vongi-qingjiadt vongi-editme">
  7. <form class="mui-input-group">
  8. <div class="mui-input-row">
  9. <label><i class="colorfe616c">*</i> 出差地点</label>
  10. <input type="text" v-model="subForm.destination" class="mui-input-clear" placeholder="请填写地点名称">
  11. </div>
  12. </form>
  13. </div>
  14. <div class="mui-content-padded vongi-qingjiadt vongi-editme">
  15. <form class="mui-input-group">
  16. <div class="mui-input-row">
  17. <label><i class="colorfe616c">*</i> 开始时间</label>
  18. <button @click="selectStartTime" class="mui-btn mui-btn-block mui-navigate-right mui-ellipsis" type='button' style="width:65%">
  19. {{subForm.startTimeShow}}{{subForm.startTimeQuantum=='0'?' 00:00':''}}{{subForm.startTimeQuantum=='1'?' 12:00':''}}
  20. </button>
  21. </div>
  22. <div class="mui-input-row">
  23. <label><i class="colorfe616c">*</i> 结束时间</label>
  24. <button @click="selectEndTime" class="mui-btn mui-btn-block mui-navigate-right mui-ellipsis" type='button' style="width:65%">
  25. {{subForm.endTimeShow}}{{subForm.endTimeQuantum=='0'?' 11:59':''}}{{subForm.endTimeQuantum=='1'?' 23:59':''}}
  26. </button>
  27. </div>
  28. <div class="mui-input-row vongi-dw">
  29. <label><i class="colorfe616c"></i> 出差天数</label>
  30. <span>{{subForm.days}}天</span>
  31. </div>
  32. </form>
  33. </div>
  34. <div class="vongi-meform-pho mui-content-padded">
  35. <h4><i class="colorfe616c">*</i> 出差事由</h4>
  36. <div class="mui-input-row">
  37. <textarea v-model="subForm.content" rows="5" placeholder="请填写出差事由"></textarea>
  38. </div>
  39. </div>
  40. <div class="mui-content-padded vongi-qingjiadt vongi-editme">
  41. <form class="mui-input-group">
  42. <div class="mui-input-row">
  43. <label><i class="colorfe616c"></i> 审批人</label>
  44. <button class="mui-btn mui-btn-block mui-ellipsis" type='button' style="width:65%">
  45. {{examinePerson.name}}
  46. </button>
  47. </div>
  48. </form>
  49. </div>
  50. </div>
  51. <div class="fyy-footer">
  52. <div class="bindfyy-btn">
  53. <button class="mui-btn " style="width: 50%;" :class="examinePerson.name?'mui-btn-success':'mui-btn-grey'" type="submit" @click="submit(0)">
  54. <i icon="mui-icon mui-icon-compose"></i>保存草稿
  55. </button>
  56. <button class="mui-btn " style="width: 50%;" :class="examinePerson.name?'mui-btn-primary':'mui-btn-grey'" type="submit" @click="submit(1)">
  57. 提交
  58. </button>
  59. </div>
  60. </div>
  61. <loading :visible="isLoading"></loading>
  62. </div>
  63. </template>
  64. <script>
  65. import * as API_sp from '@/apis-xsy/xsy'
  66. require('$project/assets/js/mui.picker.min.js');
  67. import * as API_BusinessTravel from '@/apis/Master/business_travel'
  68. import Common from '$project/components/Common.vue'
  69. import Loading from '$project/components/Loading.vue'
  70. import TopHeader from '$project/components/TopHeader.vue'
  71. import {
  72. mapGetters,
  73. mapMutations
  74. } from 'vuex'
  75. import {
  76. daysDistance,
  77. currentTimeStamp,
  78. parseUnixTime
  79. } from '$project/utils'
  80. export default {
  81. name: 'MasterBusinessTravelForm',
  82. components: {
  83. Common,
  84. Loading,
  85. TopHeader,
  86. },
  87. data() {
  88. return {
  89. pageTitle: '出差申请单',
  90. examinePerson:{},
  91. isLoading: false,
  92. id:"",
  93. subForm: {
  94. type: '3',
  95. destination: '',
  96. startTimeShow: '请选择',
  97. startTime: '请选择',
  98. endTimeShow: '请选择',
  99. endTime: '请选择',
  100. startTimeQuantum:'',
  101. endTimeQuantum:'',
  102. days:'',
  103. estimatedTime: '',
  104. content: '',
  105. approvalPersonId: '',
  106. formId: "travelWork",
  107. },
  108. approvalPersonList: [],
  109. //补卡1,外出2,出差3 ,请假4
  110. personForm: {
  111. type: '3'
  112. }
  113. }
  114. },
  115. created() {
  116. //this.subForm.startTime = parseUnixTime(currentTimeStamp(), '{y}-{m}-{d} {h}:{i}');
  117. this.id=this.$route.query.id
  118. },
  119. methods: {
  120. //获取详情
  121. getInfo() {
  122. if(!this.id){
  123. return
  124. }
  125. this.isLoading = true;
  126. API_BusinessTravel.businessOutDetail(this.id).then(response => {
  127. this.isLoading = false;
  128. this.subForm.ids=this.id
  129. this.subForm = {...this.subForm,...response};
  130. // this.detail.sp=true
  131. // this.detail.statusName=this.detail.statusN
  132. // this.detail.name=this.detail.personName
  133. // this.detail.text=this.detail.typeN+"申请"
  134. // this.$emit('getInfo',this.detail);
  135. this.subForm.startTimeShow=this.subForm.startTime.split(" ")[0];
  136. this.subForm.endTimeShow=this.subForm.endTime.split(" ")[0];
  137. if(this.subForm.startTime.indexOf(" 00:00")>-1){
  138. this.subForm.startTimeQuantum="0"
  139. }else{
  140. this.subForm.startTimeQuantum="1"
  141. }
  142. if(this.subForm.endTime.indexOf(" 11:59")>-1){
  143. this.subForm.endTimeQuantum="0"
  144. }else{
  145. this.subForm.endTimeQuantum="1"
  146. }
  147. this.updatePersonByTime()
  148. }).catch(error => {
  149. this.isLoading = false;
  150. mui.toast(error);
  151. })
  152. },
  153. getExaminePerson(){
  154. API_sp.examinePerson(this.subForm.formId).then(response => {
  155. this.examinePerson=response
  156. }).catch(error => {
  157. mui.toast(error);
  158. })
  159. },
  160. selectEndTime() {
  161. var _this = this;
  162. if (_this.subForm.startTimeShow == '请选择') {
  163. mui.toast('请选择开始日期');
  164. return;
  165. }
  166. var beginDate = new Date(_this.subForm.startTimeShow);
  167. var endTime = _this.subForm.endTimeShow == '请选择' ? null : _this.subForm.endTimeShow;
  168. var picker = new mui.DtPicker({
  169. "type": "hour",
  170. "beginYear": 2020,
  171. "endYear": 2040,
  172. "beginDate": beginDate,
  173. "value":endTime,
  174. "customData":{"h":[{"text":"11:59","value":"0"},{"text":"23:59","value":"1"}]}
  175. });
  176. var _mui=mui;
  177. picker.show(function(selectItems) {
  178. var year = selectItems.y.value;
  179. var month = selectItems.m.value;
  180. var day = selectItems.d.value;
  181. var curDate = year + "-" + month + "-" + day;
  182. if(curDate==_this.subForm.startTimeShow&&_this.subForm.startTimeQuantum=='1'&&selectItems.h.value=='0'){
  183. //debugger
  184. _mui.alert('结束日期不能小于开始日期');
  185. return false;
  186. }
  187. _this.subForm.endTimeShow = curDate;
  188. _this.subForm.endTimeQuantum = selectItems.h.value;
  189. _this.updatePersonByTime();
  190. });
  191. },
  192. updatePersonByTime(){
  193. if(this.subForm.startTimeShow=='请选择'||this.subForm.endTimeShow=='请选择'){
  194. return;
  195. }
  196. var i= daysDistance(this.subForm.startTimeShow,this.subForm.endTimeShow);
  197. var day=i+(this.subForm.endTimeQuantum-this.subForm.startTimeQuantum)*0.5+0.5
  198. this.subForm.days=day;
  199. this.subForm.estimatedTime=day;
  200. },
  201. //选择时间
  202. selectStartTime() {
  203. var _this = this;
  204. var startTime = _this.subForm.startTimeShow == '请选择' ? null : _this.subForm.startTimeShow;
  205. var picker = new mui.DtPicker({
  206. "type": "hour",
  207. "beginYear": 2020,
  208. "endYear": 2040,
  209. //"beginDate": new Date(),
  210. "value": startTime,
  211. "customData":{"h":[{"text":"00:00","value":"0"},{"text":"12:00","value":"1"}]}
  212. });
  213. var _mui=mui;
  214. picker.show(function(selectItems) {
  215. var year = selectItems.y.value;
  216. var month = selectItems.m.value;
  217. var day = selectItems.d.value;
  218. var curDate = year + "-" + month + "-" + day;
  219. if(curDate==_this.subForm.endTimeShow&&_this.subForm.endTimeQuantum=='0'&&selectItems.h.value=='1'){
  220. //debugger
  221. _mui.alert('开始日期必须大于结束日期');
  222. return false;
  223. }
  224. _this.subForm.startTimeShow = curDate;
  225. _this.subForm.startTimeQuantum = selectItems.h.value;
  226. });
  227. },
  228. //选择日期
  229. selectData() {
  230. var _this = this;
  231. var picker = new mui.DtPicker({
  232. "type": "datetime",
  233. "beginYear": 2020,
  234. "endYear": 2040,
  235. "beginDate": new Date(),
  236. "value": _this.subForm.startTime
  237. });
  238. picker.show(function(rs) {
  239. _this.subForm.startTime = rs.text;
  240. picker.dispose();
  241. });
  242. },
  243. //表单检测
  244. checkForm() {
  245. if (this.subForm.startTimeShow=='请选择') {
  246. mui.toast('请选择出差日期');
  247. return false;
  248. } else if (!this.subForm.destination) {
  249. mui.toast('请填写出差地点');
  250. return false;
  251. } else if (!this.subForm.estimatedTime) {
  252. mui.toast('请填写出差天数');
  253. return false;
  254. } else if (this.subForm.estimatedTime%0.5!=0) {
  255. mui.toast('出差天数需要为0.5的倍数');
  256. return false;
  257. }else if (!this.subForm.content) {
  258. mui.toast('请填写申请理由');
  259. return false;
  260. } else if (false) {
  261. mui.toast('请选择审批人');
  262. return false;
  263. } else {
  264. return true;
  265. }
  266. },
  267. //提交
  268. submit(status) {
  269. this.subForm.draft=status;
  270. if(!this.examinePerson.name){
  271. return;
  272. }
  273. if (this.checkForm()) {
  274. this.subForm.startTime=this.subForm.startTimeShow+
  275. (this.subForm.startTimeQuantum=='0'?' 00:00':' 12:00')
  276. this.subForm.endTime=this.subForm.endTimeShow+
  277. (this.subForm.endTimeQuantum=='0'?' 11:59':' 23:59')
  278. this.isLoading = true;
  279. API_BusinessTravel.submitBusiness(this.subForm).then(response => {
  280. this.isLoading = false;
  281. if(this.subForm.draft){
  282. mui.toast('提交成功');
  283. this.$router.replace({
  284. name: "XsyApprovalInfo",
  285. query:{id:response.id,formId:'travelWork'}
  286. })
  287. }else{
  288. mui.toast('保存成功');
  289. this.subForm.ids=response.id;
  290. this.id=response.id
  291. }
  292. }).catch(error => {
  293. this.isLoading = false;
  294. mui.toast(error);
  295. })
  296. }
  297. },
  298. asynCallBack() {
  299. },
  300. },
  301. mounted() {
  302. this.getInfo();
  303. //获取审核人列表
  304. this.getExaminePerson();
  305. },
  306. destroyed() {},
  307. computed: {
  308. approvalPersonName: {
  309. // getter
  310. get: function() {
  311. for (var i = 0; i < this.approvalPersonList.length; i++) {
  312. if (this.approvalPersonList[i]['value'] == this.subForm.approvalPersonId) {
  313. return this.approvalPersonList[i]['text'];
  314. }
  315. }
  316. return '请选择';
  317. },
  318. // setter
  319. set: function(newValue) {
  320. console.log(newValue)
  321. }
  322. },
  323. ...mapGetters({
  324. openId: 'wx_openid',
  325. token: 'token',
  326. })
  327. },
  328. }
  329. </script>
  330. <style scoped src="$project/assets/css/xpwyfyy.css"></style>
  331. <style src="$project/assets/css/iconfont.css"></style>
  332. <style src="$project/assets/css/mui.picker.min.css"></style>
  333. <style>
  334. </style>