Browse Source

发布v2.6.4版本

雨中磐石 1 year ago
parent
commit
c75c1e7251

+ 4 - 4
README.md

@@ -6,11 +6,11 @@
 官网网站:http://www.rockoa.com/  
 源码仅供学习二次开发使用,禁止二次发布,禁止用于商业用途出售等(违者必究)  
 版权:Copyright @2016-2024 信呼开发团队  
-版本整理时间:2024-05-05 23:59:59  
-版本号:V2.6.3  
+版本整理时间:2024-07-31 23:59:59  
+版本号:V2.6.4  
 
 
-### V2.6.3更新说明
+### V2.6.4更新说明
 1、完善系统安全性。  
 2、更多升级日志详见:http://www.rockoa.com/view_core.html  
 
@@ -36,7 +36,7 @@
 
 
 ### 信呼声明 
-1、没有一款系统是100%安全,信呼也是如此,任何暴露在公网中的系统,都有数据泄露的风险,一旦您决定将信呼OA部署在公网环境中,请仔细评估可能由此带来的风险,并尽可能的加强安全措施。  
+1、没有一款系统是100%安全,信呼OA也是如此,任何暴露在公网中的系统,都有数据泄露的风险,一旦您决定将信呼OA部署在公网环境中,请仔细评估可能由此带来的风险,并尽可能的加强安全措施。  
 2、或许您觉得此系统不好有缺陷或漏洞等,欢迎提意见和您的想法给我们,或者发邮件给我们:admin@rockoa.com。  
 
 ### 声明感谢  

+ 2 - 2
config/version.php

@@ -1,3 +1,3 @@
 <?php
-//版本2.6.3,2024年
-return '2.6.3';
+//版本2.6.4,2024-07-31
+return '2.6.4';

+ 83 - 6
include/chajian/mapqqChajian.php

@@ -1,13 +1,90 @@
 <?php 
 class mapqqChajian extends Chajian{
 	
-	private $mapqqkey 	= 'I3EBZ-TYP6F-RGZJI-J3W3V-ERKDT-PTBK4';
+	private $mapqq_key 		= '';
 	
-	public function geocoder($location)
+	protected function initChajian()
 	{
-		$url 	= 'http://apis.map.qq.com/ws/geocoder/v1/?location='.$location.'&coord_type=5&key='.$this->mapqqkey.'';
-		$result = c('curl')->getcurl($url);
-		
-		echo $result;
+		$this->getkey();
+	}
+	
+	public function getkey()
+	{
+		$key = getconfig('qqmapkey');
+		if(!$key){
+			$key = $this->rock->jm->base64decode('NTVRQlotSkdZTE8tQkFMV1gtU1pFNEgtNVNWNUstSkNGVjc:');
+		}else{
+			$this->mapqq_key = $key;
+		}
+		//$this->mapqq_key = $key;
+		return $key;
+	}
+	
+	private function mapqqerr($msg=''){
+		if(!$msg)$msg = '无法访问腾讯地图接口';
+		return '{"status":201,"message":"'.$msg.'"}';;
+	}
+	
+	//获取位置
+	public function gcoder($lat, $lng)
+	{
+		if(!$this->mapqq_key){
+			$barr = c('xinhuapi')->getdata('mapqq','gcoder', array(
+				'lat' => $lat,
+				'lng' => $lng,
+			));
+			if(!$barr['success'])return $this->mapqqerr($barr['msg']);
+			return $barr['data'];
+		}else{
+			$url = 'https://apis.map.qq.com/ws/geocoder/v1?key='.$this->mapqq_key.'';
+			$url.= '&get_poi=0';//不返回周边位置
+			$url.= '&location='.$lat.','.$lng.'';
+			$url.= '&poi_options=radius=200';
+			$result = c('curl')->getcurl($url);
+			if(!$result)$result = $this->mapqqerr();
+			return $result;
+		}
+	}
+	
+	//转坐标
+	public function translate($lat, $lng, $type)
+	{
+		if(!$this->mapqq_key){
+			$barr = c('xinhuapi')->getdata('mapqq','translate', array(
+				'lat' => $lat,
+				'lng' => $lng,
+				'type'=> $type
+			));
+			if(!$barr['success'])return $this->mapqqerr($barr['msg']);
+			return $barr['data'];
+		}else{
+			$url = 'https://apis.map.qq.com/ws/coord/v1/translate?key='.$this->mapqq_key.'';
+			$url.= '&locations='.$lat.','.$lng.'';
+			$url.= '&type='.$type.'';
+			$result = c('curl')->getcurl($url);
+			if(!$result)$result = $this->mapqqerr();
+			return $result;
+		}
+	}
+	
+	//搜索$key 是base64
+	public function suggestion($keyword)
+	{
+		if(!$this->mapqq_key){
+			$barr = c('xinhuapi')->getdata('mapqq','suggestion', array(
+				'keyword' => $keyword,
+			));
+			if(!$barr['success'])return $this->mapqqerr($barr['msg']);
+			return $barr['data'];
+		}else{
+			$keyword = $this->rock->jm->base64decode($keyword);
+			$keyarr  = explode(' ', $keyword);
+			$url = 'https://apis.map.qq.com/ws/place/v1/suggestion?key='.$this->mapqq_key.'';
+			$url	.= '&keyword='.$keyarr[0].'';
+			if(isset($keyarr[1]))$url.= '&region='.$keyarr[1].'';
+			$result = c('curl')->getcurl($url);
+			if(!$result)$result = $this->mapqqerr();
+			return $result;
+		}
 	}
 }

+ 117 - 62
js/dingwei.js

@@ -30,10 +30,12 @@ js.dw = {
 	ondwcall:function(){},
 	ondwstart:function(){},
 	ondwerr:function(){},
+	successbo:false,
 	ondwwait:function(){return false},
 	
 	start:function(){
 		if(this.dwbool)return;
+		this.successbo = false;
 		this.dwbool = true;
 		this.chaoshi();
 		this.ondwstart(js.jssdkstate);
@@ -158,10 +160,9 @@ js.dw = {
 	
 	baiduLocationSuc:function(ret,err){
 		if(ret.status && ret.latitude){
-			this.wait('定位成功,获取位置信息...');
+			this.wait('百度定位成功,获取位置信息...');
 			if(!ret.accuracy)ret.accuracy = 200;
-			var center 		= new qq.maps.LatLng(ret.latitude,ret.longitude);
-			this.translate(center, ret.accuracy, 3);
+			this.translate(ret.latitude, ret.longitude, ret.accuracy, 3);
 		}else{
 			this.dwshibai('定位失败,检查是否给APP开定位权限');
 		}
@@ -200,83 +201,137 @@ js.dw = {
 			break;
 		}
 		if(NOWURL.substr(0,5)!='https')msg+='必须使用https访问';
-		js.msg('msg', msg);
-		js.dw.ondwerr(msg);
+		js.dw.timeerrbo = setTimeout(function(){
+			if(!js.dw.successbo){
+				js.msg('msg', msg);
+				js.dw.ondwerr(msg);	
+			}else{
+				js.msg();
+			}
+		},1000);
 	},
 	
 	showPosition:function(position){
+		js.dw.successbo = true;
+		clearTimeout(js.dw.timeerrbo);
+		js.msg();
 		var res 		= position.coords;
 		var latitude 	= res.latitude;
 		var longitude 	= res.longitude;
 		var accuracy 	= parseFloat(res.accuracy);
-		var center 		= new qq.maps.LatLng(parseFloat(latitude), parseFloat(longitude));
-		js.dw.translate(center, accuracy, 1);
+		js.dw.translate(latitude,longitude, accuracy, 1);
 	},
 	
 	//坐标转化type1原始
-	translate:function(center, accuracy, type){
-		qq.maps.convertor.translate(center,type,function(res){
-			var latitude 	= res[0].lat;
-			var longitude 	= res[0].lng;
-			if(latitude==0 || latitude==0){
-				js.dw.dwshibai('无法获取位置信息失败');
-			}else{
-				js.dw.dwsuccess({
-					latitude:latitude,
-					longitude:longitude,
-					accuracy:accuracy
-				});
+	translate:function(lat, lng,juli, type){
+		$.ajax({
+			url:'api.php?m=kaoqin&a=translate',
+			data:{
+				lat:lat,
+				lng:lng,
+				type:type
+			},
+			dataType:'json',
+			success:function(ret){
+				if(ret.status==0){
+					js.dw.dwsuccess({
+						latitude:ret.locations[0].lat,
+						longitude:ret.locations[0].lng,
+						accuracy:juli
+					});
+				}else{
+					js.dw.dwshibai('无法转化坐标('+lat+','+lng+'),'+type+'<br>'+ret.status+','+ret.message+'');
+				}
+			},
+			error:function(){
+				js.dw.dwshibai('无法转化坐标'+type+'');
 			}
-		});	
+		});
 	},
 	
-	//搜索位置
+	//搜索位置,2024-07-19改
 	geocoder:function(lat,lng, jid){
-		if(!this.geocoderObj)this.geocoderObj 	= new qq.maps.Geocoder();
-		var center 	= new qq.maps.LatLng(lat, lng);
-		this.geocoderObj.getAddress(center);
-		this.geocoderObj.setComplete(function(result){
-			var address = result.detail.address;
-			var dzarr 	= result.detail.addressComponents;
-			//address 	= ''+dzarr.province+''+dzarr.city+''+dzarr.district+''+dzarr.street+'';
-			//if(dzarr.streetnumber)address+=dzarr.streetnumber;
-			
-			//范围内地址
-			var near = result.detail.nearPois,dist = 500,naddress,addressinfo;
-			for(var i=0;i<near.length;i++){
-				if(near[i].dist<dist){
-					dist 	 = near[i].dist;
-					naddress = ''+near[i].name+'('+near[i].address+')';
+		var errcan  = {
+			latitude:lat,
+			longitude:lng,
+			accuracy:jid,
+			address:'未知位置',
+			addressinfo:'定位成功未知位置',
+			detail:'未知位置'
+		}
+		$.ajax({
+			url:'api.php?m=kaoqin&a=gcoder',
+			data:{
+				lat:lat,
+				lng:lng,
+			},
+			dataType:'json',
+			success:function(ret){
+				if(ret.status==0 && ret.result){
+					var result = ret.result,addressinfo;
+					var address= result.formatted_addresses.recommend;
+					if(!address)address = result.address;
+					addressinfo = ''+address;
+					if(jid>0)addressinfo+='(精确'+js.float(jid,1)+'米)';
+					js.msg();
+					errcan.address = address;
+					errcan.addressinfo = addressinfo;
+					errcan.detail = result;
+					js.dw.ondwcall(errcan);
+				}else{
+					if(ret.message)js.msg('msg', ret.status+':'+ret.message);
+					js.dw.ondwcall(errcan);
 				}
+			},
+			error:function(){
+				js.dw.ondwcall(errcan);
 			}
-			if(dist<500)address = naddress;
-			addressinfo = ''+address;
-			if(jid>0)addressinfo+='(精确'+jid+'米)';
-			js.msg();
-			js.dw.ondwcall({
-				latitude:lat,
-				longitude:lng,
-				accuracy:jid,
-				address:address,
-				addressinfo:addressinfo,
-				detail:result.detail,
-				center:center
-			});
 		});
-		
-		this.geocoderObj.setError(function() {
-			//var msg = '无法获取位置';js.msg('msg', msg);js.dw.ondwerr(msg);
-			js.msg();
-			js.dw.ondwcall({
-				latitude:lat,
-				longitude:lng,
-				accuracy:jid,
-				address:'未知位置',
-				addressinfo:'定位成功未知位置',
-				detail:'未知位置',
-				center:center
+	},
+	
+	//计算距离,old
+	matrix:function(lat,lng, kqarr, funs){
+		var fromstr = ''+lat+','+lng+'',tostr='';
+		for(var i=0;i<kqarr.length;i++){
+			if(i>0)tostr+=';';
+			tostr +=''+kqarr[i].location_x+','+kqarr[i].location_y+'';
+		}
+		if(fromstr && tostr){
+			$.ajax({
+				url:'api.php?m=kaoqin&a=matrix',
+				data:{
+					fromstr:fromstr,
+					tostr:tostr,
+				},
+				dataType:'json',
+				success:function(ret){
+					if(ret.status==0){
+						var rows = ret.result.rows[0].elements;
+						for(var j=0;j<rows.length;j++)kqarr[j].kqjuli = rows[j].distance;
+						funs(kqarr);
+					}else{
+						alert('计算距离('+ret.status+'):'+ret.message);
+						funs(kqarr);
+					}
+				},
+				error:function(e){
+					alert('接口出错无法计算距离');
+					funs(kqarr);
+				}
 			});
-		});
+		}else{
+			funs(kqarr);
+		}
+	},
+	//计算距离
+	julisuan:function(lat,lng, kqarr, funs){
+		var startPoint = new TMap.LatLng(lat, lng);
+		for(var i=0;i<kqarr.length;i++){
+			var path = [startPoint , new TMap.LatLng(parseFloat(kqarr[i].location_x), parseFloat(kqarr[i].location_y))];
+			var distance = TMap.geometry.computeDistance(path);
+			kqarr[i].kqjuli = parseFloat(distance);
+		}
+		funs(kqarr);
 	}
 };
 

+ 1 - 1
js/reim_xina.js

@@ -2358,7 +2358,7 @@ reim.outgroup={
 	myid:0,
 	istxs:'',
 	apiurl:'aHR0cDovL2FwaS5yb2Nrb2EuY29tLw::', //如果不想使用清空这个地址就可以
-	apiurls:'aHR0cHM6Ly94Y3kucm9ja29hLmNvbS8:', //https使用
+	apiurls:'aHR0cHM6Ly9maWxlLnJvY2tvYS5jb20veGN5Lw::', //https使用
 	//apiurl:'aHR0cDovLzE5Mi4xNjguMS4yL2FwcC9yb2NrYXBpLw::',
 	geturl:function(fx){
 		if(NOWURL.substr(0,5)=='https')this.apiurl = this.apiurls;

+ 1 - 1
web/res/js/jquery-changeuser.js

@@ -673,7 +673,7 @@
 			if(key)key = key.toLowerCase();
 			if(key!='')for(i=0;i<len;i++){
 				d1 = a[i];
-				if(d1.name.indexOf(key)>-1 || d1.name.toLowerCase().indexOf(key)>-1 || d1.value==key || (d1.subname && d1.subname.indexOf(key)>-1)){
+				if(d1.name)if(d1.name.indexOf(key)>-1 || d1.name.toLowerCase().indexOf(key)>-1 || d1.value==key || (d1.subname && d1.subname.indexOf(key)>-1)){
 					d.push(d1);
 					oi++;
 					if(oi>20)break;//最多显示搜索

+ 35 - 20
webmain/flow/input/inputjs/input_two.js

@@ -315,9 +315,9 @@ var inputtwo={
 	//2020-09-02新增地图上选择位置
 	selectmap:function(sna,snall,fna,iszb){
 		var hei = winHb()-150;
-		var url = 'https://map.qq.com/api/js?v=2.exp&libraries=convertor,geometry&key=55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7&callback=c.showmap';
+		var url = 'https://map.qq.com/api/js?v=2.exp&key=55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7&callback=c.showmap';
 		js.tanbody('selectmap','选择['+fna+']',winWb()-((ismobile==1)?5:80),hei,{
-			html:'<div style="padding:5px"><input onkeyup="if(event.keyCode==13)c.selectmapsou(this)" type="text" placeholder="输入城市区号来定位如:0592" class="inputs"></div><div id="selectmap" style="height:'+(hei-20)+'px;overflow:hidden"></div>',
+			html:'<div style="padding:5px"><input onkeyup="if(event.keyCode==13)c.selectmapsou(this)" type="text" placeholder="请输入格式(地址 城市)如:鼓浪屿 厦门" class="inputs"></div><div id="selectmap" style="height:'+(hei-20)+'px;overflow:hidden"></div>',
 			btn:[{text:'确定'}]
 		});
 		this.selectmapdata={sna:sna,snall:snall};
@@ -328,6 +328,9 @@ var inputtwo={
 			c.selectmapque();
 			js.tanclose('selectmap');
 		});
+		$('#selectmap_btn1').click(function(){
+			c.selectmapdinwei();
+		});
 	},
 	selectmapclear:function(sna,snall){
 		if(form(sna))form(sna).value='';
@@ -353,13 +356,19 @@ var inputtwo={
 	},
 	selectmapsou:function(o1){
 		var val = o1.value;
-		if(!val || isNaN(val))return;
-		if(!this.citylocation)this.citylocation = new qq.maps.CityService({
-			complete : function(result){
-				map.setCenter(result.detail.latLng);
+		if(!val)return;
+		js.msg('wait','搜索中...');
+		js.ajax('api.php?m=kaoqin&a=suggestion',{key:jm.base64encode(val)},function(ret){
+			js.msg();
+			if(ret.status==0){
+				var res = ret.data[0];
+				var center = new qq.maps.LatLng(res.location.lat,res.location.lng);
+				map.setCenter(center);
+				marker.setPosition(center);
+			}else{
+				js.msg('msg',ret.message);
 			}
-		});
-		this.citylocation.searchCityByAreaCode(val);
+		},'get,json');
 	},
 	selectmapque:function(){
 		var as = marker.getPosition();
@@ -374,12 +383,21 @@ var inputtwo={
 	},
 	//搜索位置
 	geocoder:function(lat,lng, jid){
-		if(!this.geocoderObj){
-			this.geocoderObj 	= new qq.maps.Geocoder();
-			this.geocoderObj.setComplete(function(result){
+		js.ajax('api.php?m=kaoqin&a=gcoder',{lat:lat,lng:lng},function(ret){
+			js.msg();
+			if(ret.status==0){
+				var result = ret.result;
+				var address= result.formatted_addresses.recommend;
 				var d1 = c.selectmapdata;
-				d1.address = result.detail.address;
-				d1.addressinfo = result.detail.addressComponents;
+				d1.address = address;
+				var info = result.address_component;
+				d1.addressinfo = {
+					province:info.province,
+					city:info.city,
+					town:info.district,
+					streetNumber:info.street_number,
+					street:info.street
+				};
 				js.msg();
 				var sna = d1.sna;
 				if(form(sna))form(sna).value=d1.address+'|'+d1.lat+','+d1.lng+'';
@@ -389,13 +407,10 @@ var inputtwo={
 					form(sna).value=d1.address;
 				}
 				c.onselectmap(sna,d1);
-			});
-			this.geocoderObj.setError(function() {
-				js.msg('msg','搜索地址失败');
-			});
-		}
-		var center 	= new qq.maps.LatLng(lat, lng);
-		this.geocoderObj.getAddress(center);
+			}else{
+				js.msg('msg',ret.message);
+			}
+		},'get,json');
 	},
 	xuanfile:function(fid,lx,fname,o1){
 		if(!fname)fname='';

+ 2 - 2
webmain/flow/input/mode_gongAction.php

@@ -23,8 +23,8 @@ class mode_gongClassAction extends inputAction{
 	//提交投票
 	public function submittoupiaoAjax()
 	{
-		$mid 		= $this->get('mid');
-		$sid 		= $this->get('sid');
+		$mid 		= (int)$this->get('mid');
+		$sid 		= c('check')->onlynumber($this->get('sid'));
 		$modenum 	= $this->get('modenum');
 		
 		$this->flow	= m('flow')->initflow($modenum);

+ 1 - 1
webmain/flow/input/mode_knowtraimAction.php

@@ -292,7 +292,7 @@ class mode_knowtraimClassAction extends inputAction{
 	//标识可重新考试
 	public function biaoshiAjax()
 	{
-		$fid = $this->post('fid','0');
+		$fid = c('check')->onlynumber($this->post('fid','0'));
 		m('knowtrais')->update(array(
 			'kssdt' => '',
 			'ksedt' => '',

+ 2 - 2
webmain/flow/input/mode_userAction.php

@@ -131,8 +131,8 @@ class mode_userClassAction extends inputAction{
 	public function editsuperAjax()
 	{
 		$sna	= $this->post('sna');
-		$sid	= $this->post('sid');
-		$xid	= $this->post('xid');
+		$sid	= c('check')->onlynumber($this->post('sid'));
+		$xid	= c('check')->onlynumber($this->post('xid'));
 		m('admin')->update(array(
 			'superid' => $sid,
 			'superman' => $sna,

+ 29 - 27
webmain/install/rockxinhu.sql

@@ -10,7 +10,7 @@ Target Server Type    : MYSQL
 Target Server Version : 50610
 File Encoding         : 65001
 
-Date: 2024-05-04 17:50:20
+Date: 2024-07-31 12:52:18
 */
 
 SET FOREIGN_KEY_CHECKS=0;
@@ -71,14 +71,14 @@ CREATE TABLE `xinhu_admin` (
 -- ----------------------------
 -- Records of xinhu_admin
 -- ----------------------------
-INSERT INTO `xinhu_admin` VALUES ('1', 'A001', 'admin', '管理员', 'e10adc3949ba59abbe56e057f20f883e', '5791', '1', '1', '男', '0592-1234569', 'upload/face/1.jpg', '2', '开发部', null, null, null, '信呼开发团队/开发部', '5', '磐石', '项目主管', '1', '[1],[2]', '[5]', '1,3,4', '15800000023', '1', '2016-06-01', null, '2017-03-08 09:52:30', null, null, null, '0', 'guanliyuan', null, '1', '0', null, '1', null, null, '0', '1');
+INSERT INTO `xinhu_admin` VALUES ('1', 'A001', 'admin', '管理员', 'e10adc3949ba59abbe56e057f20f883e', '5900', '1', '1', '男', '0592-1234569', 'upload/face/1.jpg', '2', '开发部', null, null, null, '信呼开发团队/开发部', '5', '磐石', '项目主管', '1', '[1],[2]', '[5]', '1,3,4', '15800000023', '1', '2016-06-01', null, '2017-03-08 09:52:30', null, null, null, '0', 'guanliyuan', null, '1', '0', null, '1', null, null, '0', '1');
 INSERT INTO `xinhu_admin` VALUES ('2', null, 'diaochan', '貂蝉', 'e10adc3949ba59abbe56e057f20f883e', '193', '1', '0', '女', '0592-123456', null, '3', '财务部', null, null, null, '信呼开发团队/财务部', '5', '磐石', '财务总监', '1', '[1],[3]', '[5]', '1,3', '15800000007', '1', '2016-08-09', null, null, null, null, null, '0', 'diaochan', null, '2', '0', null, '1', null, null, '0', '1');
 INSERT INTO `xinhu_admin` VALUES ('3', null, 'xiaoqiao', '小乔', 'e10adc3949ba59abbe56e057f20f883e', '342', '1', '0', '女', null, null, '3', '财务部', null, null, null, '信呼开发团队/财务部', '2', '貂蝉', '出纳', '1', '[1],[3]', '[5],[2]', '1', '15800000001', '1', '2017-05-02', null, '2016-08-30 20:34:23', null, null, null, '0', 'xiaoqiao', null, '2', '0', null, '1', null, null, '0', '1');
-INSERT INTO `xinhu_admin` VALUES ('4', null, 'daqiao', '大乔', 'e10adc3949ba59abbe56e057f20f883e', '528', '1', '0', '女', null, null, '4', '行政人事部', '3', '财务部', '会计', '信呼开发团队/行政人事部', '5', '磐石', '人事主管', '1', '[1],[4],[3]', '[5]', '1,3', '15800000002', '1', '2017-07-01', null, '2016-10-20 22:27:51', null, null, null, '0', 'daqiao', null, '2', '0', null, '1', null, null, '0', '1');
+INSERT INTO `xinhu_admin` VALUES ('4', null, 'daqiao', '大乔', 'e10adc3949ba59abbe56e057f20f883e', '530', '1', '0', '女', null, null, '4', '行政人事部', '3', '财务部', '会计', '信呼开发团队/行政人事部', '5', '磐石', '人事主管', '1', '[1],[4],[3]', '[5]', '1,3', '15800000002', '1', '2017-07-01', null, '2016-10-20 22:27:51', null, null, null, '0', 'daqiao', null, '2', '0', null, '1', null, null, '0', '1');
 INSERT INTO `xinhu_admin` VALUES ('5', null, 'rock', '磐石', 'e10adc3949ba59abbe56e057f20f883e', '486', '1', '0', '男', null, null, '5', '管理层', null, null, null, '信呼开发团队/管理层', null, null, '董事长', '0', '[1],[5]', null, '2,3', '15800000003', '1', '2015-11-01', null, null, null, null, null, '0', 'panshi', null, '1', '0', null, '1', null, '1,2,3,4', '0', '1');
-INSERT INTO `xinhu_admin` VALUES ('6', null, 'zhangfei', '张飞', 'e10adc3949ba59abbe56e057f20f883e', '267', '1', '0', '男', null, null, '2', '开发部', null, null, null, '信呼开发团队/开发部', '7', '赵子龙', '程序员', '100', '[1],[2]', '[5],[1],[7]', '1', '15800000004', '1', '2017-07-01', null, '2016-11-01 20:15:52', null, null, null, '0', 'zhangfei', null, '1', '0', null, '1', null, null, '0', '0');
-INSERT INTO `xinhu_admin` VALUES ('7', null, 'zhaozl', '赵子龙', 'e10adc3949ba59abbe56e057f20f883e', '333', '1', '0', '男', null, null, '2', '开发部', null, null, null, '信呼开发团队/开发部', '1', '管理员', '高级程序员', '100', '[1],[2]', '[5],[1]', '1', '15800000005', '1', '2016-07-01', null, '2017-06-28 15:34:26', null, null, null, '0', 'zhaozilong', null, '1', '0', null, '1', null, null, '0', '0');
-INSERT INTO `xinhu_admin` VALUES ('8', null, 'xinhu', '信呼客服', '6846860684f05029abccc09a53cd66f1', '430', '1', '1', '女', null, null, '2', '开发部', null, null, null, '信呼开发团队/开发部', '1', '管理员', '客服', '200', '[1],[2]', '[5],[1]', '1,4', '15800000006', '1', '2018-12-12', null, null, null, 'rainrock829', null, '0', 'xinhukefu', null, '1', '0', null, '1', null, '2', '0', '1');
+INSERT INTO `xinhu_admin` VALUES ('6', null, 'zhangfei', '张飞', 'e10adc3949ba59abbe56e057f20f883e', '277', '1', '0', '男', null, null, '2', '开发部', null, null, null, '信呼开发团队/开发部', '7', '赵子龙', '程序员', '100', '[1],[2]', '[5],[1],[7]', '1', '15800000004', '1', '2017-07-01', null, '2016-11-01 20:15:52', null, null, null, '0', 'zhangfei', null, '1', '0', null, '1', null, null, '0', '0');
+INSERT INTO `xinhu_admin` VALUES ('7', null, 'zhaozl', '赵子龙', 'e10adc3949ba59abbe56e057f20f883e', '343', '1', '0', '男', null, null, '2', '开发部', null, null, null, '信呼开发团队/开发部', '1', '管理员', '高级程序员', '100', '[1],[2]', '[5],[1]', '1', '15800000005', '1', '2016-07-01', null, '2017-06-28 15:34:26', null, null, null, '0', 'zhaozilong', null, '1', '0', null, '1', null, null, '0', '0');
+INSERT INTO `xinhu_admin` VALUES ('8', null, 'xinhu', '信呼客服', '6846860684f05029abccc09a53cd66f1', '432', '1', '1', '女', null, null, '2', '开发部', null, null, null, '信呼开发团队/开发部', '1', '管理员', '客服', '200', '[1],[2]', '[5],[1]', '1,4', '15800000006', '1', '2018-12-12', null, null, null, 'rainrock829', null, '0', 'xinhukefu', null, '1', '0', null, '1', null, '2', '0', '1');
 
 -- ----------------------------
 -- Table structure for `xinhu_assetm`
@@ -375,8 +375,8 @@ CREATE TABLE `xinhu_chargems` (
 -- ----------------------------
 -- Records of xinhu_chargems
 -- ----------------------------
-INSERT INTO `xinhu_chargems` VALUES ('1', '0', '1', '2016-12-28 15:24:19', '2024-05-04 17:50:07', null, '1');
-INSERT INTO `xinhu_chargems` VALUES ('2', '1', '1', '2016-12-28 15:21:14', '2024-05-04 17:50:07', null, '0');
+INSERT INTO `xinhu_chargems` VALUES ('1', '0', '1', '2016-12-28 15:24:19', '2024-07-31 12:51:33', null, '1');
+INSERT INTO `xinhu_chargems` VALUES ('2', '1', '1', '2016-12-28 15:21:14', '2024-07-31 12:51:33', null, '0');
 
 -- ----------------------------
 -- Table structure for `xinhu_city`
@@ -1185,7 +1185,7 @@ CREATE TABLE `xinhu_flow_bill` (
   KEY `table` (`table`,`mid`) USING BTREE,
   KEY `status` (`status`),
   KEY `modeid` (`modeid`)
-) ENGINE=MyISAM AUTO_INCREMENT=399 DEFAULT CHARSET=utf8 COMMENT='流程单据';
+) ENGINE=MyISAM AUTO_INCREMENT=400 DEFAULT CHARSET=utf8 COMMENT='流程单据';
 
 -- ----------------------------
 -- Records of xinhu_flow_bill
@@ -1439,10 +1439,10 @@ CREATE TABLE `xinhu_flow_course` (
 -- ----------------------------
 -- Records of xinhu_flow_course
 -- ----------------------------
-INSERT INTO `xinhu_flow_course` VALUES ('1', '0', '0', '5', '上级审核', null, 'superall', null, null, '0', '0', null, null, '2021-09-01 16:12:07', '1', null, '1', null, '0', '0', null, null, null, '2', '0', null, '0', '4', null, null, '0', '0', '0', '0', null, null);
-INSERT INTO `xinhu_flow_course` VALUES ('2', '1', '0', '5', '人事审核', null, 'rank', null, '人事主管', '0', '0', null, null, '2018-05-07 09:47:03', '1', null, '1', null, '0', '0', null, null, null, '0', '0', '0', '0', '1', null, null, '0', '0', '0', '0', null, null);
+INSERT INTO `xinhu_flow_course` VALUES ('1', '0', '0', '5', '上级审核', null, 'super', null, null, '0', '0', null, null, '2024-06-22 16:54:28', '1', null, '1', null, '0', '0', null, null, null, '2', '0', null, '0', '4', null, null, '0', '0', '0', '0', null, null);
+INSERT INTO `xinhu_flow_course` VALUES ('2', '1', '0', '5', '人事审核', null, 'rank', null, '人事主管', '0', '0', null, null, '2024-06-22 16:54:23', '1', null, '1', null, '0', '0', null, null, null, '0', '0', null, '0', '1', null, null, '0', '0', '0', '0', null, null);
 INSERT INTO `xinhu_flow_course` VALUES ('3', '0', '0', '6', '上级审核', null, 'super', null, null, '0', '0', null, null, '2016-07-02 22:25:29', '1', null, '1', null, '0', '0', null, null, null, '0', '0', '0', '0', '1', null, null, '0', '0', '0', '0', null, null);
-INSERT INTO `xinhu_flow_course` VALUES ('4', '2', '0', '5', '总经理审核', null, 'user', '5', '磐石', '0', '2', null, '超过3天24小时', '2016-09-25 14:53:34', '1', null, '1', null, '0', '0', null, null, null, '0', '0', '0', '0', '1', null, null, '0', '0', '0', '0', null, null);
+INSERT INTO `xinhu_flow_course` VALUES ('4', '2', '0', '5', '总经理审核', null, 'user', '5', '磐石', '0', '2', null, '超过3天24小时', '2024-06-22 16:54:33', '1', null, '1', null, '0', '0', null, null, null, '0', '0', null, '0', '1', null, null, '0', '0', '0', '0', null, null);
 INSERT INTO `xinhu_flow_course` VALUES ('5', '0', '0', '23', '上级审核', null, 'super', null, null, '0', '0', null, null, '2016-08-27 08:46:27', '1', null, '1', null, '0', '0', null, null, null, '0', '0', '0', '0', '1', null, null, '0', '0', '0', '0', null, null);
 INSERT INTO `xinhu_flow_course` VALUES ('6', '0', '0', '24', '行政发放', null, 'user', '4', '大乔', '0', '0', null, null, '2017-08-10 11:42:24', '1', '发放,驳回|red', '1', null, '0', '0', null, null, null, '0', '0', '0', '0', '1', null, null, '0', '0', '0', '0', null, null);
 INSERT INTO `xinhu_flow_course` VALUES ('7', '0', '0', '11', '上级审批', null, 'super', null, null, '0', '0', null, null, '2016-09-02 17:36:36', '1', null, '1', null, '0', '0', null, null, null, '0', '0', '0', '0', '1', null, null, '0', '0', '0', '0', null, null);
@@ -3007,7 +3007,7 @@ CREATE TABLE `xinhu_flow_log` (
   `iszb` tinyint(1) DEFAULT '0' COMMENT '是否转办记录',
   PRIMARY KEY (`id`),
   KEY `table` (`table`,`mid`)
-) ENGINE=MyISAM AUTO_INCREMENT=4934 DEFAULT CHARSET=utf8 COMMENT='单据操作记录';
+) ENGINE=MyISAM AUTO_INCREMENT=4941 DEFAULT CHARSET=utf8 COMMENT='单据操作记录';
 
 -- ----------------------------
 -- Records of xinhu_flow_log
@@ -3547,6 +3547,7 @@ INSERT INTO `xinhu_flow_log` VALUES ('4923', 'flow_element', '1816', '1', null,
 INSERT INTO `xinhu_flow_log` VALUES ('4929', 'flow_element', '1817', '1', null, '提交', '0', '2024-05-04 17:22:12', null, '127.0.0.1', 'Chrome', '管理员', '1', '159', null, '1', '0', null, '0');
 INSERT INTO `xinhu_flow_log` VALUES ('4930', 'flow_element', '1818', '1', null, '提交', '0', '2024-05-04 17:23:28', null, '127.0.0.1', 'Chrome', '管理员', '1', '159', null, '1', '0', null, '0');
 INSERT INTO `xinhu_flow_log` VALUES ('4931', 'flow_element', '1819', '1', null, '提交', '0', '2024-05-04 17:23:59', null, '127.0.0.1', 'Chrome', '管理员', '1', '159', null, '1', '0', null, '0');
+INSERT INTO `xinhu_flow_log` VALUES ('4939', 'flow_remind', '16', '1', null, '提交', '0', '2024-07-28 16:44:41', null, '127.0.0.1', 'Chrome', '管理员', '1', '61', null, '1', '0', null, '0');
 
 -- ----------------------------
 -- Table structure for `xinhu_flow_menu`
@@ -3692,7 +3693,7 @@ CREATE TABLE `xinhu_flow_remind` (
   UNIQUE KEY `table` (`uid`,`table`,`mid`) USING BTREE,
   UNIQUE KEY `uid` (`uid`,`modenum`,`mid`),
   KEY `table_2` (`table`,`mid`)
-) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='单据提醒设置表';
+) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='单据提醒设置表';
 
 -- ----------------------------
 -- Records of xinhu_flow_remind
@@ -3703,6 +3704,7 @@ INSERT INTO `xinhu_flow_remind` VALUES ('8', '2017-09-03 20:11:29', null, '1', '
 INSERT INTO `xinhu_flow_remind` VALUES ('10', '2018-12-04 09:23:47', null, '1', '2020-09-01 17:57:41', '管理员', 'flowtodo', 'flow_todo', '11', '每天 08:00:00', '物品库存预警小于10提醒。', 'd', '08:00:00', '0', null, null, '1');
 INSERT INTO `xinhu_flow_remind` VALUES ('11', '2019-12-02 15:43:47', null, '1', '2021-04-13 19:37:54', '管理员', 'flowtodo', 'flow_todo', '16', '每天 19:40:00', '客户“{custname}”待收金额:{money}', 'd', '19:40:00', '1', null, null, '1');
 INSERT INTO `xinhu_flow_remind` VALUES ('12', '2020-10-01 12:14:50', null, '1', '2020-10-13 15:42:49', '管理员', 'flowtodo', 'flow_todo', '20', '每天 15:45:45', '{mingc}将在{etime}到期', 'd', '15:45:45', '1', null, null, '1');
+INSERT INTO `xinhu_flow_remind` VALUES ('16', '2024-07-28 16:44:24', null, '1', '2024-07-28 16:44:41', '管理员', 'work', 'work', '11', '仅一次 2024-07-28 16:50:00', '任务:[bug]测试任务,分配给:信呼客服', 'o', '2024-07-28 16:50:00', '1', 'u1', '管理员', '1');
 
 -- ----------------------------
 -- Table structure for `xinhu_flow_set`
@@ -3754,7 +3756,7 @@ CREATE TABLE `xinhu_flow_set` (
 -- ----------------------------
 -- Records of xinhu_flow_set
 -- ----------------------------
-INSERT INTO `xinhu_flow_set` VALUES ('1', '通知公告', 'gong', '1', 'infor', null, '[{typename}]{title}', 'title:[{typename}]{title}\noptdt:{optdt}', '行政', '1', '0', '0', '0', 'XA-Ymd-', '0', 'all', '全体人员', '2024-03-13 16:52:47', '1', '1', 'infors', '投票项目', null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', null, '0');
+INSERT INTO `xinhu_flow_set` VALUES ('1', '通知公告', 'gong', '1', 'infor', null, '[{typename}]{title}', 'title:[{typename}]{title}\noptdt:{optdt}', '行政', '1', '0', '0', '0', 'XA-Ymd-', '0', 'all', '全体人员', '2024-06-20 16:43:52', '1', '1', 'infors', '投票项目', null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('2', '会议', 'meet', '2', 'meet', '`type` in(0,1)', '[{hyname}]{title},{startdt}→{enddt}', 'title:{title}\ncont:会议室:{hyname}[br]发起人:{optname}[br]参会人:{joinname}\noptdt:{startdt}→{enddt}', '行政', '1', '0', '0', '0', 'XB-Ymd-', '0', 'all', '全体人员', '2019-06-03 13:54:09', '1', '1', null, null, null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '0', '0', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('3', '工作日报', 'daily', '21', 'daily', null, '[{optname}]{content}', 'title:[{optname}]{dt}的{type}\noptdt:{optdt}\ncont:{content}', '基础', '1', '0', '0', '0', 'XC-Ymd-', '0', 'all', '全体人员', '2021-05-08 09:23:14', '1', '1', null, null, null, '0', '0', '1', '1', '0', '0', '0', '0', '1', '0', '1', '1', '0', '1', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('4', '任务', 'work', '23', 'work', null, '[{type}]{title},分配给:{dist}', 'title:{title}\noptdt:{optdt}\ncont:类型:{type}[br]等级:{grade}[br]分配给:{dist}[br]创建者:{optname}[br]截止时间:{enddt}', '基础', '1', '0', '0', '0', 'XW-Ymd-', '1', 'all', '全体人员', '2021-04-01 10:18:34', '1', '1', null, null, '待?分配,已完成,无法完成,待?执行,?执行中,已作废,待?验证|blue', '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '0', '0', null, '0');
@@ -3765,7 +3767,7 @@ INSERT INTO `xinhu_flow_set` VALUES ('8', '销售机会', 'custsale', '52', 'cus
 INSERT INTO `xinhu_flow_set` VALUES ('9', '物品', 'goods', '80', 'goods', null, '名称:{name},编号:{num}', 'title:{name}\ncont:编号:{num}[br]规格:{guige}[br]型号:{xinghao}[br]库存:{stock}{unit}', '物品', '1', '0', '0', '0', 'CC-Ymd-', '0', 'all', '全体人员', '2020-05-30 18:50:17', '1', '1', null, null, null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('11', '费用报销', 'finfybx', '90', 'fininfom', 'type=0', '报销:{money},收款人:{fullname}', null, '财务', '1', '0', '0', '0', 'FA-Ymd-', '1', 'all', '全体人员', '2019-06-07 14:16:05', '1', '1', 'fininfos', '报销明细', null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('10', '用户', 'user', '901', 'admin', null, '{deptallname},{name}', 'title:{name}\ncont:部门:{deptallname}[br]职位:{ranking}[br]电话:{tel}[br]手机:{mobile}[br]邮箱:{email}', '系统', '0', '0', '0', '0', null, '0', 'u1', '管理员', '2019-06-17 09:34:13', '1', '0', null, null, null, '0', '0', '1', '1', '0', '0', '2', '0', '0', '0', '0', '0', '0', '0', null, '0');
-INSERT INTO `xinhu_flow_set` VALUES ('12', '日程', 'schedule', '24', 'schedule', null, '{title}', 'title:{title}\noptdt:{optdt}\ncont:时间:{startdt}[br]截止:{enddt}[br]说明:{explain}[br]重复:{rate}{rateval}[br]提醒:{txsj}', '基础', '1', '0', '0', '0', null, '0', 'all', '全体人员', '2019-06-03 17:12:10', '1', '1', null, null, null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '0', '0', null, '0');
+INSERT INTO `xinhu_flow_set` VALUES ('12', '日程', 'schedule', '24', 'schedule', null, '{title}', 'title:{title}\noptdt:{optdt}\ncont:时间:{startdt}[br]截止:{enddt}[br]说明:{explain}[br]重复:{rate}[br]提醒:{txsj}', '基础', '1', '0', '0', '0', null, '0', 'all', '全体人员', '2024-07-10 16:47:04', '1', '1', null, null, null, '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '0', '0', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('13', '部门', 'dept', '902', 'dept', null, '{name}', null, '系统', '0', '0', '0', '0', null, '0', 'u1', '管理员', '2019-06-03 17:25:41', '1', '0', null, null, null, '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('14', '系统组', 'group', '903', 'group', null, null, null, '系统', '0', '0', '0', '0', null, '0', 'u1', '管理员', '2016-08-13 17:47:58', '1', '0', null, null, null, '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', null, '0');
 INSERT INTO `xinhu_flow_set` VALUES ('15', '计划任务', 'task', '904', 'task', null, null, null, '系统', '0', '0', '0', '0', null, '0', 'u1', '管理员', '2016-08-13 17:23:01', '1', '0', null, null, null, '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', null, '0');
@@ -5405,13 +5407,13 @@ CREATE TABLE `xinhu_im_history` (
 -- ----------------------------
 -- Records of xinhu_im_history
 -- ----------------------------
-INSERT INTO `xinhu_im_history` VALUES ('1', 'group', '2', '2', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
-INSERT INTO `xinhu_im_history` VALUES ('2', 'group', '2', '7', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
-INSERT INTO `xinhu_im_history` VALUES ('3', 'group', '2', '6', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
-INSERT INTO `xinhu_im_history` VALUES ('4', 'group', '2', '8', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
-INSERT INTO `xinhu_im_history` VALUES ('5', 'group', '2', '5', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
-INSERT INTO `xinhu_im_history` VALUES ('6', 'group', '2', '1', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
-INSERT INTO `xinhu_im_history` VALUES ('7', 'group', '2', '4', '8', '2024-05-04 17:42:32', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('1', 'group', '2', '2', '8', '2024-07-31 12:45:17', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('2', 'group', '2', '7', '8', '2024-07-31 12:45:17', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('3', 'group', '2', '6', '8', '2024-07-31 12:45:17', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('4', 'group', '2', '8', '8', '2024-07-31 12:45:17', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('5', 'group', '2', '5', '8', '2024-07-31 12:45:17', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('6', 'group', '2', '1', '8', '2024-07-31 12:45:17', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
+INSERT INTO `xinhu_im_history` VALUES ('7', 'group', '2', '4', '8', '2024-07-31 12:45:18', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '1', null, null, '0');
 
 -- ----------------------------
 -- Table structure for `xinhu_im_menu`
@@ -5663,7 +5665,7 @@ CREATE TABLE `xinhu_im_mess` (
 -- ----------------------------
 -- Records of xinhu_im_mess
 -- ----------------------------
-INSERT INTO `xinhu_im_mess` VALUES ('1', '2024-05-04 17:42:32', '1', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '8', '2', '2,7,6,8,5,1,4', 'group', null, '0', null);
+INSERT INTO `xinhu_im_mess` VALUES ('1', '2024-07-31 12:45:17', '1', '5aSn5a625pyJ5ZWl6Zeu6aKY6L!Z6YeM6K!05ZWK77yB', '8', '2', '2,7,6,8,5,1,4', 'group', null, '0', null);
 
 -- ----------------------------
 -- Table structure for `xinhu_im_messzt`
@@ -5743,7 +5745,7 @@ CREATE TABLE `xinhu_infor` (
 -- ----------------------------
 INSERT INTO `xinhu_infor` VALUES ('1', '欢迎使用信呼工作台', '2018-04-26 17:27:10', '通知公告', '<p>\n	欢迎使用,有任何问题可以随时联系我们,帮你解答哦。&nbsp;\n</p>\n<p>\n	信呼是一款开源免费的工作台软件,可添加应用,管理,pc上,app都可以使用,我们的代码全部开放,可自由使用。\n</p>', null, null, null, '1', '管理员', null, null, '信呼开发团队', '2016-08-01', '1', null, '0', '0', '0', '0', null, null, '0', '0', '0');
 INSERT INTO `xinhu_infor` VALUES ('2', '关于写日报制度说明', '2019-04-13 19:54:43', '规则制度', '<p>\n	1、每个人工作日在下班后必须写工作日报,全天请假可不用写,只要有上班就需要写,即使你上班1分钟。\n</p>\n<p>\n	2、也可以隔天写。\n</p>\n<p>\n	<strong>未写处罚</strong> \n</p>\n<p>\n	1、未写一次扣五块,累计加倍。\n</p>', null, 'u1,u2,u3,u4,u5,u6,u7,u8,u9', null, '1', '管理员', null, null, '人力行政部', '2016-08-01', '1', 'images/kqbanner1.jpg', '0', '0', '0', '0', null, null, '0', '0', '0');
-INSERT INTO `xinhu_infor` VALUES ('6', '信呼更新发布V2.6.3版本', '2024-05-04 17:09:14', '通知公告', '<p>\n	版本添加了发布如下功能啊。\n</p>\n<p>\n	1、系统功能完善。\n</p>\n<p>\n	2、更新了很多,自己看<a href=\"http://www.rockoa.com/view_core.html\" target=\"_blank\">升级日志</a>。\n</p>', 'http://www.rockoa.com/view_down.html', 'd1', '信呼开发团队', '1', '管理员', null, null, '信呼开发团队', '2024-05-04', '1', 'images/logo.png', '0', '0', '0', '1', null, null, '1', '1', '0');
+INSERT INTO `xinhu_infor` VALUES ('6', '信呼更新发布V2.6.4版本', '2024-07-31 12:27:30', '通知公告', '<p>\n	版本添加了发布如下功能啊。\n</p>\n<p>\n	1、系统功能完善。\n</p>\n<p>\n	2、更新了很多,自己看<a href=\"http://www.rockoa.com/view_core.html\" target=\"_blank\">升级日志</a>。\n</p>', 'http://www.rockoa.com/view_down.html', 'd1', '信呼开发团队', '1', '管理员', null, null, '信呼开发团队', '2024-07-31', '1', 'images/logo.png', '0', '0', '0', '1', null, null, '1', '1', '0');
 INSERT INTO `xinhu_infor` VALUES ('9', '你们觉得这个系统如何?', '2019-06-03 13:17:05', '通知公告', '开始投票拉。', null, 'd1', '信呼开发团队', '1', '管理员', '2018-08-31 12:42:00', '2017-08-26 12:42:00', '开发部', '2017-08-26', '1', null, '1', '1', '0', '0', '2019-04-15', null, '1', '0', '0');
 
 -- ----------------------------
@@ -6020,7 +6022,7 @@ CREATE TABLE `xinhu_kqdw` (
 -- ----------------------------
 -- Records of xinhu_kqdw
 -- ----------------------------
-INSERT INTO `xinhu_kqdw` VALUES ('1', '厦门默认位置', '24.528153', '118.167806', '厦门', '0', '12', null, '1', null, '0');
+INSERT INTO `xinhu_kqdw` VALUES ('1', '厦门默认位置', '24.528153', '118.167806', '厦门', '100', '12', null, '1', null, '0');
 
 -- ----------------------------
 -- Table structure for `xinhu_kqerr`
@@ -6079,7 +6081,7 @@ CREATE TABLE `xinhu_kqinfo` (
   PRIMARY KEY (`id`),
   KEY `uid` (`uid`),
   KEY `kind` (`kind`)
-) ENGINE=MyISAM AUTO_INCREMENT=169 DEFAULT CHARSET=utf8 COMMENT='请假条加班单';
+) ENGINE=MyISAM AUTO_INCREMENT=170 DEFAULT CHARSET=utf8 COMMENT='请假条加班单';
 
 -- ----------------------------
 -- Records of xinhu_kqinfo

+ 1 - 1
webmain/install/tpl_install.html

@@ -21,7 +21,7 @@
 			<div id="step1" style="padding:20px;line-height:35px;font-size:16px;display:">
 				<b>安装使用前必读:</b><br>
 				<p>我们网站:<?=URLY?></p>
-				<p>产品名称:信呼</p>
+				<p>产品名称:信呼OA</p>
 				
 				<p>源码仅供学习开发使用,禁止原封不动出售。</p>
 				<p style="color:red">版权来自:信呼开发团队,二次开发请标识来自《信呼》。</p>

+ 7 - 0
webmain/main/flow/flowAction.php

@@ -94,16 +94,23 @@ class flowClassAction extends Action
 		$num = strtolower($cans['num']);
 		$cobj= c('check');
 		if(!$cobj->iszgen($tab))return '表名格式不对';
+		$bobg = preg_replace("/[a-zA-Z0-9_]/",'', $tab);
+		if($bobg)return '表名禁用:'.$bobg.'';
 		if($cobj->isnumber($num))return '编号不能为数字';
 		if(strlen($num)<4)return '编号至少要4位';
 		if($cobj->isincn($num))return '编号不能包含中文';
 		if(contain($num,'-'))return '编号不能有-';
 		
+		$bobg = preg_replace("/[a-zA-Z0-9_]/",'', $num);
+		if($bobg)return '模块编号禁用:'.$bobg.'';
+		
 		if($cans['isflow']>0 && isempt($cans['sericnum'])) return '有流程必须有写编号规则,请参考其他模块填写';
 		$rows['num']= $this->rock->xssrepstr($num); 
 		$rows['name']= $name;
 		if(!isempt($tabs)){
 			if($cobj->isincn($tabs))return '多行子表名不能包含中文';
+			$bobg = preg_replace("/[a-zA-Z0-9_,]/",'', $tabs);
+			if($bobg)return '子表名禁用:'.$bobg.'';
 			$tabsa 		= explode(',', $tabs);
 			$namea 		= explode(',', $names);
 			foreach($tabsa as $k1=>$tabsas){

+ 2 - 2
webmain/main/kaoqin/kaoqinAction.php

@@ -664,7 +664,7 @@ class kaoqinClassAction extends Action
 		}
 		if($this->rock->ismobile())$rs['type'] = 1;
 		$this->smartydata['rs'] = $rs;
-		$this->smartydata['qqmapkey']	= getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
+		$this->smartydata['qqmapkey']	= c('mapqq')->getkey();
 	}
 	
 	public function locationchangeAction()
@@ -677,7 +677,7 @@ class kaoqinClassAction extends Action
 		$this->assign('location_x', $location_x);
 		$this->assign('location_y', $location_y);
 		$this->assign('scale', $scale);
-		$this->smartydata['qqmapkey']	= getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
+		$this->smartydata['qqmapkey']	= c('mapqq')->getkey();
 	}
 	
 	//删除打卡记录

+ 32 - 11
webmain/main/kaoqin/tpl_kaoqin_locationchange.html

@@ -14,6 +14,8 @@ body, button, input, select, textarea {
 
 </style>
 <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=<?=$da['qqmapkey']?>"></script>
+<script src="js/jquery.js"></script>
+<script src="js/base64-min.js"></script>
 <script>
 
 var callback = '<?=$callback?>'; //回调函数
@@ -59,22 +61,41 @@ function qudong(){
 }
 var citylocation = false;
 function dingwei(){
-    if(!citylocation)citylocation = new qq.maps.CityService({
-        complete : function(result){
-            map.setCenter(result.detail.latLng);
-        }
-    });
-	var quhao = prompt('请输入城市区号如:0592');
-	if(isNaN(quhao)){
-		if(quhao)citylocation.searchLocalCity();
-	}else{
-		if(quhao)citylocation.searchCityByAreaCode(quhao);
+	var key = prompt('请输入格式(地址 城市)如:鼓浪屿 厦门');
+	if(key){
+		$.ajax({
+			url:'api.php?m=kaoqin&a=suggestion',
+			data:{key:jm.base64encode(key)},
+			dataType:'json',
+			success:function(ret){
+				if(ret.status==0){
+					var res = ret.data[0];
+					var center = new qq.maps.LatLng(res.location.lat,res.location.lng);
+					map.setCenter(center);
+					marker.setPosition(center);
+					showinfoWin(res.title+'<br>'+res.address);
+				}else{
+					alert(ret.message);
+				}
+			}
+		});
+	}
+}
+var infoWin = false;
+function showinfoWin(msg){
+	if(!infoWin){
+		infoWin = new qq.maps.InfoWindow({
+			map: map
+		});
+		infoWin.open();
 	}
+    infoWin.setContent(msg);
+    infoWin.setPosition(map.getCenter());
 }
 </script>
 </head>
 <body onload="init()">
-<div style="position:absolute;top:0px;left:40%;z-index:99;padding:5px 20px; background-color:white"><button style="background:#1389D3;color:white;border:none;padding:5px 8px;cursor:pointer" onclick="qudong()">确定</button>&nbsp;点地图确定位置,<a href="javascript:;" onclick="dingwei()">[定位]</a></div>
+<div style="position:absolute;top:0px;left:40%;z-index:99;padding:5px 20px; background-color:white"><button style="background:#1389D3;color:white;border:none;padding:5px 8px;cursor:pointer" onclick="qudong()">确定</button>&nbsp;点地图确定位置,<a href="javascript:;" onclick="dingwei()">[定位搜索]</a></div>
 <div style="width:100%;height:100%" id="container"></div>
 </body>
 </html>

+ 22 - 0
webmain/task/api/kaoqinAction.php

@@ -51,4 +51,26 @@ class kaoqinClassAction extends apiAction
 		
 		$this->showreturn($barr);
 	}
+	
+
+	
+	/**
+	*	腾讯地图地址解析api.php?m=kaoqin&a=gcoder
+	*/
+	public function gcoderAction()
+	{
+		return c('mapqq')->gcoder($this->get('lat'), $this->get('lng'));
+	}
+	
+	//地址转化
+	public function translateAction()
+	{
+		return c('mapqq')->translate($this->get('lat'), $this->get('lng'),(int)$this->get('type'));
+	}
+	
+	//搜索
+	public function suggestionAction()
+	{
+		return c('mapqq')->suggestion($this->get('key'));
+	}
 }

+ 5 - 0
webmain/task/api/uploadAction.php

@@ -19,6 +19,10 @@ class uploadClassAction extends apiAction
 			$updir=str_replace('{Year}',date('Y'), $updir);
 			$updir=str_replace(array('{','}'),'', $updir);
 			$updir=str_replace(',','|', $updir);
+			
+			$bobg = preg_replace("/[a-zA-Z0-9_]/",'', $updir);
+			$bobg = str_replace(array('-','|'),'', $bobg);
+			if($bobg)exit('stop:'.$bobg.'');
 		}
 		$upimg->initupfile($uptypes, ''.UPDIR.'|'.$updir.'', $maxsize);
 		$upses	= $upimg->up('file');
@@ -323,6 +327,7 @@ class uploadClassAction extends apiAction
 			if(substr($filepath,0,4)!='http' && isempt($filepathout) && !file_exists($filepath))return returnerror('文件不存在了1');
 			if(c('upfile')->isimg($fileext)){
 				$data['url'] = m('admin')->getface($filepath);
+				if(!isempt($filepathout))$data['url'] = $filepathout;
 			}
 			//下载
 			if($type==1){

+ 31 - 30
webmain/we/ying/tpl_ying_daka.html

@@ -11,14 +11,17 @@
 <script type="text/javascript" src="js/js.js"></script>
 <script type="text/javascript" src="js/jswx.js"></script>
 <script type="text/javascript" src="js/base64-min.js"></script>
-<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&libraries=convertor,geometry&key=<?=$da['qqmapkey']?>"></script>
-<script type="text/javascript" src="js/dingwei.js"></script>
+<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=<?=$da['qqmapkey']?>&libraries=geometry"></script>
+<script type="text/javascript" src="js/dingwei.js?<?=time()?>"></script>
 <style>
-<?php 
-$maincolor = getconfig('apptheme','#1389D3');
-$maincolora= c('image')->colorTorgb($maincolor);
-$maincolors= ''.$maincolora[0].','.$maincolora[1].','.$maincolora[2].'';
-echo 'body{--main-color:'.$maincolor.'}';
+<?php
+$colobj    = c('image');
+if(method_exists($colobj,'colorTorgb')){
+	$maincolor = getconfig('apptheme','#1389D3');
+	$maincolora= $colobj->colorTorgb($maincolor);
+	$maincolors= ''.$maincolora[0].','.$maincolora[1].','.$maincolora[2].'';
+	echo 'body{--main-color:'.$maincolor.'}';
+}
 ?>
 .weui_tabbar_icon{text-align:center;color:#888888;font-size:20px;}
 .weui_tabbar_item{padding-top:2px;margin-bottom:5px;position:relative}
@@ -91,19 +94,19 @@ function showkqrswz(){
 			}
 		}
 	}
-	if(s=='')s='没设置考勤位置';
 	if(s!='')s=s.substr(1);
+	if(s=='')s='<font color=red>没设置考勤位置</font>';
 	$('#weizhi').html(s);
 }
 
 js.dw.ondwwait=function(msg){
-	latitude = '';
+	//latitude = '';
 	$('#dwshow').html('<img src="images/loadings.gif" height="14px" align="absmiddle"> '+msg+'');
 	return true;
 }
 
 js.dw.ondwerr=function(msg){
-	latitude = '';
+	//latitude = '';
 	$('#dwshow').html(''+msg+',<a href="javascript:;" onclick="js.dw.start()">[在定位]</a>');
 }
 
@@ -113,28 +116,26 @@ js.dw.ondwcall = function(res){
 	longitude 	= res.longitude;
 	accuracy 	= res.accuracy;
 	label		= res.address;
-	var center	= res.center;
-	$('#dwshow').html(''+res.addressinfo+',<a href="javascript:;" onclick="js.dw.start()">[更新]</a>');
-	var i,kqrsa,enddt,juli;
 	
+	$('#dwshow').html(''+res.addressinfo+',<a href="javascript:;" onclick="js.dw.start()">[更新]</a>');
 	addbo		= true;//可以添加记录
-	for(i=0;i<kqallrs.length;i++){
-		kqrsa = kqallrs[i];
-		enddt = new qq.maps.LatLng(parseFloat(kqrsa.location_x), parseFloat(kqrsa.location_y));
-		juli  = parseInt(qq.maps.geometry.spherical.computeDistanceBetween(center, enddt));
-		if(juli<0)juli = 0-juli;
-		if(kqrsa['iswgd']=='1')juli=0; //无固定位置的
-		kqallrs[i]['kqjuli'] = juli;
-		kqjuli = juli;
-	}
-	
-	if(!isfenwein()){
-		$('#dkbtnto').addClass('btnwai');
-		$('#dkbtn').html('外出定位');
-	}else{
-		$('#dkbtnto').removeClass('btnwai');
-		$('#dkbtn').html('第'+dakaci+'次打卡');
-	}
+	this.julisuan(latitude,longitude, kqallrs, function(narr){
+		kqallrs = narr;
+		for(var i=0;i<narr.length;i++){
+			var juli = narr[i].kqjuli;
+			if(juli<0)juli = 0-juli;
+			if(narr[i]['iswgd']=='1')juli=0; //无固定位置的
+			kqallrs[i]['kqjuli'] = juli;
+			kqjuli = juli;
+		}
+		if(!isfenwein()){
+			$('#dkbtnto').addClass('btnwai');
+			$('#dkbtn').html('外出定位');
+		}else{
+			$('#dkbtnto').removeClass('btnwai');
+			$('#dkbtn').html('第'+dakaci+'次打卡');
+		}
+	});
 	nowtimetime = js.now('time');
 }
 

+ 24 - 19
webmain/we/ying/tpl_ying_location.html

@@ -12,14 +12,18 @@
 <script type="text/javascript" src="js/jswx.js"></script>
 <script type="text/javascript" src="js/base64-min.js"></script>
 <script type="text/javascript" src="web/res/js/jquery-rockupload.js"></script>
-<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&libraries=convertor,geometry&key=<?=$da['qqmapkey']?>"></script>
-<script type="text/javascript" src="js/dingwei.js"></script>
+<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=<?=$da['qqmapkey']?>"></script>
+<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=<?=$da['qqmapkey']?>&libraries=geometry"></script>
+<script type="text/javascript" src="js/dingwei.js?<?=time()?>"></script>
 <style>
-<?php 
-$maincolor = getconfig('apptheme','#1389D3');
-$maincolora= c('image')->colorTorgb($maincolor);
-$maincolors= ''.$maincolora[0].','.$maincolora[1].','.$maincolora[2].'';
-echo 'body{--main-color:'.$maincolor.'}';
+<?php
+$colobj    = c('image');
+if(method_exists($colobj,'colorTorgb')){
+	$maincolor = getconfig('apptheme','#1389D3');
+	$maincolora= $colobj->colorTorgb($maincolor);
+	$maincolors= ''.$maincolora[0].','.$maincolora[1].','.$maincolora[2].'';
+	echo 'body{--main-color:'.$maincolor.'}';
+}
 ?>
 </style>
 <script>
@@ -82,24 +86,25 @@ js.dw.ondwcall = function(res){
 	latitude 	= res.latitude;
 	longitude 	= res.longitude;
 	accuracy 	= res.accuracy;
-	var center 	= res.center;
+	var center 	= new qq.maps.LatLng(latitude, longitude);
 	addbo	 	= true;
 	scale	 	= map.getZoom();
 	js.setoption('latlongedu',''+latitude+','+longitude+','+scale+'');
-	map.setCenter(res.center);
+	map.setCenter(center);
 	label		= res.address;
 	showinfo(center ,accuracy, '定位成功<br>地址:'+res.addressinfo+'');
 	
-	var i,kqrsa,enddt,juli;
-	for(i=0;i<kqallrs.length;i++){
-		kqrsa = kqallrs[i];
-		enddt = new qq.maps.LatLng(parseFloat(kqrsa.location_x), parseFloat(kqrsa.location_y));
-		juli  = parseInt(qq.maps.geometry.spherical.computeDistanceBetween(center, enddt));
-		if(juli<0)juli = 0-juli;
-		if(kqrsa['iswgd']=='1')juli=0; //无固定位置的
-		kqallrs[i]['kqjuli'] = juli;
-		kqjuli = juli;
-	}
+	this.julisuan(latitude,longitude, kqallrs, function(narr){
+		kqallrs = narr;
+		for(var i=0;i<narr.length;i++){
+			var juli = narr[i].kqjuli;
+			if(juli<0)juli = 0-juli;
+			if(narr[i]['iswgd']=='1')juli=0; //无固定位置的
+			kqallrs[i]['kqjuli'] = juli;
+			kqjuli = juli;
+		}
+	});
+	
 	nowtimetime = js.now('time');
 }
 

+ 2 - 2
webmain/we/ying/yingAction.php

@@ -170,7 +170,7 @@ class yingClassAction extends ActionNot{
 			$kqors = m('kqdw')->getrows("id in($dwids) and `id`<>".$kqrs['id']."");
 		}
 		$this->assign('kqors', $kqors);
-		$this->smartydata['qqmapkey']	= getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
+		$this->smartydata['qqmapkey']	= c('mapqq')->getkey();
 	}
 	
 	/**
@@ -195,6 +195,6 @@ class yingClassAction extends ActionNot{
 			$kqors = m('kqdw')->getrows("id in($dwids) and `id`<>".$kqrs['id']."");
 		}
 		$this->assign('kqors', $kqors);
-		$this->smartydata['qqmapkey']	= getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
+		$this->smartydata['qqmapkey']	= c('mapqq')->getkey();
 	}
 }

粤ICP备19079148号