Example #1
0
 /**
  * (non-PHPdoc)
  * @Description: setFormField(通过数据库字典生成list相关信息)
  * @param $listFieldVal  array list文件配置字段信息
  * @author yangxi  2014-12-12
  * @see CommonAction::update()
  */
 public function setFormInfo($modelname)
 {
     $formList = array();
     //初始化存储表单元素数组
     //获取form字段的组件信息
     $formid = M('mis_dynamic_form_manage')->where("actionname= '" . $modelname . "'")->getfield('id');
     if ($formid) {
         //$result=D("MisDynamicFormProperyAndSubView")->where("formid= '".$formid."'")->select();
         $sql = "SELECT\n                               mis_dynamic_form_propery.`id`                         AS `id`,\n                               mis_dynamic_form_propery.`showoption`                 AS `showoption`,\n                               mis_dynamic_form_propery.`subimporttableobj`          AS `subimporttableobj`,\n                               mis_dynamic_form_propery.`subimporttablefieldobj`     AS `subimporttablefieldobj`,\n                               mis_dynamic_form_propery.`subimporttablefield2obj`    AS `subimporttablefield2obj`,\n                               mis_dynamic_form_propery.`subimporttableobjcondition` AS `subimporttableobjcondition`,\n                               mis_dynamic_form_propery.`treedtable`                 AS `treedtable`,\n\t     \t\t\t           mis_dynamic_form_propery.`dateformat`                 AS `dateformat`,\n                               mis_dynamic_form_propery.`lookupfiledback`            AS `lookupfiledback`,\n                               mis_dynamic_form_propery.`lookupgrouporg`             AS `lookupgrouporg`,\n\t     \t\t\t  \t\t   mis_dynamic_form_propery.`org`                        AS `org`,\n                               mis_dynamic_form_propery.`org1`                       AS `org1`,\n                               mis_dynamic_form_propery.`lookupurls`                 AS `lookupurls`,\t     \t\t\t\t     \t\t\t\n                               mis_dynamic_form_propery.`lookupmodel`                AS `lookupmodel`,\n                               mis_dynamic_form_propery.`lookupshoworg`              AS `lookupshoworg`,\n                               mis_dynamic_form_propery.`lookuporgval`               AS `lookuporgval`,\t     \t\t\t\t     \t\t\t     \t\t\t\n                               mis_dynamic_form_propery.`lookupconditions`           AS `lookupconditions`,\n                               mis_dynamic_form_propery.`lookupchoice`               AS `lookupchoice`,\n                               mis_dynamic_form_propery.`viewname`                   AS `viewname`,\n                               mis_dynamic_form_propery.`viewtype`                   AS `viewtype`,\t\n\t     \t\t\t           mis_dynamic_form_propery.`org`                        AS `org`,\n\t     \t\t\t\t       mis_dynamic_form_propery.`unit`                       AS `unit`,\t     \t\t\t\t     \t\t\t\t     \t\t\t\n\t     \t\t\t           mis_dynamic_form_propery.`unitls`                     AS `unitls`,\n                               mis_dynamic_form_propery.`title`                      AS `title`,\n                               mis_dynamic_form_propery.`category`                   AS `category`,\n                               mis_dynamic_form_propery.`fieldname`                  AS `fieldname`,\n                               mis_dynamic_form_propery.`ids`                        AS `ids`,\n                               mis_dynamic_form_propery.`formid`                     AS `formid`,\n                               mis_dynamic_form_propery.`tplid`                      AS `tplid`,\n                               mis_dynamic_form_propery.`status`                     AS `status`,\n\t     \t\t\t\t\t   mis_dynamic_form_propery.`islock`                     AS `islock`,\n\t     \t\t\t\t\t   mis_dynamic_form_propery.`isrequired`                 AS `isrequired`,\n\t     \t\t\t\n\t     \t\t\tmis_dynamic_form_propery.`treedtable`\t\t\t\t\t\tAS `treedtable`,\n\t     \t\t\tmis_dynamic_form_propery.`treevaluefield`               AS `treevaluefield`,\n\t     \t\t\tmis_dynamic_form_propery.`treeshowfield`               AS `treeshowfield`,\n\t     \t\t\tmis_dynamic_form_propery.`treeparentfield`             AS `treeparentfield`,\n\t     \t\t\tmis_dynamic_form_propery.`isnextend`            \t\t\tAS `isnextend`,\n\t     \t\t\tmis_dynamic_form_propery.`mulit`            \t\t\t\tAS `mulit`,\n\t     \t\t\tmis_dynamic_form_propery.`treeheight`            \t\tAS `treeheight`,\n\t     \t\t\tmis_dynamic_form_propery.`treewidth`            \t\t\tAS `treewidth`,\n\t     \t\t\t\n\t     \t\t\t\t\tmis_dynamic_form_propery.`additionalconditions`\t\t\t\t\t\t\t\tAS `addconditions`,\n                               mis_dynamic_database_sub.`field`                      AS `field`,\n                               mis_dynamic_database_sub.`formid`                     AS `subformid`\n                             FROM mis_dynamic_form_propery mis_dynamic_form_propery\n                               LEFT JOIN mis_dynamic_database_sub mis_dynamic_database_sub\n                                 ON mis_dynamic_form_propery.`ids` = mis_dynamic_database_sub.`id`\n                             WHERE mis_dynamic_form_propery.formid = " . $formid;
         //M('mis_dynamic_database_sub')->where("formid= '".$formid."'")->select();
         $formList = $this->query($sql);
         // 	     	print_r($this->getLastSql());exit;
         //             print_r($formList);
         //             echo 123;
         foreach ($formList as $key => $val) {
             if (!empty($val['fieldname'])) {
                 $temp = array();
                 //组件name,用来提交数据的
                 $temp["template_name"] = "datatable[#index#][table][" . $val['fieldname'] . "]";
                 $temp["template_data"] = "";
                 $temp["template_class"] = $val["isrequired"] ? "required" : "";
                 $temp["template_key"] = "";
                 $temp["is_readonly"] = $val["islock"] ? "" : "true";
                 switch ($val['category']) {
                     case "text":
                         $temp["template_key"] = "input";
                         $template_data = array();
                         //获取ORG参数
                         if (!empty($val['org'])) {
                             $org = explode(".", $val['org']);
                             $template_data["bindlookupname"] = $org[0];
                             $template_data["upclass"] = $org[1];
                         }
                         if (!empty($val['unitls'])) {
                             //存储的单位编码
                             $template_data["unitl"] = $val['unitls'];
                             //获取单位编码中文名
                             $template_data["unitlname"] = getFieldBy($val['unitls'], 'danweidaima', 'danweimingchen', 'mis_system_unit');
                         }
                         $temp["template_data"] = json_encode($template_data);
                         //列是否统计
                         $temp["is_stats"] = false;
                         //小数位数
                         $temp["stats_num"] = 2;
                         break;
                     case "select":
                         //获取ORG参数
                         if (!empty($val['org'])) {
                             $org = explode(".", $val['org']);
                             $bindlookup = array("lookupname" => $org[0], "name" => $org[1]);
                             $temp["bindlookup"] = json_encode($bindlookup);
                         }
                         /* 
                          * 下拉树配置	
                          * */
                         if ($val['treedtable'] && $val['treevaluefield'] && $val['treeshowfield'] && $val['treeparentfield']) {
                             $chkStyle = "radio";
                             // 单选,多选
                             if ($val["mulit"] == 1) {
                                 $chkStyle = "checkbox";
                             }
                             $isnextend = $val['isnextend'] == 1 ? 1 : 0;
                             // 获取下拉树的显示数据
                             $treeData = getControllbyHtml("table", array("type" => "select", "table" => $val['treedtable'], "id" => $val['treevaluefield'], "name" => $val['treeshowfield'], "showtype" => "1", "comboxtree" => "1", "parentid" => $val['treeparentfield'], "isnextend" => $isnextend));
                             $dataSouceArr = '{"treeconfig":' . '{"expandAll":false,' . '"checkEnable":true,' . '"chkStyle":"' . $chkStyle . '",' . '"radioType":"all",' . '"onClick":"S_NodeClick",' . '"onCheck":"S_NodeCheck"},' . '"treeheight":"' . $val['treeheight'] . '",' . '"treewidth":"' . $val['treewidth'] . '",' . '"treedata":' . $treeData . '}';
                             $temp["template_data"] = $dataSouceArr;
                             $temp["template_key"] = "selecttree";
                         } else {
                             $temp["template_key"] = "select";
                             $temp["template_data"] = "[";
                             $abc = $this->getSelectSource($val);
                             foreach ($abc as $skey => $sval) {
                                 $temp["template_data"] .= '{"value":"' . $skey . '","name":"' . $sval . '"},';
                             }
                             //去掉最后一个,
                             $temp["template_data"] = $abc ? substr($temp["template_data"], 0, -1) . "]" : $temp["template_data"] . "]";
                             //数据格式例子
                             //$temp["template_data"]   = '[{"value":1,"name":"第一人"},{"value":2,"name":"第二人"}]';
                         }
                         break;
                     case "lookup":
                         $temp["template_key"] = "lookup";
                         $abc = $this->getLookupSource($val);
                         //upclass:查找带回显示字段,格式 string class="textInput enterIndex readonly into_table_new9122317_wrapperorgfandanbaocuoshibianhao11.name" class里 org.name
                         //callback是回调函数  param是传递到lookupGeneral函数的参数,格式 string 例:param="field=orderno,pid,name,id&model=MisSaleProfession&newconditions="
                         //herf是请求地址   格式 string 例:href="/workarea/workstation/systemui/product/Admin/index.php/MisAutoDap/lookupGeneral"
                         //hidden_data:隐藏的存入数据库字段的值 格式 :[{"upclass":"","name":"datatable[#index#][datatable1][sinianji]"}],其中upclass是查找带回存储字段,name是隐藏输入入框的name,[datatable1][sinianji]表名,字段名
                         $param = "";
                         //初始化参数
                         $param .= "lookupchoice=" . $val['lookupchoice'];
                         //传Key值
                         unset($lookuporg0);
                         unset($lookuporg1);
                         $lookuporg0 = explode('.', $val['org']);
                         $lookuporg1 = explode('.', $val['org1']);
                         $bindlookupname = $lookuporg1[0] ? $lookuporg1[0] : $lookuporg0[0];
                         $param .= '';
                         // 		        			//lookup带回字段
                         // 		        			$param.="field=".$val['lookupfiledback'];
                         // 		        			//lookup的模型对象
                         // 		        			$param.="&model=".$val['lookupmodel'];
                         //过滤条件
                         //////////////////////////////////////////////////////////////////////////////////////////////
                         unset($conditionConfigJson);
                         unset($appendCondtion);
                         unset($additionalconditions);
                         unset($formFiledList);
                         unset($sysFieldList);
                         unset($sysFieldFmt);
                         unset($appendCondtionArr);
                         unset($appendCondtionStr);
                         unset($conditions);
                         unset($formFiledFmt);
                         $additionalconditions = $val['addconditions'];
                         if ($additionalconditions) {
                             $appendCondtion = unserialize(base64_decode($additionalconditions));
                             // proexp 表单字段列表
                             // sysexp	系统字段列表
                             $formFiledList = $appendCondtion['proexp'];
                             $sysFieldList = $appendCondtion['sysexp'];
                             // 						$formFiledFmt=array();
                             // 						$sysFieldFmt = array();
                             $sysFieldFmt = unserialize($sysFieldList) or array();
                             // 获取真实的表单字段名。
                             if ($formFiledList) {
                                 $formFiledListArr = unserialize($formFiledList) or array();
                                 if (is_array($formFiledListArr) && count($formFiledListArr)) {
                                     $formFiledKey = array_keys($formFiledListArr);
                                     $properModel = M('mis_dynamic_form_propery');
                                     $properMap['id'] = array('in', $formFiledKey);
                                     unset($fd);
                                     $fd = $properModel->where($properMap)->field('fieldname,id')->select();
                                     if ($fd) {
                                         foreach ($fd as $k => $v) {
                                             // 									$fieldArr[] = $v['fieldname'];
                                             if ($formFiledListArr[$v['id']] == -1) {
                                                 $formFiledFmt[$v['fieldname']] = $v['fieldname'];
                                             } else {
                                                 $formFiledFmt[$v['fieldname']] = $formFiledListArr[$v['id']];
                                             }
                                         }
                                     }
                                 }
                             }
                             if (is_array($sysFieldFmt) && is_array($formFiledFmt)) {
                                 $appendCondtionArr = array_merge($sysFieldFmt, $formFiledFmt);
                             } elseif (is_array($sysFieldFmt) && !is_array($formFiledFmt)) {
                                 $appendCondtionArr = $sysFieldFmt;
                             } elseif (!is_array($sysFieldFmt) && is_array($formFiledFmt)) {
                                 $appendCondtionArr = $formFiledFmt;
                             } else {
                                 $appendCondtionArr = array();
                             }
                             // 将条件转换为可用的sql where语句
                             $appendCondtionStr = arr2string($appendCondtionArr);
                             logs($val['fieldname'] . $appendCondtionStr, 'rinidaye');
                             //$conditions = "{:getAppendCondition(\$vo ,$appendCondtionStr)}";
                             $conditions = getAppendCondition($vo, $appendCondtionArr);
                             if (is_array($appendCondtionArr)) {
                                 unset($tempData);
                                 foreach ($appendCondtionArr as $k => $v) {
                                     $tempData[$v] = $k;
                                 }
                                 $conditionConfigJson = ',"condition":' . json_encode($tempData);
                             }
                         }
                         ////////////////////////////////////////////////////////////////////
                         $param .= "&newconditions=" . $conditions;
                         $val['callback'] = "lookup_counter_check";
                         //herf路径
                         $herf = __APP__ . '/' . $modelname . '/' . $val['lookupurls'];
                         $temp["template_data"] = '{"bindlookupname":"' . $bindlookupname . '","upclass":"' . $val['lookupshoworg'] . '","lporder":"' . $lookuporg1[1] . '","lpkey":"' . $val['lookupchoice'] . '","callback":"' . $val['callback'] . '","param":"' . $param . '","lookupname":"' . $val['lookupgrouporg'] . '","href":"' . $herf . '","hidden_data":[{"upclass":"' . $val['lookuporgval'] . '","lporder":"' . $lookuporg0[1] . '","name":"datatable[#index#][table][' . $val['fieldname'] . ']"}]' . $conditionConfigJson . '}';
                         break;
                     case "date":
                         $temp["template_key"] = "date";
                         //日期格式
                         if (empty($val['format'])) {
                             $val['dateformat'] = "yyyy-MM-dd";
                         } else {
                             $formatTemp = explode('@', $val['dateformat']);
                             $val['dateformat'] = $formatTemp[0];
                         }
                         $temp["template_data"] = '{"format":"' . $val['dateformat'] . '"}';
                         break;
                     case "upload":
                         $temp["template_key"] = "uploadfilenew";
                         $temp["template_data"] = '{"url":"__URL__/DT_uploadnew"}';
                         break;
                     default:
                         break;
                 }
                 $th_html = array();
                 foreach ($temp as $k => $v) {
                     $th_html[] = $k . "='" . $v . "'";
                 }
                 $th_html = implode(" ", $th_html);
                 $val['datatable'] = $th_html;
                 $list[$val["fieldname"]] = $val;
             }
         }
     }
     $this->SetRules($list, $modelname, $typename = "form");
 }
Example #2
0
 /**
  * $data[0]		$controllType		组件类型 lookup , lookupsuper
  * $data[1]		$vo						页面vo数据
  * $data[2]		$controllProperty	当前组件的属性ID或属性数组
  * $data[3]		$isedit					是否为修改操作页面
  * $data[4]		$isreturnvalue		是否为view操作页面
  * $data[5]		$ganshe				干涉页面 状态归0
  * @see Widget::render()
  */
 public function render($data)
 {
     /**			数据收集			*/
     unset($vo);
     $controllType = $data[0];
     //组件类型 lookup , lookupsuper
     $vo = $data[1];
     //页面vo数据
     $controllProperty = $data[2];
     //当前组件的属性ID或属性数组
     $isedit = $data[3];
     //是否为修改操作页面
     $isreturnvalue = $data[4];
     //是否为view操作页面
     $ganshe = $data[5];
     //干涉页面 状态归0
     $ismuchchoice = $data[6];
     //是否多选 1是0否
     /**			数据处理			*/
     $dir = CONF_PATH;
     $controlls = (require $dir . 'controlls.php');
     require $dir . 'property.php';
     $privateProperty = array();
     foreach ($controlls as $key => $val) {
         if ($val['property']) {
             $privateProperty[$key] = array_merge($NBM_COMMON_PROPERTY, $val['property']);
         } else {
             $privateProperty[$key] = $NBM_COMMON_PROPERTY;
         }
     }
     $property = $privateProperty['lookup'];
     switch ($controllType) {
         case 1:
             $controllType = 'lookup';
             break;
         case 2:
             $controllType = 'lookupsuper';
         default:
             $controllType = 'lookup';
             break;
     }
     if (!is_array($controllProperty)) {
         $obj = M('mis_dynamic_form_propery');
         $controllProperty = $obj->where('id=' . $controllProperty)->find();
         if ($ganshe == '1') {
             $controllProperty[$property['islock']['dbfield']] = 1;
             $controllProperty[$property['requiredfield']['dbfield']] = 1;
             $controllProperty[$property['isshow']['dbfield']] = 0;
         }
     }
     if (!is_array($controllProperty)) {
         return '<error>Lookup组件配置错误/没有属性<error>';
     }
     /**		开始lookup属性解析			*/
     if (!$isreturnvalue) {
         $chtml = '';
         if ($controllProperty[$property['checkfunc']['dbfield']]) {
             $chtml = $controllProperty[$property['checkfunc']['dbfield']];
         }
         $required = '';
         // 必填验证
         if ($controllProperty[$property['requiredfield']['dbfield']] && $ganshe != '1') {
             $required = 'required';
         }
         $chtml = $required . 'nbm ' . $chtml;
         //获取lookup key值 动态加载lookup配置
         $lookupchoice = $controllProperty[$property['lookupchoice']['dbfield']];
         $lookupObj = D('LookupObj');
         $lookupDetail = $lookupObj->GetLookupDetail($lookupchoice);
         //var_dump($lookupDetail['condition']);
         $defaultLookupCondition = $lookupDetail['condition'];
         // lookup配置时生成的过滤条件。
         $model = $lookupDetail['mode'];
         $urls = $lookupDetail['url'];
         $lookupgroup = $controllProperty[$property['lookupgroup']['dbfield']];
         //视图特殊处理
         if ($lookupDetail["viewname"]) {
             $viewname = $lookupDetail["viewname"];
             //视图名称
             $viewsavefield = $lookupDetail["val"];
             //视图显示字段
             $viewshowfield = $lookupDetail["filed"];
             //视图存储字段
             $dataViewModel = M("mis_system_dataview_mas");
             $viewsql = "SELECT s.field FROM mis_system_dataview_mas AS m LEFT JOIN mis_system_dataview_sub AS s ON m.id=s.masid WHERE m.status=1 and s.status=1 and m.`name`='{$viewname}' AND s.otherfield=";
             //存储字段
             $savefieldviewsql = $viewsql . "'{$viewsavefield}' limit 1";
             $savefieldviewfieldarr = $dataViewModel->query($savefieldviewsql);
             $savefieldviewfieldexplode = explode(".", $savefieldviewfieldarr[0]['field']);
             $savefieldviewtable = $savefieldviewfieldexplode[0];
             //存储字段所在的真实表名
             $orgval = $savefieldviewfieldexplode[1];
             //存储字段真实字段名
             //显示字段
             $showfieldviewsql = $viewsql . "'{$viewshowfield}' limit 1";
             $showfieldviewfieldarr = $dataViewModel->query($showfieldviewsql);
             $showfieldviewfieldexplode = explode(".", $showfieldviewfieldarr[0]['field']);
             $showfieldviewtable = $showfieldviewfieldexplode[0];
             //显示字段所在的真实表名
             $orgchar = $showfieldviewfieldexplode[1];
             //显示字段真实字段名
         } else {
             $orgval = $lookupDetail['val'] ? $lookupDetail['val'] : 'id';
             $orgchar = $lookupDetail['filed'] ? $lookupDetail['filed'] : 'name';
         }
         $orgLookuoVal = $controllProperty[$property['org']['dbfield']];
         // 值 value
         $orgLookupText = $controllProperty[$property['org1']['dbfield']];
         // 显示内容 text
         $readonly = $controllProperty[$property['islock']['dbfield']] == 1 ? false : true;
         $view = '';
         if ($lookupDetail['viewname']) {
             $view = '&viewname=' . $lookupDetail['viewname'];
         }
         if ($lookupDetail['dt']) {
             $dtcon = '&lookuptodatatable=2';
         }
         $muchchoice = '';
         if ($ismuchchoice == 1) {
             $muchchoice = '&ismuchchoice=' . $ismuchchoice;
         }
         // lookup的值反写
         $textCounterCheck = '';
         // 显示文本的反写  text
         $valCounterCheck = '';
         // 值的反写				value
         // lporder	从外部lookup中取值字段
         // lpkey		当前lookup的key
         // lpfor		往哪个东西里写值
         // lpself		当前项的字段名称
         if ($orgLookuoVal) {
             unset($temp);
             $temp = explode('.', $orgLookuoVal);
             $valCounterCheck = "callback=\"lookup_counter_check\" lpkey=\"{$lookupchoice}\" lpfor=\"{$lookupgroup}.{$orgchar}\" lpself=\"{$orgval}\" lporder=\"{$temp[1]}\"";
         }
         if ($orgLookupText) {
             unset($temp);
             $temp = explode('.', $orgLookupText);
             $textCounterCheck = "callback=\"lookup_counter_check\" lpkey=\"{$lookupchoice}\" lpfor=\"{$lookupgroup}.{$orgval}\" lpself=\"{$orgchar}\" lporder=\"{$temp[1]}\"";
         }
         // lookup附加条件处理
         $appendCondtionArr = array();
         $appendCondtion = $controllProperty[$property['additionalconditions']['name']];
         //  附加条件设置信息
         if ($appendCondtion) {
             $appendCondtion = unserialize(base64_decode($appendCondtion));
             // proexp 表单字段列表
             // sysexp	系统字段列表
             $formFiledList = $appendCondtion['proexp'];
             $sysFieldList = $appendCondtion['sysexp'];
             // 						$formFiledFmt=array();
             // 						$sysFieldFmt = array();
             $sysFieldFmt = unserialize($sysFieldList) or array();
             // 获取真实的表单字段名。
             if ($formFiledList) {
                 $formFiledListArr = unserialize($formFiledList) or array();
                 if (is_array($formFiledListArr) && count($formFiledListArr)) {
                     $formFiledKey = array_keys($formFiledListArr);
                     $properModel = M('mis_dynamic_form_propery');
                     $properMap['id'] = array('in', $formFiledKey);
                     $fd = $properModel->where($properMap)->field('fieldname,id')->select();
                     if ($fd) {
                         foreach ($fd as $k => $v) {
                             // 									$fieldArr[] = $v['fieldname'];
                             if ($formFiledListArr[$v['id']] == -1) {
                                 $formFiledFmt[$v['fieldname']] = $v['fieldname'];
                             } else {
                                 $formFiledFmt[$v['fieldname']] = $formFiledListArr[$v['id']];
                                 //$formFiledFmt[$formFiledListArr[$v['id']]] = $v['fieldname'];
                             }
                         }
                     }
                 }
             }
             if (is_array($sysFieldFmt) && is_array($formFiledFmt)) {
                 $appendCondtionArr = array_merge($sysFieldFmt, $formFiledFmt);
             } elseif (is_array($sysFieldFmt) && !is_array($formFiledFmt)) {
                 $appendCondtionArr = $sysFieldFmt;
             } elseif (!is_array($sysFieldFmt) && is_array($formFiledFmt)) {
                 $appendCondtionArr = $formFiledFmt;
             } else {
                 $appendCondtionArr = array();
             }
             $conditions = getAppendCondition($vo, $formFiledFmt);
             $systemconditionsTemp = getAppendCondition($vo, $sysFieldFmt);
             // 				if($defaultLookupCondition){
             // 					$systemconditions = $defaultLookupCondition;
             // 					if($systemconditionsTemp){
             // 						$systemconditions .= ' and '.$systemconditionsTemp;
             // 					}
             // 				}else{
             // 					$systemconditions = $systemconditionsTemp;
             // 				}
             $systemconditions = $systemconditionsTemp;
         }
         $val = '';
         $tempModel = D($model);
         $temptable = '';
         //视图时取字段对应的真实字段所在真实表名
         if ($lookupDetail["viewname"]) {
             $temptable = $savefieldviewtable;
         } else {
             $temptable = $tempModel->getTableName();
         }
         $map = '';
         $value = $vo[$controllProperty[$property['fields']['dbfield']]];
         if ($value) {
             if (strpos($value, ',')) {
                 $valueStr = explode(',', $value);
                 $map = $orgval . " in ('" . join("','", $valueStr) . "')";
             } else {
                 $map = $orgval . "='" . $value . "'";
             }
         }
         //$viewval = $isedit ?(getFieldBy($value , $orgval , $orgchar , $tempModel->getTableName())):'';
         // 			if(!$map){
         // 				$viewval='';
         // 			}else{
         // 				$viewval = $isedit ?(getFieldData($orgchar , $temptable , $map , true , 1000)):'';
         // 			}
         //多做了个分支,主要是应付视图里储存字段不唯一的情况
         /**
          *当储存字段(以orderno=06为例)查询结果有n条记录,显示字段(以type为例)可以和储存字段保证一致性(当orderno=06时,查出的type全部都是“请假”)
          */
         if (!$map) {
             $viewval = '';
         } else {
             if (strpos($value, ',')) {
                 $viewval = $isedit ? getFieldData($orgchar, $temptable, $map, true, 1000) : '';
             } else {
                 $viewval = $isedit ? getFieldBy($value, $orgval, $orgchar, $temptable) : '';
                 //
             }
         }
         $html = "<div class=\"tml-input-lookup\">";
         $paramsEcho = arr2string($map);
         $controllPropertyEcho = '字段名:' . $controllProperty[$property['fields']['dbfield']] . '__表名:' . $tempModel->getTableName();
         // 				$html.=<<<EOF
         // 				<script>
         // 				console.log("lookup查询条件:{$controllPropertyEcho}--{$orgchar}--查询条件:{$paramsEcho} 修改状态:{$isedit}");
         // 				</script>
         // EOF;
         $readonlyCls = 'active_lookup';
         if ($readonly) {
             $readonlyCls = '';
         }
         $html .= "<input type=\"text\"  {$textCounterCheck} class=\"{$lookupgroup}.{$orgchar} {$chtml} input_new half_angle_input {$orgLookupText} {$readonlyCls} \" autocomplete=\"off\" readonly=\"readonly\"  value=\"" . $viewval . "\" />";
         $html .= "<input type=\"hidden\" {$valCounterCheck}  class=\"{$required} {$lookupgroup}.{$orgval} {$orgLookuoVal}\" name=\"" . $controllProperty[$property['fields']['dbfield']] . "\" value=\"" . $vo[$controllProperty[$property['fields']['dbfield']]] . "\"  />";
         if ($readonly) {
             // 只读情况
             // lookup 触发按钮
             $html .= "<a class=\"icon_elm mid_icon_elm icon-plus\"></a>";
             // $title
             // 清空 lookup 按钮
             $html .= "<a title=\"清空信息-只读\" class=\"icon_elm icon-trash\"  href=\"javascript:void(0);\"></a>";
         } else {
             $formFiledFmt = array_flip($formFiledFmt);
             $conditionOprateString = "condition=\"\"";
             if (is_array($formFiledFmt)) {
                 $conditionOprateString = "condition=" . json_encode($formFiledFmt);
             }
             // lookup 触发按钮
             $html .= "<a class=\"icon_elm mid_icon_elm icon-plus\" syscondition=\"{$systemconditions}\"  newconditions=\"{$conditions}\" ismuchchoice=\"{$ismuchchoice}\"  {$conditionOprateString}  param=\"lookupchoice={$lookupchoice}{$muchchoice}&newconditions={$view}{$dtcon}\" href=\"__URL__/{$urls}\" lookupGroup=\"{$lookupgroup}\" ></a>";
             //$title
             // 清空 lookup 按钮
             $html .= "<a title=\"清空信息-可读写\" class=\"icon_elm icon-trash\"  href=\"javascript:void(0);\" onclick=\"clearOrg('{$lookupgroup}');\"></a>";
         }
         $html .= "</div>";
     } else {
         $func = "";
         $parmFunc = array();
         // 处理子表及主表的lookup值转换 , modify by nbmxkj at 20150127 20
         // *****注意:func 与 funcdata 数组项一定要个数对应。****
         $scdmodel = D('SystemConfigDetail');
         $detailList = $scdmodel->getDetail(MODULE_NAME, '', '', '', 'status');
         $dval = $detailList[$controllProperty[$property['fields']['dbfield']]];
         if (is_array($dval)) {
             if (count($dval['func']) > 0) {
                 $varchar = "";
                 foreach ($dval['func'] as $k3 => $v3) {
                     //开始html字符
                     if (isset($dval['extention_html_start'][$k3])) {
                         $varchar = $dval['extention_html_start'][$k3];
                     }
                     //中间内容
                     $varchar .= getConfigFunction($vo[$dval['name']], $v3, $dval['funcdata'][$k3], $vo);
                     if (isset($dval['extention_html_end'][$k3])) {
                         $varchar .= $dval['extention_html_end'][$k3];
                     }
                     //结束html字符
                 }
                 $html = $varchar;
             } else {
                 $viewval = $vo[$controllProperty[$property['fields']['dbfield']]];
                 $html = $viewval;
             }
         }
     }
     return $html;
 }
    /**
     * @Title: createAction
     * @Description: todo(生成Action代码)
     * @param array $fieldData 组件属性列表
     * @param string $cotrollname 控制器名称
     * @param boolean $add 是否覆盖现有文件,默认为false:需要覆盖
     * @param boolean $isaudit 是否带审批流,默认为false:不带审批流
     * @param boolean $isinitExtendAction 是否初始化扩展Action代码 默认为空,不初始化【为组合表单的初化解绑准备】
     * @author quqiang
     * @date 2014-8-21 上午10:03:39
     * @throws
     */
    function createAction($fieldData, $cotrollname, $add = false, $isaudit = false, $isinitExtendAction = false)
    {
        $cotrollname = ucfirst($cotrollname);
        $actionPath = LIB_PATH . "Action/" . $cotrollname . "Action.class.php";
        $actionExtendPath = LIB_PATH . "Action/" . $cotrollname . "ExtendAction.class.php";
        $isExist = file_exists($actionPath);
        if ($isExist && $add) {
            $this->error($actionPath . "文件已存在!");
        }
        $extendphpcode .= "<?php\r\n/**";
        $extendphpcode .= "\r\n * @Title: {$cotrollname}Action";
        $extendphpcode .= "\r\n * @Package package_name";
        $extendphpcode .= "\r\n * @Description: todo(动态表单_扩展类。本类为用户代码注入入口,系统一旦生成将不再重复生成。";
        $extendphpcode .= "\r * \t\t\t\t\t\t但当用户选为组合表单方案后会更新该文件,请做好备份)";
        $extendphpcode .= "\r\n * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n * @company Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d";
        $extendphpcode .= "\r\n * @copyright 本文件归属于Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d";
        $extendphpcode .= "\r\n * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n * @version V1.0";
        $extendphpcode .= "\r\n*/";
        $extendphpcode .= "\r\nclass ";
        $phpcode .= "<?php\r\n/**";
        $phpcode .= "\r\n * @Title: {$cotrollname}Action";
        $phpcode .= "\r\n * @Package package_name";
        $phpcode .= "\r\n * @Description: todo(动态表单_自动生成-" . $this->nodeTitle . ")";
        $phpcode .= "\r\n * @author " . $_SESSION['loginUserName'];
        $phpcode .= "\r\n * @company Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d";
        $phpcode .= "\r\n * @copyright 本文件归属于Aqo5Re65bSr5zG755m45t92YuQnZvNHbtRnL3d3d";
        $phpcode .= "\r\n * @date " . date('Y-m-d H:i:s');
        $phpcode .= "\r\n * @version V1.0";
        $phpcode .= "\r\n*/";
        $phpcode .= "\r\nclass ";
        if ($isaudit) {
            $jcc = "CommonAuditAction";
        } else {
            $jcc = "CommonAction";
        }
        $extendsCC = $cotrollname . "ExtendAction";
        $extendphpcode .= $cotrollname . "ExtendAction extends " . $jcc . " {\r\n";
        $phpcode .= $cotrollname . "Action extends " . $extendsCC . " {\r\n";
        $phpcode .= "\tpublic function _filter(&\$map){";
        //start filter
        $extendphpcode .= "\tpublic function _extend_filter(&\$map){";
        //start filter
        $phpcode .= "\r\n";
        // \$map['allnode']=\$this->getActionName();
        $phpcode .= <<<COD
\t\t\$fieldtype=\$_REQUEST['fieldtype'];
\t\t\$relationmodelname=\$_REQUEST['bindaname'];
\t\t//获取表单类型
\t\t\$type=getFieldBy(\$relationmodelname, "bindaname", "typeid", "mis_auto_bind"); \t\t
\t\tif(\$fieldtype){
\t\t\t\$map[\$fieldtype]=\$_REQUEST[\$fieldtype];
\t\t\t\$this->assign("fieldtype",\$fieldtype);
\t\t\t\$this->assign("fieldtypeval",\$_REQUEST[\$fieldtype]);
\t\t}else{
\t\t\t//组从表单需加此条件过滤 
\t\t\tif(\$type==1){
\t\t\t\tif(\$relationmodelname){
\t\t\t\t\t\$map['relationmodelname']=\$relationmodelname;\t
\t\t\t\t}
\t\t\t}
\t\t}
\t\t//强制加allnode 4.25 为区分复用表数据
\t\t \$map['allnode']=\$this->getActionName();
\t\tif(\$type==1){
\t\t\t// 为了兼容普通模式下的表单使用
\t\t\t\$bindid = \$_REQUEST['bindid'];
\t\t\tif(\$bindid){
\t\t\t\t\$map['bindid']=\$bindid;
\t\t\t\t\$this->assign("bindid",\$bindid);
\t\t\t}
\t\t}
\t\tif (\$_SESSION["a"] != 1){
\t\t\t\$map['status']=array("gt",-1);
\t\t}
\t\t\$this->_extend_filter(\$map);
COD;
        $phpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_before_index";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展前置index函数)";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws ";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_before_index() {";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_before_edit";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展的前置编辑函数)";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws ";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_before_edit(){";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_before_insert";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展的前置添加函数)";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws ";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_before_insert(){";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_before_update";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展前置修改函数)  ";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_before_update(){";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_after_edit";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展后置编辑函数)";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws ";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_after_edit(&\$vo){";
        // 		$extendphpcode .="\r\n\t\tif(\$_GET['viewtype']=='view'){";
        // 		$extendphpcode .="\r\n\t\t\t\$this->assign( 'vo', \$vo );";
        // 		$extendphpcode .="\r\n\t\t\t\$this->display('formview');";
        // 		$extendphpcode .="\r\n\t\t\texit;";
        // 		$extendphpcode .="\r\n\t\t}";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_after_list";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展前置List)";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws ";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_after_list(){";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_after_insert";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展后置insert函数)  ";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_after_insert(\$id){";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_before_add";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展前置add函数)  ";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_before_add(&\$vo){";
        $extendphpcode .= "\r\n\t\t\$this->getFormIndexLoad(\$vo);";
        $extendphpcode .= "\r\n\t}";
        $extendphpcode .= "\r\n\t/**";
        $extendphpcode .= "\r\n\t * @Title: _extend_after_update";
        $extendphpcode .= "\r\n\t * @Description: todo(扩展后置update函数)  ";
        $extendphpcode .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $extendphpcode .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $extendphpcode .= "\r\n\t * @throws";
        $extendphpcode .= "\r\n\t*/";
        $extendphpcode .= "\r\n\tfunction _extend_after_update(){";
        $extendphpcode .= "\r\n\t}";
        // beforindex
        $before_index = '';
        $before_index .= "\r\n\t/**";
        $before_index .= "\r\n\t * @Title: _before_index";
        $before_index .= "\r\n\t * @Description: todo(前置index函数)";
        $before_index .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $before_index .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $before_index .= "\r\n\t * @throws ";
        $before_index .= "\r\n\t*/";
        $before_index .= "\r\n\tfunction _before_index() {";
        // 默认生成 前置函数
        $before_edit = '';
        $before_edit .= "\r\n\t/**";
        $before_edit .= "\r\n\t * @Title: _before_edit";
        $before_edit .= "\r\n\t * @Description: todo(前置编辑函数)";
        $before_edit .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $before_edit .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $before_edit .= "\r\n\t * @throws ";
        $before_edit .= "\r\n\t*/";
        $before_edit .= "\r\n\tfunction _before_edit(){";
        $before_insert = '';
        $before_insert .= "\r\n\t/**";
        $before_insert .= "\r\n\t * @Title: _before_insert";
        $before_insert .= "\r\n\t * @Description: todo(前置添加函数)";
        $before_insert .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $before_insert .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $before_insert .= "\r\n\t * @throws ";
        $before_insert .= "\r\n\t*/";
        $before_insert .= "\r\n\tfunction _before_insert(){";
        $allNodeconfig = $fieldData['all'];
        if (in_array("orderno", array_keys($allNodeconfig)) || $this->isaudit) {
            //判断是否带审批流,必须验证编码是否重复
            $before_insert .= "\r\n\t\t\$this->checkifexistcodeororder('{$this->tableName}','orderno',\$this->getActionName());";
        }
        $before_update = '';
        $before_update .= "\r\n\t/**";
        $before_update .= "\r\n\t * @Title: _before_update";
        $before_update .= "\r\n\t * @Description: todo(前置修改函数)  ";
        $before_update .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $before_update .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $before_update .= "\r\n\t * @throws";
        $before_update .= "\r\n\t*/";
        $before_update .= "\r\n\tfunction _before_update(){";
        if (in_array("orderno", array_keys($allNodeconfig)) || $this->isaudit) {
            //判断是否带审批流,必须验证编码是否重复
            $before_update .= "\r\n\t\t\$this->checkifexistcodeororder('{$this->tableName}','orderno',\$this->getActionName(),1);";
        }
        // 重写父类编辑函数--为多表操作所做的修改 屈强@20141008 15:53
        $edit = '';
        $edit .= "\r\n\t/**";
        $edit .= "\r\n\t * @Title: edit";
        $edit .= "\r\n\t * @Description: todo(重写父类编辑函数)";
        $edit .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $edit .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $edit .= "\r\n\t * @throws ";
        $edit .= "\r\n\t*/";
        $edit .= "\r\n\tfunction edit(\$isdisplay=1){";
        $edit .= "\r\n\t\t\$mainTab = '{$this->tableName}';";
        $edit .= "\r\n\t\t//获取当前控制器名称";
        $edit .= "\r\n\t\t\$name=\$this->getActionName();";
        $edit .= "\r\n\t\t\$model = D(\"{$this->nodeName}View\");";
        $edit .= "\r\n\t\t//获取当前主键";
        $edit .= "\r\n\t\t\$map[\$mainTab.'.id']=\$_REQUEST['id'];";
        $edit .= "\r\n\t\t\$vo = \$model->where(\$map)->find();";
        $edit .= "\r\n\t\tif(!\$vo){";
        $edit .= "\r\n\t\t\$this->getFormIndexLoad(\$vo);";
        $edit .= "\r\n\t\t}";
        $edit .= "\r\n\t\tif(method_exists ( \$this, '_filter' )) {";
        $edit .= "\r\n\t\t\t\$this->_filter ( \$map );";
        $edit .= "\r\n\t\t}";
        $edit .= "\r\n\t\t//读取动态配制";
        $edit .= "\r\n\t\t\$this->getSystemConfigDetail(\$name);";
        $edit .= "\r\n\t\t//扩展工具栏操作";
        $edit .= "\r\n\t\t\$scdmodel = D('SystemConfigDetail');";
        $edit .= "\r\n\t\t// 上一条数据ID";
        $edit .= "\r\n\t\t\$map['id'] = array(\"lt\",\$id);";
        $edit .= "\r\n\t\t\$updataid = \$model->where(\$map)->order('id desc')->getField('id');";
        $edit .= "\r\n\t\t\$this->assign(\"updataid\",\$updataid);";
        $edit .= "\r\n\t\t// 下一条数据ID";
        $edit .= "\r\n\t\t\$map['id'] = array(\"gt\",\$id);";
        $edit .= "\r\n\t\t\$downdataid = \$model->where(\$map)->getField('id');";
        $edit .= "\r\n\t\t\$this->assign(\"downdataid\",\$downdataid);";
        $edit .= "\r\n\t\t//lookup带参数查询";
        $edit .= "\r\n\t\t\$module=A(\$name);";
        $edit .= "\r\n\t\tif (method_exists(\$module,\"_after_edit\")) {";
        $edit .= "\r\n\t\t\tcall_user_func(array(\$module,\"_after_edit\"),\$vo);";
        $edit .= "\r\n\t\t}";
        $edit .= "\r\n\t\t\$this->assign( 'vo', \$vo );";
        $edit .= "\r\n\t\tif(\$isdisplay)";
        $edit .= "\r\n\t\t\$this->display ();";
        $edit .= "\r\n\t}";
        //////////////////////////////////////////////////////////////////
        /*
         * 不要重写父类中的edit函数
         */
        $edit = '';
        /////////////////////////////////////////////////////////////////////
        // 默认生成后置函数
        $after_edit = '';
        $after_list = '';
        $after_insert = '';
        $before_add = '';
        $after_update = '';
        // 删除子表数据
        $delChildData = '';
        $is_create_del_child = false;
        $is_create_opraete_child = false;
        $is_create_modify_child = false;
        $is_create_insert_child = false;
        //控制地址组件修改代码生成
        $isArea = false;
        // 实例化MODE
        $model_code = '';
        $is_include_model = false;
        $after_edit .= "\r\n\t/**";
        $after_edit .= "\r\n\t * @Title: _after_edit";
        $after_edit .= "\r\n\t * @Description: todo(后置编辑函数)";
        $after_edit .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $after_edit .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $after_edit .= "\r\n\t * @throws ";
        $after_edit .= "\r\n\t*/";
        $after_edit .= "\r\n\tfunction _after_edit(\$vo){";
        $after_list .= "\r\n\t/**";
        $after_list .= "\r\n\t * @Title: _after_list";
        $after_list .= "\r\n\t * @Description: todo(前置List)";
        $after_list .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $after_list .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $after_list .= "\r\n\t * @throws ";
        $after_list .= "\r\n\t*/";
        $after_list .= "\r\n\tfunction _after_list(){";
        $after_insert .= "\r\n\t/**";
        $after_insert .= "\r\n\t * @Title: _after_insert";
        $after_insert .= "\r\n\t * @Description: todo(后置insert函数)  ";
        $after_insert .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $after_insert .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $after_insert .= "\r\n\t * @throws";
        $after_insert .= "\r\n\t*/";
        $after_insert .= "\r\n\tfunction _after_insert(\$id){";
        $before_add .= "\r\n\t/**";
        $before_add .= "\r\n\t * @Title: _before_add";
        $before_add .= "\r\n\t * @Description: todo(前置add函数)  ";
        $before_add .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $before_add .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $before_add .= "\r\n\t * @throws";
        $before_add .= "\r\n\t*/";
        $before_add .= "\r\n\tfunction _before_add(){";
        $after_update .= "\r\n\t/**";
        $after_update .= "\r\n\t * @Title: _after_update";
        $after_update .= "\r\n\t * @Description: todo(后置update函数)  ";
        $after_update .= "\r\n\t * @author " . $_SESSION['loginUserName'];
        $after_update .= "\r\n\t * @date " . date('Y-m-d H:i:s');
        $after_update .= "\r\n\t * @throws";
        $after_update .= "\r\n\t*/";
        $after_update .= "\r\n\tfunction _after_update(){";
        /**
         * 步骤:
         * 1。先源数据 $filedData['visibility'] 中的项按表名['tablename']分组。
         * 2。区分出主从表,主表的文件名用当前action名命名,从表以直接表名命名。
         * 3。遍历分组后的数据,依次生成Model文件。
         *
         *		表数组,基础为二维.
         * 	0=>主表信息
         * 	1=>所有从表的信息
         */
        /*	处理子表错误,子表不做数据添加 会导致修改 视图查询数据若用户只勾取部分表字段 引起的查询不出数据。
         * 处理方式为:取出当前action的所有子表 都生成 添加与修改都 做处理
         **/
        $curTabData = $this->getDataBaseConf();
        $curTabData = $curTabData['cur'];
        foreach ($curTabData['datebase'] as $key => $val) {
            if (!$val['isprimay']) {
                $after_update .= "\r\n\t\t//添加子表数据处理--" . $_SESSION['loginUserName'] . '@' . date('Y-m-d H:i:s');
                $after_update .= "\r\n\t\t\${$key}Mode = D('" . createRealModelName($key) . "');";
                $after_update .= "\r\n\t\t\${$key}Data = \${$key}Mode->create();";
                $after_update .= "\r\n\t\tunset(\${$key}Data['id']);";
                $after_update .= "\r\n\t\tif(\${$key}Data){";
                $after_update .= "\r\n\t\t\tif(\${$key}Mode->where('masid='.\${$key}Data['masid'])->find())";
                $after_update .= "\r\n\t\t\t\t\${$key}Mode->where('masid='.\${$key}Data['masid'])->save(\${$key}Data);";
                $after_update .= "\r\n\t\t\telse";
                $after_update .= "\r\n\t\t\t\t\${$key}Mode->add(\${$key}Data);";
                $after_update .= "\r\n\t\t}";
                $after_insert .= "\r\n\t\t// 添加子表数据处理----" . $_SESSION['loginUserName'] . '@' . date('Y-m-d H:i:s');
                $after_insert .= "\r\n\t\t\${$key}Mode = D('" . createRealModelName($key) . "');";
                $after_insert .= "\r\n\t\t\${$key}Data = \${$key}Mode->create();";
                $after_insert .= "\r\n\t\tunset(\${$key}Data['id']);";
                $after_insert .= "\r\n\t\tif(\${$key}Data){";
                $after_insert .= "\r\n\t\t\t\t\${$key}Data['masid']=\$id;";
                $after_insert .= "\r\n\t\t\t\t\${$key}Mode->add(\${$key}Data);";
                $after_insert .= "\r\n\t\t}";
            }
        }
        // 审批流
        if ($isaudit) {
        }
        foreach ($fieldData['visibility'] as $k => $v) {
            $property = $this->getProperty($v['catalog']);
            // 时间组件的自动获取当前系统时间功能
            if ($v[$property['catalog']['name']] == 'date') {
                //
                if ($v[$property['defaulttimechar']['name']] && stringToTime($v[$property['defaulttimechar']['name']])) {
                    $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=stringToTime('{$v[$property['defaulttimechar']['name']]}');";
                } else {
                    if ($v[$property['acquiretime']['name']]) {
                        $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=time();";
                    }
                    if ($v[$property['editacquiretime']['name']]) {
                        $after_edit .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=time();";
                    }
                }
            }
            if (($v[$property['catalog']['name']] == 'lookup' || $v[$property['catalog']['name']] == 'text') && $v[$property['defaultval']['name']]) {
                //Lookup默认值
                $defaultval = str_replace(array('&quot;', '&#39;', '&lt;', '&gt;'), array('"', "'", '<', '>'), $v[$property['defaultval']['name']]);
                if ($defaultval == "user_txsj") {
                    $before_add .= "\r\n\t\t\$txsj=M('User')->where('id='.\$_SESSION[C('USER_AUTH_KEY')])->getField('txsj');";
                    $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=\$txsj;";
                } else {
                    $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=\$_SESSION[{$defaultval}];";
                }
            }
            // 文本框组件的默认显示数据功能 	by nbmxkj@20150408 1642
            if ($v[$property['catalog']['name']] == 'text') {
                // 对现有字段  	subimporttableobj(数据来源表)  	subimporttablefieldobj(显示字段)		subimporttablefield2obj(值字段)
                // 做功用重定义		数据来源表									显示字段											是否在修改页面时也启用功能
                $conditions = $v[$property['conditions']['name']];
                $table = $v[$property['subimporttableobj']['name']];
                $showField = $v[$property['subimporttablefieldobj']['name']];
                $isEditShow = $v[$property['subimporttablefield2obj']['name']];
                // 				throw new NullCreateOprateException($isEditShow);
                // 附加条件
                $textAppendCondtionConfigStr = $v[$property['additionalconditions']['name']];
                if ($table && $showField) {
                    $conditionsOperated = "'";
                    if ($conditions) {
                        $conditionsOperated .= $conditions;
                    }
                    $textAppendCondtionConfigArr = appendConditionConfigResolve($textAppendCondtionConfigStr);
                    if ($conditions && $textAppendCondtionConfigStr) {
                        $configResilvedArr = getAppendCondition($vo, $textAppendCondtionConfigArr);
                        $conditionsOperated .= " and '.parameReplace(\"&#39;\",\"'\",getAppendConditionExceptEmpty(\$vo," . arr2string($textAppendCondtionConfigArr) . "))";
                    } else {
                        if (!$conditions && $textAppendCondtionConfigStr) {
                            $conditionsOperated .= "'.parameReplace(\"&#39;\",\"'\",getAppendConditionExceptEmpty(\$vo," . arr2string($textAppendCondtionConfigArr) . "))";
                        } else {
                            $conditionsOperated .= "'";
                        }
                    }
                    $before_add .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=getFieldData('{$showField}','{$table}' , {$conditionsOperated});";
                    // 修改页面自动生成控制
                    if ($isEditShow) {
                        $after_edit .= "\r\n\t\t\$vo['{$v[$property['fields']['name']]}']=getFieldData('{$showField}','{$table}' ,{$conditionsOperated});";
                    }
                }
            }
            if ($v[$property['catalog']['name']] == 'upload') {
                //存在上传组件
                $after_edit .= "\r\n\t\t\$this->getAttachedRecordList(\$vo['id']);";
            }
            if ($v[$property['catalog']['name']] == 'datatable') {
                //存在datatable类型组件
                // 删除子表数据
                if (!$is_create_del_child) {
                    $delChildData .= $this->getDataTableAction();
                    $is_create_del_child = true;
                }
                $after_edit .= $this->dataTableEditCode($v, $property);
                if (!$is_create_modify_child) {
                    $after_update .= "\r\n\t\t// 内嵌表数据添加处理";
                    $after_update .= $this->updateDatatableCode();
                    $is_create_modify_child = true;
                }
                if (!$is_create_insert_child) {
                    $after_insert .= $this->insertDatatableCode();
                    $is_create_insert_child = true;
                }
            }
            if ($v[$property['catalog']['name']] == 'areainfo' && $isArea == false) {
                //存在areainfo类型组件
                $after_edit .= $this->getAreaInfoCode();
                $isArea = true;
            }
        }
        /**************************************************************************************************************************************/
        /*		左侧树代码的处理 	20141114 1957																							  */
        /**************************************************************************************************************************************/
        $misdynamicform = M('mis_dynamic_form_manage');
        $formData = $misdynamicform->where("`actionname`='{$this->nodeName}'")->find();
        $temp = explode('#', $formData['tpl']);
        if ($temp[0] == 'noaudittpl' && $temp[1] == 'ltrl') {
            $before_index .= "\r\n\t\t//查询绑定数据源";
            $before_index .= "\r\n\t\t\$this->getDateSoure();";
        }
        /**************************************************************************************************************************************/
        /*		左侧树代码的处理  end													*/
        /**************************************************************************************************************************************/
        $before_index .= "\r\n\t\t\$this->_extend_before_index();";
        $before_index .= "\r\n\t}";
        $before_edit .= "\r\n\t\tif(\$_REQUEST['main'])";
        $before_edit .= "\r\n\t\t\t\$this->assign(\"main\",\$_REQUEST['main']);";
        $before_edit .= "\r\n\t\t\$this->_extend_before_edit();";
        $before_edit .= "\r\n\t}";
        $before_insert .= "\r\n\t\t\$this->_extend_before_insert();";
        $before_insert .= "\r\n\t}";
        $before_update .= "\r\n\t\t\$this->_extend_before_update();";
        $before_update .= "\r\n\t}";
        $after_edit .= "\r\n\t\t\$this->_extend_after_edit(\$vo);";
        $after_edit .= "\r\n\t}";
        $after_list .= "\r\n\t\t\$this->_extend_after_list();";
        $after_list .= "\r\n\t}";
        $after_insert .= "\r\n\t\t\$this->_extend_after_insert(\$id);";
        $after_insert .= "\r\n\t}";
        $before_add .= "\r\n\t\tif(\$_REQUEST['main'])";
        $before_add .= "\r\n\t\t\t\$this->assign(\"main\",\$_REQUEST['main']);";
        $before_add .= "\r\n\t\t\$this->_extend_before_add(\$vo);";
        $before_add .= "\r\n\t}";
        $after_update .= "\r\n\t\t\$this->_extend_after_update();";
        $after_update .= "\r\n\t}";
        //$phpcode.=$before_edit.$before_insert.$before_update.$after_edit.$after_list.$after_insert.$after_add.$after_update;
        $phpcode .= $edit . $before_index . $before_edit . $before_insert . $before_update . $after_edit . $after_insert . $before_add . $after_update . $delChildData;
        $phpcode .= "\r\n}\r\n?>";
        $extendphpcode .= "\r\n}\r\n?>";
        if (!is_dir(dirname($actionPath))) {
            mk_dir(dirname($actionPath), 0777);
        }
        if (false === file_put_contents($actionPath, $phpcode)) {
            $this->error("Action文件生成失败!");
        }
        if ($isinitExtendAction) {
            if (false === file_put_contents($actionExtendPath, $extendphpcode)) {
                $this->error("扩展Action文件生成失败!");
            }
        } else {
            if (false == file_exists($actionExtendPath)) {
                if (false === file_put_contents($actionExtendPath, $extendphpcode)) {
                    $this->error("扩展Action文件生成失败!");
                }
            } else {
                // 扩展文件已存在时的内部代码指定位置替换修改。
                // by nbmxkj@20150605 1711
                // 获取现有代码内容
                $actionExtendContent = file_get_contents($actionExtendPath);
                //var_dump($actionExtendContent);
                // 正则匹配关键字
                $baseExtendClass = 'CommonAction';
                if ($this->isaudit) {
                    $baseExtendClass = 'CommonAuditAction';
                }
                // 替换基类
                $clearUpContent = preg_replace_callback('/(extends)(.*?)(\\{)+/s', function ($vo) use($baseExtendClass) {
                    return $vo[1] . ' ' . $baseExtendClass . ' ' . $vo[3];
                }, $actionExtendContent);
                //var_dump($clearUpContent);
                /* 
                				替换其中的特殊代码问题
                				获取该文件的创建间
                				如果创建时间大于 2015-04-28 00:00:01 后的代码文件不进行特殊代码替换生成
                */
                // 创建时间
                $createTime = filectime($actionExtendPath);
                // 目标比较时间
                $orderTime = strtotime('2015-04-28 00:00:01');
                if (false !== $createTime) {
                    //&& $createTime < $orderTime ){
                    // 为 _extend_before_add(扩展前置添加函数) 增加参数,及内容代码调用处理
                    /*
                    function _extend_before_add(){
                    	$this->getFormIndexLoad();
                    }
                    */
                    $extendBeforeAdd = '&$vo';
                    $clearUpContent = preg_replace_callback('/(_extend_before_add\\()(.*?)(\\))+/s', function ($vo) use($extendBeforeAdd) {
                        return $vo[1] . $extendBeforeAdd . $vo[3];
                    }, $clearUpContent);
                    $outerFuncParam = '$vo';
                    $clearUpContent = preg_replace_callback('/(getFormIndexLoad\\()(.*?)(\\))+/s', function ($vo) use($outerFuncParam) {
                        return $vo[1] . $outerFuncParam . $vo[3];
                    }, $clearUpContent);
                }
                file_put_contents($actionExtendPath, $clearUpContent);
            }
        }
        //return $phpcode;
    }