项目学习

<button type="button" onclick="javascript:jumpUrl(url('/loanmgr/newloan'));" class="btn btn-primary right add-bottom">新增贷款</button>
<button type=‘button’ onclick=‘javascript:jumpUrl()’>申请贷款

申请贷款需要的信息

<?pho
/**
 * 生成tr
 *
 * $lang = array(
 *     'gender' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 *     'gender1' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 *     'gender2' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 *     'gender3' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 * );
 *
 * $lang = array(
 *     'gender' => '机构名称',
 *     'gender1' => '性别1',
 *     'gender2' => '性别2',
 *     'gender3' => '性别3',
 * );
 */
function buildTr($data) {
    $_option = $data['_option'];
    $_data = $data['_data'];
    unset($data['_data'], $data['_option']);

    $td_limit = isset($_option['td_limit']) ? $_option['td_limit'] : 2;
    $td_count = 1;
    $tr = '';
    foreach($data as $key => $value) {
        if($td_count === 1) {
            $tr .= "<tr>\r\n";
            $td = '';
        }
        $name = isset($value['name']) ? $value['name'] : $key;
        $val = isset($_data[$key]) ? $_data[$key] : (isset($value['name']) ? $_data[$value['name']] : '');

        $content = '';
        $type = isset($value['type']) ? $value['type'] : 'input';
        switch(strtolower($type)) {
            case 'radio':
                $content = buildRadio($name, $value['option'], $val);
                break;
            case 'select':
                $content = buildSelect($name, $value['option'], $val);
                break;
            default:
                $content = buildInput($name, $val);
                break;
        }

        $title = is_string($value) ? $value : $value['title'];
        $td .= sprintf(buildTd($title), $content);
        if($td_count >= $td_limit) {
            $tr .= $td . "</tr>\r\n";
            $td_count = 1;
        } else {
            $td_count++;
        }
    }
    if(($td_count = $td_limit - (count($data) % $td_limit)) != $td_limit) {
        $tr .= $td;
        $td = '';
        for($i=0;$i<$td_count;$i++) {
            $td .= sprintf(buildTd(''), '');
        }
        $tr .= $td . '</tr>'; 
    }
    return $tr;
}

 

<?php include __DIR__.'/../inc/tool.php'; ?>

<?php
$user = array(
    'user_name' => '姓名<span class="not_null">*</span>',
    'user_phone' => '手机号<span class="not_null">*</span>',
    'user_cardcode' => '身份证号<span class="not_null">*</span>',
    'user_email' => '邮箱',
    'user_address' => '地址',
    'user_fixedphone' => '固定电话',
    'user_qq' => 'QQ号',
    'user_household' => '户籍地址',
    'user_bank_name' => '银行名称',
    'user_bank_card' => '银行账号<span class="not_null">*</span>',
    'user_bank_account' => '银行用户名<span class="not_null">*</span>',
    'user_bank_code' => array('title'=>'银行编号<span class="not_null">*</span>', 'type'=>'select', 'option'=>$bank_no),
    'user_bank_phone' => '银行预留手机号<span class="not_null">*</span>',
    'user_ismarital' => array('title'=>'婚姻状况', 'type'=>'radio', 'option'=>$marital),
    'user_occup' => array('title'=>'职业', 'type'=>'radio', 'option'=>$occup),
    '_data' => array(), 
    '_option' => array('td_limit'=>2), 
);
echo buildTr($user);
?>

魔法常量:

__FILE__文件的完整路径和文件名。

__DIR__文件所在的目录。

__FUNCTION__常量返回该函数被定义时的名字

__CLASS__常量返回该类被定义时的名字

__METHOD__  类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

__NAMESPACE__  当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

 

 

这块有个生成tr的工具,需要学习一下

还有一个操作是,他这里面没有在控制器里面

private static $_instance = null;

public static function init() {//调用类里面的这个方法以后,就可以直接调用类里面的其他方法了
    if(self::$_instance === null) {
        self::$_instance = new self;
    }
    return self::$_instance;
}

$this->response['orgmain'] = Orginfo::init()->instOption();//在这个地方就不用new了,在里面new过了

 

申请贷款需要的信息是啥:
1)机构、课程、套餐、费率、还款方式什么的

这里有个联动,自动填充的点了解一下

function n(name) {
    return $('select[name="'+name+’”]’);//选择name为参数name的,这样的也封为一个函数学一下这个思想,别那老思想
}

var inst = n('edu_inst_code');

function p(name) {
    return $('input[name="'+name+'"]');
}

function readonly(names) {//多个readonly的就封一个这样的函数
    for(i in names) {
        p(names[i]).prop('readonly', 'readonly');
    }
}
var readOnly = [
    'bank_loan_account',
    'bank_loan_name',
    'bank_loan_card',
    'edu_course_amout',
    'edu_grace_period',
    'edu_not_period',
    'edu_service_rate',
    'edu_later_rate',
    'edu_rate',
    'user_bank_name'
];
readonly(readOnly);


inst.change(function() {
   var edu_inst_code = $(this).val(), data={edu_inst_code:edu_inst_code};//data是个什么玩意儿json吗     
   p('bank_loan_account').val('');
   p('bank_loan_card').val('');
   p('bank_loan_name').val('');

   ajaxReturn(url('/loanmgr/getbank'), data, function(json) {
       if(json.retcode !== 0) {//
           alert(json.msg);return;
       }
       if(json.data == '') return;

       var fieldsArr = [
           'bank_loan_account',
           'bank_loan_card',
           'bank_loan_name',
           'edu_lender_flag'
           //{'name':'grace_period_repay', 'type':'radio'},
           //{'name':'inst_behalf_way', 'type':'select'}
       ];
       for(var i in fieldsArr) {
           form(fieldsArr[i], json.data);
       }
   });

   ajaxReturn(url('/loanmgr/getbranch'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       branch.html(buildHtml(json.list, '请选择分支机构'));
   });
   ajaxReturn(url('/loanmgr/getcourse'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       course.html(buildHtml(json.list, '请选择课程'));
   });
   ajaxReturn(url('/loanmgr/getplan'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       plan.html(buildHtml(json.list, '请选择套餐'));
   });
});
// 执行Ajax,封装一个执行ajax的函数,所以上面那个不知名的Jason字符串data是传递到了这里
function ajaxReturn(url, data, func) {
    $.ajax({
        cache: true,
        type: "POST",
        url:url,
        data:data,
        dataType: 'json',
        error: function(data) {
            alert('系统异常,请稍后再试!');
        },
        success: func
    });
}

职业变化有个联动,学生、在职、无业,选择不同的职业显示不同的填写项

// 职业类别
$('input[name="user_occup"]').change(function() {
    changeName($(this).val(), $(this).parents('form'));//两个jquery方法需要记住,.parents()找父元素,.find()找后代
});
var edu = '<?php echo buildSelect('user_edu', $edu, 0); ?>';
function changeName(occup, obj) {
    for(var i=1;i<4;i++) {
        var occupObj = obj.find('.occup'+i);//选择哪个,就显示哪个相关选项
        if(occup == i) {
            occupObj.show();
            weoccupObj.find('#edu'+i).html(edu);
            occupObj.find('select,input').prop('disabled', false);
        } else {
            occupObj.hide();
            occupObj.find('select,input').prop('disabled', true);
        }
    }
}
<form class="userinfo" id="userinfo0">
<table class="table table-bordered">
<input type="hidden" name="other_loanid" value="" />
<input type="hidden" name="other_userid" value="" />
<tr class="active">
    <td colspan="4" class="bold user_title">用户信息</td>
</tr>
<?php
$user = array(
    'user_name' => '姓名<span class="not_null">*</span>',
    'user_phone' => '手机号<span class="not_null">*</span>',
    'user_cardcode' => '身份证号<span class="not_null">*</span>',
    'user_email' => '邮箱',
    'user_address' => '地址',
    'user_fixedphone' => '固定电话',
    'user_qq' => 'QQ号',
    'user_household' => '户籍地址',
    'user_bank_name' => '银行名称',
    'user_bank_card' => '银行账号<span class="not_null">*</span>',
    'user_bank_account' => '银行用户名<span class="not_null">*</span>',
    'user_bank_code' => array('title'=>'银行编号<span class="not_null">*</span>', 'type'=>'select', 'option'=>$bank_no),
    'user_bank_phone' => '银行预留手机号<span class="not_null">*</span>',
    'user_ismarital' => array('title'=>'婚姻状况', 'type'=>'radio', 'option'=>$marital),
    'user_occup' => array('title'=>'职业', 'type'=>'radio', 'option'=>$occup),
    '_data' => array(), 
    '_option' => array('td_limit'=>2), 
);
echo buildTr($user);
?>
<tr>
    <td colspan="4">
<!-- 学生 -->
<table class="table table-bordered occup1">
    <tr>
        <td width="15%" class="bold">学生证件号</td>
        <td width="35%"><input class="form-control" name="user_school_code" type="text" placeholder="" value=""></td>
        <td width="15%" width="15%" class="bold">专业名称</td>
        <td width="35%"><input class="form-control" name="user_school_major" type="text" placeholder="" value=""></td>
    </tr>
    <tr>
        <td class="bold">学校名称</td>
        <td><input class="form-control" name="user_school_unit" type="text" placeholder="" value=""></td>
        <td class="bold">录取方式</td>
        <td><?php echo buildRadio('user_school_enroll', $school_enroll, 0); ?></td>
    </tr>
    <tr>
        <td class="bold">入学时间</td>
        <td>
            <select name="user_school_time" class="form-control">
                <?php for($i=date('Y');$i>=1970;$i--) { $d='%d-00-00';?>
                <option value="<?=sprintf($d, $i)?>"><?=$i?></option>
                <?php } ?>
            </select>
        </td>
        <td class="bold">学校地址</td>
        <td><input class="form-control" name="user_school_address" type="text" placeholder="" value=""></td>
    </tr>
    <tr>
        <td class="bold">学校电话</td>
        <td><input class="form-control" name="user_school_phone" type="text" placeholder="" value=""></td>
<!--        <td class="bold"></td>-->
<!--        <td></td>-->
        <td width="15%" class="bold">教育程度</td>
        <td width="35%" id="edu1"></td>
    </tr>
</table>
<!-- 学生 over -->
<!-- 在职 -->
<table class="table table-bordered occup2">
    <tr>
        <td width="15%" class="bold">教育程度</td>
        <td width="35%" id="edu2"></td>
        <td width="15%" class="bold">工作单位</td>
        <td width="35%"><input class="form-control" name="user_unit_name" type="text" placeholder="" value=""></td>
    </tr>
    <tr>
        <td class="bold">入职时间</td>
        <td>
            <select name="user_unit_entrytime" class="form-control">
                <?php for($i=date('Y');$i>=2000;$i--) { $d='%d-00-00';?>
                <option value="<?=sprintf($d, $i)?>"><?=$i?></option>
                <?php } ?>
            </select>
        </td>
        <td class="bold" id="position_name">职位</td>
        <td><?php echo buildSelect('user_unit_position', $position, 0); ?></td>
    </tr>
    <tr>
        <td class="bold">单位地址</td>
        <td><input class="form-control" name="user_unit_address" type="text" placeholder="" value=""></td>
        <td class="bold">单位电话</td>
        <td><input class="form-control" name="user_unit_phone" type="text" placeholder="" value=""></td>
    </tr>
</table>
<!-- 在职 over -->
<!-- 无业 -->
<table class="table table-bordered occup3">
    <tr>
        <td width="15%" class="bold">教育程度</td>
        <td width="35%" id="edu3"></td>
        <td width="15%"></td>
        <td width="35%"></td>
    </tr>
</table>
<!-- 无业 over -->
<tr>
    <td class="bold">面签方式<span class="not_null">*</span></td>
    <td><?php echo buildRadio('user_isinterview', $isinterview, 2); ?></td>
</tr>
<?php foreach($contact_type as $k => $v) { ?>
<tr class="active">
    <td colspan="4" class="bold"><?php echo $v; ?></td>
</tr>
<input type="hidden" name="contact_id<?php echo $k; ?>" value="<?php echo $contact[$k]['id']; ?>" />
<tr>
    <td class="bold">姓名</td>
    <td><input class="form-control" name="contact_name<?php echo $k; ?>" type="text" placeholder="" value=""></td>
    <td class="bold">电话</td>
    <td><input class="form-control" name="contact_phone<?php echo $k; ?>" type="text" placeholder="" value=""></td>
</tr>
<tr>
    <td class="bold">关系</td>
    <td><?php echo buildSelect('contact_relation'.$k, $relation, 0); ?></td>
    <td class="bold"></td>
    <td></td>
</tr>
<?php } ?>

    <tr class="active">
        <td colspan="4" class="bold">照片上传</td>
    </tr>
    <tr>
        <td>
            选择身份证照片:
        </td>
        <td>
            <input type="file" id="cert_card_img" name="cert_card_img" multiple="multiple" accept="image/*"/>
        </td>
        <td>
            选择户口本照片:
        </td>
        <td>
            <input type="file" id="account_book_img" name = "account_book_img" multiple="multiple" accept="image/*"/>
        </td>
    </tr>

    <tr class="warning">
    <td colspan="4" class="bold">操作</td>
</tr>
<tr>
    <td class="bold"></td>
    <td colspan="3" class="btn_opt">
        <button type="button" mid="0" class="btn btn_save btn-primary">保存订单</button>
        <button type="button" onclick="javascript:jumpUrl(url('/usermgr/userlist'));" class="btn btn-info">返回列表</button>
    </td>
</tr>
</table>
</form>
// 生成td
function buildTd($title) {
    return str_replace('[]', '%s', sprintf("<td class='bold'>%s</td>\r\n<td>[]</td>\r\n", $title));
}
str_replace(find,replace,string,count)
参数描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。对替换数进行计数的变量。

sprintf(buildTd($title), $content);

 *上面有个厉害操作:

$td .= sprintf(str_replace('[]', '%s', sprintf("<td class='bold'>%s</td>\r\n<td>[]</td>\r\n", $title)), $content);

分析下,"<td class='bold'>%s</td>\r\n<td>[]</td>\r\n"这个字符串里面有两个部分需要替换,title和content,第一个td填充title,第二个填充content,

不对感觉是个多此一举的操作。。直接printf("<td class='bold'>%s</td>\r\n<td>%s</td>\r\n",$title, $content)为啥还用[]中间转化一次

 像这个这样

// 生成input
function buildInput($name, $value='') {
    return sprintf('<input class="form-control" name="%s" type="text" placeholder="" value="%s">', $name, $value);
}

看明白生成tr是什么原理:

无不是生成如下的形式<tr><td>title</td><td>content</td></tr><tr><td>title1</td><td>content1</td></tr>

传递的参数是如下形式:这两种

/**
 * 生成tr
 *
 * $lang = array(
 *     'gender' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 *     'gender1' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 *     'gender2' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 *     'gender3' => array('title'=>'机构名称', 'type'=>'radio', 'option'=>array(1=>'男', 2=>'女')),
 * );
 *
 * $lang = array(//没有type即为文本框
 *     'gender' => '机构名称',
 *     'gender1' => '性别1',
 *     'gender2' => '性别2',
 *     'gender3' => '性别3',
 * );
 */
$org = array(
'edu_inst_code' => array('title'=>'主机构', 'type'=>'select', 'option'=>$orgmain),
'edu_branch_code' => array('title'=>'分支机构', 'type'=>'select', 'option'=>$orgbranch),
'edu_course_code' => array('title'=>'课程', 'type'=>'select', 'option'=>$course),
'edu_plan_code' => array('title'=>'套餐', 'type'=>'select', 'option'=>$case),
'bank_loan_name' => '开户行名称',
'bank_loan_account' => '开户行用户名',
'bank_loan_card' => '开户行卡号',
'edu_course_amout' => '课程金额(元)',
'edu_course_cycle' => '课程周期',
'product_prototype' => array('title'=>'还款方式', 'type'=>'radio', 'option'=>$product_prototype),
'edu_grace_period' => '宽限期',
'edu_not_period' => '非宽限期',
'edu_service_rate' => '宽限期服务费率(%%)',
'edu_later_rate' => '非宽限期服务费率(%%)',
'edu_rate' => '贷款利率(%%)',
'money' => '贷款额度(元)<span class="not_null">*</span>',
'grace_period_repay' => array('title'=>'宽限期还款方式', 'type'=>'radio', 'option'=>$grace_period_repay),
'inst_behalf_way' => array('title'=>'机构代还方式', 'type'=>'select', 'option'=>$inst_behalf_way),
'_data' => array(),
'_option' => array('td_limit'=>2),
);
echo buildTr($org);
'_option' => array('td_limit'=>2)这个也是一个比较重要的点,<tr>和<td>的拼接,<tr>比较容易取决于<td>的结束,这里有个<td>的计数,td_limit=2,两个<td>结束加上</tr>结束符
下面这段不懂算了。。
if(($td_count = $td_limit - (count($data) % $td_limit)) != $td_limit) {
        $tr .= $td;
        $td = '';
        for($i=0;$i<$td_count;$i++) {
            $td .= sprintf(buildTd(''), '');
        }
        $tr .= $td . '</tr>'; 
    }

接着往下看

继续jquery页面处理:

主机构选择联动变化:

inst.change(function() {
   var edu_inst_code = $(this).val(), data={edu_inst_code:edu_inst_code};     
   p('bank_loan_account').val('');
   p('bank_loan_card').val('');
   p('bank_loan_name').val('');

   ajaxReturn(url('/loanmgr/getbank'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       if(json.data == '') return;

       var fieldsArr = [
           'bank_loan_account',
           'bank_loan_card',
           'bank_loan_name',
           'edu_lender_flag'
           //{'name':'grace_period_repay', 'type':'radio'},
           //{'name':'inst_behalf_way', 'type':'select'}
       ];
       for(var i in fieldsArr) {
           form(fieldsArr[i], json.data);//学习人家这里这种时刻封装,生成form表单,类似Tool中的bulidTr的做法
       }
   });

   ajaxReturn(url('/loanmgr/getbranch'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       branch.html(buildHtml(json.list, '请选择分支机构'));//.html()获取和设置内容;buildHtml()这个函数放在下面
   });
   ajaxReturn(url('/loanmgr/getcourse'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       course.html(buildHtml(json.list, '请选择课程'));
   });
   ajaxReturn(url('/loanmgr/getplan'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       plan.html(buildHtml(json.list, '请选择套餐'));
   });
});
function buildHtml(s, t) {//s为所有选项的内容,t为标题
var h = ['<option value="">'+t+'</option>'];
$.each(s, function(i, n) {//循环所有的内容
h.push('<option value="'+i+'">'+n+'</option>');
});
return h.join("\r\n");
}


 
arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。

jquery对数组的操作:

创建:[];例,var h=['<option value="">'+t+'</option>']或者如下这种

var fieldsArr = [
{'name':'grace_period_repay', 'type':'radio'},
{'name':'inst_behalf_way', 'type':'select'}
];

添加:push;例,h.push('<option value="'+i+'">'+n+'</option>')或者

fieldsArr.push(
'bank_loan_account',
'bank_loan_card',
'bank_loan_name'
);

数组元素字符串华:.join(separator),返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开;例,h.join("\r\n")

*这里下拉框有个知识点,进入页面默认显示$course = array(''=>'请选择课程');'edu_course_code' => array('title'=>'课程', 'type'=>'select', 'option'=>$course),echo buildTr($org);生成select标签,选定了主机构以后,利用机构编号下面的选择框获取到数据填充,buildHtml(s, t)添加数据

 

写HTML代码的时候,可以内嵌PHP代码使用tool.php中的buildTr函数来创建,jquery代码中不可以内嵌PHP代码,就封装两个函数一个是buildHtml一个是form函数

接着研究,下面看一下jquery中的form函数是怎么使用的,

// 套餐下拉切换
plan.change(function() {
   ajaxReturn(url('/loanmgr/doplan'), {code:$(this).val()}, function(json) {
    //看一下json传的是什么样的数据
    
if(json.retcode !== 0) { alert(json.msg);return; } var fieldsArr = [ {'name':'product_prototype', 'type':'radio'}, 'edu_grace_period', 'edu_not_period', 'edu_service_rate', 'edu_later_rate', 'edu_rate' ]; for(var i in fieldsArr) { form(fieldsArr[i], json.data); } }); }); function form(o, v) { var type, name; if(typeof o == 'object') {//typeof是是判断数据类型的
     //针对的是这种形式的元素:{'name':'prodect_prototype','type':'radio'} type
= o.type; name = o.name; } else {
     //针对的是这样的元素:'edu_grace_period' type
= 'input'; name = o; } v = v[name]; if(v == undefined) return; switch(type) { case 'radio': radio(name, v); break; case 'select': select(name, v); break; default: input(name, v); } }
//阻止默认事件.比如当你点击带有href值的a标签时,元素响应click事件后,还会发生页面跳转.如果加上这个方法(属性)后,浏览器只会响应click事件,不会发生跳转.
p('product_prototype').click(function(e) { e.preventDefault() });

捋一下产品信息模块的juery实现,下面是所有的代码

inst.change(function() {
   var edu_inst_code = $(this).val(), data={edu_inst_code:edu_inst_code};     
   p('bank_loan_account').val('');
   p('bank_loan_card').val('');
   p('bank_loan_name').val('');

   ajaxReturn(url('/loanmgr/getbank'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       if(json.data == '') return;

       var fieldsArr = [
           'bank_loan_account',
           'bank_loan_card',
           'bank_loan_name',
           'edu_lender_flag'
           //{'name':'grace_period_repay', 'type':'radio'},
           //{'name':'inst_behalf_way', 'type':'select'}
       ];
       for(var i in fieldsArr) {
           form(fieldsArr[i], json.data);
       }
   });

   ajaxReturn(url('/loanmgr/getbranch'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       branch.html(buildHtml(json.list, '请选择分支机构'));
   });
   ajaxReturn(url('/loanmgr/getcourse'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       course.html(buildHtml(json.list, '请选择课程'));
   });
   ajaxReturn(url('/loanmgr/getplan'), data, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       plan.html(buildHtml(json.list, '请选择套餐'));
   });
});

// 分支下拉切换
branch.change(function() {
   ajaxReturn(url('/loanmgr/dobranch'), {code:$(this).val()}, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       var fieldsArr = [
           {'name':'grace_period_repay', 'type':'radio'},
           {'name':'inst_behalf_way', 'type':'select'}
       ];
       if(p('edu_lender_flag').val() != '1') { // 如果是分支机构账号
           fieldsArr.push(
               'bank_loan_account',
               'bank_loan_card',
               'bank_loan_name'
           ); 
       }
       for(var i in fieldsArr) {
           form(fieldsArr[i], json.data);
       }
   });
});

// 课程下拉切换
course.change(function() {
   ajaxReturn(url('/loanmgr/docourse'), {code:$(this).val()}, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       var fieldsArr = [
           'edu_course_amout',
           'edu_course_cycle'
       ];
       for(var i in fieldsArr) {
           form(fieldsArr[i], json.data);
       }
   });
});

// 套餐下拉切换
plan.change(function() {
   ajaxReturn(url('/loanmgr/doplan'), {code:$(this).val()}, function(json) {
       if(json.retcode !== 0) {
           alert(json.msg);return;
       }
       var fieldsArr = [
           {'name':'product_prototype', 'type':'radio'},
           'edu_grace_period',
           'edu_not_period',
           'edu_service_rate',
           'edu_later_rate',
           'edu_rate'
       ];
       for(var i in fieldsArr) {
           form(fieldsArr[i], json.data);
       }
   });
});

// 执行Ajax
function ajaxReturn(url, data, func) {
$.ajax({
cache: true,
type: "POST",
url:url,
data:data,
dataType: 'json',
error: function(data) {
alert('系统异常,请稍后再试!');
},
success: func
});
}

整个的逻辑是这样,显示主机构选择是,获取到分支机构、课程、套餐、开户行等信息,进行填充,具体是这样一开始生成HTML的时候没有数据,只有一个选项-请选择xxx,选择后填充时将对应的请选择xxx和相应数据拼接填充

**接着研究添加贷款信息那块,这么没有好好,返回来再好好看看

 添加贷款人信息这个功能是同一个机构添加多个贷款学生的话,就用这个添加。这个案件永远在最下边

<?php if(empty($readonly)) { ?>//$readonly是标识权限的b变量,如果只读的话,不会显示添加贷款人信息这个按钮
<div class="bs-glyphicons" id="table-form">
  <a href="javascript:newBranchForm();">
      <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
      <span class="glyphicon-class">添加贷款人信息</span>
  </a>
</div>
<?php } ?>
// 添加贷款用户表单
function newBranchForm() {
addLoaninfo();
}

// 添加贷款用户表单
function addLoaninfo() {
  //这个的意思是取到那个form,进行拷贝,对新的form进行改造
var userinfo=$('#userinfo'), mClone=userinfo.clone(), count=$('.userinfo').size();
mClone.attr('id', 'userinfo'+count);
mClone.find('.user_title').html('新增用户信息');
mClone.find('.btn_save').attr('mid', count);
mClone.find('input[name="user_occup"]').change(function() {
changeName($(this).val(), $(this).parents('form'));
});
mClone.find('input[name="user_isdoubtful"]').change(function() {
isDoubtful($(this).val(), $(this).parents('form'));
});
mClone.show();
$('#table-form').before(mClone);
$('.btn_save').unbind().click(saveBranchOrg);
}
$('.btn_save').click(saveBranchOrg);

//这个函数作用是啥,
function changeName(occup, obj) {
for(var i=1;i<4;i++) {
var occupObj = obj.find('.occup'+i);
if(occup == i) {
occupObj.show();
occupObj.find('#edu'+i).html(edu);
occupObj.find('select,input').prop('disabled', false);
} else {
occupObj.hide();
occupObj.find('select,input').prop('disabled', true);
}
}
}


// 保存分支机构信息
function saveBranchOrg() {
var self=$(this), data=JSON.stringify($('#userinfo'+self.attr('mid')).serializeArray()), order=JSON.stringify($('#orginfo').serializeArray());
ajaxReturn(url('/loanmgr/saveloan'), {userinfo:data, orderinfo:order}, function(json) {
if(json.retcode == 0) {
var branch = $('#userinfo'+self.attr('mid')).find('.user_title');
if(branch.size() != 0) {
$('input[name="other_loanid"]').val(json.loanid);
$('input[name="other_userid"]').val(json.userid);

// 上传图片
sendImg(json.userid,json.loanid);
var branchHtml = '用户信息 ( 订单编号:<span style="color:#D9534F;">'+json.loancode+'</span> )';
branch.html(branchHtml);

}
} else {
alert(json.msg);
}
});
}

function sendImg(userid,loanid){
var cert_card_img = document.getElementById( "cert_card_img" ).files;
var account_book_img = document.getElementById( "account_book_img" ).files;

var fd = new FormData();
fd.append('cert_card_img1', cert_card_img[0]);
fd.append('cert_card_img2', cert_card_img[1]);
fd.append('cert_card_img3', cert_card_img[2]);
fd.append('account_book_img1', account_book_img[0]);
fd.append('account_book_img2', account_book_img[1]);
fd.append('account_book_img3', account_book_img[2]);
fd.append('userid', userid);
fd.append('loanid', loanid);
var xhr = new XMLHttpRequest();
xhr.open("post", url('/loanmgr/saveimg'), true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.send(fd);
xhr.onreadystatechange = function(){
if (xhr.readyState==4 && xhr.status==200) {
alert("添加成功")
}
if (xhr.readyState==4 && xhr.status!=200) {
alert("添加失败")
}
}
}

 

// 是否可编辑,这个也是权限控制的一种方法,如果权限是只读的话不可以保存
<?php if(!empty($readonly)) { ?>
$('input,textarea').prop('readonly', true);
$('select,.btn_save,.btn_del,input:radio,.btn_operate').prop('disabled', true);
<?php } else { ?>
//$('.loan_disabled').find('select,input,.btn_save').prop('disabled', true);
<?php } ?>

 

 

 

当输入域失去焦点 (blur) 时改变其颜色:

$("input").blur(function(){
  $("input").css("background-color","#D6D6FF");
});

jQuery json处理看一下

JSON.parse(jsonString): 在一个字符串中解析出JSON对象

JSON.stringify(obj) : 将一个JSON对象转换成字符串(json字符串转化为json字符串)

jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的JavaScript对象

JSON.parse()和jQuery.parseJSON()的区别:有的浏览器不支持JSON.parse()方法,使用jQuery.parseJSON()方法时,在浏览器支持时会返回执行JSON.parse()方法的结果,否则会返回类似执行eval()方法的结果

接下来看啥呢,怎么生成订单和账单

 下单操作

 

*学一下催收中心的权限管理那部分

正则表达式也要看看

posted @ 2019-01-09 15:40  bigclould  阅读(167)  评论(0编辑  收藏  举报