Parcourir la source

:arrow_up: Upgrading dependencies. avue 2.0 渠道管理、收银台

pigxcloud il y a 6 ans
Parent
commit
1e2ec8e07c

+ 3 - 2
package.json

@@ -9,6 +9,7 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "@xkeshi/vue-qrcode": "^1.0.0",
     "axios": "^0.18.0",
     "babel-polyfill": "^6.26.0",
     "classlist-polyfill": "^1.2.0",
@@ -21,13 +22,13 @@
     "script-loader": "^0.7.2",
     "sockjs-client": "^1.0.0",
     "stompjs": "^2.3.3",
-    "vue": "^2.5.16",
+    "vue": "^2.6.10",
     "vue-axios": "^2.1.2",
     "vue-clipboard2": "^0.3.0",
     "vue-cron": "^1.0.9",
     "vue-echarts": "^4.0.1",
     "vue-json-editor": "^1.2.3",
-    "vue-json-tree-view": "^2.1.4",
+    "vue-json-tree-view": "^2.1.5",
     "vue-router": "^3.0.2",
     "vuex": "^3.0.1"
   },

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
public/cdn/avue/index.css


Fichier diff supprimé car celui-ci est trop grand
+ 23079 - 1
public/cdn/avue/index.js


+ 1 - 1
public/cdn/iconfont/1.0.0/index.css

@@ -7,7 +7,7 @@
 	-webkit-font-smoothing: antialiased;
 	-moz-osx-font-smoothing: grayscale;
 }
-.avue-crud-icon-select__item i {
+.avue-icon-select__item i {
   font-family: "iconfont" !important;
   /* 以下内容参照第三方图标库本身的规则 */
   font-size: 24px !important;

+ 56 - 0
src/api/pay/paychannel.js

@@ -0,0 +1,56 @@
+/*
+ *    Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+import request from '@/router/axios'
+
+export function fetchList(query) {
+  return request({
+    url: '/pay/paychannel/page',
+    method: 'get',
+    params: query
+  })
+}
+
+export function addObj(obj) {
+  return request({
+    url: '/pay/paychannel',
+    method: 'post',
+    data: obj
+  })
+}
+
+export function getObj(id) {
+  return request({
+    url: '/pay/paychannel/' + id,
+    method: 'get'
+  })
+}
+
+export function delObj(id) {
+  return request({
+    url: '/pay/paychannel/' + id,
+    method: 'delete'
+  })
+}
+
+export function putObj(obj) {
+  return request({
+    url: '/pay/paychannel',
+    method: 'put',
+    data: obj
+  })
+}

+ 1 - 1
src/config/env.js

@@ -3,7 +3,7 @@
 const env = process.env
 let baseUrl = ''
 // 图表库为avue和pig2套地址
-let iconfontVersion = ['567566_qo5lxgtishg', '667895_q0o1zivh0e']
+let iconfontVersion = ['567566_qo5lxgtishg', '667895_t6gqnmup16']
 let iconfontUrl = `//at.alicdn.com/t/font_$key.css`
 let codeUrl = `${window.location.origin}/code`
 let actUrl = `${window.location.origin}/act/modeler.html?modelId=`

+ 5 - 5
src/const/crud/activiti/activiti.js

@@ -33,7 +33,7 @@ export const tableOption = {
     label: '模型ID',
     prop: 'id',
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }, {
     fixed: true,
     label: '模型标识',
@@ -52,12 +52,12 @@ export const tableOption = {
     prop: 'desc',
     hide: true,
     editDisabled: false,
-    addVisdiplay: true
+    addDisplay: true
   }, {
     label: '版本号',
     prop: 'version',
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }, {
     width: 150,
     label: '创建时间',
@@ -66,7 +66,7 @@ export const tableOption = {
     format: 'yyyy-MM-dd HH:mm',
     valueFormat: 'timestamp',
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }, {
     width: 150,
     label: '最后更新时间',
@@ -75,6 +75,6 @@ export const tableOption = {
     format: 'yyyy-MM-dd HH:mm',
     valueFormat: 'timestamp',
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }]
 }

+ 4 - 4
src/const/crud/activiti/leave-bill.js

@@ -31,13 +31,13 @@ export const tableOption = {
       label: 'ID',
       prop: 'leaveId',
       editDisabled: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '申请人',
       prop: 'username',
       editDisabled: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '天数',
@@ -59,7 +59,7 @@ export const tableOption = {
       overHidden: true,
       format: 'yyyy-MM-dd HH:mm',
       editDisabled: true,
-      addVisdiplay: false,
+      addDisplay: false,
       hide: true
     },
     {
@@ -68,7 +68,7 @@ export const tableOption = {
       type: 'select',
       dicUrl: '/admin/dict/type/leave_status',
       search: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '备注',

+ 2 - 2
src/const/crud/activiti/process.js

@@ -48,7 +48,7 @@ export const tableOption = {
     label: '版本号',
     prop: 'revision',
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }, {
     label: '部署时间',
     prop: 'deploymentTime',
@@ -56,6 +56,6 @@ export const tableOption = {
     format: 'yyyy-MM-dd HH:mm',
     valueFormat: 'timestamp',
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }]
 }

+ 2 - 2
src/const/crud/activiti/task.js

@@ -30,13 +30,13 @@ export const tableOption = {
       label: 'ID',
       prop: 'taskId',
       editDisabled: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '任务名称',
       prop: 'taskName',
       editDisabled: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '提交时间',

+ 3 - 3
src/const/crud/admin/dict.js

@@ -46,8 +46,8 @@ export const tableOption = {
     prop: 'system',
     type: 'select',
     dicUrl: '/admin/dict/type/dict_type',
-    addVisdiplay: false,
-    editVisdiplay: false,
+    addDisplay: false,
+    editDisplay: false,
     search: true
   }, {
     label: '备注信息',
@@ -57,7 +57,7 @@ export const tableOption = {
     label: '创建时间',
     prop: 'createTime',
     type: 'datetime',
-    addVisdiplay: false,
+    addDisplay: false,
     editDisabled: true,
     format: 'yyyy-MM-dd HH:mm',
     valueFormat: 'yyyy-MM-dd HH:mm:ss'

+ 3 - 3
src/const/crud/admin/role.js

@@ -91,7 +91,7 @@ export const tableOption = {
   }, {
     label:'',
     prop: 'dsScope',
-    formsolt: true,
+    formslot: true,
     showClomnu:false,
     hide: true
   }, {
@@ -100,8 +100,8 @@ export const tableOption = {
     type: 'datetime',
     format: 'yyyy-MM-dd HH:mm',
     valueFormat: 'yyyy-MM-dd HH:mm:ss',
-    editVisdiplay: false,
-    addVisdiplay: false,
+    editDisplay: false,
+    addDisplay: false,
     span: 24
   }]
 }

+ 2 - 2
src/const/crud/admin/sys-public-param.js

@@ -69,8 +69,8 @@ export const tableOption = {
       prop: 'system',
       type: 'select',
       dicUrl: '/admin/dict/type/dict_type',
-      addVisdiplay: false,
-      editVisdiplay: false,
+      addDisplay: false,
+      editDisplay: false,
       search: true
     },
     {

+ 2 - 2
src/const/crud/admin/sys-social-details.js

@@ -27,7 +27,7 @@ export const tableOption = {
     label: 'ID',
     prop: 'id',
     hide: true,
-    addVisdiplay: false,
+    addDisplay: false,
     editDisabled: true
   },
   {
@@ -82,7 +82,7 @@ export const tableOption = {
     label: '创建时间',
     prop: 'createTime',
     align: 'center',
-    addVisdiplay: false,
+    addDisplay: false,
     editDisabled: true
   }
   ]

+ 1 - 1
src/const/crud/admin/tenant.js

@@ -28,7 +28,7 @@ export const tableOption = {
       prop: 'id',
       hide: true,
       editDisabled: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '租户名称',

+ 8 - 8
src/const/crud/admin/user.js

@@ -44,13 +44,13 @@ export const tableOption = {
     span: 24,
     hide: true,
     editDisabled: true,
-    addVisdiplay: false
+    addDisplay: false
   }, {
     fixed: true,
     label: '用户名',
     prop: 'username',
     editDisabled: true,
-    solt: true,
+    slot: true,
     search: true,
     span: 24,
     rules: [{
@@ -81,8 +81,8 @@ export const tableOption = {
   }, {
     label: '所属部门',
     prop: 'deptId',
-    formsolt: true,
-    solt: true,
+    formslot: true,
+    slot: true,
     span: 24,
     hide: true,
     rules: [{
@@ -105,8 +105,8 @@ export const tableOption = {
   }, {
     label: '角色',
     prop: 'role',
-    formsolt: true,
-    solt: true,
+    formslot: true,
+    slot: true,
     overHidden: true,
     span: 24,
     rules: [{
@@ -118,7 +118,7 @@ export const tableOption = {
     label: '状态',
     prop: 'lockFlag',
     type: 'select',
-    solt: true,
+    slot: true,
     span: 24,
     rules: [{
       required: true,
@@ -140,7 +140,7 @@ export const tableOption = {
     format: 'yyyy-MM-dd HH:mm',
     valueFormat: 'yyyy-MM-dd HH:mm:ss',
     editDisabled: true,
-    addVisdiplay: false,
+    addDisplay: false,
     span: 24
   }]
 }

+ 18 - 18
src/const/crud/daemon/sys-job.js

@@ -21,8 +21,8 @@ export const tableOption = {
         label: 'jobId',
         prop: 'jobId',
         hide: true,
-        addVisdiplay: false,
-        editVisdiplay: false,
+        addDisplay: false,
+        editDisplay: false,
         rules:
           [{
             required: true,
@@ -59,7 +59,7 @@ export const tableOption = {
         prop: 'jobStatus',
         type: 'select',
         dicUrl: '/admin/dict/type/job_status',
-        addVisdiplay: false,
+        addDisplay: false,
         search: true,
         slot: true
       },
@@ -68,7 +68,7 @@ export const tableOption = {
         prop: 'jobExecuteStatus',
         type: 'select',
         dicUrl: '/admin/dict/type/job_execute_status',
-        addVisdiplay: false,
+        addDisplay: false,
         search: true,
         slot: true
       },
@@ -76,8 +76,8 @@ export const tableOption = {
         label: '创建者',
         prop: 'createBy',
         hide: true,
-        addVisdiplay: false,
-        editVisdiplay: false
+        addDisplay: false,
+        editDisplay: false
       },
       {
         label: '创建时间',
@@ -87,15 +87,15 @@ export const tableOption = {
         format: 'yyyy-MM-dd HH:mm:ss',
         valueFormat: 'yyyy-MM-dd HH:mm:ss',
         width: 120,
-        addVisdiplay: false,
-        editVisdiplay: false
+        addDisplay: false,
+        editDisplay: false
       },
       {
         label: '更新者',
         prop: 'updateBy',
         hide: true,
-        addVisdiplay: false,
-        editVisdiplay: false
+        addDisplay: false,
+        editDisplay: false
       },
       {
         label: '更新时间',
@@ -105,8 +105,8 @@ export const tableOption = {
         format: 'yyyy-MM-dd HH:mm:ss',
         valueFormat: 'yyyy-MM-dd HH:mm:ss',
         width: 160,
-        addVisdiplay: false,
-        editVisdiplay: false
+        addDisplay: false,
+        editDisplay: false
       },
       {
         label: '首次执行时间',
@@ -115,7 +115,7 @@ export const tableOption = {
         format: 'yyyy-MM-dd HH:mm:ss',
         valueFormat: 'yyyy-MM-dd HH:mm:ss',
         width: 160,
-        addVisdiplay: false,
+        addDisplay: false,
         editDisabled: true
       }, {
         label: '上次执行时间',
@@ -124,7 +124,7 @@ export const tableOption = {
         format: 'yyyy-MM-dd HH:mm:ss',
         valueFormat: 'yyyy-MM-dd HH:mm:ss',
         width: 160,
-        addVisdiplay: false,
+        addDisplay: false,
         editDisabled: true
       }, {
         label: '下次执行时间',
@@ -133,7 +133,7 @@ export const tableOption = {
         format: 'yyyy-MM-dd HH:mm:ss',
         valueFormat: 'yyyy-MM-dd HH:mm:ss',
         width: 160,
-        addVisdiplay: false,
+        addDisplay: false,
         editDisabled: true
       },
       {
@@ -187,7 +187,7 @@ export const tableOption = {
         label: 'cron表达式',
         prop:'cronExpression',
         width: 100,
-        formsolt: true,
+        formslot: true,
         rules:
           [{
             required: true,
@@ -213,8 +213,8 @@ export const tableOption = {
         label: '租户',
         prop: 'tenantId',
         hide: true,
-        addVisdiplay: false,
-        editVisdiplay: false
+        addDisplay: false,
+        editDisplay: false
       },
       {
         label: '备注信息',

+ 6 - 6
src/const/crud/gen/gen.js

@@ -90,8 +90,8 @@ export const tableDsOption = {
       label: '主键',
       prop: 'id',
       hide: true,
-      addVisdiplay: false,
-      editVisdiplay: false
+      addDisplay: false,
+      editDisplay: false
     },
     {
       label: '名称',
@@ -113,16 +113,16 @@ export const tableDsOption = {
     {
       label: '创建时间',
       prop: 'createDate',
-      addVisdiplay: false,
-      editVisdiplay: false,
+      addDisplay: false,
+      editDisplay: false,
       overHidden: true
     },
     {
       label: '更新时间',
       prop: 'updateDate',
       overHidden: true,
-      addVisdiplay: false,
-      editVisdiplay: false
+      addDisplay: false,
+      editDisplay: false
     }
   ]
 }

+ 3 - 3
src/const/crud/mp/wxaccount.js

@@ -28,7 +28,7 @@ export const tableOption = {
       prop: 'id',
       hide: true,
       editDisabled: true,
-      addVisdiplay: false
+      addDisplay: false
     },
     {
       label: '名称',
@@ -107,8 +107,8 @@ export const tableOption = {
       type: 'upload',
       imgWidth: 60,
       imgFullscreen: true,
-      editVisdiplay: false,
-      addVisdiplay: false,
+      editDisplay: false,
+      addDisplay: false,
       listType: 'picture-img'
     }
   ]

+ 2 - 2
src/const/crud/mp/wxaccountfans.js

@@ -91,8 +91,8 @@ export const tableOption = {
       type: 'upload',
       imgWidth: 60,
       imgFullscreen: true,
-      editVisdiplay: false,
-      addVisdiplay: false,
+      editDisplay: false,
+      addDisplay: false,
       listType: 'picture-img'
     }
   ]

+ 4 - 4
src/const/crud/mp/wxfansmsg.js

@@ -69,8 +69,8 @@ export const tableOption = {
       type: 'upload',
       imgWidth: 60,
       imgFullscreen: true,
-      editVisdiplay: false,
-      addVisdiplay: false,
+      editDisplay: false,
+      addDisplay: false,
       listType: 'picture-img'
     }
   ]
@@ -91,7 +91,7 @@ export const tableResOption = {
     {
       label: '回复人',
       prop: 'userName',
-      addVisdiplay: false,
+      addDisplay: false,
     },
     {
       label: '回复内容',
@@ -103,7 +103,7 @@ export const tableResOption = {
     {
       label: '时间',
       prop: 'createTime',
-      addVisdiplay: false,
+      addDisplay: false,
     }
   ]
 }

+ 102 - 0
src/const/crud/pay/paychannel.js

@@ -0,0 +1,102 @@
+/*
+ *    Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+export const tableOption = {
+  border: true,
+  index: true,
+  indexLabel: '序号',
+  stripe: true,
+  menuAlign: 'center',
+  align: 'center',
+  viewBtn: true,
+  column: [
+    {
+      label: '主键',
+      prop: 'id',
+      hide: true,
+      editDisabled: true,
+      addDisplay: false
+    },
+    {
+      label: '内部商户号',
+      prop: 'mchId',
+      editDisabled: false,
+      addDisplay: false
+    },
+    {
+      label: '支付类型',
+      prop: 'channelId',
+      type: 'select',
+      dicUrl: '/admin/dict/type/channel_id',
+      search: true,
+      rules: [{
+        required: true,
+        message: '请选择支付类型',
+        trigger: 'blur'
+      }]
+    },
+    {
+      label: '渠道名称',
+      prop: 'channelName',
+      rules: [{
+        required: true,
+        message: '请输入渠道名称',
+        trigger: 'blur'
+      }]
+    },
+    {
+      label: '商户号',
+      prop: 'channelMchId',
+      placeholder: '渠道商户号',
+      rules: [{
+        required: true,
+        message: '请输入商户编号',
+        trigger: 'blur'
+      }]
+    },
+    {
+      label: '渠道状态',
+      prop: 'state',
+      type: 'select',
+      dicUrl: '/admin/dict/type/channel_status',
+      search: true
+    },
+    {
+      label: '备注',
+      prop: 'remark'
+    },
+    {
+      label: '配置参数',
+      prop: 'param',
+      type: 'textarea',
+      placeholder: '扩展参数,json字符串',
+      minRows: 4,
+      row: true,
+      span: 24,
+      overHidden: true
+    },
+    {
+      label: '创建时间',
+      prop: 'createTime',
+      type: 'datetime',
+      format: 'yyyy-MM-dd HH:mm',
+      valueFormat: 'timestamp',
+      editDisabled: true,
+      addDisplay: false
+    }
+  ]
+}

+ 7 - 1
src/const/iconList.js

@@ -30,7 +30,13 @@ export default [
       "icon-xiaoxiguanli",
       "icon-zhexiantu",
       "icon-canshu",
-      "icon-erji-zuhushouye"
+      "icon-erji-zuhushouye",
+      "icon-pay6zhifu",
+      "icon-zhifuqudaoguanli",
+      "icon-dingdan",
+      "icon-tuikuan",
+      "icon-webicon14",
+      "icon-shouyintai"
     ]
   }
 ]

+ 1 - 1
src/const/logs/index.js

@@ -11,7 +11,7 @@ export default {
     prop: 'type',
     width: 80,
     align: 'center',
-    solt: true,
+    slot: true,
     dicData: [{
       label: 'bug',
       value: 'error'

+ 12 - 0
src/page/index/top/top-theme.vue

@@ -45,6 +45,18 @@
           {
             name: "炫彩",
             value: "theme-star"
+          },
+          {
+            name: "iview主题",
+            value: "theme-iview"
+          },
+          {
+            name: "d2主题",
+            value: "theme-d2"
+          },
+          {
+            name: "hey主题",
+            value: "theme-hey"
           }
         ]
       };

+ 33 - 2
src/page/login/index.vue

@@ -22,7 +22,7 @@
               @change="handleCommand"
               placeholder="点击请选择租户"
               size="mini">
-              <el-option  :key="tenant.id" :label="tenant.name" :value="tenant.id" v-for="tenant in tenantList"/>
+              <el-option :key="tenant.id" :label="tenant.name" :value="tenant.id" v-for="tenant in tenantList"/>
             </el-select>
           </h4>
           <userLogin v-if="activeName==='user'"></userLogin>
@@ -64,7 +64,7 @@
     },
     data() {
       return {
-        tenantList:[],
+        tenantList: [],
         time: "",
         active: "",
         activeName: "user",
@@ -98,6 +98,7 @@
       }
     },
     created() {
+      this.watermark()
       this.getTenantList()
       this.active = getStore({name: "tenantId"});
       this.getTime();
@@ -125,6 +126,36 @@
         }).then(response => {
           this.tenantList = response.data.data
         })
+      },
+      watermark() {
+        let text = ''
+        let canvas = document.createElement('canvas');
+        canvas.width = '500';
+        canvas.height = '200'
+        let ctx = canvas.getContext("2d");
+        ctx.clearRect(0, 0, 200, 200);  //绘制之前画布清除
+        ctx.font = "30px 黑体";
+        ctx.rotate(-20 * Math.PI / 180); //为了实现水印倾斜效果,旋转画布坐标系
+        ctx.fillStyle = "rgba(100,100,100,0.15)"; //画笔颜色
+        ctx.fillText(text, -20, 200); //书写的内容及位置
+        ctx.rotate('20*Math.PI/180');  //坐标系还原,如果后续没有其他操作,这一步可以省略
+        // 将canvas的内容转换为base64编码
+        let data = canvas.toDataURL('image/png', 1);  //1表示质量(无损压缩)
+
+        window.onload = () => {
+          let background = "url(" + data + ") repeat";
+          var watermark = document.createElement('div');
+          watermark.style.width = '100%';
+          watermark.style.height = '100%';
+          watermark.style.position = 'fixed'
+          watermark.style.left = '0'
+          watermark.style.top = '0'
+          watermark.style.pointerEvents = 'none'
+          watermark.style.background = background
+          watermark.style.zIndex = '9999'
+          document.body.append(watermark);
+        }
+
       }
     }
   };

+ 2 - 2
src/page/wel.vue

@@ -4,9 +4,9 @@
       <div class="banner-text">
         <span>
           <a href="https://avue.top/#/pay" target="_blank">
-            <img src="https://img.shields.io/badge/Avue-原子弹-green.svg" alt="Build Status">
+            <img src="https://img.shields.io/badge/Avue-2.0.0-green.svg" alt="Build Status">
           </a>
-          <img src="https://img.shields.io/badge/Spring%20Boot-2.1.4.RELEASE-yellowgreen.svg" alt="Downloads">
+          <img src="https://img.shields.io/badge/Spring%20Boot-2.1.5.RELEASE-yellowgreen.svg" alt="Downloads">
           <img src="https://img.shields.io/badge/Spring%20Cloud-Greenwich.SR1-blue.svg" alt="Coverage Status">
         </span>
         <br/>

+ 57 - 0
src/styles/theme/d2.scss

@@ -0,0 +1,57 @@
+.theme-d2 {
+  .avue-logo{
+    color: #409EFF;
+    background-color: #ebf1f6;
+    box-shadow: none;
+    .avue-logo_title{
+      font-size: 22px;
+      font-weight: 400;
+    }
+  }
+  .avue-top{
+    background-color: #ebf1f6;
+    box-shadow: none;
+  }
+  .avue-main{
+    padding: 0 5px;
+  }
+  .avue-tags{
+    margin-left: 6px;
+    padding: 0;
+    border: 1px solid #e4e7ed;
+    border-radius: 3px;
+    background-color: #ebf1f6;
+    box-shadow: none;
+    .el-tabs__item{
+      border-left: 1px solid #cfd7e5 !important;
+      margin: 0 !important;
+      background-color: rgba(0,0,0,.03) !important;
+      color: #606266 !important;
+      font-size: 14px !important;
+      font-weight: 500 !important;
+      &:first-child{
+        border-left: none !important;
+      }
+    }
+    .is-active{
+      border-bottom:1px solid #fff !important;
+      background-color: #fff !important;
+      color: #409EFF !important;
+    }
+  }
+  .avue-sidebar{
+    background-color: #ebf1f6;
+    box-shadow: none;
+    .el-menu-item,.el-submenu__title{
+      i,span{
+          color:#606266
+      }
+      &:hover,&.is-active{
+        background: hsla(0,0%,100%,.5);
+          i,span{
+            color: #409EFF;
+          }
+      }
+    }
+  }
+}

+ 45 - 0
src/styles/theme/hey.scss

@@ -0,0 +1,45 @@
+.theme-hey{
+  .avue-sidebar{
+    background-color: #fff;
+    box-shadow: 0 1px 4px rgba(0,21,41,.08);
+    .el-menu-item,.el-submenu__title{
+      i,span{
+        color: rgba(49,58,70,.8);
+      }
+      &:hover{
+          background: transparent;
+          i,span{
+             color:#409eff;
+          }
+      }
+      &.is-active {
+          &:before {
+            left:auto;
+            right: 0 ;
+          }
+          background-color: #f0f6ff;
+          i,span{
+              color:#409eff;
+          }
+      }
+  }
+  }
+  .avue-logo{
+    background-color: #fff;
+    box-shadow: none;
+    .avue-logo_title{
+      color:#409eff;
+      font-size: 24px;
+    }
+  }
+  .avue-tags{
+    background: #f3f6f8;
+    .el-tabs__item{
+      color: rgba(0,0,0,.65) !important;
+    }
+    .is-active{
+      background-color: #fff;
+      border-bottom: none !important;
+    }
+  }
+}

+ 9 - 0
src/styles/theme/index.scss

@@ -3,3 +3,12 @@
 
 // 炫彩主题
 @import './star.scss';
+
+// d2主题
+@import './d2.scss';
+
+//iview
+@import './iview.scss';
+
+//heyui
+@import './hey.scss';

+ 79 - 0
src/styles/theme/iview.scss

@@ -0,0 +1,79 @@
+.theme-iview {
+  .avue-logo{
+    background: #001529;
+    box-shadow: none;
+    text-align: center;
+    .avue-logo_title{
+      div{
+        border-top-left-radius: 5px;
+        border-top-right-radius: 5px;
+        border-bottom-left-radius: 3px;
+        border-bottom-right-radius: 3px;
+        font-size: 22px;
+        color:#fff;
+        font-weight: 500;
+        margin:  10px auto;
+        width: 180px;
+        height: 45px;
+        background-color: #409EFF;
+      }
+    }
+  }
+  .avue-tags{
+    padding:  3px 5px 5px 0;
+    background: #f0f0f0;
+    box-shadow: inset 0 0 3px 2px hsla(0,0%,39.2%,.1);
+    .is-active{
+      &:before{
+        background: #409EFF !important;
+      }
+    }
+    .el-tabs__item{
+      padding: 0 15px !important;
+      position: relative;
+      height: 32px !important;
+      line-height:32px !important;
+      border: 1px solid #e8eaec!important;
+      color: #515a6e!important;
+      background: #fff!important;
+      border-radius: 3px;
+      &:before{
+        content:'';
+        display: inline-block;
+        width: 12px;
+        height: 12px;
+        margin-right:10px;
+        border-radius: 50%;
+        background: #e8eaec;
+      }
+    }
+  }
+
+  .avue-sidebar{
+    background: #001529;
+    .el-menu-item{
+      &.is-active {
+          background-color:  #000c17;
+          &:before {
+            display: none;
+          }
+          i,span{
+            color:#409EFF;
+        }
+      }
+    }
+     .el-submenu{
+        .el-menu-item{
+          &.is-active {
+            background-color:  #409EFF;
+            &:before {
+              display: none;
+            }
+            i,span{
+              color:#fff;
+          }
+        }
+      }
+    }
+  }
+}

+ 4 - 1
src/views/admin/dict/index.vue

@@ -68,7 +68,10 @@
     name: 'dict',
     data() {
       return {
-        form: {},
+        form: {
+          type: undefined,
+          dictId: undefined
+        },
         dictType: undefined,
         dictId: undefined,
         dialogFormVisible: false,

+ 4 - 2
src/views/admin/menu/index.vue

@@ -100,10 +100,10 @@
               </el-form-item>
               <el-form-item label="图标" v-if="form.type === '0'"
                             prop="icon">
-                <avue-crud-icon-select v-model="form.icon"
+                <avue-icon-select v-model="form.icon"
                                        :iconList="iconList"
                                        :disabled="formEdit"
-                                       placeholder="请输入图标"></avue-crud-icon-select>
+                                       placeholder="请输入图标"></avue-icon-select>
               </el-form-item>
               <el-form-item label="排序" v-if="form.type === '0'"
                             prop="sort">
@@ -319,6 +319,7 @@
           if (valid) {
             putObj(this.form).then(() => {
               this.getList();
+              this.formEdit = false
               this.$notify({
                 title: "成功",
                 message: "更新成功",
@@ -334,6 +335,7 @@
           if (valid) {
             addObj(this.form).then(() => {
               this.getList();
+              this.formEdit = false
               this.$notify({
                 title: "成功",
                 message: "创建成功",

+ 4 - 4
src/views/admin/user/index.vue

@@ -89,20 +89,20 @@
             </template>
             <template slot="deptIdForm"
                       slot-scope="scope">
-              <avue-crud-input v-model="form.deptId"
+              <avue-input v-model="form.deptId"
                                type="tree"
                                placeholder="请选择所属部门"
                                :node-click="getNodeData"
                                :dic="treeDeptData"
-                               :props="defaultProps"></avue-crud-input>
+                               :props="defaultProps"></avue-input>
             </template>
             <template slot="roleForm"
                       slot-scope="scope">
-              <avue-crud-select v-model="role"
+              <avue-select v-model="role"
                                 multiple
                                 placeholder="请选择角色"
                                 :dic="rolesOptions"
-                                :props="roleProps"></avue-crud-select>
+                                :props="roleProps"></avue-select>
             </template>
           </avue-crud>
         </el-col>

+ 60 - 0
src/views/pay/cd/index.vue

@@ -0,0 +1,60 @@
+<template>
+  <basic-container>
+    <el-row>
+      <el-col :span="24"><h2>扫码支付</h2></el-col>
+    </el-row>
+
+    <el-row>
+      <el-col :span="24">
+        <qrcode :value="msg" :options="options"></qrcode>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24"><h4>请使用支付宝(沙箱)或微信手机客户端扫一扫</h4></el-col>
+    </el-row>
+    <el-row>
+      1. 请勿大额支付,无法退还请知悉
+    </el-row>
+    <el-row>
+      2. 支付宝目前是沙箱,有正式账号的老铁欢迎提供测试 - -
+    </el-row>
+    <el-row>
+      <el-radio v-model="amount" label="1">0.01 元</el-radio>
+      <el-radio v-model="amount" label="2">0.02 元</el-radio>
+      <el-radio v-model="amount" label="3">0.03 元</el-radio>
+    </el-row>
+
+  </basic-container>
+</template>
+
+<style>
+</style>
+
+<script>
+  import VueQrcode from '@xkeshi/vue-qrcode';
+
+  export default {
+    components: {
+      'qrcode': VueQrcode
+    },
+    data() {
+      return {
+        amount: '1',
+        msg: 'http://pigx.huaxiadaowei.com/pay/goods/buy?amount=0.01',
+        options: {
+          size: 300
+        }
+      }
+    },
+    watch: {
+      amount: function (amount) {
+        this.msg = "http://pigx.huaxiadaowei.com/pay/goods/buy?amount=" + amount
+      }
+    },
+  }
+</script>
+<style>
+  .basic-container {
+    text-align: center;
+  }
+</style>

+ 166 - 0
src/views/pay/paychannel/index.vue

@@ -0,0 +1,166 @@
+<!--
+  -    Copyright (c) 2018-2025, lengleng All rights reserved.
+  -
+  - Redistribution and use in source and binary forms, with or without
+  - modification, are permitted provided that the following conditions are met:
+  -
+  - Redistributions of source code must retain the above copyright notice,
+  - this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+  - notice, this list of conditions and the following disclaimer in the
+  - documentation and/or other materials provided with the distribution.
+  - Neither the name of the pig4cloud.com developer nor the names of its
+  - contributors may be used to endorse or promote products derived from
+  - this software without specific prior written permission.
+  - Author: lengleng (wangiegie@gmail.com)
+  -->
+<template>
+    <div class="execution">
+        <basic-container>
+            <avue-crud ref="crud"
+                       :page="page"
+                       :data="tableData"
+                       :permission="permissionList"
+                       :table-loading="tableLoading"
+                       :option="tableOption"
+                       @on-load="getList"
+                       @search-change="searchChange"
+                       @refresh-change="refreshChange"
+                       @row-update="handleUpdate"
+                       @row-save="handleSave"
+                       @row-del="rowDel">
+            </avue-crud>
+        </basic-container>
+    </div>
+</template>
+
+<script>
+    import {
+        fetchList,
+        getObj,
+        addObj,
+        putObj,
+        delObj
+    } from '@/api/pay/paychannel'
+    import {
+        tableOption
+    } from '@/const/crud/pay/paychannel'
+    import {
+        mapGetters
+    } from 'vuex'
+
+    export default {
+        name: 'paychannel',
+        data() {
+            return {
+                tableData: [],
+                page: {
+                    total: 0, // 总页数
+                    currentPage: 1, // 当前页数
+                    pageSize: 20 // 每页显示多少条
+                },
+                tableLoading: false,
+                tableOption: tableOption
+            }
+        },
+        computed: {
+            ...mapGetters(['permissions']),
+            permissionList() {
+                return {
+                    addBtn: this.vaildData(this.permissions.pay_paychannel_add, false),
+                    delBtn: this.vaildData(this.permissions.pay_paychannel_del, false),
+                    editBtn: this.vaildData(this.permissions.pay_paychannel_edit, false)
+                };
+            }
+        },
+        methods: {
+            getList(page, params) {
+                this.tableLoading = true
+                fetchList(Object.assign({
+                    current: page.currentPage,
+                    size: page.pageSize
+                }, params)).then(response => {
+                    this.tableData = response.data.data.records
+                    this.page.total = response.data.data.total
+                    this.tableLoading = false
+                }).catch(() => {
+                    this.tableLoading=false
+                })
+            },
+            rowDel: function (row, index) {
+                var _this = this
+                this.$confirm('是否确认删除ID为' + row.id, '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(function () {
+                    return delObj(row.id)
+                }).then(data => {
+                    _this.tableData.splice(index, 1)
+                    _this.$message({
+                        showClose: true,
+                        message: '删除成功',
+                        type: 'success'
+                    })
+                    this.getList(this.page)
+                })
+            },
+            /**
+             * @title 数据更新
+             * @param row 为当前的数据
+             * @param index 为当前更新数据的行数
+             * @param done 为表单关闭函数
+             *
+             **/
+            handleUpdate: function (row, index, done,loading) {
+                putObj(row).then(data => {
+                    this.tableData.splice(index, 1, Object.assign({}, row))
+                    this.$message({
+                        showClose: true,
+                        message: '修改成功',
+                        type: 'success'
+                    })
+                    done()
+                    this.getList(this.page)
+                }).catch(() => {
+                    loading();
+                });
+            },
+            /**
+             * @title 数据添加
+             * @param row 为当前的数据
+             * @param done 为表单关闭函数
+             *
+             **/
+            handleSave: function (row, done,loading) {
+                addObj(row).then(data => {
+                    this.tableData.push(Object.assign({}, row))
+                    this.$message({
+                        showClose: true,
+                        message: '添加成功',
+                        type: 'success'
+                    })
+                    done()
+                    this.getList(this.page)
+                }).catch(() => {
+                    loading();
+                });
+            },
+            /**
+             * 搜索回调
+             */
+            searchChange(form) {
+                this.getList(this.page,  this.filterForm(form))
+            },
+            /**
+             * 刷新回调
+             */
+            refreshChange() {
+                this.getList(this.page)
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 7 - 0
vue.config.js

@@ -98,6 +98,13 @@ module.exports = {
           '^/tx': '/tx'
         }
       },
+      '/pay': {
+        target: url,
+        ws: true,
+        pathRewrite: {
+          '^/pay': '/pay'
+        }
+      },
       '/act': {
         target: url,
         ws: true,