applyLeave.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. <template>
  2. <div>
  3. <van-nav-bar title="请假管理" left-text="返回" @click-left="back" fixed left-arrow style="z-index:1000" />
  4. <div class="content">
  5. <van-tabs v-model="active" @change="activeChange">
  6. <!-- <van-tab title="请假填报" :name="0" v-if="leaveFil"></van-tab> -->
  7. <van-tab title="请假填报" :name="0" v-if="leaveFil && !isSyncData"></van-tab>
  8. <van-tab title="请假单列表" :name="1" v-if="leaveSingleList"></van-tab>
  9. <van-tab title="请假审核" :name="2" v-if="leaveAudit && !isSyncData"></van-tab>
  10. <van-tab title="假期剩余表" :name="3" v-if="isSyncData"></van-tab>
  11. </van-tabs>
  12. <div class="edit" v-if="active == 0">
  13. <van-form class="edit_form" ref="loginForm" label-width="120">
  14. <!-- 请假类型 -->
  15. <van-field v-model="editForm.leaveType" label="请假类型" @click="typeShow = true" readonly clickable>
  16. <template #input>{{typeList[editForm.leaveType]}}</template>
  17. </van-field>
  18. <van-popup v-model="typeShow" position="bottom">
  19. <van-picker
  20. show-toolbar
  21. :columns="typeList"
  22. @confirm="typeChange"
  23. @cancel="typeShow = false;$forceUpdate();"/>
  24. </van-popup>
  25. <!-- 请假人 -->
  26. <van-field v-model="editForm.ownerId" label="请假人" @click="ownerIdShow = true" :readonly="!canExamine" clickable required :rules="[{ required: true, message: '请选择请假人' }]">
  27. <template #input>
  28. <span v-if="user.userNameNeedTranslate == 1 && formshowText.name"><TranslationOpenDataText type='userName' :openid='formshowText.name'></TranslationOpenDataText></span>
  29. <span v-else>{{formshowText.name}}</span>
  30. </template>
  31. </van-field>
  32. <van-popup v-model="ownerIdShow" position="bottom" v-if="canExamine">
  33. <div style="minHeight:300px;">
  34. <van-radio-group v-model="userRadio" v-if="user.userNameNeedTranslate == '1'">
  35. <van-radio v-for="item in userList" :key="item.id" :name="item" class="userCheckbox">
  36. <TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText>
  37. </van-radio>
  38. </van-radio-group>
  39. <van-radio-group v-model="userRadio" v-else>
  40. <van-radio v-for="item in userList" :key="item.id" :name="item" class="userCheckbox">{{item.name}}</van-radio>
  41. </van-radio-group>
  42. <van-button style="width:100%;position: -webkit-sticky;position: sticky;bottom: 0;" @click="ownerIdChange()">确定</van-button>
  43. </div>
  44. </van-popup>
  45. <!-- 电话 -->
  46. <van-field label="电话" v-model="editForm.tel" type="number" required :rules="[{ required: true, message: '请输入联系电话' }]"></van-field>
  47. <!-- 按天/小时请假 -->
  48. <van-field label="时长单位" readonly>
  49. <template #input>
  50. <van-radio-group v-model="editForm.timeType" direction="horizontal" @change="timeTypeChange">
  51. <van-radio name="0">按天</van-radio>
  52. <van-radio name="1" v-if="editForm.leaveType != 6">按小时</van-radio>
  53. </van-radio-group>
  54. </template>
  55. </van-field>
  56. <!-- 选择日期 -->
  57. <van-field :label="editForm.timeType == '0' ? '选择日期' : '选择时间'" required v-model="formshowText.dateTitle" @click="dateShow()" readonly clickable :rules="[{ required: true, message: editForm.timeType == '0' ? '请选择日期' : '请选择时间' }]">
  58. <template #input><span>{{formshowText.dateTitle}}</span></template>
  59. </van-field>
  60. <!-- 按天 -->
  61. <van-calendar v-model="dateShow_day" type="range" :allow-same-day="true" :show-confirm="false" @confirm="date_dayChange" :min-date="minDate" :max-date="maxDate" />
  62. <!-- 按小时 -->
  63. <van-popup v-model="dateShow_hour" position="bottom">
  64. <van-datetime-picker
  65. type="date"
  66. title="选择填报日期"
  67. @confirm="date_hourChange"
  68. v-model="currentDate"
  69. @cancel="dateShow_hour = false;$forceUpdate();"
  70. :min-date="minDate"
  71. :max-date="maxDate"/>
  72. </van-popup>
  73. <!-- 请假天数 -->
  74. <van-field label="请假天数(天)" v-if="editForm.timeType == '0'" @blur="dayBlur()" v-model="editForm.timeDays" type="number" :rules="[{ required: true, message: '请输入请假天数' }]"></van-field>
  75. <!-- 请假时长 -->
  76. <van-field label="请假时长(小时)" v-else v-model="editForm.timeHours" @blur="hourBlur()" type="number" :rules="[{ required: true, message: '请输入请假时长' }]"></van-field>
  77. <!-- 备注 -->
  78. <van-field v-model="editForm.remark" label="备注" type="textarea" :autosize="{minHeight:100}"></van-field>
  79. </van-form>
  80. <!-- 提交 -->
  81. <div class="form_btn" style="position:fixed; bottom:0px;width:100%;">
  82. <div style="padding-bottom:10px;" v-if="editForm.id">
  83. <van-button square block type="default" @click="clearEditForm()" style="width:100%;float:left;">清除</van-button>
  84. </div>
  85. <div style="padding-bottom:10px;">
  86. <van-button square block type="info" @click="submitLeave()" :disabled="txselnum == 0 && editForm.leaveType == 6 && editForm.ownerId != '' ? true : false" :loading="submitLoading" style="width:100%;float:left;">提交</van-button>
  87. </div>
  88. </div>
  89. </div>
  90. <div class="list" v-if="active == 1">
  91. <van-collapse v-model="activeName" accordion class="list_collapse">
  92. <van-collapse-item v-for="item in leaveList" :key="item.id" title="标题1" :name="item.id">
  93. <template #title>
  94. <div class="collapse_label_l">请假人:
  95. <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.ownerName'></TranslationOpenDataText></span>
  96. <span v-else>{{item.ownerName}}</span>
  97. </div>
  98. <div class="collapse_label_r">电话:{{item.tel}}</div>
  99. <div class="collapse_label_l">请假类型:{{typeList[item.leaveType]}}</div>
  100. <div class="collapse_label_r">状态:<span :class="statusClass[item.status]">{{statusList[item.status]}}</span></div>
  101. </template>
  102. <div class="wrapper">
  103. <div><span>请假开始时间:</span><span>{{item.startDate}}</span></div>
  104. <div><span>请假结束时间:</span><span>{{item.endDate}}</span></div>
  105. <div><span>请假天数:</span><span>{{item.timeDays ? item.timeDays + '天' : '/'}}</span></div>
  106. <div><span>请假时长:</span><span>{{item.timeHours ? item.timeHours + '小时' : '/'}}</span></div>
  107. <div><span>备注:</span><span>{{item.remark}}</span></div>
  108. </div>
  109. <div class="operation" v-if="((item.status != 0 && item.ownerId == user.id) || leaveAll) && !isSyncData">
  110. <van-button v-if="item.status == 3 || item.status == 2" size="small" type="info" @click="submitAgain(item)">重新提交</van-button>
  111. <van-button v-if="item.status == 3 || item.status == 2" style="margin-left:10px" size="small" type="danger" @click="deleteLeave(item.id)">删除</van-button>
  112. <van-button v-if="item.status == 1" style="margin-left:10px" size="small" type="default" @click="cancelLeave(item.id)">撤回</van-button>
  113. </div>
  114. </van-collapse-item>
  115. </van-collapse>
  116. </div>
  117. <div class="audit" v-if="active == 2">
  118. <van-collapse v-model="auditName" accordion class="list_collapse">
  119. <van-collapse-item v-for="item in auditList" :key="item.id" title="标题2" :name="item.id">
  120. <template #title>
  121. <div class="collapse_label_l">请假人:
  122. <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.ownerName'></TranslationOpenDataText></span>
  123. <span v-else>{{item.ownerName}}</span>
  124. </div>
  125. <div class="collapse_label_r">电话:{{item.tel}}</div>
  126. <div class="collapse_label_l">请假类型:{{typeList[item.leaveType]}}</div>
  127. <div class="collapse_label_r">状态:<span :class="statusClass[item.status]">{{statusList[item.status]}}</span></div>
  128. <div class="operation">
  129. <van-button size="small" type="info" :loading="item.approveLoading" @click.stop="approveLeave(item)">通过</van-button>
  130. <van-button style="margin-left:15px" size="small" type="danger" @click.stop="denyLeave(item.id)">驳回</van-button>
  131. </div>
  132. </template>
  133. <div class="wrapper">
  134. <div><span>请假开始时间:</span><span>{{item.startDate}}</span></div>
  135. <div><span>请假结束时间:</span><span>{{item.endDate}}</span></div>
  136. <div><span>请假天数:</span><span>{{item.timeDays ? item.timeDays + '天' : '/'}}</span></div>
  137. <div><span>请假时长:</span><span>{{item.timeHours ? item.timeHours + '小时' : '/'}}</span></div>
  138. <div><span>备注:</span><span>{{item.remark}}</span></div>
  139. </div>
  140. </van-collapse-item>
  141. </van-collapse>
  142. <van-popup v-model="denyReasonDialog" position="bottom" closeable >
  143. <van-cell>请输入原因</van-cell>
  144. <van-field class="form_input"
  145. v-model="denyParm.denyReason" name="reason" type="textarea" placeholder="请输入您决定驳回的原因"
  146. rows="3" autosize />
  147. <van-button style="width:100%;" type="info" :loading="denyLoading" @click="deny()">提交</van-button>
  148. </van-popup>
  149. </div>
  150. <div class="audit" v-if="active == 3">
  151. <van-collapse v-model="auditName" accordion class="list_collapse">
  152. <van-collapse-item v-for="item in dingDingLeaveQtList" :key="item.id" title="标题2" :name="item.id">
  153. <template #title>
  154. <div class="collapse_label_l">员工姓名:
  155. <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
  156. <span v-else>{{item.name}}</span>
  157. </div>
  158. <div class="collapse_label_r">总额度:{{item.quotaInDays}}天</div>
  159. <div class="collapse_label_l">已使用:{{item.usedInDays}}天</div>
  160. <div class="collapse_label_l">剩余额度:{{item.leftInDays}}天</div>
  161. <div class="collapse_label_l" style="width: 100%">有效期开始日期:{{item.startTime}}</div>
  162. <div class="collapse_label_l" style="width: 100%">有效期结束日期:{{item.endTime}}</div>
  163. </template>
  164. <div class="wrapper">
  165. <div><span>总额度:</span><span>{{item.quotaInDays}}天</span></div>
  166. <div><span>已使用:</span><span>{{item.usedInDays}}天</span></div>
  167. <div><span>剩余额度:</span><span>{{item.leftInDays}}天</span></div>
  168. <div><span>有效期开始日期:</span><span>{{item.startTime}}</span></div>
  169. <div><span>有效期结束日期:</span><span>{{item.endTime}}</span></div>
  170. </div>
  171. </van-collapse-item>
  172. </van-collapse>
  173. </div>
  174. </div>
  175. </div>
  176. </template>
  177. <script>
  178. export default {
  179. data() {
  180. return {
  181. isSyncData: 0,
  182. user: JSON.parse(localStorage.userInfo),
  183. dingDingLeaveQtList: [],
  184. canExamine: false,
  185. leaveAll: false,
  186. leaveSingleList: false,
  187. leaveAudit: false,
  188. leaveFil: false,
  189. active: 0,
  190. txselnum: 0,
  191. editForm: {
  192. leaveType: 0,
  193. ownerId: '',
  194. tel: '',
  195. startDate: '',
  196. endDate: '',
  197. timeType: '0',
  198. timeDays: 0,
  199. timeHours: 8,
  200. remark: ''
  201. },
  202. formshowText: {
  203. name: '',
  204. dateTitle: ''
  205. },
  206. userRadio: null,
  207. userList: [],
  208. typeList: ['事假','病假','年假','产假','婚假','丧假','调休假','陪产假','其他'],
  209. currentDate: new Date(),
  210. minDate: new Date(2020,0,1),
  211. maxDate: new Date(2030,11,31),
  212. ownerIdShow: false,
  213. canExamine: false,
  214. dateShow_day: false,
  215. dateShow_hour: false,
  216. typeShow: false,
  217. submitLoading: false,
  218. activeName: '',
  219. leaveList: [],
  220. statusList: ['审核通过','待审核','已驳回','已撤销'],
  221. statusClass: ['','waiting','rejected',''],
  222. auditName: '',
  223. auditList: [],
  224. denyReasonDialog: false,
  225. denyLoading: false,
  226. denyParm: {
  227. id: '',
  228. denyReason: ''
  229. }
  230. }
  231. },
  232. mounted() {
  233. this.isSyncData = this.user.timeType.syncDingding || this.user.timeType.syncFanwei;
  234. console.log(this.isSyncData)
  235. this.leaveSingleList = true
  236. for(let i in this.user.functionList){
  237. if(this.user.functionList[i].name == '查看全部请假单'){
  238. this.leaveAll = true
  239. }
  240. if(this.user.functionList[i].name == '请假审核'){
  241. this.leaveAudit = true
  242. }
  243. if(this.user.functionList[i].name == '请假填报'){
  244. this.leaveFil = true
  245. }
  246. }
  247. if(this.isSyncData) {
  248. this.getLeaveList()
  249. } else {
  250. if(this.leaveAudit) {
  251. this.active = '2'
  252. this.getAuditList()
  253. }
  254. if(this.leaveFil) {
  255. this.active = '0'
  256. }
  257. }
  258. // if(!this.canExamine){
  259. this.editForm.ownerId = this.user.id
  260. this.formshowText.name = this.user.name
  261. this.editForm.timeHours = this.user.timeType.allday
  262. this.getTxsel()
  263. // }else{
  264. // this.getUserList()
  265. // }
  266. },
  267. methods: {
  268. back(){
  269. history.back();
  270. },
  271. getDaysBetween(date1,date2){
  272. let startDate = Date.parse(date1);
  273. let endDate = Date.parse(date2);
  274. if (startDate>endDate){
  275. return 0;
  276. }
  277. if (startDate==endDate){
  278. return 1;
  279. }
  280. let days=(endDate - startDate)/(1*24*60*60*1000);
  281. return days + 1;
  282. },
  283. formatDate(date) {
  284. let mon = date.getMonth() + 1
  285. return `${date.getFullYear()}-${mon<10?'0'+mon:mon}-${date.getDate()<10?'0'+date.getDate():date.getDate()}`;
  286. },
  287. activeChange(){
  288. sessionStorage.setItem('page',JSON.stringify(this.active))
  289. if(this.active == 1){
  290. this.getLeaveList()
  291. }
  292. if(this.active == 2){
  293. this.getAuditList()
  294. }
  295. if(this.active == 3) {
  296. this.getDingDingLeaveQt()
  297. }
  298. },
  299. // #region
  300. ownerIdChange(){
  301. this.editForm.ownerId = this.userRadio ? this.userRadio.id : ''
  302. this.formshowText.name = this.userRadio ? this.userRadio.name : ''
  303. this.ownerIdShow = false
  304. },
  305. timeTypeChange(){
  306. if(this.editForm.timeType == '0'){
  307. if(this.editForm.startDate && this.editForm.endDate){
  308. this.formshowText.dateTitle = this.editForm.startDate+'\u3000至\u3000'+this.editForm.endDate
  309. }else{
  310. this.formshowText.dateTitle = ''
  311. }
  312. }else{
  313. if(this.editForm.startDate){
  314. this.formshowText.dateTitle = this.editForm.startDate
  315. }else{
  316. this.formshowText.dateTitle = ''
  317. }
  318. }
  319. },
  320. dateShow(){
  321. if(this.editForm.timeType == '0'){
  322. this.dateShow_day = true
  323. }else{
  324. this.dateShow_hour = true
  325. }
  326. },
  327. date_dayChange(value,date){
  328. this.dateShow_day = false
  329. this.editForm.startDate = this.formatDate(value[0])
  330. this.editForm.endDate = this.formatDate(value[1])
  331. this.formshowText.dateTitle = this.formatDate(value[0])+'\u3000至\u3000'+this.formatDate(value[1])
  332. this.editForm.timeDays = this.getDaysBetween(value[0],value[1])
  333. this.$axios.post('/leave-sheet/leaveDays', {
  334. startDate: this.editForm.startDate,
  335. endDate: this.editForm.endDate
  336. })
  337. .then(res => {
  338. if(res.code == "ok") {
  339. this.editForm.timeDays = res.data
  340. } else {
  341. this.$toast.fail(res.msg);
  342. }
  343. }).catch(err=> {this.$toast.clear();console.log(err)});
  344. },
  345. date_hourChange(value){
  346. this.editForm.startDate = this.formatDate(value)
  347. this.formshowText.dateTitle = this.editForm.startDate
  348. this.dateShow_hour = false
  349. },
  350. dayBlur(){
  351. if(this.editForm.startDate && this.editForm.endDate){
  352. if(this.editForm.timeDays*1 < this.getDaysBetween(this.editForm.startDate,this.editForm.endDate) - 1){
  353. this.editForm.timeDays = this.getDaysBetween(this.editForm.startDate,this.editForm.endDate) - 1
  354. }else if(this.editForm.timeDays*1 > this.getDaysBetween(this.editForm.startDate,this.editForm.endDate)){
  355. this.editForm.timeDays = this.getDaysBetween(this.editForm.startDate,this.editForm.endDate)
  356. }
  357. }
  358. },
  359. hourBlur(){
  360. if(this.editForm.timeHours*1 > this.user.timeType.allday){
  361. this.editForm.timeHours = this.user.timeType.allday
  362. }
  363. if(this.editForm.timeHours*1 < 0){
  364. this.editForm.timeHours = 0.5
  365. }
  366. },
  367. typeChange(value,key){
  368. this.editForm.leaveType = key
  369. this.typeShow = false
  370. },
  371. submitLeave(){
  372. this.$refs.loginForm.validate().then(()=>{
  373. console.log('success');
  374. this.submitLoading = true
  375. this.$axios.post("/leave-sheet/add", this.editForm)
  376. .then(res => {
  377. this.submitLoading = false
  378. if(res.code == "ok") {
  379. this.editForm = {
  380. leaveType: 0,
  381. ownerId: this.editForm.ownerId,
  382. tel: this.editForm.tel,
  383. startDate: '',
  384. endDate: '',
  385. timeType: '0',
  386. timeDays: 0,
  387. timeHours: this.user.timeType.allday,
  388. remark: ''
  389. }
  390. this.formshowText.dateTitle = ''
  391. this.$toast.success('提交成功');
  392. } else {
  393. this.$toast.fail(res.msg);
  394. }
  395. }).catch(err=> {this.submitLoading = false;this.$toast.clear();console.log(err)});
  396. }).catch(()=>{})
  397. },
  398. clearEditForm(){
  399. this.editForm = {
  400. leaveType: 0,
  401. ownerId: this.editForm.ownerId,
  402. tel: this.editForm.tel,
  403. startDate: '',
  404. endDate: '',
  405. timeType: '0',
  406. timeDays: 0,
  407. timeHours: this.user.timeType.allday,
  408. remark: ''
  409. }
  410. this.formshowText.dateTitle = ''
  411. },
  412. getDingDingLeaveQt(){
  413. this.$axios.post("/user-yearleave-setting/getDingDingLeaveQt", {
  414. companyId: this.user.companyId,
  415. pageIndex: 1
  416. })
  417. .then(res => {
  418. this.dingDingLeaveQtList = res.data.records
  419. }).catch(err=> {this.submitLoading = false;this.$toast.clear();console.log(err)});
  420. },
  421. // #endregion
  422. // #region
  423. cancelLeave(pid){
  424. this.$dialog.confirm({
  425. message: '确认撤回?',
  426. })
  427. .then(() => {
  428. // on confirm
  429. this.$axios.post("/leave-sheet/cancel", {id: pid})
  430. .then(res => {
  431. if(res.code == "ok") {
  432. this.$toast.success('撤回成功')
  433. this.getLeaveList()
  434. } else {
  435. this.$toast.fail('获取失败');
  436. }
  437. }).catch(err=> {this.$toast.clear();console.log(err)});
  438. })
  439. .catch(() => {
  440. // on cancel
  441. });
  442. },
  443. deleteLeave(pid){
  444. this.$dialog.confirm({
  445. message: '确认删除?',
  446. })
  447. .then(() => {
  448. // on confirm
  449. this.$axios.post("/leave-sheet/delete", {id: pid})
  450. .then(res => {
  451. if(res.code == "ok") {
  452. this.$toast.success('删除成功')
  453. this.getLeaveList()
  454. } else {
  455. this.$toast.fail('获取失败');
  456. }
  457. }).catch(err=> {this.$toast.clear();console.log(err)});
  458. })
  459. .catch(() => {
  460. // on cancel
  461. });
  462. },
  463. submitAgain(item){
  464. this.editForm = item
  465. if(this.editForm.startDate && !this.editForm.endDate){
  466. this.$set(this.editForm,'timeType','1')
  467. }else{
  468. this.$set(this.editForm,'timeType','0')
  469. }
  470. this.timeTypeChange()
  471. this.active = 0
  472. },
  473. // #endregion
  474. approveLeave(item){
  475. item.approveLoading = true
  476. this.$axios.post("/leave-sheet/approve", {id: item.id})
  477. .then(res => {
  478. if(res.code == "ok") {
  479. this.$toast.success('已通过')
  480. item.approveLoading = false
  481. this.getAuditList()
  482. } else {
  483. this.$toast.fail('获取失败');
  484. }
  485. }).catch(err=> {this.$toast.clear();console.log(err)});
  486. },
  487. denyLeave(pid){
  488. this.denyParm.id = pid
  489. this.denyReasonDialog = true
  490. },
  491. deny(){
  492. this.denyLoading = true
  493. this.$axios.post("/leave-sheet/deny", this.denyParm)
  494. .then(res => {
  495. if(res.code == "ok") {
  496. this.$toast.success('已驳回')
  497. this.denyReasonDialog = false
  498. this.denyLoading = false
  499. this.getAuditList()
  500. } else {
  501. this.$toast.fail('获取失败');
  502. }
  503. }).catch(err=> {this.$toast.clear();console.log(err)});
  504. },
  505. getUserList(){
  506. this.$axios.post("/user/getSimpleActiveUserList", {})
  507. .then(res => {
  508. if(res.code == "ok") {
  509. this.userList = res.data
  510. } else {
  511. this.$toast.fail('获取失败');
  512. }
  513. }).catch(err=> {this.$toast.clear();console.log(err)});
  514. },
  515. getTxsel(){
  516. this.$axios.post("/leave-sheet/getOTAvaiDays", {userId: this.user.id})
  517. .then(res => {
  518. if(res.code == "ok") {
  519. if(res.data < 0.5){
  520. this.txselnum = 0
  521. }else{
  522. this.txselnum = res.data.toFixed(1)
  523. }
  524. } else {
  525. this.$toast.fail('获取失败');
  526. }
  527. }).catch(err=> {this.$toast.clear();console.log(err)});
  528. },
  529. getLeaveList(){
  530. let parameter = {
  531. pageIndex: 1,
  532. pageSize: 999,
  533. // status: '',
  534. // startDate: '',
  535. // endDate: '',
  536. // ownerId: '',
  537. // leaveType: ''
  538. }
  539. this.$axios.post("/leave-sheet/list", parameter)
  540. .then(res => {
  541. if(res.code == "ok") {
  542. this.leaveList = res.data.records
  543. } else {
  544. this.$toast.fail('获取失败:'+res.smg);
  545. }
  546. }).catch(err=> {this.$toast.clear();console.log(err)});
  547. },
  548. getAuditList(){
  549. this.$axios.post("/leave-sheet/auditList", {
  550. pageSize: 999,
  551. pageIndex: 1
  552. }).then(res => {
  553. if(res.code == "ok") {
  554. this.auditList = res.data.records
  555. for(let i in this.auditList){
  556. this.$set(this.auditList[i],'approveLoading',false)
  557. }
  558. } else {
  559. this.$toast.fail('获取失败');
  560. }
  561. }).catch(err=> {this.$toast.clear();console.log(err)});
  562. }
  563. },
  564. }
  565. </script>
  566. <style lang="less" scoped>
  567. .content{
  568. margin-top: 46px;
  569. overflow: auto;
  570. .edit{
  571. .userCheckbox {
  572. padding: 10px;
  573. }
  574. padding-bottom: 46px;
  575. .form_btn{
  576. z-index: 1000;
  577. }
  578. }
  579. .list{
  580. .list_collapse>div{
  581. margin: 4px;
  582. }
  583. .list_collapse{
  584. .collapse_label_l{
  585. width: 50%;
  586. padding: 4px;
  587. display: inline-block;
  588. }
  589. .collapse_label_r{
  590. width: 50%;
  591. padding: 4px;
  592. display: inline-block;
  593. .waiting {
  594. color:orange;
  595. }
  596. .rejected {
  597. color:red;
  598. }
  599. }
  600. .wrapper{
  601. div{
  602. margin: 8px 16px;
  603. zoom: 1;
  604. }
  605. div:after{
  606. content: "";
  607. display: block;
  608. height: 0;
  609. clear: both;
  610. visibility: hidden;
  611. }
  612. div span:nth-child(1){
  613. width: 40%;
  614. float: left;
  615. }
  616. div span:nth-child(2){
  617. width: 60%;
  618. float: left;
  619. }
  620. }
  621. .operation{
  622. display: flex;
  623. align-items: center;
  624. justify-content: flex-end;
  625. }
  626. }
  627. }
  628. .audit{
  629. .list_collapse>div{
  630. margin: 4px;
  631. }
  632. .list_collapse{
  633. .collapse_label_l{
  634. width: 50%;
  635. padding: 4px;
  636. display: inline-block;
  637. }
  638. .collapse_label_r{
  639. width: 50%;
  640. padding: 4px;
  641. display: inline-block;
  642. .waiting {
  643. color:orange;
  644. }
  645. .rejected {
  646. color:red;
  647. }
  648. }
  649. .operation{
  650. margin-top: 5px;
  651. padding-top: 5px;
  652. border-top: 0.5px solid #ebedf0;
  653. display: flex;
  654. align-items: center;
  655. justify-content: flex-end;
  656. button{
  657. width: 1.2rem;
  658. }
  659. }
  660. .wrapper{
  661. div{
  662. margin: 8px 16px;
  663. zoom: 1;
  664. }
  665. div:after{
  666. content: "";
  667. display: block;
  668. height: 0;
  669. clear: both;
  670. visibility: hidden;
  671. }
  672. div span:nth-child(1){
  673. width: 40%;
  674. float: left;
  675. }
  676. div span:nth-child(2){
  677. width: 60%;
  678. float: left;
  679. }
  680. }
  681. .lookup{
  682. display: flex;
  683. align-items: center;
  684. justify-content: flex-end;
  685. }
  686. }
  687. }
  688. }
  689. </style>
  690. <style>
  691. .edit_form .invoice .van-field__label{
  692. color: #999;
  693. }
  694. .edit_form .invoice .van-field__control{
  695. color: #999;
  696. }
  697. </style>