Bladeren bron

no message

MS-CIAZDCOIXVRW\Administrator 3 jaren geleden
bovenliggende
commit
cada998bae
100 gewijzigde bestanden met toevoegingen van 9114 en 751 verwijderingen
  1. BIN
      components/kx-time-picker.zip
  2. 107 0
      components/kx-time-picker/kx-time-picker.vue
  3. 11 8
      main.js
  4. 9 0
      package.json
  5. 51 7
      pages.json
  6. 227 0
      pages/addLocation/addLocation.vue
  7. 447 4
      pages/group/group.vue
  8. BIN
      pages/group/imgs/bottom.png
  9. BIN
      pages/group/imgs/people.png
  10. 1 1
      pages/index/index.vue
  11. BIN
      pages/particulars/imgs/finished.png
  12. BIN
      pages/particulars/imgs/rule.png
  13. BIN
      pages/particulars/imgs/unfinished.png
  14. 173 0
      pages/particulars/particulars.vue
  15. 206 0
      pages/punchLocation/punchLocation.vue
  16. 208 0
      pages/punchTime/punchTime.vue
  17. 1 1
      pages/ruleSet/ruleSet.vue
  18. 211 0
      pages/rulesDetail/rulesDetail.vue
  19. 250 0
      pages/setPunchTime/setPunchTime.vue
  20. 1 0
      pages/statDetail/statDetail.vue
  21. 0 0
      static/add.png
  22. BIN
      static/ceshi.jpg
  23. BIN
      static/location2.png
  24. BIN
      static/time.png
  25. 11 0
      uni_modules/jlk-week/changelog.md
  26. 2 0
      uni_modules/jlk-week/components/jlk-icon/changelog.md
  27. 43 0
      uni_modules/jlk-week/components/jlk-icon/components/jlk-icon/jlk-icon.vue
  28. 81 0
      uni_modules/jlk-week/components/jlk-icon/package.json
  29. 4 0
      uni_modules/jlk-week/components/jlk-icon/readme.md
  30. 20 0
      uni_modules/jlk-week/components/jlk-week/i18n/en.json
  31. 6 0
      uni_modules/jlk-week/components/jlk-week/i18n/index.js
  32. 20 0
      uni_modules/jlk-week/components/jlk-week/i18n/zh.json
  33. 239 0
      uni_modules/jlk-week/components/jlk-week/jlk-week.vue
  34. 81 0
      uni_modules/jlk-week/package.json
  35. 4 0
      uni_modules/jlk-week/readme.md
  36. 2 1
      uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue
  37. 16 0
      uni_modules/zwx-dropDown/changelog.md
  38. 89 0
      uni_modules/zwx-dropDown/components/zwx-dropDown/README.md
  39. 1110 0
      uni_modules/zwx-dropDown/components/zwx-dropDown/css/iconfont.css
  40. 138 0
      uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown.vue
  41. 80 0
      uni_modules/zwx-dropDown/package.json
  42. 1 0
      uni_modules/zwx-dropDown/readme.md
  43. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  44. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  45. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  46. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/kx-time-picker/kx-time-picker.js.map
  47. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/addLocation/addLocation.js.map
  48. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/addRules/addRules.js.map
  49. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/authentication/authentication.js.map
  50. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/cardRecord/cardRecord.js.map
  51. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/editRules/editRules.js.map
  52. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/group/group.js.map
  53. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/home.js.map
  54. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  55. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/location/location.js.map
  56. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/my/my.js.map
  57. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/particulars/particulars.js.map
  58. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/powerSet/powerSet.js.map
  59. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/punchLocation/punchLocation.js.map
  60. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/punchTime/punchTime.js.map
  61. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/ruleName/ruleName.js.map
  62. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/ruleSet/ruleSet.js.map
  63. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/rulesDetail/rulesDetail.js.map
  64. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/setPunchTime/setPunchTime.js.map
  65. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/stat/stat.js.map
  66. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/statDetail/statDetail.js.map
  67. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/jlk-week/components/jlk-week/jlk-week.js.map
  68. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.js.map
  69. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.js.map
  70. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.js.map
  71. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.js.map
  72. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.js.map
  73. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.js.map
  74. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-grid/components/uni-grid/uni-grid.js.map
  75. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map
  76. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js.map
  77. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js.map
  78. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.js.map
  79. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.js.map
  80. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.js.map
  81. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js.map
  82. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown.js.map
  83. 10 2
      unpackage/dist/dev/mp-weixin/app.json
  84. 31 30
      unpackage/dist/dev/mp-weixin/common/main.js
  85. 2 2
      unpackage/dist/dev/mp-weixin/common/runtime.js
  86. 4181 383
      unpackage/dist/dev/mp-weixin/common/vendor.js
  87. 1 0
      unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.js
  88. 4 0
      unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.json
  89. 1 0
      unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.wxml
  90. 5 0
      unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.wxss
  91. 317 0
      unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.js
  92. 7 0
      unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.json
  93. 1 0
      unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.wxml
  94. 95 0
      unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.wxss
  95. 70 70
      unpackage/dist/dev/mp-weixin/pages/addRules/addRules.js
  96. 54 54
      unpackage/dist/dev/mp-weixin/pages/authentication/authentication.js
  97. 52 52
      unpackage/dist/dev/mp-weixin/pages/cardRecord/cardRecord.js
  98. 57 57
      unpackage/dist/dev/mp-weixin/pages/editRules/editRules.js
  99. 336 54
      unpackage/dist/dev/mp-weixin/pages/group/group.js
  100. 0 0
      unpackage/dist/dev/mp-weixin/pages/group/group.json

BIN
components/kx-time-picker.zip


+ 107 - 0
components/kx-time-picker/kx-time-picker.vue

@@ -0,0 +1,107 @@
+<template>
+	<view>
+		<picker mode="multiSelector" @columnchange="bindMultiPickerColumnChange" @change="bindMultiChange" @cancel="bindMultiCancel" :value="multiIndex"
+			:range="multiArray">
+			<view class="uni-input">
+				<text v-if="kxTimeValue.value">{{kxTimeValue.value}}</text>
+				<text v-else class="default">请选择时间段</text>
+			</view>
+		</picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "kx-time-picker",
+		data() {
+			//根据传输时间段判断展示内容
+			let [multiIndex,mIndex] = this.multiFunt();
+			return {
+				multiIndex: multiIndex, //当前区间选中值
+				mIndex: mIndex, //选择范围区间
+			};
+		},
+		//接受参数
+		props: ['kxTimeValue'],
+		computed: {
+			//选择时间段
+			multiArray() {
+				let multiArray = [];
+				let startArray = this.hourArray(this.mIndex[0]);
+				let endArray = this.hourArray(this.mIndex[1]);
+				multiArray = [startArray, endArray];
+				console.log(multiArray)
+				return multiArray
+			},
+			//展示时间段
+			startTime() {
+				return this.multiArray[0][this.multiIndex[0]]
+			},
+			endTime() {
+				return this.multiArray[1][this.multiIndex[1]]
+			},
+			showTime() {
+				return this.startTime + '--' + this.endTime
+			},
+		},
+		methods: {
+			//数据整理
+			multiFunt(){
+				let multiIndex = [0, 0],
+					mIndex = [0, 1]
+				if (this.kxTimeValue.value) {
+					let multiA = this.kxTimeValue.value.split('--');
+					multiA = multiA.map((v) => {
+						return Number(v.split(':')[0])
+					});
+					multiIndex[0]=multiA[0];
+					mIndex[1]=multiIndex[0]+1;
+					multiIndex[1]=multiA[1]-mIndex[1];
+				}
+				return [multiIndex,mIndex]
+			},
+			//时间段数组
+			hourArray(start = 0, end = 24) {
+				let array = [];
+				if (start == 0) {
+					end = 23
+				}
+				for (let i = start; i <= end; i++) {
+					array.push(i + ':00')
+				}
+				return array
+			},
+			//修改列
+			bindMultiPickerColumnChange: function(e) {
+				this.multiIndex[e.detail.column] = e.detail.value
+				switch (e.detail.column) {
+					case 0: //拖动第1列
+						this.mIndex[1] = e.detail.value + 1
+						if (this.multiIndex[1]) this.multiIndex[1]--;
+						break
+				}
+				this.mIndex.splice(0, 0)
+			},
+			//点击确定
+			bindMultiChange(e){
+				this.$emit('kxTimeFunt',{
+					value:this.showTime,
+					start:this.startTime,
+					end:this.endTime
+				})
+			},
+			//点击取消
+			bindMultiCancel(){
+				let [multiIndex,mIndex] = this.multiFunt();
+				this.multiIndex=multiIndex;
+				this.mIndex=mIndex;
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.default{
+		color: #8f8f94;
+	}
+</style>

+ 11 - 8
main.js

@@ -1,25 +1,28 @@
-
 // #ifndef VUE3
 import Vue from 'vue'
 import App from './App'
+import dropDown from '@/uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown'
+Vue.component("dropDown", dropDown)
 
 Vue.config.productionTip = false
 
 App.mpType = 'app'
 
 const app = new Vue({
-    ...App
+	...App
 })
 app.$mount()
 // #endif
 
 // #ifdef VUE3
-import { createSSRApp } from 'vue'
+import {
+	createSSRApp
+} from 'vue'
 import App from './App.vue'
 export function createApp() {
-  const app = createSSRApp(App)
-  return {
-    app
-  }
+	const app = createSSRApp(App)
+	return {
+		app
+	}
 }
-// #endif
+// #endif

+ 9 - 0
package.json

@@ -0,0 +1,9 @@
+{
+    "id": "kx-time-picker",
+    "name": "简单的时间段选择",
+    "version": "1.0.0",
+    "description": "简单的时间段选择,提供简单的固定时间段选择,返回值有时间段和首末时间,有需要的话可以自己改",
+    "keywords": [
+        "固定时间段"
+    ]
+}

+ 51 - 7
pages.json

@@ -1,11 +1,62 @@
 {
 	"pages": [{
+			"path": "pages/setPunchTime/setPunchTime",
+			"style": {
+				"navigationBarTitleText": "添加打卡时间",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/punchTime/punchTime",
+			"style": {
+				"navigationBarTitleText": "打卡时间",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/rulesDetail/rulesDetail",
+			"style": {
+				"navigationBarTitleText": "规则明细",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/particulars/particulars",
+			"style": {
+				"navigationBarTitleText": "汇总明细",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
 			"path": "pages/home/home",
 			"style": {
 				"navigationBarTitleText": "智慧校园打卡",
 				// "navigationStyle": "custom",
 				"enablePullDownRefresh": false
 			}
+		}, {
+			"path": "pages/punchLocation/punchLocation",
+			"style": {
+				"navigationBarTitleText": "打卡位置",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/addLocation/addLocation",
+			"style": {
+				"navigationBarTitleText": "添加位置",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/group/group",
+			"style": {
+				"navigationBarTitleText": "考勤组",
+				// "navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
 		},
 		{
 			"path": "pages/statDetail/statDetail",
@@ -56,13 +107,6 @@
 				"enablePullDownRefresh": false
 			}
 		}, {
-			"path": "pages/group/group",
-			"style": {
-				"navigationBarTitleText": "考勤组",
-				// "navigationStyle": "custom",
-				"enablePullDownRefresh": false
-			}
-		}, {
 			"path": "pages/cardRecord/cardRecord",
 			"style": {
 				"navigationBarTitleText": "打卡记录",

+ 227 - 0
pages/addLocation/addLocation.vue

@@ -0,0 +1,227 @@
+<template>
+	<view class="container">
+		<!-- 地图区域 -->
+		<view class="map">
+			<map style="width: 100%; height: 100%;" :latitude="latitude" :longitude="longitude" :scale="18"
+				:markers="covers">
+			</map>
+		</view>
+
+		<!-- 顶部搜索框区域 -->
+		<view class="search">
+			<uni-search-bar placeholder="请输入搜索内容" cancelButton="none" v-model="searchValue" @input="input"
+				@clear="clear" @blur="blur">
+			</uni-search-bar>
+		</view>
+
+		<!-- 位置列表区域 -->
+		<view class="list">
+			<!-- 每一个位置区域 -->
+			<view class="box" v-for="item in list" :key="item.id">
+				<view class="icon">
+					<img src="../../static/location2.png">
+				</view>
+				<view class="place">
+					<view class="top">
+						{{item.title}}
+					</view>
+					<view class="bottom">
+						地点:{{item.place}}
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 打卡范围区域 -->
+		<view class="range">
+			<view class="key">
+				打卡范围:
+			</view>
+			<view class="value" @click="changeRange">
+				<text>300米</text>
+				<img src="../../static/right.png">
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				latitude: 39.909,
+				longitude: 116.39742,
+				covers: [{
+					id: 1,
+					latitude: 39.909,
+					longitude: 116.39742,
+					iconPath: '../../static/location.png',
+					width: 20,
+					height: 20
+				}],
+				imgUrl: "",
+				searchValue: "",
+				list: [{
+						id: 1,
+						title: "南昌交通学院",
+						place: "江西省南昌市经开区广兰大道899号"
+					},
+					{
+						id: 2,
+						title: "华东理工学院",
+						place: "江西省南昌市经开区广兰大道899号"
+					},
+					{
+						id: 3,
+						title: "江西财经大学",
+						place: "江西省南昌市经开区广兰大道899号"
+					}
+				]
+			}
+		},
+		methods: {
+			// 点击选择打卡范围回调
+			changeRange() {
+				uni.showActionSheet({
+					itemList: ['300米', '400米', '500米'],
+					success: (res) => {
+						console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
+					},
+					fail: (res) => {
+						console.log(res.errMsg);
+					}
+				});
+			},
+			// 搜索框失焦回调
+			blur(res) {
+				uni.showToast({
+					title: '搜索:' + res.value,
+					icon: 'none'
+				})
+			},
+			// 搜索框输入时的回调
+			input(res) {
+				console.log('----input:', res)
+			},
+			// 清除搜索框内容时的回调
+			clear(res) {
+				uni.showToast({
+					title: 'clear事件,清除值为:' + res.value,
+					icon: 'none'
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		.map {
+			position: relative;
+			width: 100vw;
+			height: 100vh;
+		}
+
+		.search {
+			position: fixed;
+			top: 30rpx;
+			left: 30rpx;
+			width: 690rpx;
+			height: 80rpx;
+			border-radius: 152rpx;
+			background-color: #fff;
+		}
+
+		.list {
+			position: fixed;
+			left: 30rpx;
+			bottom: 100rpx;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			width: 690rpx;
+			height: 435rpx;
+			border-radius: 18rpx 18rpx 0 0;
+			background-color: #fff;
+			overflow-y: auto;
+
+			.box {
+				display: flex;
+				align-items: center;
+				width: 630rpx;
+				height: 104rpx;
+				border-bottom: 1rpx solid #E6E6E6;
+
+				.icon {
+					margin-top: 10rpx;
+					flex: 1;
+					text-align: center;
+
+					img {
+						width: 40rpx;
+						height: 40rpx;
+					}
+				}
+
+				.place {
+					flex: 7;
+
+					.top {
+						font-size: 32rpx;
+						overflow: hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+					}
+
+					.bottom {
+						font-size: 24rpx;
+						color: #999999;
+						overflow: hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+					}
+				}
+			}
+		}
+
+		.range {
+			position: fixed;
+			left: 0;
+			bottom: 0;
+			display: flex;
+			// flex-direction: column;
+			align-items: center;
+			width: 750rpx;
+			height: 100rpx;
+			box-shadow: 1px -4px 10px 0px rgba(0, 0, 0, 0.2);
+			background-color: #fff;
+
+			.key {
+				flex: 4;
+				margin-left: 30rpx;
+				font-size: 28rpx;
+			}
+
+			.value {
+				flex: 1;
+				font-size: 28rpx;
+				color: #A6A6A6;
+
+				img {
+					margin-left: 15rpx;
+					width: 20rpx;
+					height: 25rpx;
+				}
+			}
+		}
+	}
+
+	// 解决输入框不居中问题
+	::v-deep .uni-searchbar {
+		padding: 10rpx;
+	}
+
+	::v-deep .uni-searchbar__box {
+		padding: 0;
+		height: 60rpx;
+	}
+</style>

+ 447 - 4
pages/group/group.vue

@@ -2,14 +2,95 @@
 	<view class="container">
 		<!-- 头部搜索栏区域 -->
 		<view class="search">
-			<uni-search-bar cancelButton="none" focus v-model="searchValue" @input="input" @clear="clear" @blur="blur">
+			<uni-search-bar placeholder="请输入搜索内容" cancelButton="none" v-model="searchValue" @input="input"
+				@clear="clear" @blur="blur">
 			</uni-search-bar>
 		</view>
 
 		<!-- 新增考勤组区域 -->
 		<view class="add">
-			123
+			<view class="icon" @click="handleAdd">
+				<img src="../../static/add.png">
+			</view>
+			<view class="title" @click="handleAdd">
+				新增考勤组
+			</view>
 		</view>
+
+		<!--考勤组列表区域 -->
+		<view class="group">
+			<uni-swipe-action>
+				<!-- 每一个考勤组区域 -->
+				<uni-swipe-action-item :auto-close="true" :right-options="options" @click="onClick(item.id)"
+					v-for="item in list" :key="item.id">
+
+					<view class="group_item">
+						<uni-collapse :ref="item.id+'collapse'">
+							<uni-collapse-item :title="item.title" open>
+								<view class="content">
+									<view class="num">
+										随机人数:{{item.num}}人
+									</view>
+									<!-- 树状结构区域 -->
+									<view class="tree">
+										<dropDown :node="item.textArr" @nodechange="nodechange(item.id+'collapse')">
+										</dropDown>
+									</view>
+								</view>
+							</uni-collapse-item>
+						</uni-collapse>
+					</view>
+
+				</uni-swipe-action-item>
+
+			</uni-swipe-action>
+		</view>
+
+		<!-- 新增考勤组弹窗区域 -->
+		<uni-popup ref="popup" :is-mask-click="false">
+			<view class="popup_box">
+				<view class="header">
+					新增考勤组
+				</view>
+				<view class="body">
+					<view class="name">
+						<input type="text" placeholder="请输入考勤组名称">
+					</view>
+
+					<view class="scope">
+						<view class="notes">
+							请选择考勤组范围
+						</view>
+						<view class="icon">
+							<img src="./imgs/bottom.png">
+						</view>
+					</view>
+
+					<view class="num">
+						<view class="count">
+							<view class="icon">
+								<img src="./imgs/people.png">
+							</view>
+							<view class="info">
+								680人
+							</view>
+						</view>
+						<view class="input">
+							<input type="text" placeholder="请输入打卡人数">
+						</view>
+					</view>
+				</view>
+				<view class="foot">
+					<view class="left" @click="handleCancel">
+						取消
+					</view>
+					<view class="right" @click="handleSave">
+						保存
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+
 	</view>
 </template>
 
@@ -17,19 +98,189 @@
 	export default {
 		data() {
 			return {
-				searchValue: ""
+				searchValue: "",
+				options: [{
+					text: '删除',
+					style: {
+						backgroundColor: '#D43030'
+					}
+				}],
+				list: [{
+						id: 1,
+						title: "全体学生",
+						num: 56,
+						textArr: [{
+							"name": "墨轩湖校区",
+							"id": "1",
+							"open": false,
+							"children": [{
+									"name": "学生",
+									"id": "1-1",
+									"open": false,
+									"children": [{
+											"name": "计算机专业",
+											"id": "1-1-1",
+											"open": false,
+											"children": [{
+													"name": "陈志斌",
+													"id": "1-1-1-1",
+													"open": false,
+													"children": [],
+												},
+												{
+													"name": "华志杰",
+													"id": "1-1-1-2",
+													"open": false,
+													"children": [],
+												},
+												{
+													"name": "刘子麟",
+													"id": "1-1-1-3",
+													"open": false,
+													"children": [],
+												},
+											],
+										},
+										{
+											"name": "文法分院",
+											"id": "1-1-2",
+											"open": false,
+											"children": [],
+										},
+									]
+								},
+								{
+									"name": "老师",
+									"id": "1-2",
+									"open": false,
+									"children": [{
+										"name": "辅导员",
+										"id": "1-2-1",
+										"open": false,
+										"children": [],
+									}]
+								}
+							]
+						}, ],
+					},
+
+					{
+						id: 2,
+						title: "后勤人员",
+						num: 36,
+						textArr: [{
+							"name": "黄家湖校区",
+							"id": "1",
+							"open": false,
+							"children": [{
+									"name": "商户",
+									"id": "1-1",
+									"open": false,
+									"children": [{
+											"name": "食堂",
+											"id": "1-1-1",
+											"open": false,
+											"children": [{
+													"name": "饭",
+													"id": "1-1-1-1",
+													"open": false,
+													"children": [],
+												},
+												{
+													"name": "水",
+													"id": "1-1-1-2",
+													"open": false,
+													"children": [],
+												},
+												{
+													"name": "零食",
+													"id": "1-1-1-3",
+													"open": false,
+													"children": [],
+												},
+											],
+										},
+										{
+											"name": "商业街",
+											"id": "1-1-2",
+											"open": false,
+											"children": [],
+										},
+									]
+								},
+								{
+									"name": "清洁工",
+									"id": "1-2",
+									"open": false,
+									"children": [{
+										"name": "园丁",
+										"id": "1-2-1",
+										"open": false,
+										"children": [],
+									}]
+								}
+							]
+						}, ],
+					},
+				]
 			};
 		},
+		onLoad() {
+			// this.$refs.popup.open()
+		},
 		methods: {
+			// 点击弹窗保存按钮回调
+			handleSave() {
+				this.$refs.popup.close()
+			},
+			// 点击弹窗取消按钮回调
+			handleCancel() {
+				this.$refs.popup.close()
+			},
+			// 点击新增考勤组按钮回调
+			handleAdd() {
+				console.log(123);
+				this.$refs.popup.open()
+			},
+			// 点击树状节点回调
+			nodechange(ref) {
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.$refs[ref][0].resize()
+					}, 200)
+				})
+			},
+			// 点击右侧删除按钮回调
+			onClick(id) {
+				console.log(id);
+				uni.showModal({
+					title: '提示',
+					content: '确定删除该考勤组吗?',
+					success: function(res) {
+						if (res.confirm) {
+							console.log('用户点击确定');
+							uni.showToast({
+								title: "删除成功",
+								icon: 'success'
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+			},
+			// 搜索框失焦回调
 			blur(res) {
 				uni.showToast({
 					title: '搜索:' + res.value,
 					icon: 'none'
 				})
 			},
+			// 搜索框输入时的回调
 			input(res) {
 				console.log('----input:', res)
 			},
+			// 清除搜索框内容时的回调
 			clear(res) {
 				uni.showToast({
 					title: 'clear事件,清除值为:' + res.value,
@@ -43,7 +294,6 @@
 <style lang="scss" scoped>
 	.container {
 		padding-top: 20rpx;
-		background-color: skyblue;
 
 		.search {
 			box-sizing: border-box;
@@ -56,11 +306,204 @@
 
 		.add {
 			margin-top: 20rpx;
+			display: flex;
+			align-items: center;
+			width: 750rpx;
+			height: 110rpx;
 			background-color: #fff;
+
+			.icon {
+				margin: 0 20rpx 0 30rpx;
+				width: 36rpx;
+				height: 36rpx;
+
+				img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.title {
+				font-size: 30rpx;
+				color: #0082FC;
+			}
+		}
+
+		.group {
+			margin-top: 20rpx;
+			background-color: #F2F2F2;
+
+			.group_item {
+				margin-bottom: 20rpx;
+				width: 750rpx;
+				background-color: #fff;
+
+				.content {
+					padding-bottom: 50rpx;
+
+					.num {
+						margin-left: 30rpx;
+						height: 50rpx;
+						font-size: 24rpx;
+						color: #808080;
+					}
+
+					.tree {}
+				}
+			}
+		}
+
+		.popup_box {
+			width: 630rpx;
+			height: 610rpx;
+			border-radius: 33rpx;
+			background-color: #fff;
+
+			.header {
+				width: 630rpx;
+				height: 97rpx;
+				line-height: 97rpx;
+				text-align: center;
+				font-size: 32rpx;
+				font-weight: 500;
+				border-bottom: 1rpx solid #E6E6E6;
+			}
+
+			.body {
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				width: 630rpx;
+				height: 414rpx;
+				border-bottom: 1rpx solid #E6E6E6;
+
+				.name {
+					margin-top: 42rpx;
+					width: 570rpx;
+					height: 80rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #ccc;
+
+					input {
+						padding: 0 24rpx;
+						width: 90%;
+						height: 100%;
+						font-size: 28rpx;
+						color: #B3B3B3;
+					}
+				}
+
+				.scope {
+					display: flex;
+					align-items: center;
+					margin-top: 32rpx;
+					width: 570rpx;
+					height: 80rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #ccc;
+
+					.notes {
+						padding-left: 24rpx;
+						flex: 5;
+						font-size: 28rpx;
+						color: #808080;
+					}
+
+					.icon {
+						flex: 1;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+
+						img {
+							width: 25rpx;
+							height: 20rpx;
+						}
+					}
+				}
+
+				.num {
+					display: flex;
+					align-items: center;
+					margin-top: 32rpx;
+					width: 570rpx;
+					height: 80rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #ccc;
+
+					.count {
+						flex: 2;
+						display: flex;
+						align-items: center;
+						height: 50rpx;
+						border-right: 1rpx solid #A6A6A6;
+
+						.icon {
+							flex: 1;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+
+							img {
+								width: 30rpx;
+								height: 30rpx;
+							}
+						}
+
+						.info {
+							flex: 2;
+							font-size: 28rpx;
+						}
+					}
+
+					.input {
+						flex: 4;
+
+						input {
+							padding: 0 45rpx;
+							width: 80%;
+							height: 100%;
+							font-size: 28rpx;
+						}
+					}
+				}
+			}
+
+			.foot {
+				display: flex;
+				justify-content: space-evenly;
+				align-items: center;
+				width: 630rpx;
+				height: 99rpx;
+				font-size: 28rpx;
+
+				.left {
+					flex: 1;
+					text-align: center;
+					border-right: 1rpx solid #CCC;
+				}
+
+				.right {
+					flex: 1;
+					text-align: center;
+					color: #2A82E4;
+				}
+			}
 		}
 	}
 
+	// 解决输入框不居中问题
 	::v-deep .uni-searchbar {
 		padding: 10rpx;
 	}
+
+	// 解决左滑区域突出问题
+	::v-deep .uni-swipe_button-group {
+		margin-bottom: 20rpx;
+	}
+
+	// 清除树状组件下边框
+	::v-deep .uni-collapse-item__wrap-content.uni-collapse-item--border {
+		border-bottom: none;
+	}
 </style>

BIN
pages/group/imgs/bottom.png


BIN
pages/group/imgs/people.png


+ 1 - 1
pages/index/index.vue

@@ -16,6 +16,6 @@
 	}
 </script>
 
-<style>
+<style lang="scss" scoped>
 	.container {}
 </style>

BIN
pages/particulars/imgs/finished.png


BIN
pages/particulars/imgs/rule.png


BIN
pages/particulars/imgs/unfinished.png


+ 173 - 0
pages/particulars/particulars.vue

@@ -0,0 +1,173 @@
+<template>
+	<view class="container">
+		<!-- 顶部搜索框区域 -->
+		<view class="search">
+			<uni-search-bar placeholder="请输入打卡规则名称" cancelButton="none" v-model="searchValue" @input="input"
+				@clear="clear" @blur="blur">
+			</uni-search-bar>
+		</view>
+
+		<!-- 规则列表区域 -->
+		<view class="list">
+			<!-- 每一个规则区域 -->
+			<view class="box" v-for="item in list" :key="item.id">
+				<view class="icon">
+					<img src="./imgs/rule.png">
+				</view>
+				<view class="info">
+					<view class="title">
+						{{item.title}}
+					</view>
+					<view class="status">
+						<span class="right">全勤:{{item.allPeople}}人</span>
+						<span>异常:{{item.errPeople}}人</span>
+					</view>
+				</view>
+				<!-- 右上角图标区域 -->
+				<view class="image">
+					<img v-if="item.status==1" src="./imgs/unfinished.png">
+					<img v-if="item.status==2" src="./imgs/finished.png">
+				</view>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				searchValue: "",
+				list: [{
+						id: 1,
+						title: "课间操打卡",
+						allPeople: 500,
+						errPeople: 20,
+						status: 1
+					},
+					{
+						id: 2,
+						title: "课间操打卡",
+						allPeople: 600,
+						errPeople: 20,
+						status: 1
+					},
+					{
+						id: 3,
+						title: "课间操打卡",
+						allPeople: 100,
+						errPeople: 10,
+						status: 2
+					},
+					{
+						id: 4,
+						title: "课间操打卡",
+						allPeople: 600,
+						errPeople: 20,
+						status: 1
+					},
+				]
+			}
+		},
+		methods: {
+			// 搜索框失焦回调
+			blur(res) {
+				uni.showToast({
+					title: '搜索:' + res.value,
+					icon: 'none'
+				})
+			},
+			// 搜索框输入时的回调
+			input(res) {
+				console.log('----input:', res)
+			},
+			// 清除搜索框内容时的回调
+			clear(res) {
+				uni.showToast({
+					title: 'clear事件,清除值为:' + res.value,
+					icon: 'none'
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding-top: 20rpx;
+
+		.search {
+			margin: 0 auto;
+			width: 690rpx;
+			height: 90rpx;
+			border-radius: 171rpx;
+			background-color: #fff;
+		}
+
+		.list {
+			margin-top: 20rpx;
+			padding-bottom: 30rpx;
+
+			.box {
+				display: flex;
+				margin: 0 auto;
+				margin-bottom: 20rpx;
+				width: 690rpx;
+				height: 130rpx;
+				background-color: #fff;
+
+				.icon {
+					flex: 1;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+
+					img {
+						width: 60rpx;
+						height: 60rpx;
+					}
+
+				}
+
+				.info {
+					flex: 6;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-evenly;
+
+					.title {
+						font-size: 30rpx;
+					}
+
+					.status {
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #A6A6A6;
+
+						.right {
+							margin-right: 20rpx;
+						}
+					}
+				}
+
+				.image {
+					margin-top: -5rpx;
+					margin-right: -5rpx;
+					width: 83rpx;
+					height: 83rpx;
+
+					img {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+		}
+	}
+
+	// 解决输入框不居中问题
+	::v-deep .uni-searchbar {
+		padding: 10rpx;
+	}
+</style>

+ 206 - 0
pages/punchLocation/punchLocation.vue

@@ -0,0 +1,206 @@
+<template>
+	<view class="container">
+		<!-- 头部添加打卡时间区域 -->
+		<view class="add">
+			<view class="icon" @click="handleAdd">
+				<img src="../../static/add.png">
+			</view>
+			<view class="title" @click="handleAdd">
+				添加打卡位置
+			</view>
+			<view class="none"></view>
+		</view>
+
+		<!-- 打卡时间列表 -->
+		<view class="list">
+			<uni-swipe-action>
+				<!-- 每一个时间段区域 -->
+				<uni-swipe-action-item :auto-close="true" :right-options="options" @click="onClick(item.id)"
+					v-for="item in list" :key="item.id">
+					
+					<view class="box">
+						<view class="icon">
+							<img src="../../static/location2.png">
+						</view>
+						<view class="place">
+							<view class="top">
+								{{item.title}}
+							</view>
+							<view class="center">
+								地址:{{item.place}}
+							</view>
+							<view class="bottom">
+								范围:{{item.scope}}
+							</view>
+						</view>
+						<view class="right">
+							<img src="../../static/right.png">
+						</view>
+					</view>
+				</uni-swipe-action-item>
+			</uni-swipe-action>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: [{
+						id: 1,
+						title: "操场",
+						place: "江西省南昌市经开区广兰大道899号",
+						scope:"300米"
+					},
+					{
+						id: 2,
+						title: "操场",
+						place: "江西省南昌市经开区广兰大道899号",
+						scope:"400米"
+					},
+					{
+						id: 3,
+						title: "操场",
+						place: "江西省南昌市经开区广兰大道899号",
+						scope:"500米"
+					}
+				],
+				options: [{
+					text: '删除',
+					style: {
+						backgroundColor: '#D43030'
+					}
+				}],
+			}
+		},
+		methods: {
+			handleAdd() {
+				console.log("添加打卡位置");
+			},
+			// 点击右侧删除按钮回调
+			onClick(id) {
+				console.log(id);
+				uni.showModal({
+					title: '提示',
+					content: '确定删除该打卡位置吗?',
+					success: function(res) {
+						if (res.confirm) {
+							console.log('用户点击确定');
+							uni.showToast({
+								title: "删除成功",
+								icon: 'success'
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding-top: 20rpx;
+
+		.add {
+			display: flex;
+			margin: 0 auto;
+			width: 690rpx;
+			height: 87rpx;
+			line-height: 87rpx;
+			border-radius: 14rpx;
+			background-color: #fff;
+
+			.icon {
+				flex: 1;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				img {
+					width: 36rpx;
+					height: 36rpx;
+				}
+			}
+
+			.title {
+				flex: 3;
+				font-size: 30rpx;
+				color: #0082FC;
+			}
+
+			.none {
+				flex: 5;
+			}
+		}
+
+		.list {
+			margin-top: 20rpx;
+			padding-bottom: 30rpx;
+			
+			.box {
+				display: flex;
+				align-items: center;
+				margin: 0 auto;
+				margin-bottom: 20rpx;
+				width: 690rpx;
+				height: 137rpx;
+				border-radius: 14rpx;
+				background-color: #fff;
+			
+				.icon {
+					margin-top: 10rpx;
+					flex: 1;
+					text-align: center;
+			
+					img {
+						width: 40rpx;
+						height: 40rpx;
+					}
+				}
+			
+				.place {
+					flex: 7;
+			
+					.top {
+						font-size: 32rpx;
+						overflow: hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+					}
+					.center{
+						font-size: 24rpx;
+						color: #999999;
+						overflow: hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+					}
+			
+					.bottom {
+						font-size: 24rpx;
+						color: #999999;
+						overflow: hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+					}
+				}
+				.right{
+					flex: 1;
+					text-align: center;
+					img{
+						width: 15rpx;
+						height: 28rpx;
+					}
+				}
+			}
+		}
+	}
+
+	// 解决左滑区域突出问题
+	::v-deep .uni-swipe_button-group {
+		margin-bottom: 20rpx;
+	}
+</style>

+ 208 - 0
pages/punchTime/punchTime.vue

@@ -0,0 +1,208 @@
+<template>
+	<view class="container">
+		<!-- 头部添加打卡时间区域 -->
+		<view class="add">
+			<view class="icon" @click="handleAdd">
+				<img src="../../static/add.png">
+			</view>
+			<view class="title" @click="handleAdd">
+				添加打卡时间
+			</view>
+			<view class="none"></view>
+		</view>
+
+		<!-- 打卡时间列表 -->
+		<view class="list">
+			<uni-swipe-action>
+				<!-- 每一个时间段区域 -->
+				<uni-swipe-action-item :auto-close="true" :right-options="options" @click="onClick(item.id)"
+					v-for="item in list" :key="item.id">
+					<view class="box">
+						<view class="left">
+							<view class="week">
+								<view class="key">
+									星期
+								</view>
+								<view class="value">
+									{{item.week}}
+								</view>
+							</view>
+							<view class="week">
+								<view class="key">
+									时段
+								</view>
+								<view class="value">
+									{{item.time}}
+								</view>
+							</view>
+						</view>
+						<view class="right">
+							<img src="../../static/right.png">
+						</view>
+					</view>
+				</uni-swipe-action-item>
+			</uni-swipe-action>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: [{
+						id: 1,
+						week: "周一,周二,周三,周四,周五,周六,周日",
+						time: "09:00-17:00、20:00-21:00、22:00-23:00"
+					},
+					{
+						id: 2,
+						week: "周一,周二,周三,周四,周五,周六,周日",
+						time: "09:00-17:00"
+					},
+					{
+						id: 3,
+						week: "周一,周二,周三,周四,周五,周六,周日",
+						time: "12:00-17:00"
+					},
+					{
+						id: 4,
+						week: "周一,周二,周三,周四,周五,周六,周日",
+						time: "09:00-17:00、20:00-21:00、22:00-23:00"
+					},
+				],
+				options: [{
+					text: '删除',
+					style: {
+						backgroundColor: '#D43030'
+					}
+				}],
+			}
+		},
+		methods: {
+			handleAdd() {
+				console.log("添加打卡时间");
+				uni.navigateTo({
+					url:"/pages/setPunchTime/setPunchTime"
+				})
+			},
+			// 点击右侧删除按钮回调
+			onClick(id) {
+				console.log(id);
+				uni.showModal({
+					title: '提示',
+					content: '确定删除该打卡时间吗?',
+					success: function(res) {
+						if (res.confirm) {
+							console.log('用户点击确定');
+							uni.showToast({
+								title: "删除成功",
+								icon: 'success'
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding-top: 20rpx;
+
+		.add {
+			display: flex;
+			margin: 0 auto;
+			width: 690rpx;
+			height: 87rpx;
+			line-height: 87rpx;
+			border-radius: 14rpx;
+			background-color: #fff;
+
+			.icon {
+				flex: 1;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				img {
+					width: 36rpx;
+					height: 36rpx;
+				}
+			}
+
+			.title {
+				flex: 3;
+				font-size: 30rpx;
+				color: #0082FC;
+			}
+
+			.none {
+				flex: 5;
+			}
+		}
+
+		.list {
+			margin-top: 20rpx;
+			padding-bottom: 30rpx;
+
+			.box {
+				display: flex;
+				margin: 0 auto;
+				margin-bottom: 20rpx;
+				width: 690rpx;
+				height: 132rpx;
+				border-radius: 14rpx;
+				background-color: #fff;
+
+				.left {
+					flex: 5;
+					display: flex;
+					flex-direction: column;
+					margin-left: 17rpx;
+
+					.week {
+						flex: 1;
+						display: flex;
+						align-items: center;
+						font-size: 24rpx;
+
+						.key {
+							flex: 1;
+							margin-left: 8rpx;
+							color: #A6A6A6;
+						}
+
+						.value {
+							flex: 5;
+							overflow: hidden;
+							white-space: nowrap;
+							text-overflow: ellipsis;
+						}
+					}
+				}
+
+				.right {
+					flex: 2;
+					display: flex;
+					justify-content: flex-end;
+					align-items: center;
+
+					img {
+						margin-right: 20rpx;
+						width: 20rpx;
+						height: 30rpx;
+					}
+				}
+			}
+		}
+	}
+
+	// 解决左滑区域突出问题
+	::v-deep .uni-swipe_button-group {
+		margin-bottom: 20rpx;
+	}
+</style>

+ 1 - 1
pages/ruleSet/ruleSet.vue

@@ -3,7 +3,7 @@
 		<!-- 头部新增规则区域 -->
 		<view class="add" @click="toPageAddRules">
 			<view class="icon">
-				<img src="./imgs/add.png">
+				<img src="../../static/add.png">
 			</view>
 			<view class="title">
 				新增规则

+ 211 - 0
pages/rulesDetail/rulesDetail.vue

@@ -0,0 +1,211 @@
+<template>
+	<view class="container">
+		<!-- 顶部搜索框区域 -->
+		<view class="search">
+			<uni-search-bar bgColor="#fff" placeholder="请输入名字或院系" cancelButton="none" v-model="searchValue" @input="input"
+				@clear="clear" @blur="blur">
+			</uni-search-bar>
+		</view>
+
+		<view class="list">
+			<!-- 分段器区域 -->
+			<view class="control">
+				<uni-segmented-control :current="current" :values="items" styleType="text" @clickItem="onClickItem"
+					activeColor="#0082FC"></uni-segmented-control>
+			</view>
+			<!-- 列表区域 -->
+			<view class="listbox">
+				<!-- 每一个盒子区域 -->
+				<view class="item" v-for="item in list" :key="item.id">
+					<view class="left">
+						<img :src="item.url">
+					</view>
+					<view class="center">
+						<view class="name">
+							{{item.name}}
+						</view>
+						<view class="college">
+							{{item.college}}
+						</view>
+					</view>
+					<view class="right">
+						{{item.status==1?"正常":"缺卡"}}
+					</view>
+				</view>
+			</view>
+
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				searchValue: "",
+				items: ['打卡成功(50/150人)', '打卡失败(28/150人)'],
+				current: 0,
+
+				list: [],
+				list2: [{
+						id: 1,
+						url: "../../static/ceshi.jpg",
+						name: "张三",
+						college: "文法学院",
+						status: 1
+					},
+					{
+						id: 2,
+						url: "../../static/ceshi.jpg",
+						name: "李四",
+						college: "文法学院",
+						status: 1
+					},
+					{
+						id: 3,
+						url: "../../static/ceshi.jpg",
+						name: "王五",
+						college: "文法学院",
+						status: 1
+					},
+				],
+				list3: [{
+						id: 1,
+						url: "../../static/ceshi.jpg",
+						name: "伍六七",
+						college: "文法学院",
+						status: 2
+					},
+					{
+						id: 2,
+						url: "../../static/ceshi.jpg",
+						name: "喜羊羊",
+						college: "文法学院",
+						status: 2
+					},
+					{
+						id: 3,
+						url: "../../static/ceshi.jpg",
+						name: "灰太狼",
+						college: "文法学院",
+						status: 2
+					},
+				]
+			}
+		},
+		onLoad(options) {
+			this.list = this.list2
+		},
+		methods: {
+			onClickItem(e) {
+				console.log(e.currentIndex);
+				if (e.currentIndex == 0) {
+					this.list = this.list2
+				} else {
+					this.list = this.list3
+				}
+			},
+			// 搜索框失焦回调
+			blur(res) {
+				uni.showToast({
+					title: '搜索:' + res.value,
+					icon: 'none'
+				})
+			},
+			// 搜索框输入时的回调
+			input(res) {
+				console.log('----input:', res)
+			},
+			// 清除搜索框内容时的回调
+			clear(res) {
+				uni.showToast({
+					title: 'clear事件,清除值为:' + res.value,
+					icon: 'none'
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding-top: 20rpx;
+
+		.search {
+			width: 750rpx;
+			height: 90rpx;
+			border-radius: 171rpx;
+			background-color: #fff;
+		}
+
+		.list {
+			margin-top: 20rpx;
+			width: 750rpx;
+			background-color: #fff;
+
+			.control {
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				width: 750rpx;
+				height: 102rpx;
+			}
+
+			.listbox {
+				.item {
+					display: flex;
+					align-items: center;
+					margin: 0 30rpx;
+					height: 114rpx;
+					border-bottom: 1rpx solid #E5E5E5;
+					background-color: #fff;
+
+					.left {
+						flex: 1;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+
+						img {
+							width: 70rpx;
+							height: 70rpx;
+							border-radius: 35rpx;
+						}
+					}
+
+					.center {
+						flex: 5;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-evenly;
+						margin-left: 10rpx;
+						height: 90rpx;
+
+						.name {
+							font-size: 28rpx;
+						}
+
+						.college {
+							font-size: 24rpx;
+							color: #808080;
+						}
+					}
+
+					.right {
+						flex: 1;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						font-size: 28rpx;
+					}
+				}
+			}
+		}
+	}
+
+	// 解决输入框不居中问题
+	::v-deep .uni-searchbar {
+		padding: 10rpx;
+	}
+</style>

+ 250 - 0
pages/setPunchTime/setPunchTime.vue

@@ -0,0 +1,250 @@
+<template>
+	<view class="container">
+		<!-- 选择星期区域 -->
+		<view class="week_title">
+			选择星期
+		</view>
+		<view class="week">
+			<jlk-week :value="selectedWeeks" @change="changeWeek"></jlk-week>
+		</view>
+
+		<!-- 选择打卡时间段区域 -->
+		<view class="time_list">
+			<view class="title">
+				选择打卡时间段
+			</view>
+			<view class="add" @click="handleAddTime">
+				添加时段
+			</view>
+		</view>
+
+		<view class="list">
+
+			<!-- 每一个时间段区域 -->
+			<view class="item" v-for="(item,index) in list" :key="index">
+				<view class="item_box">
+					<picker mode="time" :value="item.startTime" @change="bindTimeChange($event,1,item)">
+						<view class="uni-input">
+							<view class="input_time">
+								{{item.startTime}}
+							</view>
+							<view class="input_icon">
+								<img src="../../static/time.png">
+							</view>
+						</view>
+					</picker>
+				</view>
+				--
+				<view class="item_box">
+					<picker mode="time" :value="item.endTime" @change="bindTimeChange($event,2,item)">
+						<view class="uni-input">
+							<view class="input_time">
+								{{item.endTime}}
+							</view>
+							<view class="input_icon">
+								<img src="../../static/time.png">
+							</view>
+						</view>
+					</picker>
+				</view>
+			</view>
+
+			<view class="edit">
+				编辑
+			</view>
+
+		</view>
+
+		<!-- switch区域 -->
+		<view class="switch">
+			<view class="switch_title">
+				除去法定节假日
+			</view>
+			<view class="switch_button">
+				<switch color="#2A82E4" @change="switchChange" />
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import JlkWeek from '@/uni_modules/jlk-week/components/jlk-week/jlk-week.vue';
+	export default {
+		components: {
+			JlkWeek
+		},
+		data() {
+			return {
+				selectedWeeks: [],
+				startTime: "09:00",
+				endTime: "12:00",
+				list: [{
+						startTime: "09:00",
+						endTime: "12:00",
+					},
+					{
+						startTime: "00:00",
+						endTime: "00:00",
+					},
+				]
+			}
+		},
+		methods: {
+			changeWeek(value) {
+				console.log(value);
+				this.selectedWeeks = value
+			},
+			bindTimeChange(e, val,item) {
+				console.log(e);
+				console.log(val);
+				console.log(item);
+				if (val == 1) {
+					item.startTime = e.detail.value
+				} else {
+					item.endTime = e.detail.value
+				}
+			},
+			handleAddTime() {
+				this.list.push({
+					startTime: "00:00",
+					endTime: "00:00",
+				})
+			},
+			switchChange(e) {
+				console.log('switch1 发生 change 事件,携带值为', e.detail.value)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding-top: 33rpx;
+
+		.week_title {
+			margin-left: 35rpx;
+			font-size: 34rpx;
+			font-weight: 500;
+		}
+
+		.week {
+			margin: 0 auto;
+			margin-top: 12rpx;
+			width: 690rpx;
+			height: 107rpx;
+			border-radius: 10rpx;
+			background-color: #fff;
+		}
+
+		.time_list {
+			display: flex;
+			align-items: center;
+			margin: 0 auto;
+			margin-top: 32rpx;
+			width: 690rpx;
+			height: 60rpx;
+			font-weight: 500;
+
+			.title {
+				flex: 4;
+				font-size: 34rpx;
+			}
+
+			.add {
+				flex: 1;
+				text-align: end;
+				font-size: 24rpx;
+				color: #3396FB;
+			}
+		}
+
+		.list {
+			margin: 0 auto;
+			margin-top: 13rpx;
+			padding-top: 20rpx;
+			width: 690rpx;
+			border-radius: 10rpx;
+			background-color: #fff;
+
+			.item {
+				display: flex;
+				justify-content: space-between;
+				margin: 0 20rpx 20rpx 20rpx;
+				width: 650rpx;
+				height: 60rpx;
+
+				.item_box {
+					width: 291rpx;
+					height: 60rpx;
+					border-radius: 8rpx;
+					border: 1rpx solid #CCCCCC;
+
+					.uni-input {
+						display: flex;
+						align-items: center;
+						width: 291rpx;
+						height: 60rpx;
+
+						.input_time {
+							flex: 2;
+							margin-left: 34rpx;
+							font-size: 28rpx;
+							color: #707070;
+						}
+
+						.input_icon {
+							flex: 1;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+
+							img {
+								width: 26rpx;
+								height: 26rpx;
+							}
+						}
+					}
+				}
+			}
+
+			.edit {
+				margin-left: 20rpx;
+				padding-top: 10rpx;
+				width: 70rpx;
+				height: 60rpx;
+				color: #3396FB;
+				font-size: 24rpx;
+				font-weight: 500;
+			}
+		}
+
+		.switch {
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			margin: 0 auto;
+			margin-top: 20rpx;
+			padding: 0 20rpx;
+			width: 690rpx;
+			height: 86rpx;
+			border-radius: 10rpx;
+			background: #FFFFFF;
+
+			.switch_title {
+				flex: 5;
+				font-size: 34rpx;
+				font-weight: 500;
+			}
+
+			.switch_button {
+				flex: 1;
+			}
+		}
+	}
+
+	// 选择星期区域圆角效果
+	::v-deep .weeks-outer {
+		border-radius: 10rpx;
+	}
+</style>

+ 1 - 0
pages/statDetail/statDetail.vue

@@ -403,6 +403,7 @@
 				}
 
 				.msg {
+					margin-left: 30rpx;
 
 					.msg_item {
 						display: flex;

pages/ruleSet/imgs/add.png → static/add.png


BIN
static/ceshi.jpg


BIN
static/location2.png


BIN
static/time.png


+ 11 - 0
uni_modules/jlk-week/changelog.md

@@ -0,0 +1,11 @@
+## 1.0.4(2022-08-08)
+增加国际化
+## 1.0.3(2022-08-08)
+修改样式名称,防止与其他样式冲突;
+增加标题及自定义标题样式;
+## 1.0.2(2022-08-05)
+自定义圆角,大小,颜色 ,背景色;禁用功能;禁选某个选项功能;垂直排列;
+## 1.0.1(2022-08-05)
+使用HBuildX工具创建uni_modules插件,init
+## 1.0.0(2022-08-04)
+- init

+ 2 - 0
uni_modules/jlk-week/components/jlk-icon/changelog.md

@@ -0,0 +1,2 @@
+## 1.0.0(2022-08-04)
+- init

+ 43 - 0
uni_modules/jlk-week/components/jlk-icon/components/jlk-icon/jlk-icon.vue

@@ -0,0 +1,43 @@
+<template>
+	<view 
+		:class="`iconfont icon-${name}`" 
+		:style="{
+			color:`${color}`,
+			fontSize:`${size}rpx`,
+			fontWeight:`${bold ? 'bold' : 'normal'}`
+		}"
+	></view>
+</template>
+<script>
+	export default {
+		props:{
+			name:{
+				type:String,
+				default:''
+			},
+			color:{
+				type:String,
+				default:''
+			},
+			size:{
+				type:[String,Number],
+				default:32
+			},
+			bold:{
+				type:Boolean,
+				default:false
+			}
+		},
+		data(){
+			return {
+				
+			}
+		},
+		methods:{
+
+		}
+	}
+</script>
+<style>
+	@import url(http://at.alicdn.com/t/c/font_3171548_6ckfwk10cbu.css);
+</style>

+ 81 - 0
uni_modules/jlk-week/components/jlk-icon/package.json

@@ -0,0 +1,81 @@
+{
+  "id": "jlk-icon",
+  "displayName": "jlk-icon",
+  "version": "1.0.0",
+  "description": "jlk-icon",
+  "keywords": [
+    "jlk-icon"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "",
+      "data": "",
+      "permissions": ""
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "u",
+        "aliyun": "u"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "u",
+          "vue3": "u"
+        },
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "u",
+          "Android Browser": "u",
+          "微信浏览器(Android)": "u",
+          "QQ浏览器(Android)": "u"
+        },
+        "H5-pc": {
+          "Chrome": "u",
+          "IE": "u",
+          "Edge": "u",
+          "Firefox": "u",
+          "Safari": "u"
+        },
+        "小程序": {
+          "微信": "u",
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+          "QQ": "u",
+          "钉钉": "u",
+          "快手": "u",
+          "飞书": "u",
+          "京东": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 4 - 0
uni_modules/jlk-week/components/jlk-icon/readme.md

@@ -0,0 +1,4 @@
+# jlk-icon
+> 组件名:jlk-week
+
+图标

+ 20 - 0
uni_modules/jlk-week/components/jlk-week/i18n/en.json

@@ -0,0 +1,20 @@
+{
+	"Week":{
+		"Value":"Week",
+		"Chou":"Week",
+		"Monday":"Monday",
+		"Tuesday":"Tuesday",
+		"Wednesday":"Wednesday",
+		"Thursday":"Thursday",
+		"Friday":"Friday",
+		"Saturday":"Saturday",
+		"Sunday":"Sunday",
+		"Mon":"Mon",
+		"Tue":"Tue",
+		"Wed":"Wed",
+		"Thu":"Thu",
+		"Fri":"Fri",
+		"Sat":"Sat",
+		"Sun":"Sun"
+	}
+}

+ 6 - 0
uni_modules/jlk-week/components/jlk-week/i18n/index.js

@@ -0,0 +1,6 @@
+import en from './en.json'
+import zh from './zh.json'
+export default {
+	en,
+	zh
+}

+ 20 - 0
uni_modules/jlk-week/components/jlk-week/i18n/zh.json

@@ -0,0 +1,20 @@
+{
+	"Week":{
+		"Value":"星期",
+		"Chou":"周",
+		"Monday":"周一",
+		"Tuesday":"周二",
+		"Wednesday":"周三",
+		"Thursday":"周四",
+		"Friday":"周五",
+		"Saturday":"周六",
+		"Sunday":"周日",
+		"Mon":"周一",
+		"Tue":"周二",
+		"Wed":"周三",
+		"Thu":"周四",
+		"Fri":"周五",
+		"Sat":"周六",
+		"Sun":"周日"
+	}
+}

+ 239 - 0
uni_modules/jlk-week/components/jlk-week/jlk-week.vue

@@ -0,0 +1,239 @@
+<template>
+	<view class="weeks-outer" :style="{backgroundColor:bgcolor}">
+		<view class="weeks-title" v-if="!!title" :style="titleStyles">
+			{{title}}
+		</view>
+		<view class="weeks" :class="{'weeks-vertical':vertical}">
+			<template v-for="item in weeks">
+				<view :key="item.value" class="weeks-item" :style="{
+						background: item.checked ? selectedColor : defaultColor,
+						width: `${size}rpx`,
+						height: `${size}rpx`,
+						lineHeight: `${size}rpx`,
+						fontSize: `${fontSize}rpx`,
+						color:`${color}`,
+						borderRadius: `${radius.indexOf('%') > 0 ? radius : (radius+'rpx')}`
+					}" @tap="tapWeek(item)">
+					{{item.text}}
+					<jlk-icon name="jinzhi" color="red" size="48" class="icon-position" v-if="item.disabled"></jlk-icon>
+				</view>
+			</template>
+		</view>
+	</view>
+</template>
+
+<script>
+	import messages from './i18n/index.js'
+	import Vue from 'vue'
+	import VueI18n from 'vue-i18n'
+	Vue.use(VueI18n)
+	// let lang = navigator.language.toLowerCase().includes('en')?'en':'zh'
+	let lang = 'zh'
+	const i18n = new VueI18n({
+		locale: lang === 'zh' ? 'zh-CN' : 'en-US',
+		messages: messages
+	})
+	export default {
+		props: {
+			title: {
+				type: String,
+				default: ''
+			},
+			titleStyles: {
+				type: String,
+				default: ''
+			},
+			value: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+			forbidden: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+			color: {
+				type: String,
+				default: '#FFFFFF'
+			},
+			bgcolor: {
+				type: String,
+				default: '#FFFFFF'
+			},
+			defaultColor: {
+				type: String,
+				default: '#BBBBBB'
+			},
+			selectedColor: {
+				type: String,
+				default: '#2A82E4'
+			},
+			size: {
+				type: [String, Number],
+				default: 72
+			},
+			fontSize: {
+				type: [String, Number],
+				default: 24
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			radius: {
+				type: [String, Number],
+				default: '100%'
+			},
+			vertical: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				weeks: [],
+				selectedWeeks: [],
+			}
+		},
+		mounted() {
+			this.weeks = [{
+					text: i18n.t('Week.Mon'),
+					value: 1,
+					checked: false,
+					disabled: false
+				},
+				{
+					text: i18n.t('Week.Tue'),
+					value: 2,
+					checked: false,
+					disabled: false
+				},
+				{
+					text: i18n.t('Week.Wed'),
+					value: 3,
+					checked: false,
+					disabled: false
+				},
+				{
+					text: i18n.t('Week.Thu'),
+					value: 4,
+					checked: false,
+					disabled: false
+				},
+				{
+					text: i18n.t('Week.Fri'),
+					value: 5,
+					checked: false,
+					disabled: false
+				},
+				{
+					text: i18n.t('Week.Sat'),
+					value: 6,
+					checked: false,
+					disabled: false
+				},
+				{
+					text: i18n.t('Week.Sun'),
+					value: 0,
+					checked: false,
+					disabled: false
+				}
+			]
+
+			for (let i = 0; i < this.forbidden.length; i++) {
+				for (let j = 0; j < this.weeks.length; j++) {
+					if (this.forbidden[i] === this.weeks[j].value) {
+						this.weeks[j].disabled = true
+					}
+				}
+			}
+
+			this.selectedWeeks = this.value
+			this.initWeek()
+		},
+		methods: {
+			// 初始化week
+			initWeek() {
+				this.weeks.forEach(item => {
+					this.selectedWeeks.forEach(pro => {
+						if (item.value === pro) {
+							item.checked = true
+						}
+					})
+				})
+			},
+			//修改week样式
+			tapWeek(item) {
+				// 禁用插件
+				if (this.disabled) return
+
+				// 禁用某几个
+				for (let i = 0; i < this.forbidden.length; i++) {
+					if (this.forbidden[i] === item.value) {
+						item.disabled = true
+						return
+					}
+				}
+
+				item.checked = !item.checked
+				if (item.checked) {
+					if (this.selectedWeeks.indexOf(item.value) === -1) {
+						this.selectedWeeks.push(item.value)
+					}
+				} else {
+					let index = this.selectedWeeks.indexOf(item.value)
+					if (index !== -1) {
+						this.selectedWeeks.splice(index, 1)
+					}
+				}
+				this.$emit('change', this.selectedWeeks)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.weeks-outer {
+		width: 100%;
+		padding: 20rpx 0;
+	}
+
+	.weeks-title {
+		text-align: center;
+		padding: 40rpx 32rpx;
+		color: #666666;
+	}
+
+	.weeks {
+		display: flex;
+		flex-direction: row;
+		justify-content: space-evenly;
+		align-items: center;
+	}
+
+	.weeks .weeks-item {
+		position: relative;
+		text-align: center;
+	}
+
+	.weeks-vertical {
+		flex-direction: column;
+	}
+
+	.weeks-vertical .weeks-item {
+		margin: 10rpx 0;
+	}
+
+	.icon-position {
+		position: absolute;
+		top: 0;
+		right: 0;
+		bottom: 0;
+		left: 0;
+		margin: auto;
+		opacity: 0.5;
+	}
+</style>

+ 81 - 0
uni_modules/jlk-week/package.json

@@ -0,0 +1,81 @@
+{
+  "id": "jlk-week",
+  "displayName": "jlk-week",
+  "version": "1.0.4",
+  "description": "星期选择器",
+  "keywords": [
+    "jlk-week"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "y",
+          "vue3": "u"
+        },
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "u",
+          "Android Browser": "u",
+          "微信浏览器(Android)": "u",
+          "QQ浏览器(Android)": "u"
+        },
+        "H5-pc": {
+          "Chrome": "u",
+          "IE": "u",
+          "Edge": "u",
+          "Firefox": "u",
+          "Safari": "u"
+        },
+        "小程序": {
+          "微信": "u",
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+          "QQ": "u",
+          "钉钉": "u",
+          "快手": "u",
+          "飞书": "u",
+          "京东": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 4 - 0
uni_modules/jlk-week/readme.md

@@ -0,0 +1,4 @@
+# jlk-week
+> 组件名:jlk-week
+
+星期选择器

+ 2 - 1
uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue

@@ -318,7 +318,8 @@
 
 			&-text {
 				flex: 1;
-				font-size: 14px;
+				font-size: 18px;
+				font-weight: 600;
 				/* #ifndef APP-NVUE */
 				white-space: nowrap;
 				color: inherit;

+ 16 - 0
uni_modules/zwx-dropDown/changelog.md

@@ -0,0 +1,16 @@
+## 1.10(2022-01-14)
+修复h5不能使用问题
+## 1.0.9(2022-01-14)
+新增节点事件以及文件选择事件
+## 1.0.8(2022-01-13)
+无
+## 1.0.7(2022-01-13)
+无
+## 1.0.6(2022-01-13)
+无
+## 1.0.5(2022-01-13)
+无
+## 1.0.1(2022-01-13)
+无
+## 1.0.0(2022-01-13)
+递归组件展示树结构,以及展示各分支下的文件

+ 89 - 0
uni_modules/zwx-dropDown/components/zwx-dropDown/README.md

@@ -0,0 +1,89 @@
+## 递归组件
+## 适用于组织架构的基础展示
+入口文件(main.js)引用组件注意组件的路径
+```
+import dropDown from '@/uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown'
+Vue.component("dropDown",dropDown)
+```
+调用(textArr为用到的数据)
+```
+<dropDown :node="textArr" @nodechange="nodechange" @filechange="filechange"></dropDown>
+```
+树结构格式例子
+```
+[{
+		"name": "一级架构",
+		"id": "1",
+		"open": false,
+		"children": [{
+				"name": "二级架构",
+				"id": "1-1",
+				"open": false,
+				"file": [{
+					"name": "1.txt",
+					"fileid":"41245654"
+				},
+				{
+					"name": "2.txt",
+					"fileid":"78545562"
+				}],
+				"children": [{
+					"name": "三级架构",
+					"id": "1-1-1",
+					"open": false,
+					"children": [],
+					"file": [{
+						"name": "3.txt",
+						"fileid":"8565788"
+					}]
+				}]
+			},
+			{
+				"name": "二级架构",
+				"id": "1-2",
+				"open": false,
+				"children": [{
+					"name": "三级架构",
+					"id": "1-2-1",
+					"open": false,
+					"children": [],
+					"file": [{
+						"name": "xxx.txt",
+						"fileid":"13454574"
+					}]
+				}]
+			}
+		]
+	},
+	{
+		"name": "一级架构",
+		"id": "2",
+		"open": false,
+		"children": [{
+			"name": "二级架构",
+			"id": "2-1",
+			"open": false,
+			"children": []
+		}]
+	},
+	{
+		"name": "一级架构",
+		"id": "3",
+		"open": false,
+		"children": []
+	},
+	{
+		"name": "一级架构",
+		"id": "4",
+		"open": false,
+		"children": []
+	}
+]
+
+```
+## 事件说明
+
+| 事件名 | 说明 | 回调 |
+| ------- | ------- | ------- |
+|     nodechange    |     点击node节点触发    |     ({ visible })=>{}    |
+|     filechange    |     点击文件触发    |     ({ visible })=>{}    |

File diff suppressed because it is too large
+ 1110 - 0
uni_modules/zwx-dropDown/components/zwx-dropDown/css/iconfont.css


+ 138 - 0
uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown.vue

@@ -0,0 +1,138 @@
+<template>
+	<view style="padding-left: 30rpx;">
+		<view class="dropDown">
+			<view class="dropList" v-for="(item,index) in tree" :key="index">
+				<view class="childrenContent parentnodePadding">
+					<view :data-index="index" :data-id="item.id" :data-name="item.name" class="parentnode" @click="switchClick">
+						<i
+							:class="item.open?'iconfont el-icon-thirdiconfonti-copy iconactive openicon':' iconfont el-icon-thirdiconfonti openicon'"></i>
+						<text :class="item.open?'iconactive':''">{{item.name}}</text>
+					</view>
+
+					<view v-if="item.file&&item.file.length>0&&item.open">
+						<view v-for="(fileitem,fileindex) in item.file" :key="fileindex">
+							<view :data-id="fileitem.fileid" :data-name="fileitem.name" class="fileclass" @click="filechange">
+								<i class="iconfont el-icon-thirdwenjian"></i>
+								<text>{{fileitem.name}}</text>
+							</view>
+						</view>
+					</view>
+
+					<dropDown v-if="item.children&&item.children.length>0 &&item.open" :node="item.children" @nodechange='switchClick' @filechange="filechange">
+					</dropDown>
+				</view>
+
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import dropDown from '@/uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown'
+	export default {
+		name: 'dropDown',
+		components: {
+			dropDown
+		},
+		props: {
+			node: {
+				type: Array,
+				default: () => []
+			},
+			isshowAll: {
+				type: Boolean,
+				default: true
+			},
+			ischeckedAll: {
+				type: Boolean,
+				default: true
+			}
+		},
+		data() {
+			return {
+				tree: [],
+			}
+		},
+
+		mounted() {
+			this.tree = this.node;
+		},
+
+		methods: {
+			switchClick(e) {
+				const id = e.currentTarget.dataset.id;
+				const index = e.currentTarget.dataset.index;
+				this.$emit('nodechange', e)
+				this.recursion(id, this.tree,e);
+				
+				
+			},
+			filechange(e){
+				this.$emit("filechange",e)
+			},
+			async recursion(id, arr,e) {
+				let _id = id
+				await arr.forEach((item) => {
+					if (item.id === _id) {
+						let openstatus = item.open
+						item.open = !openstatus;
+					};
+				})
+				this.$nextTick(function() {
+					this.tree = arr;
+				})
+			}
+
+		}
+	}
+</script>
+
+<style>
+	@import url("./css/iconfont.css");
+
+	.childrenContent {
+		padding: 20rpx 50rpx 0 0;
+		display: flex;
+		/* align-items: flex-start; */
+		flex-direction: column;
+	}
+
+	.childrenContent .parentnode {
+		display: flex;
+		align-items: center;
+	}
+
+	.childrenContent .parentnodePadding {
+		margin-left: 10rpx;
+	}
+
+	.childrenContent .checkedFile {
+		margin-left: 40rpx;
+	}
+
+
+	.childrenContent .iconfont {
+		font-size: 30rpx;
+		margin-right: 10rpx;
+	}
+
+	.childrenContent .iconactive {
+		color: #007AFF;
+	}
+
+	.childrenContent .openicon {
+		font-size: 40rpx;
+	}
+
+	.childrenContent .fileclass {
+		display: flex;
+		align-items: center;
+		font-size: 26rpx;
+		padding: 10rpx 0;
+		padding-left: 50rpx;
+	}
+
+	.childrenContent .fileclass .iconfont {
+		font-size: 24rpx;
+	}
+</style>

+ 80 - 0
uni_modules/zwx-dropDown/package.json

@@ -0,0 +1,80 @@
+{
+  "id": "zwx-dropDown",
+  "displayName": "递归组件展示树机构",
+  "version": "1.10",
+  "description": "递归遍历树形结构",
+  "keywords": [
+    "组织架构,递归,树形结构"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "category": [
+        "前端组件",
+        "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "插件不采集任何数据",
+      "permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "y",
+          "vue3": "u"
+        },
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "u",
+          "Edge": "u",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 1 - 0
uni_modules/zwx-dropDown/readme.md

@@ -0,0 +1 @@
+# zwx-dropDown

File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/kx-time-picker/kx-time-picker.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/addLocation/addLocation.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/addRules/addRules.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/authentication/authentication.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/cardRecord/cardRecord.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/editRules/editRules.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/group/group.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/home/home.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/location/location.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/my/my.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/particulars/particulars.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/powerSet/powerSet.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/punchLocation/punchLocation.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/punchTime/punchTime.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/ruleName/ruleName.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/ruleSet/ruleSet.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/rulesDetail/rulesDetail.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/setPunchTime/setPunchTime.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/stat/stat.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/statDetail/statDetail.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/jlk-week/components/jlk-week/jlk-week.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-grid/components/uni-grid/uni-grid.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.js.map


File diff suppressed because it is too large
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js.map


File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown.js.map


+ 10 - 2
unpackage/dist/dev/mp-weixin/app.json

@@ -1,6 +1,13 @@
 {
   "pages": [
+    "pages/setPunchTime/setPunchTime",
+    "pages/punchTime/punchTime",
+    "pages/rulesDetail/rulesDetail",
+    "pages/particulars/particulars",
     "pages/home/home",
+    "pages/punchLocation/punchLocation",
+    "pages/addLocation/addLocation",
+    "pages/group/group",
     "pages/statDetail/statDetail",
     "pages/stat/stat",
     "pages/authentication/authentication",
@@ -8,7 +15,6 @@
     "pages/my/my",
     "pages/ruleSet/ruleSet",
     "pages/powerSet/powerSet",
-    "pages/group/group",
     "pages/cardRecord/cardRecord",
     "pages/addRules/addRules",
     "pages/ruleName/ruleName",
@@ -48,5 +54,7 @@
     ]
   },
   "permission": {},
-  "usingComponents": {}
+  "usingComponents": {
+    "drop-down": "/uni_modules/zwx-dropDown/components/zwx-dropDown/zwx-dropDown"
+  }
 }

File diff suppressed because it is too large
+ 31 - 30
unpackage/dist/dev/mp-weixin/common/main.js


File diff suppressed because it is too large
+ 2 - 2
unpackage/dist/dev/mp-weixin/common/runtime.js


File diff suppressed because it is too large
+ 4181 - 383
unpackage/dist/dev/mp-weixin/common/vendor.js


+ 1 - 0
unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.js

@@ -0,0 +1 @@
+Component({})

+ 4 - 0
unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.wxml


+ 5 - 0
unpackage/dist/dev/mp-weixin/components/kx-time-picker/kx-time-picker.wxss

@@ -0,0 +1,5 @@
+
+.default.data-v-01053584{
+	color: #8f8f94;
+}
+

File diff suppressed because it is too large
+ 317 - 0
unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.js


+ 7 - 0
unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.json

@@ -0,0 +1,7 @@
+{
+  "navigationBarTitleText": "添加位置",
+  "enablePullDownRefresh": false,
+  "usingComponents": {
+    "uni-search-bar": "/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar"
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.wxml


+ 95 - 0
unpackage/dist/dev/mp-weixin/pages/addLocation/addLocation.wxss

@@ -0,0 +1,95 @@
+@charset "UTF-8";
+/* 水平间距 */
+/* 水平间距 */
+.container .map.data-v-4b369518 {
+  position: relative;
+  width: 100vw;
+  height: 100vh;
+}
+.container .search.data-v-4b369518 {
+  position: fixed;
+  top: 30rpx;
+  left: 30rpx;
+  width: 690rpx;
+  height: 80rpx;
+  border-radius: 152rpx;
+  background-color: #fff;
+}
+.container .list.data-v-4b369518 {
+  position: fixed;
+  left: 30rpx;
+  bottom: 100rpx;
+  padding: 0 30rpx;
+  box-sizing: border-box;
+  width: 690rpx;
+  height: 435rpx;
+  border-radius: 18rpx 18rpx 0 0;
+  background-color: #fff;
+  overflow-y: auto;
+}
+.container .list .box.data-v-4b369518 {
+  display: flex;
+  align-items: center;
+  width: 630rpx;
+  height: 104rpx;
+  border-bottom: 1rpx solid #E6E6E6;
+}
+.container .list .box .icon.data-v-4b369518 {
+  margin-top: 10rpx;
+  flex: 1;
+  text-align: center;
+}
+.container .list .box .icon ._img.data-v-4b369518 {
+  width: 40rpx;
+  height: 40rpx;
+}
+.container .list .box .place.data-v-4b369518 {
+  flex: 7;
+}
+.container .list .box .place .top.data-v-4b369518 {
+  font-size: 32rpx;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.container .list .box .place .bottom.data-v-4b369518 {
+  font-size: 24rpx;
+  color: #999999;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.container .range.data-v-4b369518 {
+  position: fixed;
+  left: 0;
+  bottom: 0;
+  display: flex;
+  align-items: center;
+  width: 750rpx;
+  height: 100rpx;
+  box-shadow: 1px -4px 10px 0px rgba(0, 0, 0, 0.2);
+  background-color: #fff;
+}
+.container .range .key.data-v-4b369518 {
+  flex: 4;
+  margin-left: 30rpx;
+  font-size: 28rpx;
+}
+.container .range .value.data-v-4b369518 {
+  flex: 1;
+  font-size: 28rpx;
+  color: #A6A6A6;
+}
+.container .range .value ._img.data-v-4b369518 {
+  margin-left: 15rpx;
+  width: 20rpx;
+  height: 25rpx;
+}
+.data-v-4b369518 .uni-searchbar {
+  padding: 10rpx;
+}
+.data-v-4b369518 .uni-searchbar__box {
+  padding: 0;
+  height: 60rpx;
+}
+

File diff suppressed because it is too large
+ 70 - 70
unpackage/dist/dev/mp-weixin/pages/addRules/addRules.js


File diff suppressed because it is too large
+ 54 - 54
unpackage/dist/dev/mp-weixin/pages/authentication/authentication.js


File diff suppressed because it is too large
+ 52 - 52
unpackage/dist/dev/mp-weixin/pages/cardRecord/cardRecord.js


File diff suppressed because it is too large
+ 57 - 57
unpackage/dist/dev/mp-weixin/pages/editRules/editRules.js


File diff suppressed because it is too large
+ 336 - 54
unpackage/dist/dev/mp-weixin/pages/group/group.js


+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/group/group.json


Some files were not shown because too many files changed in this diff