applyLeave.vue 26 KB

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