1
0

inputAction.php 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269
  1. <?php
  2. class inputAction extends Action
  3. {
  4. public $mid = 0;
  5. public $flow;
  6. public $rs = array();
  7. public $gongsiarr,$actclss,$fieldarrall,$inputobj,$subfielsa,$checkobj,$mdb,$mallfields;
  8. public function initAction()
  9. {
  10. /*
  11. $aid = (int)$this->get('adminid');
  12. $token = $this->get('token');
  13. $uid = m('login')->autologin($aid, $token);
  14. $this->getlogin();
  15. $this->loginnot();*/
  16. }
  17. private $fieldarr = array();
  18. private $ismobile = 0;
  19. protected $moders = array();
  20. //保存前处理,主要用于判断是否可以保存
  21. protected function savebefore($table,$arr, $id, $addbo){}
  22. //保存后处理,主要用于判断是否可以保存
  23. protected function saveafter($table,$arr, $id, $addbo){}
  24. //生成列表页,数据读取前处理
  25. protected function storebefore($table){}
  26. //生成列表页,数据读取后处理
  27. protected function storeafter($table, $rows){}
  28. //过滤html代码
  29. private function xxsstolt($uaarr)
  30. {
  31. foreach($uaarr as $k=>$v){
  32. $vss = strtolower($v);
  33. if(contain($vss, '<script')){
  34. $uaarr[$k] = str_replace(array('<','>'),array('&lt;','&gt;'), $v);
  35. }
  36. }
  37. return $uaarr;
  38. }
  39. /**
  40. * 录入的保存
  41. */
  42. public function saveAjax()
  43. {
  44. $id = (int)$this->request('id');
  45. $modenum = $this->request('sysmodenum');
  46. $uid = $this->adminid;
  47. $this->flow = m('flow')->initflow($modenum);
  48. $this->moders = $this->flow->moders;
  49. $modeid = $this->moders['id'];
  50. $isflow = (int)$this->moders['isflow'];
  51. $flownum = $this->moders['num'];
  52. $table = $this->moders['table'];
  53. $sysisturn = (int)$this->post('istrun','1');
  54. $this->checkobj = c('check');
  55. if($this->isempt($table))$this->backmsg('模块未设置表名');
  56. $fieldsarr = array();
  57. $fiexar = $this->flow->flowfieldarr($this->flow->fieldsarra, 2);
  58. foreach($fiexar as $k2=>$rs2)if($rs2['islu']==1)$fieldsarr[]=$rs2;
  59. if(!$fieldsarr)$this->backmsg('没有录入元素');
  60. $db = m($table);$subna = '提交';$addbo = false;$where = "`id`='$id'"; $oldrs = false;
  61. $this->mdb = $db;
  62. $filelx = (int)arrvalue($this->moders,'filelx','0');
  63. if($id==0){
  64. $where = '';
  65. $addbo = true;
  66. $isadd = m('view')->isadd($modeid, $uid);
  67. if(!$isadd)$this->backmsg('无权添加['.$this->moders['name'].']的数据1;');
  68. }else{
  69. $oldrs = $db->getone($id);
  70. if(!$oldrs)$this->backmsg('记录不存在');
  71. $this->flow->loaddata($id);
  72. if(!$this->flow->iseditqx())
  73. $this->backmsg('无权编辑['.$this->moders['name'].']的数据;');
  74. if($isflow>0){
  75. if($oldrs['uid']==$uid || $oldrs['optid']==$uid || $this->flow->floweditother){
  76. }else{
  77. //$this->backmsg('不是你提交/申请的单据,不允许编辑');
  78. }
  79. if($oldrs['status']==1)$this->backmsg('单据已审核完成,不允许编辑');
  80. }
  81. $subna = '编辑';
  82. }
  83. if($oldrs)$this->rs = $oldrs;
  84. $uaarr = $farrs = array();
  85. $lvls = array('textnot','textarea','ditumap');
  86. foreach($fieldsarr as $k=>$rs){
  87. $fid = $rs['fields'];
  88. $fi1 = substr($fid, 0, 5);
  89. if($fi1=='temp_' || $fi1=='base_')continue;
  90. $val = $this->post($fid);
  91. if($rs['isbt']==1 && isempt($val))$this->backmsg(''.$rs['name'].'不能为空');
  92. $msy = $this->attrcheck($val, arrvalue($rs, 'attr'), $this->checkobj);
  93. if($msy)$this->backmsg(''.$rs['name'].''.$msy.'');
  94. if(in_array($rs['fieldstype'], $lvls))$val = htmlspecialchars($val);
  95. $uaarr[$fid] = $val;
  96. $farrs[$fid] = array('name' => $rs['name']);
  97. }
  98. //人员选择保存的
  99. foreach($fieldsarr as $k=>$rs){
  100. if(substr($rs['fieldstype'],0,6)=='change'){
  101. if(!$this->isempt($rs['data'])){
  102. $fid = $rs['data'];
  103. if(isset($uaarr[$fid]))continue;
  104. $val = $this->post($fid);
  105. if($rs['isbt']==1&&$this->isempt($val))$this->backmsg(''.$rs['name'].'id不能为空');
  106. $uaarr[$fid] = $val;
  107. $farrs[$fid] = array('name' => $rs['name'].'id');
  108. }
  109. }
  110. if($rs['fieldstype']=='num'){
  111. $fid = $rs['fields'];
  112. if($this->flow->rows("`$fid`='{$uaarr[$fid]}' and `id`<>$id")>0)$uaarr[$fid]=$this->flow->createbianhao($rs['data'], $fid);
  113. }
  114. if($rs['fieldstype']=='uploadfile'){
  115. $_val= arrvalue($uaarr, $rs['fields']);
  116. if(!isempt($_val))$this->otherfileid.=','.$_val.'';
  117. }
  118. if($rs['fieldstype']=='graph'){
  119. $_val= arrvalue($uaarr, $rs['fields']);
  120. if($_val)$uaarr[$rs['fields']] = c('input')->createqianming($_val);
  121. }
  122. }
  123. //默认字段保存
  124. $allfields = $this->db->getallfields('[Q]'.$table.'');
  125. $this->mallfields = $allfields;
  126. if(in_array('optdt', $allfields))$uaarr['optdt'] = $this->now;
  127. if(in_array('optid', $allfields))$uaarr['optid'] = $this->adminid;
  128. if(in_array('optname', $allfields))$uaarr['optname'] = $this->adminname;
  129. if(in_array('uid', $allfields) && $addbo){
  130. $uaarr['uid'] = $this->post('uid', $this->adminid);
  131. }
  132. if(isset($uaarr['uid'])){
  133. $urs = $this->flow->adminmodel->getone($uaarr['uid']);
  134. in_array('applyname', $allfields) and $uaarr['applyname'] = $urs['name'];
  135. in_array('applydeptname', $allfields) and $uaarr['applydeptname'] = $urs['deptname'];
  136. }
  137. if(in_array('applydt', $allfields) && $id==0)
  138. $uaarr['applydt'] = $this->post('applydt', $this->date);
  139. if($addbo){
  140. if(in_array('createdt', $allfields))$uaarr['createdt'] = $this->now;
  141. if(in_array('adddt', $allfields))$uaarr['adddt'] = $this->now;
  142. if(in_array('createid', $allfields))$uaarr['createid'] = $this->adminid;
  143. if(in_array('createname', $allfields))$uaarr['createname'] = $this->adminname;
  144. }
  145. //保存公司的
  146. if(in_array('comid', $allfields)){
  147. if($addbo)$uaarr['comid'] = m('admin')->getcompanyid();
  148. if(arrvalue($oldrs,'comid')=='0')$uaarr['comid'] = m('admin')->getcompanyid();
  149. }
  150. if($isflow>0){
  151. $uaarr['status']= '0';
  152. if($sysisturn==0){
  153. $uaarr['isturn']= '0';
  154. $subna = '保存';
  155. }
  156. }else{
  157. if(in_array('status', $allfields))$uaarr['status'] = (int)$this->post('status', '1');
  158. if(in_array('isturn', $allfields))$uaarr['isturn'] = (int)$this->post('isturn', '1');
  159. }
  160. //保存条件的判断
  161. foreach($fieldsarr as $k=>$rs){
  162. $ss = '';
  163. if(isset($uaarr[$rs['fields']]))$ss = $this->flow->savedatastr($uaarr[$rs['fields']], $rs, $uaarr);
  164. if($ss!='')$this->backmsg($ss);
  165. }
  166. $fileid = $this->post('fileid');
  167. if($filelx==1 && isempt($fileid))$this->backmsg('必须添加“相关文件”');
  168. //判断保存前的
  169. $ss = '';
  170. $befa = $this->savebefore($table, $this->getsavenarr($uaarr, $oldrs), $id, $addbo);
  171. $notsave= array();//不保存的字段
  172. if(is_string($befa)){
  173. $ss = $befa;
  174. }else{
  175. if(isset($befa['msg']))$ss=$befa['msg'];
  176. if(isset($befa['rows'])){
  177. if(is_array($befa['rows']))foreach($befa['rows'] as $bk=>$bv)$uaarr[$bk]=$bv;
  178. }
  179. if(isset($befa['notsave'])){
  180. $notsave=$befa['notsave'];
  181. if(is_string($notsave))$notsave = explode(',', $notsave);
  182. }
  183. }
  184. if(!$this->isempt($ss))$this->backmsg($ss);
  185. //不保存字段过滤掉
  186. if(is_array($notsave))foreach($notsave as $nofild)if(isset($uaarr[$nofild]))unset($uaarr[$nofild]);
  187. $uaarr = $this->xxsstolt($uaarr);//过滤特殊文字
  188. foreach($uaarr as $kf=>$kv){
  189. if(!in_array($kf, $allfields)){
  190. $this->backmsg('模块主表['.$this->flow->mtable.']上字段['.$kf.']不存在');
  191. }
  192. }
  193. //isonly唯一值的判断
  194. foreach($fieldsarr as $k=>$rs){
  195. $fiesd = $rs['fields'];
  196. if($rs['isonly']=='1' && isset($uaarr[$fiesd])){
  197. $dval = $uaarr[$fiesd];
  198. if(!isempt($dval)){
  199. if($db->rows("`id`<>'$id' and `$fiesd`='$dval'")>0)$this->backmsg(''.$rs['name'].'['.$dval.']已存在了');
  200. }
  201. }
  202. }
  203. //判断子表的
  204. $tabless = $this->moders['tables'];
  205. $tablessa = array();
  206. if(!isempt($tabless))$tablessa = explode(',', $tabless);
  207. if($tablessa)foreach($tablessa as $zbx=>$zbtab){
  208. if($zbtab){
  209. $this->getsubtabledata($zbx);
  210. if($this->subtabledata_msg)$this->backmsg($this->subtabledata_msg);
  211. }
  212. }
  213. $bo = $db->record($uaarr, $where);;
  214. if(!$bo)$this->backmsg($this->db->lasterror());
  215. if($id==0)$id = $this->db->insert_id();
  216. $fobj = m('file');
  217. $fobj->addfile($fileid, $table, $id, $modenum);
  218. if($this->otherfileid!=''){
  219. $ofid1 = substr($this->otherfileid,1);
  220. $fobj->addxuan($ofid1,$this->post('sxuanfileid'),''.$modenum.'|'.$id.'');
  221. $fobj->addfile($ofid1, '', $id, $modenum);
  222. }
  223. $newrs = $db->getone($id);
  224. $this->companyid = isset($newrs['companyid']) ? (int)$newrs['companyid'] : (int)arrvalue($newrs, 'comid', '0');
  225. if($this->companyid==0)$this->companyid = m('admin')->getcompanyid();
  226. //保存多行子表
  227. if($tablessa)foreach($tablessa as $zbx=>$zbtab){
  228. if($zbtab)$this->savesubtable($zbtab, $id, $zbx, $addbo);
  229. }
  230. //保存后处理
  231. $this->saveafter($table,$this->getsavenarr($uaarr, $oldrs), $id, $addbo);
  232. if($addbo)c('cache')->del('tempdata_'.$modenum.'_'.$this->adminid.'');//删除暂存
  233. //保存修改记录
  234. $editcont = '';
  235. if($oldrs){
  236. $newrs = $db->getone($id);
  237. $editcont = m('edit')->recordsave($farrs, $table, $id, $oldrs, $newrs);
  238. }
  239. $msg = '';
  240. $this->flow->editcont = $editcont;
  241. $this->flow->loaddata($id, false);
  242. $this->flow->submit($subna);
  243. $this->backmsg('', $subna, $id);
  244. }
  245. //格式的判断
  246. private function attrcheck($val, $attr, $checkobj)
  247. {
  248. if(!isempt($val) && !isempt($attr)){
  249. if(contain($attr, 'email') && !$checkobj->isemail($val))return '必须是邮箱格式';
  250. if(contain($attr, 'mobile') && !$checkobj->iscnmobile($val))return '必须是11位手机号';
  251. if(contain($attr, 'onlyen') && $checkobj->isincn($val))return '不能有中文';
  252. if(contain($attr, 'onlycn') && !$checkobj->isincn($val))return '必须包含中文';
  253. if(contain($attr, 'number') && !$checkobj->isnumber($val))return '必须是数字';
  254. if(contain($attr, 'date') && !$checkobj->isdate($val))return '必须是日期格式如2020-02-02';
  255. }
  256. return '';
  257. }
  258. private function getsavenarr($nsrr, $bos=false)
  259. {
  260. if(!is_array($bos))$bos = array();
  261. if($nsrr)foreach($nsrr as $k=>$v)$bos[$k]=$v;
  262. return $bos;
  263. }
  264. private $subtabledata = array();
  265. private $subtabledata_msg = '';
  266. private $otherfileid = '';
  267. public function getsubtabledata($xu)
  268. {
  269. $this->subtabledata_msg = '';
  270. if(isset($this->subtabledata[$xu]))return $this->subtabledata[$xu];
  271. $arr = array();
  272. $oi = (int)$this->post('sub_totals'.$xu.'');
  273. if($oi<=0)return $arr;
  274. $modeid = $this->moders['id'];
  275. $iszb = $xu+1;
  276. $farr = m('flow_element')->getrows("`mid`='$modeid' and `islu`=1 and `iszb`=$iszb",'`name`,`fields`,`isbt`,`fieldstype`,`savewhere`,`dev`,`data`,`attr`','`sort`');
  277. $sort = 0;
  278. $zlen = count($farr);
  279. for($i=0; $i<$oi; $i++){
  280. $sid = (int)$this->post('sid'.$xu.'_'.$i.'');
  281. $bos = true;
  282. $uaarr['id'] = $sid;
  283. $wkz = 0;
  284. foreach($farr as $k=>$rs){
  285. $fid= $rs['fields'];
  286. $flx= $rs['fieldstype'];
  287. $na = ''.$fid.''.$xu.'_'.$i.'';
  288. //if(!isset($_POST[$na]))$bos=false;
  289. $val= $this->post($na);
  290. if(isempt($val))$wkz++;//空字段
  291. if(substr($fid,0,5)=='temp_')continue;
  292. if($bos){
  293. if($rs['isbt']==1 && isempt($val))$bos=false;
  294. }
  295. if($bos){
  296. $msy = $this->attrcheck($val,$rs['attr'], $this->checkobj);
  297. if($msy){
  298. $msy='第'.$iszb.'子表行'.($sort+1).'的'.$rs['name'].''.$msy.'';
  299. $this->subtabledata_msg = $msy;
  300. return $arr;
  301. }
  302. $uaarr[$fid] = $val;
  303. if(substr($flx,0,6)=='change' && !isempt($rs['data'])){
  304. $na = ''.$rs['data'].''.$xu.'_'.$i.'';
  305. $val= $this->post($na);
  306. $uaarr[$rs['data']] = $val;
  307. }
  308. if($flx=='uploadfile'){
  309. if($val)$this->otherfileid.=','.$val.'';
  310. }
  311. }
  312. if(!$bos)break;
  313. }
  314. if(!$bos)continue;
  315. if($wkz==$zlen)continue;//全部都是空
  316. $uaarr['sort'] = $sort;
  317. $sort++;
  318. $arr[] = $uaarr;
  319. }
  320. $this->subtabledata[$xu] = $arr;
  321. return $arr;
  322. }
  323. //多行子表的保存
  324. private function savesubtable($tables, $mid, $xu, $addbo)
  325. {
  326. $dbs = m($tables);
  327. $data = $this->getsubtabledata($xu);
  328. $len = count($data);
  329. $idss = '0';
  330. $whes = '';
  331. $allfields = array();
  332. $ischuli = false;
  333. $allfielda = $this->db->gettablefields('[Q]'.$tables.'');
  334. foreach($allfielda as $k1=>$rs1){
  335. $allfields[] = $rs1['name'];
  336. if($rs1['name']=='mid' && contain($rs1['types'],'int(11)'))$ischuli = true;
  337. }
  338. //$allfields = $this->db->getallfields('[Q]'.$tables.'');
  339. $oarray = array();
  340. if(in_array('optdt', $allfields))$oarray['optdt'] = $this->now;
  341. if(in_array('optid', $allfields))$oarray['optid'] = $this->adminid;
  342. if(in_array('optname', $allfields))$oarray['optname'] = $this->adminname;
  343. if(in_array('uid', $allfields) && $addbo)$oarray['uid'] = $this->post('uid', $this->adminid);
  344. if(in_array('applydt', $allfields) && $addbo)$oarray['applydt'] = $this->post('applydt', $this->date);
  345. if(in_array('status', $allfields))$oarray['status'] = 0;
  346. if(in_array('sslx', $allfields)){
  347. $oarray['sslx'] = $xu;
  348. $whes = ' and `sslx`='.$xu.'';
  349. }
  350. if(in_array('comid', $allfields))$oarray['comid'] = $this->companyid;
  351. if(!$ischuli){
  352. $usql = 'alter table `[Q]'.$tables.'` MODIFY `mid` int(11) DEFAULT 0 COMMENT \'对应主表'.$this->flow->mtable.'.id\';';
  353. $this->db->query($usql, false);
  354. }
  355. if($data)foreach($data as $k=>$uaarr){
  356. $sid = $uaarr['id'];
  357. $where = "`id`='$sid'";
  358. $uaarr['mid'] = $mid;
  359. if($sid==0)$where = '';
  360. foreach($oarray as $k1=>$v1)$uaarr[$k1]=$v1;
  361. if($k==0){
  362. foreach($uaarr as $k2=>$v2){
  363. if(!in_array($k2, $allfields)){
  364. $this->backmsg('第'.($xu+1).'个子表['.$tables.']上字段['.$k2.']不存在');
  365. break;
  366. }
  367. }
  368. }
  369. unset($uaarr['id']);
  370. $dbs->record($uaarr, $where);
  371. if($sid==0)$sid = $this->db->insert_id();
  372. $idss.=','.$sid.'';
  373. }
  374. $delwhere = "`mid`='$mid'".$whes." and `id` not in($idss)";
  375. $dbs->delete($delwhere);
  376. }
  377. //获取数据
  378. public function getdataAjax()
  379. {
  380. $flownum = $this->request('flownum');
  381. $id = (int)$this->request('mid');
  382. $arr = m('flow')->getdataedit($flownum, $id);
  383. $this->backmsg('', '', $arr);
  384. }
  385. public function lumAction()
  386. {
  387. $ybarr = $this->option->authercheck();
  388. if(is_string($ybarr))return $ybarr;
  389. $this->ismobile = 1;
  390. $this->luactions();
  391. }
  392. public function luAction()
  393. {
  394. $this->ismobile = 0;
  395. $this->luactions();
  396. }
  397. public function lumoAction()
  398. {
  399. $ybarr = $this->option->authercheck();
  400. if(is_string($ybarr))return $ybarr;
  401. $this->ismobile = 1;
  402. $this->luactions();
  403. }
  404. public function lusAction()
  405. {
  406. $this->ismobile = 1;
  407. $menuid = (int)$this->get('menuid');
  408. $fields = m('flow_menu')->getmou('fields', $menuid);
  409. if(isempt($fields))exit('sorry;');
  410. $fields = str_replace(',',"','", $fields);
  411. $stwhe = "and `fields` in('$fields')";
  412. $this->luactions(1, $stwhe);
  413. }
  414. //高级搜索显示框
  415. public function highsouAction()
  416. {
  417. $this->displayfile = ''.P.'/flow/input/tpl_input_lus.html';
  418. $this->ismobile = 1;
  419. $this->luactions(0, '', 1);
  420. }
  421. //$lutype=1高级搜索用的
  422. private function luactions($slx=0, $stwhe='', $lutype=0)
  423. {
  424. $this->tpltype = 'html';
  425. $uid = $this->adminid;
  426. $num = $this->jm->gettoken('num');
  427. $mid = (int)$this->jm->gettoken('mid');
  428. $this->mid = $mid;
  429. $this->rs = array();
  430. $this->flow = m('flow')->initflow($num);
  431. $moders = $this->flow->moders;
  432. $modename = $moders['name'];
  433. if($moders['status']=='0')exit('模块['.$modename.']已停用了;');
  434. $apaths = ''.P.'/flow/input/mode_'.$moders['num'].'Action.php';
  435. if(!file_exists($apaths))exit('没有创建布局录入页面,无法打开,请到【流程模块→表单元素管理】下的点按钮“PC端录入页面布局”,更多查看'.c('xinhu')->helpstr('bwb3mf').'。');
  436. $isflow = (int)$moders['isflow'];
  437. $this->smartydata['moders'] = array(
  438. 'num' => $moders['num'],
  439. 'id' => $moders['id'],
  440. 'name' => $moders['name'],
  441. 'names' => $moders['names'],
  442. 'isflow'=> $isflow,
  443. 'iscs' => $moders['iscs'],
  444. 'isbxs' => $moders['isbxs'],
  445. );
  446. $this->smartydata['chao'] = $this->flow->getcsname($mid);
  447. $modeid = $moders['id'];
  448. if($mid==0 && $lutype==0){
  449. $isadd = m('view')->isadd($modeid, $uid);
  450. if(!$isadd)exit('无权添加['.$modename.']的数据,请到[流程模块→流程模块权限]下添加权限');
  451. }
  452. $content = '';
  453. $oldrs = m($moders['table'])->getone($mid);
  454. $this->rs = $oldrs;
  455. $this->gongsiarr = array();
  456. $fieldarr = m('flow_element')->getrows("`mid`='$modeid' and `iszb`=0 $stwhe",'*','`sort`');
  457. $fieldarr = $this->flow->flowfieldarr($fieldarr, $this->ismobile);
  458. $modelu = '';
  459. $fieldstypearr = array();
  460. $fmoddfarr = array();
  461. foreach($fieldarr as $k=>$rs){
  462. if($slx==1 && $oldrs){
  463. $rs['value'] = $oldrs[$rs['fields']];
  464. }
  465. if($lutype==1){
  466. $rs['isbt'] = 0;
  467. if($rs['issou']==1)$modelu.='{'.$rs['fields'].'}';
  468. }else{
  469. if($rs['islu'] || $stwhe!=''){
  470. $fmoddfarr[] = $rs;
  471. $modelu.='{'.$rs['fields'].'}'; //手机端字段布局
  472. }
  473. if(!isempt($rs['gongsi']) && contain($rs['gongsi'],'{'))$this->gongsiarr[] = array(
  474. 'iszb' => 0,
  475. 'fields' => $rs['fields'],
  476. 'gongsi' => $rs['gongsi'],
  477. );
  478. }
  479. $this->fieldarr[$rs['fields']] = $rs;
  480. if($rs['islu']==1)$fieldstypearr[] = $rs['fieldstype'];
  481. }
  482. $this->smartydata['fieldsjson'] = json_encode($fieldarr);
  483. $this->moders = $moders;
  484. $zbshu = 0;
  485. $tableas = false;
  486. if(!isempt($moders['tables'])){
  487. $tableas = explode(',', $moders['tables']);
  488. $zbshu = count($tableas);
  489. }
  490. $path = ''.P.'/flow/page/input_'.$num.'.html';
  491. if(COMPANYNUM){
  492. $path1 = ''.P.'/flow/page/input_'.$num.'_'.COMPANYNUM.'.html';
  493. if(file_exists($path1))$path = $path1;
  494. }
  495. $pclucont = '';
  496. if(file_exists($path))$pclucont = file_get_contents($path);
  497. $isupfile = 0;
  498. $nameaas = explode(',', (string)$moders['names']); //子表名
  499. //PC端
  500. if($this->ismobile==0){
  501. $content = $pclucont;
  502. }else{
  503. $content = $this->mobileautov($modelu, $fmoddfarr);
  504. if($tableas && $slx==0){
  505. foreach($tableas as $k1=>$tableass){
  506. $zbstr = m('input')->getsubtable($modeid,$k1+1,1,1, $zbzdshu);
  507. if($zbzdshu>2 && $this->flow->minwidth<300)$this->flow->minwidth = $zbzdshu*180;
  508. if($zbstr!=''){
  509. $zbnam = arrvalue($nameaas, $k1);
  510. $zbstr = str_replace('{subzbname'.$k1.'}', $zbnam, $zbstr);
  511. $content.= '<tr><td colspan="2">';
  512. //if(!getconfig('inputm_view'))$content.='<div><b>'.$zbnam.'</b></div>';
  513. if($this->flow->minwidth>300 && $this->rock->ismobile() && 1==2){
  514. $content.='<div tmp="mobilezbiao" style="width:280px;overflow:auto;"><div
  515. style="min-width:'.$this->flow->minwidth.'px">'.$zbstr.'</div></div>';
  516. }else{
  517. $content.='<div>'.$zbstr.'</div>';
  518. }
  519. $content.= '</td></tr>';
  520. }
  521. }
  522. }
  523. $isupfile = contain($pclucont, '{file_content}') ? 1 : 0;
  524. }
  525. if($content=='')exit('未设置录入页面,请到[流程模块→表单元素管理]下设置');
  526. $filelx = (int)arrvalue($moders,'filelx','0');
  527. $content = $this->flow->flowinputtpl($content, $this->ismobile);
  528. $this->actclss = $this;
  529. $pathss = ''.P.'/flow/input/mode_'.$num.'Action.php';
  530. if(file_exists($pathss)){
  531. include_once($pathss);
  532. $clsnam = 'mode_'.$num.'ClassAction';
  533. $this->actclss = new $clsnam();
  534. $this->actclss->flow = $this->flow;
  535. $this->actclss->mid = $this->mid;
  536. $this->actclss->rs = $this->rs;
  537. $this->actclss->ismobile= $this->ismobile;
  538. }
  539. //初始表单插件元素
  540. $this->fieldarrall = $this->fieldarr;
  541. $this->inputobj = c('input');
  542. $this->inputobj->ismobile = $this->ismobile;
  543. $this->inputobj->fieldarr = $this->fieldarr;
  544. $this->inputobj->flow = $this->flow;
  545. $this->inputobj->mid = $this->mid;
  546. $this->inputobj->initUser($this->adminid);
  547. $redfont = '<font color=red>*</font>';
  548. $chufarr = array();
  549. if(method_exists($this->flow, 'flowxiangfields'))$chufarr = $this->flow->flowxiangfields($chufarr);
  550. $this->fieldarrall['base_sericnum'] = array('name'=>arrvalue($chufarr,'base_sericnum','单号'));
  551. $this->fieldarrall['base_name'] = array('name'=>arrvalue($chufarr,'base_name','申请人'));
  552. $this->fieldarrall['base_deptname'] = array('name'=>arrvalue($chufarr,'base_deptname','申请人部门'));
  553. $this->fieldarrall['file_content'] = array('name'=>arrvalue($chufarr,'file_content',''.(($filelx==1)? $redfont:'').'相关文件'));
  554. preg_match_all('/\{(.*?)\}/', $content, $list);
  555. foreach($list[1] as $k=>$nrs){
  556. $str = $this->inputobj->getfieldcont($nrs, $this->actclss);
  557. $content = str_replace('{'.$nrs.'}', $str, $content);
  558. }
  559. $this->subfielsa = array();
  560. $content = $this->pisubduolie($content, $modeid, $nameaas);//多列子表匹配的是[]
  561. $content = str_replace('*',$redfont, $content);
  562. //替换字段名^^
  563. preg_match_all('/\^(.*?)\^/', $content, $list);
  564. foreach($list[1] as $k=>$nrs){
  565. $fzdrs = arrvalue($this->fieldarrall, $nrs);
  566. if($fzdrs)$content = str_replace('^'.$nrs.'^', $fzdrs['name'], $content);
  567. }
  568. $course = array();
  569. $nowcourseid = 0;
  570. if($isflow>0 && $lutype==0){
  571. $course[]= array('name'=>'提交','id'=>0);
  572. $courses = $this->flow->getflowpipei($this->adminid);
  573. if($mid>0){
  574. $nowcourseid = $this->flow->billmodel->getmou('nowcourseid',"`table`='".$this->flow->mtable."' and `mid`='$mid'");
  575. }
  576. foreach($courses as $k=>$rs1){
  577. $na = $rs1['name'];
  578. //if(!$this->isempt($rs1['explain']))$na.= '<br><span style="font-size:12px">('.$rs1['explain'].')</span>';
  579. $rs1['name'] = $na;
  580. $rs1['k'] = $k;
  581. $rs1['isnow']= $rs1['id']==$nowcourseid;
  582. if(arrvalue($moders,'isflowlx')=='1'){
  583. $rs1['isnow'] = $k==0; //如果走重头审批第一步就是第一步的
  584. }
  585. //读取上次选择的2019-03-06 23:10:00添加
  586. $cuid = $name = '';
  587. if($rs1['isnow'] && $rs1['checktype']=='change' && $mid>0){
  588. $cheorws= $this->flow->checksmodel->getall("`table`='".$this->flow->mtable."' and `mid`='$mid' and `courseid`=".$rs1['id']."",'checkid,checkname');
  589. if($cheorws){
  590. foreach($cheorws as $k3=>$rs3){
  591. $cuid.=','.$rs3['checkid'].'';
  592. $name.=','.$rs3['checkname'].'';
  593. }
  594. if($cuid != ''){
  595. $cuid = substr($cuid, 1);
  596. $name = substr($name, 1);
  597. }
  598. }
  599. }
  600. $rs1['sysnextoptid']= $cuid;
  601. $rs1['sysnextopt'] = $name;
  602. $course[]=$rs1;
  603. }
  604. $course[]= array('name'=>'结束','id'=>-1);
  605. }
  606. $this->title = $this->flow->inputtitle();//录入页面的标题
  607. $this->smartydata['content'] = $content;
  608. $this->smartydata['gongsiarr'] = $this->gongsiarr;
  609. $this->smartydata['subfielsa'] = $this->subfielsa;
  610. $this->smartydata['mid'] = $mid;
  611. $this->smartydata['isflow'] = $isflow;
  612. $this->smartydata['showtype'] = $this->get('showtype');
  613. $this->smartydata['zbnamearr'] = $nameaas;
  614. $this->smartydata['zbshu'] = $zbshu;//子表数
  615. $this->smartydata['isupfile'] = $isupfile;//是否有上传
  616. $this->smartydata['isupfiles'] = $this->fieldarrall['file_content']['name'];
  617. $this->assign('inputobj', c('input'));
  618. $this->smartydata['course'] = $course;
  619. $inpwhere = $this->flow->inputwidth;
  620. if($inpwhere<200)$inpwhere = $this->option->getval('inputwidth', 750);
  621. $this->smartydata['inputwidth'] = $inpwhere;
  622. $this->assign('fieldstypearr', $fieldstypearr);
  623. $otherfile = 'webmain/flow/input/tpl_input_luother_'.$this->ismobile.'.html';
  624. if(!file_exists($otherfile))$otherfile = '';
  625. $this->assign('otherfile', $otherfile);
  626. $tempdata = ($mid==0) ? c('cache')->get('tempdata_'.$num.'_'.$this->adminid.'') : '';
  627. $this->assign('tempdata', $tempdata);
  628. }
  629. //2022-06-15添加分组显示
  630. private function mobileautov($str, $farr)
  631. {
  632. if(!$farr)return $str;
  633. $fzuar = array();
  634. foreach($farr as $k=>$rs){
  635. $ftype = arrvalue($rs, 'ftype');
  636. if(isempt($ftype))$ftype = 'defv';
  637. if(!isset($fzuar[$ftype]))$fzuar[$ftype] = '';
  638. $fzuar[$ftype].= '{'.$rs['fields'].'}';
  639. }
  640. $str = '';
  641. foreach($fzuar as $fl=>$fstr){
  642. if($fl!='defv')$str.='<tr><td colspan="2" style="line-height:35px;color:#888888;font-size:12px;padding-left:10px">'.$fl.'</td></tr>';
  643. $str.=$fstr;
  644. }
  645. return $str;
  646. }
  647. //多行子表内替换
  648. private function pisubduolie($content, $modeid, $nameaas)
  649. {
  650. $fieldarr = m('flow_element')->getrows("`mid`='$modeid' and `iszb`>0",'*','`sort`');
  651. if(!$fieldarr)return $content;
  652. $this->fieldarr = array();
  653. foreach($fieldarr as $k=>$rs){
  654. $oi = $rs['iszb']-1;
  655. $this->fieldarr['xuhao'.$oi.''] = array(
  656. 'fields' => 'xuhao'.$oi.'',
  657. 'fieldstype'=> 'xuhao',
  658. 'data' => '',
  659. 'attr' => ' readonly temp="xuhao"',
  660. 'dev' => '1',
  661. 'isbt' => '0',
  662. 'fieldss' => 'sid'.$oi.''
  663. );
  664. $this->fieldarr[$rs['fields'].''.$oi.''] = $rs;
  665. if(!isempt($rs['gongsi']))$this->gongsiarr[] = array(
  666. 'iszb' => $rs['iszb'],
  667. 'fields' => $rs['fields'],
  668. 'gongsi' => $rs['gongsi'],
  669. );
  670. if($rs['isbt']=='1'){
  671. $this->subfielsa[] = array(
  672. 'name' => $rs['name'],
  673. 'fields' => $rs['fields'],
  674. 'type' => $rs['fieldstype'],
  675. 'isbt' => $rs['isbt'],
  676. 'iszb' => (int)$rs['iszb'],
  677. 'zbname'=> arrvalue($nameaas, $oi)
  678. );
  679. }
  680. }
  681. $this->inputobj->fieldarr = $this->fieldarr;
  682. preg_match_all('/\[(.*?)\]/', $content, $list);
  683. foreach($list[1] as $k=>$nrs){
  684. if(!$this->isempt($nrs)){
  685. $fida= explode(',', $nrs);$xu0='0';
  686. if(isset($fida[1]))$xu0=$fida[1];
  687. $iszb = floatval(substr($fida[0],-1))+1;//第几个子表如果超过第10个子表就麻烦了
  688. $str = $this->inputobj->getfieldcont($fida[0], $this->actclss,'_'.$xu0.'', $iszb);
  689. $content = str_replace('['.$nrs.']', $str, $content);
  690. }
  691. }
  692. return $content;
  693. }
  694. public function getselectdataAjax()
  695. {
  696. $rows = array();
  697. $act = $this->get('act');
  698. $modenum= $this->get('sysmodenum');
  699. $actstr = $this->jm->base64decode($this->get('actstr'));
  700. $acta = explode(',', $actstr);
  701. $where = arrvalue($acta, 2);
  702. //20250722
  703. if(substr($actstr,0,5)=='rmod:'){
  704. return c('input')->modestore($actstr);
  705. }
  706. if(isempt($act)){
  707. if($actstr){
  708. $rows = c('input')->sqlstore($actstr);
  709. }
  710. return $rows;
  711. }
  712. //用:读取model上的数据
  713. if(!isempt($act) && contain($act,':')){
  714. $acta = explode(':', $act);
  715. $objs = m($acta[0]);
  716. $tacs = $acta[1];
  717. if(method_exists($objs, $tacs)){
  718. $rows = $objs->$tacs($where);
  719. }
  720. }
  721. if(!$rows && !isempt($act) && method_exists($this, $act)){
  722. $rows = $this->$act($where);
  723. }
  724. //从Model上读取
  725. if(!$rows && !isempt($modenum)){
  726. $this->flow = m('flow')->initflow($modenum);
  727. if(method_exists($this->flow, $act)){
  728. $rows = $this->flow->$act($where);
  729. }
  730. }
  731. //从数据选项读取
  732. if(!$rows && $actstr){
  733. $acta = explode(',', $actstr);
  734. if(count($acta)<=3){
  735. $sarr = m('option')->getmnum($acta[0]);
  736. if($sarr){
  737. $vas = arrvalue($acta,2, 'value');
  738. foreach($sarr as $k=>$rs){
  739. $rows[] = array(
  740. 'name' => $rs['name'],
  741. 'value' => $rs[$vas],
  742. );
  743. }
  744. }
  745. }
  746. }
  747. return $rows;
  748. }
  749. /**
  750. * 公共读取数据之前处理
  751. */
  752. public $atypearr;
  753. public $modeid;
  754. public function storebeforeshow($table)
  755. {
  756. $this->atypearr = false;
  757. $this->modeid = (int)arrvalue($this->flow->moders, 'id', $this->get('modeid','0'));
  758. $pnum = $this->get('pnum');
  759. if($this->post('atype')=='grant'){
  760. $this->atypearr = array();
  761. $this->atypearr[] = array(
  762. 'id' => 0,
  763. 'num' => 'grant',
  764. 'name' => ''.$this->flow->modename.''.lang('授权查看').'',
  765. );
  766. }else if($this->loadci==1 && $this->adminid>0){
  767. $this->atypearr = m('where')->getmywhere($this->modeid, $this->adminid, $pnum);
  768. if(LANG!='zh-CN' && $this->atypearr)foreach($this->atypearr as $k1=>$rs1)$this->atypearr[$k1]['name'] = $this->flow->lang($rs1['name']);
  769. if(isempt($pnum)){
  770. $mors = $this->flow->moders;
  771. if((int)arrvalue($mors,'iscs','0')>0)$this->atypearr[] = array(
  772. 'id' => 0,
  773. 'num' => 'chaos',
  774. 'name' => ''.$mors['name'].''.lang('抄送给我').'',
  775. );
  776. if($mors['isflow']>0){
  777. $this->atypearr[] = array(
  778. 'id' => 0,
  779. 'num' => 'mychuli',
  780. 'name' => ''.$mors['name'].''.lang('经我处理').'',
  781. );
  782. }
  783. }
  784. }
  785. return $this->storebefore($table);
  786. }
  787. /**
  788. * 公共读取数据之后处理,展示列数
  789. */
  790. public function storeaftershow($table, $rows)
  791. {
  792. $barr['rows'] = $rows;
  793. $barr['atypearr'] = $this->atypearr;
  794. if($this->loadci==1){
  795. $vobj = m('view');
  796. $barr['isadd'] = $vobj->isadd($this->modeid, $this->adminid); //判断是否可添加
  797. $barr['isdaoru'] = $vobj->isdaoru($this->modeid, $this->adminid); //判断是否可导入
  798. $barr['isdaochu'] = $vobj->isdaochu($this->modeid, $this->adminid); //判断是否可导入
  799. $barr['listinfo'] = m('mode')->createlistpage($this->flow->moders,0,1,$this);
  800. }
  801. $barr['souarr'] = $this->flow->flowsearchfields();
  802. $rows = $this->flow->viewjinfields($rows);//禁看字段处理
  803. $farrl = array();
  804. foreach($this->flow->fieldsarra as $k2=>$rs2){
  805. if($rs2['fieldstype']=='uploadimg')$farrl[$rs2['fields']]=$rs2['fieldstype'];
  806. }
  807. $hjfields = arrvalue($this->flow->moders, 'hjfields');
  808. if($rows){
  809. if($farrl)foreach($rows as $k1=>$rs1){
  810. foreach($farrl as $fid=>$flx){
  811. if(isset($rs1[$fid])){
  812. $val = $rs1[$fid];
  813. if($flx=='uploadimg'){
  814. $val = $this->rock->gethttppath($val);
  815. $rows[$k1][$fid] = $val;
  816. //if($this->flow->modeid>92)$val='<img src="'.$val.'" height="60">';
  817. }
  818. }
  819. }
  820. }
  821. if(!isempt($hjfields))$rows[] = m('base')->hjfieldsRows($rows, $hjfields);
  822. }
  823. $barr['modeid'] = $this->modeid;
  824. $barr['loadci'] = $this->loadci;
  825. $barr['rows'] = $rows;
  826. $scarr = $this->storeafter($table, $rows, $barr);
  827. if(is_array($scarr))foreach($scarr as $k=>$v)$barr[$k]=$v;
  828. return $barr;
  829. }
  830. //获取可搜索列表
  831. public function getcolumnsAjax()
  832. {
  833. $modeid = (int)$this->get('modeid');
  834. $modenum = $this->get('modenum');
  835. $flow = m('flow')->initflow($modenum);
  836. $souarr = array();
  837. $this->input= c('input');
  838. $this->flow = $flow;
  839. $this->input->flow = $flow;
  840. foreach($flow->fieldsarra as $k=>$rs){
  841. if($rs['issou']==1){
  842. $rs['store'] = $this->input->getdatastore($rs['fieldstype'], $this, $rs['data']);
  843. $souarr[] = $rs;
  844. }
  845. }
  846. $this->returnjson($souarr);
  847. }
  848. //初始化导入
  849. public function initdaoruAjax()
  850. {
  851. $modenum = $this->get('modenum');
  852. $flow = m('flow')->initflow($modenum);
  853. $rows = m('flow_element')->getall('mid='.$flow->modeid.' and `isdr`=1 and `iszb`=0','name,isbt,fields','`sort`,`id`');
  854. return $rows;
  855. }
  856. //确定导入数据
  857. public function daorudataAjax()
  858. {
  859. $modenum = $this->post('modenum');
  860. $flow = m('flow')->initflow($modenum);
  861. $rows = m('flow_element')->getall('mid='.$flow->modeid.' and `isdr`=1 and `iszb`=0','name,isbt,fields,isonly','`sort`,`id`');
  862. $fields = $fieldss = '';
  863. if(!$rows)return returnerror('没有导入的字段');
  864. $onlyfield = array();
  865. foreach($rows as $k=>$rs){
  866. $fields.=','.$rs['fields'].'';
  867. if($rs['isbt']=='1')$fieldss.=','.$rs['fields'].'';
  868. if($rs['isonly']=='1')$onlyfield[] = $rs['fields']; //唯一字段
  869. }
  870. $fields = substr($fields, 1);
  871. if($fieldss!='')$fieldss = substr($fieldss,1);
  872. $hobj = c('html');
  873. $data = $hobj->importdata($fields, $fieldss,'', 1); //获取提交过来要导入的数据库
  874. $errdata= $hobj->importerrda();
  875. if(!$data)return returnerror('没有可导入的数据,注意*是必填的哦',201, array('errdata'=>$errdata));
  876. //保存前判断
  877. if(method_exists($flow,'flowdaorubefore')){
  878. $data = $flow->flowdaorubefore($data, $errdata);
  879. if(is_string($data))return returnerror($data, 201, array('errdata'=>$errdata));
  880. }
  881. //判断是否有重复
  882. $ldata = array();
  883. if($onlyfield){
  884. foreach($data as $k=>$rs){
  885. $bos = true;
  886. foreach($onlyfield as $onid){
  887. $val = arrvalue($rs, $onid);
  888. if(!isempt($val)){
  889. $tos = $flow->rows("`$onid`='$val'");
  890. if($tos>0){
  891. $bos = false;
  892. $errdata[$rs['drxu']] = '字段('.$onid.':'.$val.')存在重复';
  893. break;
  894. }
  895. }
  896. }
  897. if($bos)$ldata[] = $rs;
  898. }
  899. }else{
  900. $ldata = $data;
  901. }
  902. if(!$ldata)return returnerror('没有可导入的数据',201, array('errdata'=>$errdata));
  903. $allfields = $this->db->getallfields('[Q]'.$flow->mtable.'');
  904. $oi = 0;
  905. $dorudat= array();
  906. foreach($ldata as $k=>$rs){
  907. $drerr = '';
  908. $drxu = $rs['drxu'];
  909. if(isset($rs['drerr'])){
  910. $drerr = $rs['drerr'];
  911. if($drerr){
  912. $errdata[$drxu] = $drerr;
  913. continue;
  914. }
  915. }
  916. unset($rs['drxu']);
  917. unset($rs['drerr']);
  918. $id = (int)arrvalue($rs,'id','0');
  919. $where = '';
  920. if($id>0){
  921. if($flow->rows($id)>0){
  922. $where='`id`='.$id.'';
  923. }else{
  924. $id = 0;
  925. }
  926. }
  927. if($id==0){
  928. if(!isset($rs['createid']) && in_array('createid', $allfields))$rs['createid'] = $this->adminid;
  929. if(!isset($rs['createname']) && in_array('createname', $allfields))$rs['createname'] = $this->adminname;
  930. if(!isset($rs['adddt']) && in_array('adddt', $allfields))$rs['adddt'] = $this->now;
  931. if(!isset($rs['createdt']) && in_array('createdt', $allfields))$rs['createdt'] = $this->now;
  932. if(!isset($rs['comid']) && in_array('comid', $allfields))$rs['comid'] = m('admin')->getcompanyid();
  933. }
  934. if(!isset($rs['uid']) && in_array('uid', $allfields))$rs['uid'] = $this->adminid;
  935. if(!isset($rs['optid']) && in_array('optid', $allfields))$rs['optid'] = $this->adminid;
  936. if(!isset($rs['optname']) && in_array('optname', $allfields))$rs['optname'] = $this->adminname;
  937. if(!isset($rs['optdt']) && in_array('optdt', $allfields))$rs['optdt'] = $this->now;
  938. if(!isset($rs['applydt']) && in_array('applydt', $allfields))$rs['applydt'] = $this->date;
  939. if($id==0){
  940. $bo = $flow->insert($rs);
  941. }else{
  942. $bo = $id;
  943. $flow->update($rs, $where);
  944. }
  945. if($bo){
  946. $rs['id'] = $bo;
  947. $dorudat[]= $rs;
  948. $oi++;
  949. //有流程的模块就要提交操作
  950. $status = arrvalue($rs,'status','0'); //状态
  951. $isturn = arrvalue($rs,'isturn','1'); //默认是提交的
  952. if($flow->isflow>0 && $status=='0'){
  953. $flow->loaddata($rs['id'], false);
  954. $na = ($isturn=='1') ? '提交' : '保存';
  955. $flow->submit($na);
  956. }
  957. $errdata[$drxu] = 'ok';
  958. }else{
  959. $errdata[$drxu] = '数据库错误:'.$this->db->error().'';
  960. }
  961. }
  962. if($oi==0)return returnerror('导入数据为0条', 201, array('errdata'=>$errdata));
  963. //保存后判断
  964. if(method_exists($flow,'flowdaoruafter')){
  965. $flow->flowdaoruafter($dorudat);
  966. }
  967. $bcarr = returnsuccess('成功导入'.$oi.'条数据');
  968. $bcarr['errdata'] = $errdata;
  969. return $bcarr;
  970. }
  971. //读取导入的excel数据
  972. public function readxlsAjax()
  973. {
  974. $fileid = (int)$this->get('fileid','0');
  975. $fpath = m('file')->getmou('filepath', $fileid);
  976. if(isempt($fpath))return returnerror('文件不存在了');
  977. $phpexcel = c('PHPExcelReader');
  978. $rows = $phpexcel->reader($fpath);
  979. if(is_string($rows))return returnerror('无法读取Excel文件('.$rows.')');
  980. $modenum= $this->get('modenum');
  981. $flow = m('flow')->initflow($modenum);
  982. $dtarr = array();//日期读取需要判断
  983. $xuha = -1;
  984. foreach($flow->fieldsarra as $k2=>$rs2){
  985. if($rs2['isdr']=='1' && $rs2['iszb']=='0'){
  986. $xuha++;
  987. if(in_array($rs2['fieldstype'], array('date','datetime'))){
  988. $dtarr[$phpexcel->A[$xuha]] = $rs2['fieldstype'];
  989. }
  990. }
  991. }
  992. $str = '';
  993. foreach($rows as $k=>$rs){
  994. $str1 = '';
  995. $xi = 0;
  996. foreach($rs as $k1=>$v1){
  997. if($xi>0)$str1.=' ';
  998. if(isset($dtarr[$k1]) && is_numeric($v1)){
  999. $v1 = $phpexcel->ExcelToDate($dtarr[$k1], $v1);
  1000. }
  1001. $v1 = str_replace("\n", '[XINHUBR]', $v1); //有\n转
  1002. $str1.=''.$v1.'';
  1003. $xi++;
  1004. }
  1005. if($k>0)$str.="\n";
  1006. $str.=$str1;
  1007. }
  1008. return returnsuccess($str);
  1009. }
  1010. //下载导入的模版
  1011. public function daoruexcelAction()
  1012. {
  1013. $this->display = false;
  1014. $modenum = $this->get('modenum');
  1015. $flow = m('flow')->initflow($modenum);
  1016. $rows = m('flow_element')->getall('mid='.$flow->modeid.' and `isdr`=1 and `iszb`=0','name,isbt,fields','`sort`,`id`');
  1017. if(!$rows)return '对应模块没有设置导入字段';
  1018. $testdata = $texdata = array();
  1019. if(method_exists($flow,'flowdaorutestdata')){
  1020. $testdata = $flow->flowdaorutestdata();
  1021. }
  1022. m('file')->fileheader(''.$modenum.'import.xls');
  1023. $str1 = '';
  1024. $str2 = '';
  1025. $col = 0;
  1026. $headArr = array();
  1027. foreach($rows as $k=>$rs){
  1028. $col++;
  1029. $xi = $rs['isbt']=='1'? '<font color=red>*</font>' : '';
  1030. $x1 = $rs['isbt']=='1'? '*' : '';
  1031. $str1.='<td style="border:.5pt #000000 solid; background:#cdf79e" height="30" align="center">'.$xi.'<b>'.$rs['name'].'('.$rs['fields'].')</b></td>';
  1032. $headArr[$rs['fields']] = ''.$x1.''.$rs['name'].'('.$rs['fields'].')';
  1033. }
  1034. if($testdata){
  1035. $texdata = $testdata;
  1036. if(!isset($testdata[0]))$texdata = array($testdata);
  1037. foreach($texdata as $j=>$jrs){
  1038. $str2.='<tr>';
  1039. foreach($rows as $k=>$rs){
  1040. $val = arrvalue($jrs, $rs['fields']);
  1041. $str2.='<td style="border:.5pt #000000 solid;" height="30" align="center">'.$val.'</td>';
  1042. }
  1043. $str2.='</tr>';
  1044. }
  1045. }
  1046. $str = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  1047. <table style="border-spacing: 0;border-collapse: collapse;"><tr bgcolor="#f1f1f1">'.$str1.'</tr>'.$str2.'';
  1048. for($i=1;$i<=100;$i++){
  1049. $str.='<tr>';
  1050. for($j=1;$j<=$col; $j++){
  1051. $str.='<td style="border:.5pt #000000 solid" height="30" align="center"></td>';
  1052. }
  1053. $str.='</tr>';
  1054. }
  1055. $str.= '</table>';
  1056. $pexecl = c('PHPExcel');
  1057. if($pexecl->isBool()){
  1058. $pexecl->title = ''.$modenum.'_import';
  1059. $pexecl->titlebool = false;
  1060. $pexecl->borderbool = false;
  1061. $pexecl->headArr = $headArr;
  1062. $pexecl->rows = $texdata;
  1063. $pexecl->display('xls', 'down');
  1064. }else{
  1065. return $str;
  1066. }
  1067. }
  1068. public function getuinfoAjax()
  1069. {
  1070. $uid = $this->post('uid', $this->adminid);
  1071. $rs = m('admin')->getone($uid,'id,name,deptname,deptid,deptallname,ranking,workdate,pingyin');
  1072. $unrs= m('userinfo')->getone($uid, 'syenddt,positivedt');
  1073. if($unrs)foreach($unrs as $k=>$v)$rs[$k] =$v;
  1074. return $rs;
  1075. }
  1076. public function upimagepathAjax()
  1077. {
  1078. $fileid = (int)$this->get('fileid');
  1079. $fid = $this->get('fid');
  1080. $frs = m('file')->getone($fileid);
  1081. $path = '';
  1082. if(!isempt($frs['thumbplat'])){
  1083. $path = str_replace('_s.','.',$frs['thumbplat']);
  1084. }
  1085. $filepathout = arrvalue($frs,'filepathout');
  1086. if($filepathout)$path = $filepathout;
  1087. return returnsuccess(array(
  1088. 'path' => $path,
  1089. 'fid' => $fid,
  1090. ));
  1091. }
  1092. public function saveoptionAction()
  1093. {
  1094. $num = $this->post('num');
  1095. $name = $this->post('name');
  1096. if($name && $num){
  1097. $pid = $this->option->getpids($num);
  1098. if($pid>0){
  1099. $this->option->insert(array(
  1100. 'pid' => $pid,
  1101. 'name' => $name,
  1102. 'optdt' => $this->now,
  1103. 'optid' => $this->adminid,
  1104. ));
  1105. }
  1106. }
  1107. return 'ok';
  1108. }
  1109. /**
  1110. * 暂存7天
  1111. */
  1112. public function savezhanAjax()
  1113. {
  1114. $flownum = $this->post('flownum');
  1115. $contstr = $this->post('contstr');
  1116. $key = 'tempdata_'.$flownum.'_'.$this->adminid.'';
  1117. if($contstr){
  1118. c('cache')->set($key, $contstr, 3600*24*7);
  1119. }else{
  1120. c('cache')->del($key);
  1121. }
  1122. return returnsuccess();
  1123. }
  1124. public function flow5importAjax()
  1125. {
  1126. $modeid = (int)$this->get('modeid');
  1127. $msg = '没有找到相应记录';
  1128. $onrs = m('flowbill')->getone('`modeid`='.$modeid.' and `uid`='.$this->adminid.' and ifnull(flow5str,\'\')<>\'\'','*','id desc');
  1129. $flow5str= '';
  1130. if($onrs){
  1131. $flow5str = $onrs['flow5str'];
  1132. $msg = '引入成功';
  1133. }
  1134. $barr = returnsuccess($flow5str);
  1135. $barr['msg'] = $msg;
  1136. return $barr;
  1137. }
  1138. }
  1139. class inputClassAction extends inputAction{}
粤ICP备19079148号