setswork.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. <template>
  2. <view class="lists">
  3. <view class="lbox">
  4. <view class="list" @click="getAdres">
  5. <view class="listl">考勤地址</view>
  6. <view class="listr">{{formData.locations||'请选择考勤地址'}}</view>
  7. </view>
  8. <view class="list">
  9. <view class="listl">考勤范围(米)</view>
  10. <input class="listi" v-model="formData.distance" placeholder-style="color:#aaaaaa" placeholder="请输入半径米数(单位默认:米)"/>
  11. <image :src="rimg"></image>
  12. </view>
  13. <!-- <view class="list" @click="getDeptname">
  14. <view class="listl">考勤部门</view>
  15. <view class="listi" :style="formData.deptName?'':'color:#AAAAAA;'">{{formData.deptName||'选择部门'}}</view>
  16. <image :src="rimg"></image>
  17. </view> -->
  18. <view class="list" >
  19. <view class="listl">是否开启考勤拍照</view>
  20. <!-- <view class="listi" > -->
  21. <picker @change="bindPickerChanges" range-key='label' :value="indexs" :range="surelist" class="listi">
  22. <view class="f15" :style="isPicture?'':'color: #AAAAAA;'">{{isPicture||"请选择是否开启考勤拍照"}}</view>
  23. </picker>
  24. <image :src="rimg"></image>
  25. </view>
  26. <view class="list" >
  27. <view class="listl">是否打卡机使用</view>
  28. <!-- <view class="listi" > -->
  29. <picker @change="bindPickerChangea" range-key='label' :value="indexa" :range="surelist" class="listi">
  30. <view class="f15" :style="isEquip?'':'color: #AAAAAA;'">{{isEquip||"请选择是否打卡机使用"}}</view>
  31. </picker>
  32. <image :src="rimg"></image>
  33. </view>
  34. </view>
  35. <view class="lbox">
  36. <!-- <view class="list">
  37. <view class="listl">打卡次数</view>
  38. <picker @change="bindPickerChange" :value="index" :range="array" class="listi">
  39. <view :style="formData.kaNum?'':'color: #AAAAAA;'">{{formData.kaNum||"请选择打卡次数"}}</view>
  40. </picker>
  41. <image :src="rimg"></image>
  42. </view>
  43. <block v-if="formData.kaNum==4">
  44. <view class="list" @click="showDatePicker(0)">
  45. <view class="listl">上午上班时间</view>
  46. <view class="listi" :style="formData.kaTimeAmIn?'':'color: #AAAAAA;'">{{formData.kaTimeAmIn||"请选择上班时间"}}</view>
  47. <image :src="rimg"></image>
  48. </view>
  49. <view class="list" @click="showDatePicker(1)">
  50. <view class="listl">上午下班时间</view>
  51. <view class="listi" :style="formData.kaTimeAmOut?'':'color: #AAAAAA;'">{{formData.kaTimeAmOut||"请选择上班时间"}}</view>
  52. <image :src="rimg"></image>
  53. </view>
  54. <view class="list" @click="showDatePicker(2)">
  55. <view class="listl">下午上班时间</view>
  56. <view class="listi" :style="formData.kaTimePmIn?'':'color: #AAAAAA;'">{{formData.kaTimePmIn||"请选择上班时间"}}</view>
  57. <image :src="rimg"></image>
  58. </view>
  59. <view class="list" @click="showDatePicker(3)">
  60. <view class="listl">下午下班时间</view>
  61. <view class="listi" :style="formData.kaTimePmOut?'':'color: #AAAAAA;'">{{formData.kaTimePmOut||"请选择下班时间"}}</view>
  62. <image :src="rimg"></image>
  63. </view>
  64. </block>
  65. <block v-else> -->
  66. <view class="list" @click="showDatePicker(0)">
  67. <view class="listl">上班时间</view>
  68. <view class="listi" :style="formData.startWorkTime?'':'color: #AAAAAA;'">{{formData.startWorkTime||"请选择上班时间"}}</view>
  69. <image :src="rimg"></image>
  70. </view>
  71. <view class="list" @click="showDatePicker(3)">
  72. <view class="listl">下班时间</view>
  73. <view class="listi" :style="formData.endWorkTime?'':'color: #AAAAAA;'">{{formData.endWorkTime||"请选择下班时间"}}</view>
  74. <image :src="rimg"></image>
  75. </view>
  76. <!-- </block> -->
  77. </view>
  78. <view class="listbtn" @click="getSure">确认</view>
  79. <dataTimePicke ref="setpicker" type="time" toolBarTitle="请选择时间" @change="timeChange"></dataTimePicke>
  80. <!-- 部门 -->
  81. <selectMorePicker ref="picker" :title="auiPicker.title" :layer="auiPicker.layer" :titflag='auiPicker.titflag'
  82. :data="auiPicker.data" @callback="pickerCallback"></selectMorePicker>
  83. </view>
  84. </template>
  85. <script>
  86. import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
  87. import dataTimePicke from "@/components/timepick/dataTimePicke.vue"
  88. import selectMorePicker from "@/components/selectMorePicker.vue"
  89. import {getMapconfig,getBaoconfig,getXiuconfig,getdeptTreeNow} from "@/api/work/check.js"
  90. export default{
  91. data(){
  92. return{
  93. rimg:require("@/work/static/clock/right.png"),
  94. type:'add',
  95. kaTimeAmIn:'',
  96. formData:{
  97. "locations": "",
  98. "lon": "",
  99. "lat": "",
  100. "isPicture":'Y',
  101. "isEquip":'Y',
  102. "distance": "100",
  103. "startWorkTime": "09:00:00",
  104. "endWorkTime": "18:00:00",
  105. },
  106. deptName:"",
  107. array: ['2', '4',],
  108. index: 0,
  109. deptId:this.$store.state.user.deptId,
  110. typetime:"time",
  111. show:false,
  112. value:'',
  113. timeidx:-1,
  114. auiPicker: {
  115. title: '选择部门',
  116. layer: null,
  117. titflag: true,
  118. data: []
  119. },
  120. indexs:0,
  121. indexa:0,
  122. isPicture:'是',
  123. isEquip:'是',
  124. surelist:[{
  125. "label": '是',
  126. "value":'Y'
  127. },{
  128. "label": '否',
  129. "value":'N'
  130. }],
  131. dutyId:'',
  132. fromurl:'rule',//从哪来的
  133. }
  134. },
  135. components:{
  136. dataTimePicke,selectMorePicker
  137. },
  138. onLoad(e) {
  139. var that=this;
  140. // 判断是否修改
  141. uni.$on('refreshaddr',(e) => {
  142. const value = uni.getStorageSync('location');
  143. that.formData.locations=value.address;
  144. that.formData.lon=value.lng;
  145. that.formData.lat=value.lat;
  146. })
  147. // 考勤列表
  148. if(e.id){
  149. this.dutyId=e.id
  150. this.type='update'
  151. this.getMapconfig();
  152. }else{
  153. this.type='add';
  154. this.formData.locations=e.address||"";
  155. this.formData.lon=e.lng||'';
  156. this.formData.lat=e.lat||"";
  157. }
  158. if(e.fromurl){
  159. this.fromurl=e.fromurl
  160. }
  161. },
  162. onUnload(){
  163. uni.$off('refreshaddr')
  164. },
  165. mounted() {
  166. // this.getdeptTreeNow();
  167. },
  168. methods:{
  169. checkPermi,checkRole,
  170. //是否拍照
  171. showNucleic(){
  172. this.$refs.nucleinselet.show();
  173. },
  174. vacSureChange(e){
  175. this.formData.isPicture=e[0].value;
  176. },
  177. showDatePicker (e) {
  178. this.timeidx=e;
  179. this.$refs.setpicker.show();
  180. },
  181. getDeptname(){
  182. this.$refs.picker.open().then(function() {
  183. });
  184. },
  185. pickerCallback(e) {
  186. const _this = this;
  187. let result = '';
  188. e.data.forEach(function(item, index) {
  189. if (index == 0) {
  190. result += item.label;
  191. } else {
  192. result += '/' + item.label;
  193. }
  194. });
  195. var len = e.data.length - 1
  196. _this.deptName = e.data[len].label;
  197. _this.formData.deptId = e.data[len].id;
  198. _this.formData.deptName = e.data[len].label;
  199. },
  200. getdeptTreeNow() {
  201. getdeptTreeNow().then(res => {
  202. if (res.code == 200) {
  203. if(res.data){
  204. this.auiPicker.data = res.data;
  205. // this.formData.deptName=res.data[0].label
  206. // this.formData.deptId=res.data[0].id
  207. }
  208. } else {
  209. this.$toast(res.msg)
  210. }
  211. })
  212. },
  213. timeChange(e){
  214. var that=this;
  215. if(this.timeidx==0){
  216. var endTime=this.formData.endWorkTime;
  217. if(endTime){
  218. var flag=this.getTimeFn(e,endTime)
  219. if(flag!=1){
  220. this.$toast('上班时间晚于下班时间')
  221. this.formData.endWorkTime=''
  222. }
  223. }
  224. this.formData.startWorkTime=e
  225. }else if(this.timeidx==3){
  226. var startt=this.formData.startWorkTime;
  227. if(!startt){
  228. this.$toast('请选择上班时间')
  229. setTimeout(function(){
  230. that.formData.endWorkTime='';
  231. },200)
  232. return
  233. }
  234. var flag=this.getTimeFn(startt,e)
  235. if(flag!=1){
  236. setTimeout(function(){
  237. that.formData.endWorkTime='';
  238. },200)
  239. this.$toast('下班时间早于上班时间')
  240. return
  241. }
  242. this.formData.endWorkTime=e
  243. }
  244. },
  245. // 时间比较
  246. getTimeFn(start,end){
  247. var timea=new Date();
  248. var timeb=new Date();
  249. var timeArra=start.split(':');
  250. timea.setHours(timeArra[0], timeArra[1], timeArra[2], 0);
  251. var timestra=timea.getTime();
  252. var timeArrb=end.split(':');
  253. timeb.setHours(timeArrb[0], timeArrb[1], timeArrb[2], 0);
  254. var timestrb=timeb.getTime();
  255. if(timestra>timestrb){
  256. return 0
  257. }else{
  258. return 1
  259. }
  260. },
  261. cancelFn() {
  262. this.show = false;
  263. },
  264. confirmFn(e) {
  265. // this.inputValue = this.value
  266. this.show = false;
  267. },
  268. getAdres(){
  269. this.$tab.navigateTo("/work/pages/clock/setwoek?address="+this.formData.locations+'&lng='+this.formData.lon+"&lat="+this.formData.lat+'&type='+this.type+'&fromurl='+this.fromurl)
  270. },
  271. bindPickerChange(e){
  272. var val=e.detail.value
  273. this.formData.kaNum=this.array[val];
  274. },
  275. bindPickerChangea(e){
  276. var val=e.detail.value;
  277. this.indexa=val;
  278. this.isEquip=this.surelist[val].label;
  279. this.formData.isEquip=this.surelist[val].value;
  280. },
  281. bindPickerChanges(e){
  282. var val=e.detail.value;
  283. this.indexs=val;
  284. this.isPicture=this.surelist[val].label;
  285. this.formData.isPicture=this.surelist[val].value;
  286. },
  287. bindStartTimeChange(e){
  288. this.formData.kaTimeAmIn = e.detail.value
  289. },
  290. bindStartTimeChanges(e){
  291. this.formData.kaTimeAmOut = e.detail.value
  292. },
  293. bindEndTimeChanges(e){
  294. this.formData.kaTimePmIn = e.detail.value
  295. },
  296. bindEndTimeChange(e){
  297. this.formData.kaTimePmOut = e.detail.value
  298. },
  299. getMapconfig(){
  300. getMapconfig(this.dutyId).then(res=>{
  301. if(res.code==200){
  302. var that=this;
  303. this.formData=res.data
  304. var isPicture=res.data.isPicture
  305. var isEquip=res.data.isEquip
  306. if(isPicture=='Y'){
  307. this.isPicture='是';
  308. this.indexs=0;
  309. }else{
  310. this.isPicture='否';
  311. this.indexs=1;
  312. }
  313. if(isEquip=='Y'){
  314. this.isEquip='是';
  315. this.indexa=0;
  316. }else{
  317. this.isEquip='否';
  318. this.indexa=1;
  319. }
  320. }else{
  321. this.$toast(res.msg)
  322. }
  323. })
  324. },
  325. getSure(){
  326. var params=JSON.parse(JSON.stringify(this.formData))
  327. if(params.isEquip === "") {
  328. this.$toast('请选择是否打卡机使用')
  329. return
  330. }
  331. if(params.isEquip !='Y') {
  332. if (params.locations === "") {
  333. this.$toast('请选择考勤地址')
  334. return
  335. }
  336. if (params.distance === "") {
  337. this.$toast('请输入打卡半径')
  338. return
  339. }
  340. // if (this.formData.deptId === "") {
  341. // this.$toast('请选择打卡部门')
  342. // return
  343. // }
  344. if (params.isPicture === "") {
  345. this.$toast('请选择是否开启拍照打卡')
  346. return
  347. }
  348. }
  349. if(params.startWorkTime === ""){
  350. this.$toast('请选择上班时间')
  351. return
  352. }
  353. if(params.endWorkTime === ""){
  354. this.$toast('请选择下班时间')
  355. return
  356. }
  357. // if(this.formData.kaNum==2){
  358. // if(this.formData.kaTimeAmIn === ""){
  359. // this.$toast('请选择上班时间')
  360. // return
  361. // }
  362. // if(this.formData.kaTimePmOut === ""){
  363. // this.$toast('请选择下班班时间')
  364. // return
  365. // }
  366. // this.formData.kaTimeAmOut='';
  367. // this.formData.kaTimePmIn='';
  368. // }else{
  369. // if(this.formData.kaTimeAmIn === ""){
  370. // this.$toast('请选择上午上班时间')
  371. // return
  372. // }
  373. // if(this.formData.kaTimeAmOut === ""){
  374. // this.$toast('请选择上午下班时间')
  375. // return
  376. // }
  377. // if(this.formData.kaTimePmIn === ""){
  378. // this.$toast('请选择下午上班时间')
  379. // return
  380. // }
  381. // if(this.formData.kaTimePmOut === ""){
  382. // this.$toast('请选择下午下班时间')
  383. // return
  384. // }
  385. // }
  386. // 保存
  387. if(this.type=='add'){
  388. getBaoconfig(params).then(res=>{
  389. if(res.code==200){
  390. var that=this;
  391. this.$toast("保存成功")
  392. setTimeout(function(){
  393. uni.$emit('reashlist')
  394. uni.navigateBack({
  395. delta:1
  396. })
  397. },1200)
  398. }else{
  399. this.$toast(res.msg)
  400. }
  401. })
  402. }else{
  403. // 修改
  404. getXiuconfig(params).then(res=>{
  405. if(res.code==200){
  406. var that=this;
  407. this.$toast("修改成功")
  408. setTimeout(function(){
  409. uni.$emit('reashlist')
  410. uni.navigateBack({
  411. delta:1
  412. })
  413. },1200)
  414. }else{
  415. this.$toast(res.msg)
  416. }
  417. })
  418. }
  419. }
  420. }
  421. }
  422. </script>
  423. <style scoped lang="scss">
  424. .lbox{background: #FFFFFF;padding: 0 32rpx;margin-bottom: 28rpx;
  425. box-shadow: 0px 4rpx 6rpx 0px rgba(189,189,189,0.35);
  426. border-radius: 10rpx;}
  427. .lists{padding: 20rpx 32rpx;
  428. .list{padding:30rpx 0;display: flex;align-items: center;
  429. .listl{font-size:30rpx;font-weight: bold;
  430. color: #343434;flex:0 0 auto;margin-right: 26rpx;}
  431. .listr{font-size: 30rpx;color: #1678FF;flex: 1 ;text-decoration: underline;text-align: right;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
  432. .listi{font-size:30rpx;color: #343434;flex:1;text-align: right;}
  433. image{width: 10rpx;height: 18rpx;flex: 0 0 auto;margin-left: 26rpx;}
  434. }
  435. .listbtn{width: 100%;height: 76rpx;background: #1678FF;
  436. border-radius: 6px;font-size: 30rpx;color: #FFFFFF;margin-top:70rpx;line-height: 76rpx;text-align: center;}
  437. }
  438. .boxtopbb{text-decoration: none;}
  439. </style>