提交 d6eb9030 编写于 作者: Skyeye云's avatar Skyeye云

资产领用修改完成

上级 2b9b46b1
......@@ -201,17 +201,19 @@ layui.config({
});
// 加载流程图片
$("#processInstanceIdImg").attr("src", fileBasePath + 'images/upload/activiti/' + processInstanceId + ".png?cdnversion=" + Math.ceil(new Date()/3600000));
$("#processInstanceIdImg").attr("src", fileBasePath + 'images/upload/activiti/' + processInstanceId + ".png?cdnversion=" + Math.ceil(new Date() / 3600000));
// 是否委派,如果是委派||并行会签的子实例,则不需要选择下一个节点的审批人
if(!j.bean.delegation && !isNull(String(j.bean.multilnStanceExecttionChild)) && !j.bean.multilnStanceExecttionChild){
// 如果是多实体会签 && 该节点已经是最后一个人审批则可以选择审批人
// 如果是单实例节点 && 当前节点不是委派节点 && 有下个节点则可以选择审批人
if ((j.bean.isMultiInstance && !isNull(String(j.bean.multilnStanceExecttionChild)) && !j.bean.multilnStanceExecttionChild)
|| (!j.bean.delegation && !j.bean.isMultiInstance && !isNull(String(j.bean.nextTask)) && j.bean.nextTask)) {
// 加载下个节点审批人选择信息
activitiUtil.initApprovalPerson("approvalOpinionDom", processInstanceId, taskId, $("input[name='flag']:checked").val());
}
// 并行会签的子实例,不支持工作流的其他操作
if(!j.bean.multilnStanceExecttionChild){
activitiUtil.activitiMenuOperator("otherMenuOperator", j.bean, function (){
if (!j.bean.multilnStanceExecttionChild) {
activitiUtil.activitiMenuOperator("otherMenuOperator", j.bean, function () {
parent.layer.close(index);
parent.refreshCode = '0';
});
......@@ -220,7 +222,7 @@ layui.config({
}
// 加载会签信息
if(j.bean.isMultiInstance){
if (j.bean.isMultiInstance) {
$("#multiInstanceBox").html(getDataUseHandlebars($("#multiInstance").html(), j));
$("#multiInstanceState").html('已开启');
if(j.bean.nrOfInstances != 0){
......@@ -341,7 +343,7 @@ layui.config({
pageTypes: pageTypes,
approverId: activitiUtil.getApprovalPersonId()
};
AjaxPostUtil.request({url:flowableBasePath + "activitimode005", params: jStr, type: 'json', callback: function (json) {
AjaxPostUtil.request({url: flowableBasePath + "activitimode005", params: jStr, type: 'json', callback: function (json) {
parent.layer.close(index);
parent.refreshCode = '0';
}});
......
......@@ -59,9 +59,9 @@ layui.config({
useedit(data);
} else if (layEvent === 'subApproval') { //提交审批
subApproval(data);
} else if (layEven === 'cancellation') {//领用作废
} else if (layEvent === 'cancellation') {//领用作废
cancellation(data);
} else if (layEven === 'lingyongProcessDetails') {//领用流程详情
} else if (layEvent === 'lingyongProcessDetails') {//领用流程详情
activitiUtil.activitiDetails(data);
} else if (layEvent === 'revoke') { //撤销领用申请
revoke(data);
......
......@@ -26,6 +26,7 @@ layui.config({
id: "assetReportList",
cols: [
{id: 'assetReportId', title: '资产', formType: 'chooseInput', width: '150', iconClassName: 'chooseAssetReportBtn', verify: 'required'},
{id: 'specifications', title: '规格', formType: 'detail', width: '150'},
{id: 'assetNum', title: '编号', formType: 'detail', width: '150'},
{id: 'assetImg', title: '图片', formType: 'detail', width: '80'},
{id: 'storageArea', title: '存放区域', formType: 'detail', width: '150'},
......@@ -106,6 +107,7 @@ layui.config({
// 获取表格行号
var thisRowKey = trId.replace("tr", "");
$("#assetReportId" + thisRowKey.toString()).val(checkAssetReportMation.assetName);
$("#specifications" + thisRowKey.toString()).html(checkAssetReportMation.specifications);
$("#assetNum" + thisRowKey.toString()).html(checkAssetReportMation.assetNum);
$("#assetImg" + thisRowKey.toString()).html('<img src="' + systemCommonUtil.getFilePath(checkAssetReportMation.assetImg) + '" class="photo-img">');
$("#storageArea" + thisRowKey.toString()).html(checkAssetReportMation.storageArea);
......
......@@ -20,5 +20,10 @@ layui.config({
matchingLanguage();
}});
// 图片查看
$("body").on("click", ".photo-img", function() {
systemCommonUtil.showPicImg($(this).attr("src"));
});
});
});
\ No newline at end of file
var assetList = new Array(); //资产集合
// 资产领用
layui.config({
......@@ -11,13 +10,8 @@ layui.config({
var index = parent.layer.getFrameIndex(window.name);
var $ = layui.$,
form = layui.form;
var rowNum = 1; //表格的序号
var typeHtml = "";
var usetableTemplate = $("#usetableTemplate").html();
var selOption = getFileContent('tpl/template/select-option.tpl');
var sTableData = "";
var allChooseAssetReport = {};
AjaxPostUtil.request({url: flowableBasePath + "asset014", params: {rowId: parent.rowId}, type: 'json', callback: function(json) {
$("#useTitle").html(json.bean.title);
......@@ -31,68 +25,44 @@ layui.config({
} else {
$(".typeOne").removeClass("layui-hide");
}
sTableData = json.bean.goods;
initTypeHtml();
matchingLanguage();
}});
function initTypeHtml() {
// 资产类型
sysDictDataUtil.queryDictDataListByDictTypeCode(sysDictData["admAssetType"]["key"], function (data) {
typeHtml = getDataUseHandlebars(selOption, data);
});
form.render();
//类型加载变化事件
form.on('select(selectTypeProperty)', function(data) {
var thisRowNum = data.elem.id.replace("typeId", "");
var thisRowValue = data.value;
if (!isNull(thisRowValue) && thisRowValue != '请选择') {
if(inPointArray(thisRowValue, assetList)) {
//类型对应的资产存在js对象中
var list = getListPointArray(thisRowValue, assetList);
resetAssetList(thisRowNum, list); //重置选择行的资产列表
} else {
//类型对应的资产不存在js对象中
AjaxPostUtil.request({url: flowableBasePath + "asset011", params: {typeId: thisRowValue}, type: 'json', callback: function(json) {
assetList.push({
id: thisRowValue,
list: json.rows
});
resetAssetList(thisRowNum, json.rows); //重置选择行的资产列表
}});
}
}
// 资产
initTableChooseUtil.initTable({
id: "assetReportList",
cols: [
{id: 'assetReportId', title: '资产', formType: 'chooseInput', width: '150', iconClassName: 'chooseAssetReportBtn', verify: 'required'},
{id: 'specifications', title: '规格', formType: 'detail', width: '150'},
{id: 'assetNum', title: '编号', formType: 'detail', width: '150'},
{id: 'assetImg', title: '图片', formType: 'detail', width: '80'},
{id: 'storageArea', title: '存放区域', formType: 'detail', width: '150'},
{id: 'remark', title: '备注', formType: 'input', width: '100'}
],
deleteRowCallback: function (trcusid) {
delete allChooseAssetReport[trcusid];
},
addRowCallback: function (trcusid) {
},
form: form,
minData: 1
});
//商品加载变化事件
form.on('select(selectAssetarProperty)', function(data) {
var thisRowNum = data.elem.id.replace("assetId", "");
var thisRowValue = data.value;
var thisRowTypeChooseId = $("#typeId" + thisRowNum).val();
if (!isNull(thisRowValue) && thisRowValue != '请选择') {
var list = getListPointArray(thisRowTypeChooseId, assetList);
$.each(list, function(i, item) {
if(item.id === thisRowValue) {
$("#specificationsName" + thisRowNum).html(item.specificationsName);
$("#assetNum" + thisRowNum).html(item.assetNum);
return false;
}
});
} else {
$("#specificationsName" + thisRowNum).html(""); //重置规格为空
$("#assetNum" + thisRowNum).html(""); //重置库存为空
}
initTableChooseUtil.deleteAllRow('assetReportList');
$.each(json.bean.goods, function(i, item) {
var params = {
"assetReportId": item.assetName,
"specifications": item.specifications,
"assetNum": item.assetNum,
"assetImg": '<img src="' + systemCommonUtil.getFilePath(item.assetImg) + '" class="photo-img">',
"storageArea": item.storageArea,
"remark": item.remark
};
var trcusid = initTableChooseUtil.resetData('assetReportList', params);
item["id"] = item.assetReportId;
allChooseAssetReport[trcusid] = item;
});
// 加载表格数据
initTableAssetList();
}
//加载表格数据
function initTableAssetList() {
$.each(sTableData, function(i, item) {
addDataRow(item);
});
}
matchingLanguage();
}});
// 保存为草稿
form.on('submit(formEditBean)', function(data) {
......@@ -121,29 +91,26 @@ layui.config({
});
function saveData(subType, approvalId) {
// 获取已选资产数据
var rowTr = $("#useTable tr");
if(rowTr.length == 0) {
winui.window.msg('请选择需要领用的资产~', {icon: 2, time: 2000});
var result = initTableChooseUtil.getDataList('assetReportList');
if (!result.checkResult) {
return false;
}
var tableData = new Array();
var noError = false; //循环遍历表格数据时,是否有其他错误信息
$.each(rowTr, function(i, item) {
var rowNum = $(item).attr("trcusid").replace("tr", "");
if(inTableDataArrayByAssetarId($("#assetId" + rowNum).val(), tableData)){
var noError = false;
$.each(result.dataList, function(i, item) {
// 获取行编号
var thisRowKey = item["trcusid"].replace("tr", "");
var assetReport = allChooseAssetReport["tr" + thisRowKey];
if (judgeInPoingArr(tableData, "assetReportId", assetReport.id)) {
winui.window.msg('领用单存在相同的资产', {icon: 2, time: 2000});
noError = true;
return false;
}
var row = {
typeId: $("#typeId" + rowNum).val(),
assetId: $("#assetId" + rowNum).val(),
remark: $("#remark" + rowNum).val()
};
tableData.push(row);
item["assetReportId"] = assetReport.id;
tableData.push(item);
});
if(noError) {
if (noError) {
return false;
}
......@@ -161,147 +128,26 @@ layui.config({
}});
}
//判断选中的资产是否也在数组中
function inTableDataArrayByAssetarId(str, array) {
var isIn = false;
$.each(array, function(i, item) {
if(item.assetId === str) {
isIn = true;
return false;
}
$("body").on("click", ".chooseAssetReportBtn", function() {
var trId = $(this).parent().parent().attr("trcusid");
adminAssistantUtil.assetReportCheckType = false; // 选择类型,默认单选,true:多选,false:单选
adminAssistantUtil.openAssetReportChoosePage(function (checkAssetReportMation){
// 获取表格行号
var thisRowKey = trId.replace("tr", "");
$("#assetReportId" + thisRowKey.toString()).val(checkAssetReportMation.assetName);
$("#specifications" + thisRowKey.toString()).html(checkAssetReportMation.specifications);
$("#assetNum" + thisRowKey.toString()).html(checkAssetReportMation.assetNum);
$("#assetImg" + thisRowKey.toString()).html('<img src="' + systemCommonUtil.getFilePath(checkAssetReportMation.assetImg) + '" class="photo-img">');
$("#storageArea" + thisRowKey.toString()).html(checkAssetReportMation.storageArea);
allChooseAssetReport[trId] = checkAssetReportMation;
});
return isIn;
}
//新增行
$("body").on("click", "#addRow", function() {
addRow();
});
//删除行
$("body").on("click", "#deleteRow", function() {
deleteRow();
// 图片查看
$("body").on("click", ".photo-img", function() {
systemCommonUtil.showPicImg($(this).attr("src"));
});
//加载数据行行
function addDataRow(item) {
var thisRowNum = rowNum.toString();
var par = {
id: "row" + thisRowNum, //checkbox的id
trId: "tr" + thisRowNum, //行的id
typeId: "typeId" + thisRowNum, //类型id
assetId: "assetId" + thisRowNum, //资产id
specificationsName: "specificationsName" + thisRowNum, //规格id
assetNum: "assetNum" + thisRowNum, //编号
remark: "remark" + thisRowNum //备注id
};
$("#useTable").append(getDataUseHandlebars(usetableTemplate, par));
//赋值给资产类别
$("#" + "typeId" + thisRowNum).html(typeHtml);
//数据回显
$("#typeId" + thisRowNum).val(item.typeId);
$("#specificationsName" + thisRowNum).html(item.specificationsName);
$("#remark" + thisRowNum).val(item.remark);
$("#assetNum" + thisRowNum).html(item.assetNum);
var thisRowValue = item.typeId;
if (!isNull(thisRowValue) && thisRowValue != '请选择') {
if(inPointArray(thisRowValue, assetList)) {
//类型对应的资产存在js对象中
var list = getListPointArray(thisRowValue, assetList);
//重置选择行的资产列表
var sHtml = getDataUseHandlebars(selOption, {rows: list});
$("#assetId" + thisRowNum).html(sHtml); //重置商品列表下拉框
$("#assetId" + thisRowNum).val(item.assetId);
form.render('select');
} else {
//类型对应的资产不存在js对象中
AjaxPostUtil.request({url: flowableBasePath + "asset011", params: {typeId: thisRowValue}, type: 'json', callback: function(json) {
assetList.push({
id: thisRowValue,
list: json.rows
});
//重置选择行的资产列表
var sHtml = getDataUseHandlebars(selOption, json);
$("#assetId" + thisRowNum).html(sHtml); //重置商品列表下拉框
$("#assetId" + thisRowNum).val(item.assetId);
form.render('select');
}, async: false});
}
}
form.render('select');
form.render('checkbox');
rowNum++;
}
//新增行
function addRow() {
var par = {
id: "row" + rowNum.toString(), //checkbox的id
trId: "tr" + rowNum.toString(), //行的id
typeId: "typeId" + rowNum.toString(), //类型id
assetId: "assetId" + rowNum.toString(), //资产id
specificationsName: "specificationsName" + rowNum.toString(), //规格id
assetNum: "assetNum" + rowNum.toString(), //编号
remark: "remark" + rowNum.toString() //备注id
};
$("#useTable").append(getDataUseHandlebars(usetableTemplate, par));
//赋值给资产类别
$("#" + "typeId" + rowNum.toString()).html(typeHtml);
form.render('select');
form.render('checkbox');
rowNum++;
}
//删除行
function deleteRow() {
var checkRow = $("#useTable input[type='checkbox'][name='tableCheckRow']:checked");
if(checkRow.length > 0) {
$.each(checkRow, function(i, item) {
$(item).parent().parent().remove();
});
} else {
winui.window.msg('请选择要删除的行', {icon: 2, time: 2000});
}
}
//根据类型重置用户列表
function resetAssetList(thisRowNum, list) {
var sHtml = getDataUseHandlebars(selOption, {
rows: list
});
$("#assetId" + thisRowNum).html(sHtml); //重置商品列表下拉框
$("#specificationsName" + thisRowNum).html(""); //重置规格为空
$("#assetNum" + thisRowNum).html(""); //重置库存为空
form.render('select');
}
//判断是否在数组中
function inPointArray(str, array) {
var isIn = false;
$.each(array, function(i, item) {
if(item.id === str) {
isIn = true;
return false;
}
});
return isIn;
}
//获取指定key对应的集合
function getListPointArray(str, array) {
var isList = [];
$.each(array, function(i, item) {
if(item.id === str) {
$.extend(true, isList, item.list);
return false;
}
});
return isList;
}
$("body").on("click", "#cancle", function() {
parent.layer.close(index);
});
......
......@@ -62,11 +62,11 @@ layui.config({
lingyongEdit(data);
} else if (layEvent === 'subApproval') { //提交审批
subApproval(data);
} else if (layEven === 'cancellation') {//领用作废
} else if (layEvent === 'cancellation') {//领用作废
cancellation(data);
} else if (layEven === 'lingyongProcessDetails') {//领用流程详情
} else if (layEvent === 'lingyongProcessDetails') {//领用流程详情
activitiUtil.activitiDetails(data);
} else if (layEven === 'revoke') {//撤销领用申请
} else if (layEvent === 'revoke') {//撤销领用申请
revoke(data);
}
});
......
......@@ -65,7 +65,7 @@ layui.config({
reserveEdit(data);
} else if (layEvent === 'subApproval') { //提交审批
subApproval(data);
} else if (layEven === 'cancellation') {//预定作废
} else if (layEvent === 'cancellation') {//预定作废
cancellation(data);
} else if (layEvent === 'revoke') { //撤销
revoke(data);
......
......@@ -65,9 +65,9 @@ layui.config({
borrowEdit(data);
} else if (layEvent === 'subApproval') { //提交审批
subApproval(data);
} else if (layEven === 'cancellation') {//借用作废
} else if (layEvent === 'cancellation') {//借用作废
cancellation(data);
} else if (layEven === 'revoke') {//撤销
} else if (layEvent === 'revoke') {//撤销
revoke(data);
}
});
......
......@@ -26,16 +26,28 @@ layui.config({
cols: [[
{ title: systemLanguage["com.skyeye.serialNumber"][languageType], type: 'numbers' },
{ field: 'assetName', title: '资产名称', align: 'left', width: 120 },
{ field: 'typeName', title: '资产类型', align: 'left', width: 100 },
{ field: 'assetNum', title: '资产编号', align: 'left', width: 100 },
{ field: 'assetImg', title: '图片', align: 'center', width: 60, templet: function (d) {
return '<img src="' + systemCommonUtil.getFilePath(d.assetImg) + '" class="photo-img" lay-event="assetImg">';
}},
{ field: 'typeName', title: '类型', align: 'left', width: 100 },
{ field: 'assetNum', title: '资产编号', align: 'left', width: 150 },
{ field: 'specifications', title: '资产规格', align: 'left', width: 120 },
{ field: 'assetAdmin', title: '管理员', align: 'left', width: 120 },
{ field: 'createTime', title: '申领时间', align: 'center', width: 150 },
]],
done: function(json) {
matchingLanguage();
}
});
table.on('tool(messageTable)', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'assetImg') { // 图片预览
systemCommonUtil.showPicImg(systemCommonUtil.getFilePath(data.assetImg));
}
});
$("body").on("click", "#reloadmessageTable", function() {
loadTable();
});
......
......@@ -64,9 +64,9 @@ layui.config({
borrowEdit(data);
} else if (layEvent === 'subApproval') { //提交审批
subApproval(data);
} else if (layEven === 'cancellation') {//借用作废
} else if (layEvent === 'cancellation') {//借用作废
cancellation(data);
} else if (layEven === 'revoke') {//撤销
} else if (layEvent === 'revoke') {//撤销
revoke(data);
}
});
......
......@@ -52,10 +52,11 @@
<table class="layui-table">
<thead>
<tr>
<th>资产类别</th>
<th>资产名称</th>
<th style="min-width: 100px;">规格</th>
<th style="min-width: 100px;">编号</th>
<th>资产</th>
<th style="width: 150px;">规格</th>
<th style="width: 150px;">编号</th>
<th style="width: 80px;">图片</th>
<th style="width: 150px;">存放区域</th>
<th>状态</th>
<th>备注</th>
</tr>
......@@ -63,10 +64,11 @@
<tbody id="useTable" class="insurance-table">
{{#each goods}}
<tr>
<td>{{typeName}}</td>
<td>{{assetName}}</td>
<td>{{specificationsName}}</td>
<td>{{specifications}}</td>
<td>{{assetNum}}</td>
<td><img src="{{assetImg}}" class="photo-img"></td>
<td>{{storageArea}}</td>
<td>{{stateName}}</td>
<td>{{remark}}</td>
</tr>
......
......@@ -29,27 +29,8 @@
</div>
<div class="layui-form-item layui-col-xs12">
<label class="layui-form-label">资产<i class="red">*</i></label>
<div class="layui-input-block">
<div class="winui-toolbar">
<div class="winui-tool" style="text-align: left;">
<button id="addRow" class="winui-toolbtn" type="button"><i class="fa fa-plus" aria-hidden="true"></i>新增行</button>
<button id="deleteRow" class="winui-toolbtn" type="button"><i class="fa fa-trash-o" aria-hidden="true"></i>删除行</button>
</div>
</div>
<table class="layui-table">
<thead>
<tr>
<th></th>
<th>资产类别<i class="red">*</i></th>
<th>资产名称<i class="red">*</i></th>
<th style="min-width: 100px;">规格</th>
<th style="min-width: 100px;">编号</th>
<th>备注</th>
</tr>
</thead>
<tbody id="useTable" class="insurance-table">
</tbody>
</table>
<div class="layui-input-block" id="assetReportList">
</div>
</div>
<div class="layui-form-item layui-col-xs12">
......@@ -75,18 +56,6 @@
</form>
</div>
<!-- usetableTemplate -->
<script type="text/x-handlebars-template" id="usetableTemplate">
<tr trcusid="{{trId}}">
<td><input type="checkbox" rowId="{{id}}" lay-filter="checkboxProperty" name="tableCheckRow"/></td>
<td><select id="{{typeId}}" lay-filter="selectTypeProperty" win-verify="required"></select></td>
<td><select id="{{assetId}}" lay-filter="selectAssetarProperty" win-verify="required"></select></td>
<td id="{{specificationsName}}"></td>
<td id="{{assetNum}}"></td>
<td><input type="text" class="layui-input" id="{{remark}}"/></td>
</tr>
</script>
<script src="../../assets/lib/layui/layui.js"></script>
<script src="../../assets/lib/layui/custom.js"></script>
<script type="text/javascript">
......
......@@ -55,9 +55,9 @@ layui.config({
edit(data);
} else if (layEvent === 'sub') { // 提交
sub(data);
} else if (layEven === 'cancellation') { // 作废
} else if (layEvent === 'cancellation') { // 作废
cancellation(data);
} else if (layEven === 'inductionResult') { // 入职
} else if (layEvent === 'inductionResult') { // 入职
inductionResult(data);
}
});
......
......@@ -93,15 +93,15 @@ layui.config({
activitiUtil.activitiDetails(data);
} else if (layEvent === 'executionBegin') {//开始执行
executionBegin(data, obj);
} else if (layEven === 'revoke') {//撤销任务审批申请
} else if (layEvent === 'revoke') {//撤销任务审批申请
revoke(data);
} else if (layEven === 'taskSplit') {//拆分任务
} else if (layEvent === 'taskSplit') {//拆分任务
taskSplit(data);
} else if (layEven === 'cancellation') {//作废
} else if (layEvent === 'cancellation') {//作废
cancellation(data, obj);
} else if (layEven === 'executionOver') {//执行完成
} else if (layEvent === 'executionOver') {//执行完成
executionOver(data);
} else if (layEven === 'executionClose') {//任务关闭
} else if (layEvent === 'executionClose') {//任务关闭
executionClose(data, obj);
}
});
......
......@@ -62,21 +62,21 @@ layui.config({
}},
{ field: 'jobNumber', title: '工号', rowspan: '3', align: 'left', width: 100, fixed: 'left'},
{ field: 'staffType', title: '类型', rowspan: '3', align: 'left', width: 90, templet: function (d) {
if(d.staffType == 1){
return '普通员工';
}else if(d.staffType == 2){
return '教职工';
} else {
return '参数错误';
}
if (d.staffType == 1) {
return '普通员工';
} else if (d.staffType == 2) {
return '教职工';
} else {
return '参数错误';
}
}},
{ field: 'email', title: '邮箱', rowspan: '3', align: 'left', width: 170 },
{ field: 'userPhoto', title: '头像', rowspan: '3', align: 'center', width: 60, templet: function (d) {
if(isNull(d.userPhoto)){
return '<img src="../../assets/images/os_windows.png" class="photo-img">';
} else {
return '<img src="' + systemCommonUtil.getFilePath(d.userPhoto) + '" class="photo-img" lay-event="userPhoto">';
}
if (isNull(d.userPhoto)) {
return '<img src="../../assets/images/os_windows.png" class="photo-img">';
} else {
return '<img src="' + systemCommonUtil.getFilePath(d.userPhoto) + '" class="photo-img" lay-event="userPhoto">';
}
}},
{ field: 'userId', title: '系统账号', rowspan: '3', align: 'center', width: 80, templet: function (d) {
if (!isNull(d.userId)){
......
......@@ -342,6 +342,9 @@ var systemCommonUtil = {
* @param url
*/
getFilePath: function (url) {
if (isNull(url)) {
return "";
}
if (url.startsWith("../../assets/")) {
return homePagePath + url;
} else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册