diff --git a/package.json b/package.json
index e081b1790f625b0b11c80ebf34fe1e6b384eb9c7..358be046fa9a6523342cd4dd318602a0538b70ba 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
     "vue-clipboard2": "^0.3.3",
     "vue-codemirror-lite": "^1.0.4",
     "vue-cropper": "0.5.8",
+    "vue-json-viewer": "2",
     "vue-qr": "^2.5.0",
     "vue-quill-editor": "^3.0.6",
     "vue-router": "^3.5.2",
diff --git a/src/api/bpm/TaskAdmin.js b/src/api/bpm/TaskAdmin.js
index aeb078ab0132092270afcf89da2145c7d1547459..617fff0051807903bd16dd50835ee0053d86c888 100644
--- a/src/api/bpm/TaskAdmin.js
+++ b/src/api/bpm/TaskAdmin.js
@@ -19,4 +19,4 @@ export function pageByDone (params) {
     method: 'GET',
     params: params
   })
-}
\ No newline at end of file
+}
diff --git a/src/api/bpm/instance.js b/src/api/bpm/instance.js
index 9a934893702371785da91e4c026d77aa1bfd76c7..dbfa4904bbb1e2421fdf772169c2756b7733777e 100644
--- a/src/api/bpm/instance.js
+++ b/src/api/bpm/instance.js
@@ -17,7 +17,7 @@ export function start (obj) {
 export function suspend (instanceId) {
   return axios({
     url: '/bpm/instance/suspend',
-    method: 'GET',
+    method: 'POST',
     params: { instanceId }
   })
 }
@@ -28,7 +28,7 @@ export function suspend (instanceId) {
 export function activate (instanceId) {
   return axios({
     url: '/bpm/instance/activate',
-    method: 'GET',
+    method: 'POST',
     params: { instanceId }
   })
 }
diff --git a/src/api/bpm/modelNode.js b/src/api/bpm/modelNode.js
index b0c842ab63fba6cf0e8c467ed5bc4f39d711cc4c..a965b392f62a2a6a11339342b03d6a81f47f7455 100644
--- a/src/api/bpm/modelNode.js
+++ b/src/api/bpm/modelNode.js
@@ -1,16 +1,5 @@
 import { axios } from '@/utils/request'
 
-/**
- * 分页
- */
-export function page (params) {
-  return axios({
-    url: '/bpm/model/node/page',
-    method: 'GET',
-    params: params
-  })
-}
-
 /**
  * 查询全部
  */
diff --git a/src/api/notice/siteMessage.js b/src/api/notice/siteMessage.js
index ce4bcec86b6b81e28c8578fd71f45758800d3804..2c3a64335c1df7f3b42d952b97769f740053ee56 100644
--- a/src/api/notice/siteMessage.js
+++ b/src/api/notice/siteMessage.js
@@ -90,9 +90,9 @@ export function send (id) {
 /**
  * 保存草稿
  */
-export function save (obj) {
+export function saveOrUpdate (obj) {
   return axios({
-    url: '/site/message/save',
+    url: '/site/message/saveOrUpdate',
     method: 'POST',
     data: obj
   })
diff --git a/src/api/payment/pay.js b/src/api/payment/pay.js
index d7cddf8ebb72f06b29c3afcf69e7ed0649fc2bce..2e8ddd7e35a260c1d0054c577b6d2a4ad1f5714b 100644
--- a/src/api/payment/pay.js
+++ b/src/api/payment/pay.js
@@ -11,28 +11,6 @@ export function cancelByPaymentId (paymentId) {
   })
 }
 
-/**
- * 取消支付(业务id)
- */
-export function cancelByBusinessId (businessId) {
-  return axios({
-    url: '/uni_pay/cancelByBusinessId',
-    method: 'POST',
-    params: { businessId }
-  })
-}
-
-/**
- * 全额退款(支付id)
- */
-export function refundByBusinessId (businessId) {
-  return axios({
-    url: '/uni_pay/refundByBusinessId',
-    method: 'POST',
-    params: { businessId }
-  })
-}
-
 /**
  * 退款
  */
diff --git a/src/api/payment/wechatPayConfig.js b/src/api/payment/wechatPayConfig.js
index 10e174735866dbd463802a98c2a6cfc80165d4f1..67ccb5f858c3fdf37220dced6b9e2e3a5b7400d1 100644
--- a/src/api/payment/wechatPayConfig.js
+++ b/src/api/payment/wechatPayConfig.js
@@ -21,15 +21,6 @@ export function get (id) {
     params: { id }
   })
 }
-/**
- * 获取微信支持支付方式
- */
-export function findPayTypeList () {
-  return axios({
-    url: '/wechat/pay/findPayTypeList',
-    method: 'GET'
-  })
-}
 
 export function add (obj) {
   return axios({
diff --git a/src/assets/css/components.less b/src/assets/css/components.less
index 2825f942903160e2decf2c28d53a4362c4b2ddad..dd003d1b8da6037240f76d1994caf284f9403257 100644
--- a/src/assets/css/components.less
+++ b/src/assets/css/components.less
@@ -4,7 +4,7 @@
 
 /* wangEditor start */
 .editor-content-view {
-  border: 3px solid #ccc;
+  //border: 3px solid #ccc;
   border-radius: 5px;
   padding: 0 10px;
   margin-top: 20px;
diff --git a/src/components/Bootx/RoleSelectModal/BRoleSelectModal.vue b/src/components/Bootx/RoleSelectModal/BRoleSelectModal.vue
index b95c051f78921caaab784b109857cda268f314e6..0a57e225cd961cd3a90eca8a72b569aff4668909 100644
--- a/src/components/Bootx/RoleSelectModal/BRoleSelectModal.vue
+++ b/src/components/Bootx/RoleSelectModal/BRoleSelectModal.vue
@@ -67,6 +67,13 @@ export default {
       default () {
         return true
       }
+    },
+    // 数据源
+    dataSource: {
+      type: Function,
+      default () {
+        return page
+      }
     }
   },
   computed: {
@@ -118,7 +125,7 @@ export default {
      */
     queryPage () {
       this.loading = true
-      page({
+      this.dataSource({
         ...this.queryParam,
         ...this.pages
       }).then(res => {
diff --git a/src/components/Bootx/SuperQuery/BSuperQuery.vue b/src/components/Bootx/SuperQuery/BSuperQuery.vue
index 4f95b5b264d364e4dbadb87feb7de806b2e290e5..aa8534a6dbf8689e334b3c8ef557cb3c0e40aebd 100644
--- a/src/components/Bootx/SuperQuery/BSuperQuery.vue
+++ b/src/components/Bootx/SuperQuery/BSuperQuery.vue
@@ -12,7 +12,7 @@
       
     
     {{ buttonTitle }}
-    
 
 
 
 
diff --git a/src/mixins/FormMixin.js b/src/mixins/FormMixin.js
index 6cf8df867d5d880ce786ab5fa7dd50a2b53ba28b..e8553b4369f386afb528f5eb8b8ce9687091868d 100644
--- a/src/mixins/FormMixin.js
+++ b/src/mixins/FormMixin.js
@@ -106,9 +106,18 @@ export const FormMixin = {
     async getDictItemsByNumberAsync (dictCode) {
       return getDictItemsByNumberAsync(dictCode)
     },
-    // 判断脱敏参数是否被修改的参数, 未修改返回空值
-    diffForm (o1, o2) {
-      return o1 === o2 ? null : o1
+    /**
+     * 判断脱敏参数是否被修改的参数, 未修改返回空值
+     * rawForm 后端获取到的原始数据,
+     * editForm 修改后的数据,
+     * keys 字段名称
+     */
+    diffForm (rawForm, editForm, ...keys) {
+      const form = {}
+      for (const key of keys) {
+        form[key] = rawForm[key] === editForm[key] ? undefined : editForm[key]
+      }
+      return form
     }
   }
 }
diff --git a/src/views/modules/bpm/instance/InstanceList.vue b/src/views/modules/bpm/instance/InstanceList.vue
index efcfe235a9b7ef449e0a1435466f4918239003fa..7ad89f133e4a0a7cf957ba379a6553a6861deda1 100644
--- a/src/views/modules/bpm/instance/InstanceList.vue
+++ b/src/views/modules/bpm/instance/InstanceList.vue
@@ -56,7 +56,7 @@
 
diff --git a/src/views/modules/notice/template/TemplateRender.vue b/src/views/modules/notice/template/TemplateRender.vue
index 9ea8db8b33ca1c9f31eac29f5f39ef539ccfa64c..59226395dda56939194c9265eba12c601d7fa4c6 100644
--- a/src/views/modules/notice/template/TemplateRender.vue
+++ b/src/views/modules/notice/template/TemplateRender.vue
@@ -67,7 +67,6 @@ export default {
     init (id) {
       this.visible = true
       this.renderContent = ''
-      this.renderContent = ''
       this.template = {}
       this.confirmLoading = true
       get(id).then(({ data }) => {
@@ -83,7 +82,7 @@ export default {
       try {
         json = JSON.parse(this.paramMap || '{}')
       } catch (err) {
-        this.$message.error('测试数据格式不对')
+        this.$message.error('测试数据格式不不正确,请检查是否是json格式数据')
         return
       }
       render(this.template.code, json).then(({ data }) => {
diff --git a/src/views/modules/office/applyshow/TaskHistory.vue b/src/views/modules/office/applyshow/TaskHistory.vue
index de9dfbb8f0ba6e4bd39b7c0e20d514409a88e012..e1ebc92ce9f5c6db715e793079b625a998e0f3f2 100644
--- a/src/views/modules/office/applyshow/TaskHistory.vue
+++ b/src/views/modules/office/applyshow/TaskHistory.vue
@@ -17,7 +17,7 @@
       
       
         
-          
+          
             
               {{ instance.instanceName }}
             
diff --git a/src/views/modules/office/applyshow/TaskOperate.vue b/src/views/modules/office/applyshow/TaskOperate.vue
index d1cafd9164ea7227e66219e1d28740fc592fd6e8..24f2ce7964e6599d36b68692b6588fe5618522e5 100644
--- a/src/views/modules/office/applyshow/TaskOperate.vue
+++ b/src/views/modules/office/applyshow/TaskOperate.vue
@@ -3,7 +3,7 @@
     
       
         
-          
+          
             
               {{ currentNode.nodeName }}
             
@@ -24,7 +24,7 @@
             
           
           
-          
+          
             
               {{ nextOrBackNode.nodeName }}
             
diff --git a/src/views/modules/payment/channel/alipay/AliPayConfigEdit.vue b/src/views/modules/payment/channel/alipay/AliPayConfigEdit.vue
index 3cb19971b1dc170352d5f46eaac59f97e55ce0db..2df0dad70a2832ed78e3e52a8c7c3917adb9d35b 100644
--- a/src/views/modules/payment/channel/alipay/AliPayConfigEdit.vue
+++ b/src/views/modules/payment/channel/alipay/AliPayConfigEdit.vue
@@ -14,21 +14,23 @@
         :label-col="labelCol"
         :wrapper-col="wrapperCol"
       >
-        
+        
+          
+        
         
-          
+          
         
         
-          
+          
         
         
-          
+          
         
         
-          
+          
         
         
-          
+          
         
         
           
         
         
@@ -85,25 +88,24 @@
           
         
         
-          
+          
         
-        
-          
-          
+        
+          
         
-        
-          
+        
+          
           
         
-        
-          
+        
+          
           
         
         
-          
+          
         
         
-          
+          
         
 
       
@@ -166,16 +168,6 @@ export default {
         expireTime: [ { required: true, message: '请输入默认超时配置' } ],
         payWayList: [ { required: true, message: '请选择支持的支付类型' } ]
       }
-    },
-    diff () {
-      return {
-        appId: this.diffForm(this.form.appId, this.rawForm.appId),
-        alipayPublicKey: this.diffForm(this.form.alipayPublicKey, this.rawForm.alipayPublicKey),
-        appCert: this.diffForm(this.form.appCert, this.rawForm.appCert),
-        alipayCert: this.diffForm(this.form.alipayCert, this.rawForm.alipayCert),
-        alipayRootCert: this.diffForm(this.form.alipayRootCert, this.rawForm.alipayRootCert),
-        privateKey: this.diffForm(this.form.privateKey, this.rawForm.privateKey)
-      }
     }
   },
   methods: {
@@ -201,11 +193,7 @@ export default {
           if (this.type === 'add') {
             await add(this.form)
           } else if (this.type === 'edit') {
-            const form = {
-              ...this.form,
-              ...this.diff
-            }
-            await update(form)
+            await update({ ...this.form, ...this.diffForm(this.rawForm, this.form, 'appId', 'alipayPublicKey', 'appCert', 'alipayCert', 'alipayRootCert', 'privateKey') })
           }
           setTimeout(() => {
             this.confirmLoading = false
diff --git a/src/views/modules/payment/channel/wechat/WeChatConfigEdit.vue b/src/views/modules/payment/channel/wechat/WeChatConfigEdit.vue
index 68190023a6b39e68fef90f65185f9f5062ffb183..62f586a729012561916d02056e2b987d4dabd19a 100644
--- a/src/views/modules/payment/channel/wechat/WeChatConfigEdit.vue
+++ b/src/views/modules/payment/channel/wechat/WeChatConfigEdit.vue
@@ -22,7 +22,7 @@
           
         
         
-          
+          
         
         
           
@@ -107,10 +107,10 @@
           
         
         
-          
+          
         
         
-          
+          
         
         
           
@@ -156,17 +156,6 @@ export default {
         payWayList: [ { required: true, message: '请选择支持的支付类型' } ]
       }
     },
-    diff () {
-      return {
-        mchId: this.diffForm(this.form.mchId, this.rawForm.mchId),
-        appId: this.diffForm(this.form.appId, this.rawForm.appId),
-        appSecret: this.diffForm(this.form.appSecret, this.rawForm.appSecret),
-        apiKeyV2: this.diffForm(this.form.apiKeyV2, this.rawForm.apiKeyV2),
-        apiKeyV3: this.diffForm(this.form.apiKeyV3, this.rawForm.apiKeyV3),
-        keyPem: this.diffForm(this.form.keyPem, this.rawForm.keyPem),
-        certPem: this.diffForm(this.form.certPem, this.rawForm.certPem)
-      }
-    },
     // 上传地址
     uploadAction () {
       return process.env.VUE_APP_API_BASE_URL + '/file/upload'
@@ -230,12 +219,7 @@ export default {
           if (this.type === 'add') {
             await add(this.form)
           } else if (this.type === 'edit') {
-            const form = {
-              ...this.form,
-              ...this.diff
-            }
-            console.log(form)
-            await update(form)
+            await update({ ...this.form, ...this.diffForm(this.rawForm, this.form, 'mchId', 'appId', 'appSecret', 'apiKeyV2', 'apiKeyV3', 'keyPem', 'certPem') })
           }
           setTimeout(() => {
             this.confirmLoading = false
diff --git a/src/views/modules/payment/channel/wechat/WeChatConfigList.vue b/src/views/modules/payment/channel/wechat/WeChatConfigList.vue
index d7ee268bc1b37ea6d20ca8bb87874507d84d10d3..56df05b25b63d4964014d87cb86289164fc78185 100644
--- a/src/views/modules/payment/channel/wechat/WeChatConfigList.vue
+++ b/src/views/modules/payment/channel/wechat/WeChatConfigList.vue
@@ -21,7 +21,6 @@
       :loading="loading"
       :data="tableData"
     >
-
       
       
       
diff --git a/src/views/modules/payment/notify/PayNotifyRecordInfo.vue b/src/views/modules/payment/notify/PayNotifyRecordInfo.vue
index d2e786bd63c90affd061e3fa947ab609f8d2741b..2930bde39d4544fb3a9dcd4d79437d07e6c249f5 100644
--- a/src/views/modules/payment/notify/PayNotifyRecordInfo.vue
+++ b/src/views/modules/payment/notify/PayNotifyRecordInfo.vue
@@ -7,30 +7,33 @@
     :maskClosable="false"
     @cancel="handleCancel"
   >
-    
-      
-        {{ form.paymentId }}
-      
-      
-        {{ dictConvert('PayChannel',form.payChannel) }}
-      
-      
-        {{ form.notifyInfo }}
-      
-      
-        {{ form.status === 1 ? '成功':'失败' }}
-      
-      
-        {{ form.msg }}
-      
-      
-        {{ form.notifyTime }}
-      
+    
+      
+        
+          {{ form.paymentId }}
+        
+        
+          {{ dictConvert('PayChannel',form.payChannel) }}
+        
+        
+          
+        
+        
+          {{ form.status === 1 ? '成功':'失败' }}
+        
+        
+          {{ form.msg }}
+        
+        
+          {{ form.notifyTime }}
+        
 
-    
+      
+    
     
       取消
     
@@ -39,10 +42,12 @@
 
 
diff --git a/src/views/modules/payment/order/refund/RefundRecordInfo.vue b/src/views/modules/payment/order/refund/RefundRecordInfo.vue
index 4d18c39cd6ebf2d78de5260a2e68fe142ece0919..9c88259ad8409a2e2e774aceaa9206a67365e85d 100644
--- a/src/views/modules/payment/order/refund/RefundRecordInfo.vue
+++ b/src/views/modules/payment/order/refund/RefundRecordInfo.vue
@@ -1,53 +1,56 @@
 
   
-    
-      
-        {{ form.paymentId }}
-      
-      
-        {{ form.businessId }}
-      
-      
-        {{ form.refundRequestNo }}
-      
-      
-        {{ form.title }}
-      
-      
-        {{ form.amount }}
-      
-      
-        {{ form.refundableBalance }}
-      
-      
-        {{ form.refundTime }}
-      
-      
-        {{ form.refundStatus?'成功':'失败' }}
-      
-      
-        {{ form.clientIp }}
-      
-      
-        {{ dictConvert('PayChannel',o.payChannel) }}: {{ o.amount }}
-      
-      
-        {{ form.errorCode }}
-      
-      
-        {{ form.errorMsg }}
-      
-    
+    
+      
+        
+          {{ form.paymentId }}
+        
+        
+          {{ form.businessId }}
+        
+        
+          {{ form.refundRequestNo }}
+        
+        
+          {{ form.title }}
+        
+        
+          {{ form.amount }}
+        
+        
+          {{ form.refundableBalance }}
+        
+        
+          {{ form.refundTime }}
+        
+        
+          {{ form.refundStatus?'成功':'失败' }}
+        
+        
+          {{ form.clientIp }}
+        
+        
+          {{ dictConvert('PayChannel',o.payChannel) }}: {{ o.amount }}
+        
+        
+          {{ form.errorCode }}
+        
+        
+          {{ form.errorMsg }}
+        
+      
+    
     
       取消
     
@@ -55,40 +58,40 @@
 
 
 
 
 
diff --git a/src/views/modules/payment/wallet/list/WalletInfo.vue b/src/views/modules/payment/wallet/list/WalletInfo.vue
index d1940f316122885f6636f6341d06b885f9c4bd55..90a675ec637a0ac260c02be43efaf23fd9c3e685 100644
--- a/src/views/modules/payment/wallet/list/WalletInfo.vue
+++ b/src/views/modules/payment/wallet/list/WalletInfo.vue
@@ -8,6 +8,7 @@
     @cancel="handleCancel"
   >
     
diff --git a/src/views/modules/payment/wallet/list/WalletList.vue b/src/views/modules/payment/wallet/list/WalletList.vue
index 86e9cab5fda42c8306d42f4e224fe797a39b9876..261aeda8af285cd8fc2c275c7cfaa681f377c8a6 100644
--- a/src/views/modules/payment/wallet/list/WalletList.vue
+++ b/src/views/modules/payment/wallet/list/WalletList.vue
@@ -69,16 +69,16 @@
       @page-change="handleTableChange"/>
     
     
-    
+