diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java b/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
index 7308802..50ab6a2 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
@@ -5,18 +5,20 @@
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.service.ParamService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import java.util.HashMap;
+import java.util.Map;
+
 @Controller
 public class ParamController {
   @Autowired
@@ -206,7 +208,7 @@
   }
 
   @GetMapping("/param/apiclientparalist")
-  @PreAuthorize("hasPermission('/param/apiclientparalist','')")
+  @PreAuthorize("hasPermission('/param/apiclientpara','')")
   @ResponseBody
   public PageResult<TApiClient> getApiclientDataList(@RequestParam("page") Integer pageNo,
                                                      @RequestParam("limit") Integer pageSize,
@@ -221,5 +223,128 @@
     }
   }
 
+  @GetMapping("/param/load4addapiclient")
+  @PreAuthorize("hasPermission('/param/load4addapiclient','')")
+  public String load4AddApiclientPara(Model model) {
+    Map<String, String> roles = new HashMap<>(0);
+    roles.put("ROLE_THIRD_COMMON", "ROLE_THIRD_COMMON");
+    roles.put("ROLE_THIRD_CONSUME", "ROLE_THIRD_CONSUME");
+    roles.put("ROLE_THIRD_DEPOSIT", "ROLE_THIRD_DEPOSIT");
+    roles.put("ROLE_THIRD_SHOP", "ROLE_THIRD_SHOP");
+    roles.put("ROLE_THIRD_ADMIN", "ROLE_THIRD_ADMIN");
+    model.addAttribute("rolelist", roles);
+    return "system/param/apiclientform";
+  }
+
+  @PostMapping("/param/updateapiclientstate")
+  @PreAuthorize("hasPermission('/param/updateapiclientstate','')")
+  @ResponseBody
+  public JsonResult updateApiclientState(@RequestParam("appid") String appid, @RequestParam("state") String state) {
+    if (StringUtil.isEmpty(appid) || (!TradeDict.STATUS_NORMAL.equals(state) && !TradeDict.STATUS_CLOSED.equals(state))) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null == apiClient) {
+        return JsonResult.error("应用参数不存在");
+      } else if (state.equals(apiClient.getStatus())) {
+        return JsonResult.error("状态修改错误，请刷新查询");
+      }
+      apiClient.setStatus(state);
+      if (paramService.saveOrUpdateApiClient(apiClient)) {
+        return JsonResult.ok(TradeDict.STATUS_NORMAL.equals(state) ? "启用成功" : "关闭成功");
+      } else {
+        return JsonResult.error(TradeDict.STATUS_NORMAL.equals(state) ? "启用失败" : "关闭失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @PostMapping("/param/deleteapiclient")
+  @PreAuthorize("hasPermission('/param/deleteapiclient','')")
+  @ResponseBody
+  public JsonResult deleteApiclientParam(@RequestParam("appid") String appid) {
+    if (StringUtil.isEmpty(appid)) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null == apiClient) {
+        return JsonResult.error("应用参数不存在");
+      }
+
+      if (paramService.deleteApiClient(apiClient)) {
+        return JsonResult.ok("删除成功");
+      } else {
+        return JsonResult.error("删除失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @PostMapping("/param/updateapiclientpara")
+  @PreAuthorize("hasPermission('/param/updateapiclientpara','')")
+  @ResponseBody
+  public JsonResult updateApiclientSecret(@RequestParam("appid") String appid,
+                                         @RequestParam(value = "secret", required = false) String secret,
+                                         @RequestParam(value = "roles", required = false) String roles) {
+    if (StringUtil.isEmpty(appid) || (StringUtil.isEmpty(secret) && StringUtil.isEmpty(roles))) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null == apiClient) {
+        return JsonResult.error("应用参数不存在");
+      }
+      if (!StringUtil.isEmpty(secret)) {
+        apiClient.setSecret(secret);
+      }
+      if (!StringUtil.isEmpty(roles)) {
+        apiClient.setRoles(roles);
+      }
+      if (paramService.saveOrUpdateApiClient(apiClient)) {
+        return JsonResult.ok("修改成功");
+      } else {
+        return JsonResult.error("修改失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @PostMapping("/param/addapiclientpara")
+  @PreAuthorize("hasPermission('/param/addapiclientpara','')")
+  @ResponseBody
+  public JsonResult addApiclientPara(@RequestParam("appid") String appid,
+                                         @RequestParam("roles") String roles) {
+    if (StringUtil.isEmpty(appid) || StringUtil.isEmpty(roles)) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null != apiClient) {
+        return JsonResult.error("APPID重复");
+      }
+      apiClient = new TApiClient();
+      apiClient.setAppid(appid.trim());
+      apiClient.setSecret(RandomUtils.getUUIDStr());
+      apiClient.setStatus(TradeDict.STATUS_NORMAL);
+      apiClient.setRoles(roles);
+      if (paramService.saveOrUpdateApiClient(apiClient)) {
+        return JsonResult.ok("新增成功");
+      } else {
+        return JsonResult.error("新增失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java b/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java
index a28ebf8..3097754 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java
@@ -32,4 +32,14 @@
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   PageResult<TApiClient> getApiClientparaPage(String appid, int pageNo, int pageSize);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  TApiClient getApiClientByAppid(String appid);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean saveOrUpdateApiClient(TApiClient apiClient);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean deleteApiClient(TApiClient apiClient);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
index 89438bc..8d63932 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
@@ -113,4 +113,30 @@
     return new PageResult<>(apiClientDao.findAll(pageable));
   }
 
+  @Override
+  public TApiClient getApiClientByAppid(String appid) {
+    if (!StringUtil.isEmpty(appid)) {
+      return apiClientDao.findByAppid(appid.trim());
+    }
+    return null;
+  }
+
+  @Override
+  public boolean saveOrUpdateApiClient(TApiClient apiClient){
+    if(null!=apiClient){
+      apiClientDao.save(apiClient);
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public boolean deleteApiClient(TApiClient apiClient) {
+    if (null != apiClient) {
+      apiClientDao.delete(apiClient);
+      return true;
+    }
+    return false;
+  }
+
 }
diff --git a/src/main/resources/templates/system/param/apiclientform.html b/src/main/resources/templates/system/param/apiclientform.html
new file mode 100644
index 0000000..112645e
--- /dev/null
+++ b/src/main/resources/templates/system/param/apiclientform.html
@@ -0,0 +1,78 @@
+<form id="appid-form" lay-filter="form" class="layui-form model-form">
+    <div class="layui-form-item">
+        <label class="layui-form-label">APPID</label>
+        <div class="layui-input-block">
+            <input name="appid" placeholder="请输入APPID" type="text" class="layui-input" maxlength="30"
+                   lay-verify="required|number" required/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">角色</label>
+        <div class="layui-input-block">
+            <select name="roles" xm-select="roles" lay-verify="required">
+                <option th:each="role : ${rolelist}" th:value="${role.key}">[[${role.value}]]</option>
+            </select>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="form-submit" lay-submit  id="submitbtn">保存</button>
+    </div>
+</form>
+
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var formSelects = layui.formSelects;
+
+        var url = '/param/addapiclientpara';
+        // 回显user数据
+        var apiparam = admin.getTempData('t_appclient');
+        debugger
+        if (undefined != apiparam && null != apiparam) {
+            url = '/param/updateapiclientpara';
+            $('input[name="appid"]').attr('readonly', 'readonly');
+            $('input[name="appid"]').val(apiparam.appid);
+            var rds = apiparam.roles.split(",");
+            formSelects.value('roles', rds);
+        }
+        // 表单提交事件
+        form.on('submit(form-submit)', function (data) {
+            layer.load(2);
+            var token_name = $("meta[name='_csrf_token']").attr("content");
+            var token = $("meta[name='_csrf_token']").attr("value");
+            data.field[token_name] = token;
+            $.ajax({
+                type : "POST",
+                dataType : "json",
+                url : url,
+                data : data.field,
+                success : function(result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        admin.finishPopupCenter();
+                    } else if (data.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error : function(data) {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败！", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
+
diff --git a/src/main/resources/templates/system/param/apiclientpara.html b/src/main/resources/templates/system/param/apiclientpara.html
index f82e9c0..4cc2ade 100644
--- a/src/main/resources/templates/system/param/apiclientpara.html
+++ b/src/main/resources/templates/system/param/apiclientpara.html
@@ -22,7 +22,7 @@
 
 <!-- 表格操作列 -->
 <script type="text/html" id="apiclient-table-bar">
-    <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
+    <a class="layui-btn layui-btn-xs" lay-event="editRole">修改角色</a>
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
 </script>
 
@@ -45,15 +45,11 @@
             page: true,
             cols: [
                 [
-                    {field: 'appid', title: 'APPID', width: 366, align: 'right', fixed: 'left', sort: true},
-                    {field: 'secret', title: '密钥', align: 'left', style:'cursor: pointer;', event: 'modifyValue'},
+                    {field: 'appid', title: 'APPID', width: 120, align: 'right', fixed: 'left', sort: true},
+                    {field: 'secret', title: '密钥', align: 'center', edit: 'text'},
                     {field: 'status', title: '状态', width: 100, templet: '#api-tpl-state',sort: true},
-                    {
-                        field: 'roles', title: '角色', templet: function (item) {
-                            return 'test';
-                        }
-                    },
-                    {align: 'center', title: '操作', width: 80, toolbar: '#apiclient-table-bar',  fixed: 'right'}
+                    {field: 'roles', title: '角色', align: 'center' },
+                    {align: 'center', title: '操作', width: 150, toolbar: '#apiclient-table-bar',  fixed: 'right'}
                 ]
             ]
         });
@@ -64,28 +60,60 @@
         });
 
         $('#btn-add').click(function () {
-            admin.popupCenter({
-                title: "新增应用权限",
-                area:["600px","300px"],
-                path: '/param/',
-                finish: function () {
-                    table.reload('businessparaTable');
-                }
-            });
+            showEditModel();
         });
 
         $('#btn-reset').click(function () {
             $("#search-appid").val("");
         });
 
+        function showEditModel(data) {
+            var title = data ? '修改角色' : '新增应用';
+            admin.putTempData('t_appclient', data);
+            admin.popupCenter({
+                title: title,
+                path: '/param/load4addapiclient',
+                finish: function () {
+                    table.reload('apiClientTable');
+                }
+            });
+        }
+
+        // 修改user状态
+        form.on('switch(api-tpl-state)', function (obj) {
+            var token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('/param/updateapiclientstate', {
+                appid: obj.elem.value,
+                state: obj.elem.checked ? 'normal' : 'closed',
+                _csrf: token
+            }, function (data) {
+                if (data.code == 200) {
+                    layer.msg(data.msg, {icon: 1});
+                } else if (data.code == 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('/login');
+                    }, 1000);
+                    return;
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    $(obj.elem).prop('checked', !obj.elem.checked);
+                    form.render('checkbox');
+                }
+            },function () {
+                layer.msg('请求失败了，请稍后再试', {icon: 2});
+                $(obj.elem).prop('checked', !obj.elem.checked);
+                form.render('checkbox');
+            });
+        });
+
         //监听单元格
         table.on('tool(apiClientTable-filter)', function (obj) {
             var data = obj.data;
             if('del' == obj.event){
-                if(confirm("确定要删除业务参数["+data.parakey+"]吗？")){
+                if(confirm("确定要删除应用参数["+data.appid+"]吗？")){
                     layer.load(2);
-                    admin.go('/param/deletebusinesspara', {
-                        parakey: data.parakey,
+                    admin.go('/param/deleteapiclient', {
+                        appid: data.appid,
                         _csrf: $("meta[name='_csrf_token']").attr("value")
                     }, function (data) {
                         console.log(data.code);
@@ -100,44 +128,42 @@
                         } else {
                             layer.msg(data.msg, {icon: 2});
                         }
-                        table.reload('businessparaTable');
+                        table.reload('apiClientTable');
                     }, function (ret) {
                         console.log(ret);
                         layer.closeAll('loading');
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
                     });
                 }
-            }else if('modifyValue' == obj.event){
-                layer.prompt({
-                    formType: 2,
-                    title: '修改参数名为 ['+ data.parakey +'] 的值：',
-                    area: ['500px', '200px'],
-                    maxlength: 1000,
-                    value: data.paraval
-                }, function(value, index){
-                    layer.close(index);
-                    admin.go('/param/businessparaupdate', {
-                        parakey: data.parakey,
-                        paraval: value,
-                        _csrf: $("meta[name='_csrf_token']").attr("value"),
-                    }, function (data) {
-                        if (data.code == 200) {
-                            layer.msg("修改成功", {icon: 1});
-                            obj.update({ paraval: value });
-                        } else if (data.code == 401) {
-                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                                location.replace('/login');
-                            }, 1000);
-                            return;
-                        } else {
-                            layer.msg(data.msg, {icon: 2});
-                        }
-                    },function () {
-                        layer.msg('修改失败了，请稍后再试', {icon: 2});
-                    });
-                });
+            }else if('editRole' ==obj.event){
+                showEditModel(data);
             }
         });
 
+        table.on('edit(apiClientTable-filter)', function (obj) {
+            var row = obj.data; //得到所在行所有键值
+            var newval = obj.value; //得到修改后的值
+            admin.go('/param/updateapiclientpara', {
+                appid: row.appid,
+                secret: newval,
+                _csrf: $("meta[name='_csrf_token']").attr("value"),
+            }, function (data) {
+                if (data.code == 200) {
+                    layer.msg("修改成功", {icon: 1});
+                } else if (data.code == 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('/login');
+                    }, 1000);
+                    return;
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    table.reload('apiClientTable');
+                }
+            },function () {
+                layer.msg('修改失败了，请稍后再试', {icon: 2});
+                table.reload('apiClientTable');
+            });
+        })
+
     });
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/param/businesspara.html b/src/main/resources/templates/system/param/businesspara.html
index d7a4783..80ddac4 100644
--- a/src/main/resources/templates/system/param/businesspara.html
+++ b/src/main/resources/templates/system/param/businesspara.html
@@ -34,7 +34,6 @@
         table.render({
             elem: '#businessparaTable',
             url: '/param/businessparalist',
-            toolbar:'',
             page: true,
             cols: [
                 [
