Signed-off-by: skyselang <215817969@qq.com>
This commit is contained in:
skyselang 2023-09-09 12:37:40 +08:00
parent 10300de07b
commit 1807c72b4c
86 changed files with 2736 additions and 1291 deletions

View File

@ -1,7 +1,7 @@
# 前后端部署到同一域名的环境变量文件
# 重命名成 .env.production.local
# 复制后重命名成 .env.production.local
# 运行打包命令 cnpm run build:prod
# 把生成的 admin 文件夹复制到 yylAdmin/public
# 把生成的 admin 文件夹复制到 yylAdmin/public
# 浏览器访问yylAdmin项目 你的域名/admin 即可
# 正式环境

View File

@ -37,13 +37,13 @@ yylAdmin是一个基于ThinkPHP6和Vue2极简后台管理系统只有登录
### 环境要求
- PHP >= 7.2.5
- PHP >= 7.3.0
安装 fileinfo、redis 扩展
开启 putenv、proc_open 函数
- MySQL >= 5.6
- Redis
- node >= 14.0.0
- npm >= 6.9.0
- MySQL >= 5.5
- Redis >= 3.0
- node = 12、14、16
- npm >= 6.2.0
### 安装后端
@ -71,7 +71,7 @@ composer install
```
##### 修改配置
```bash
重命名.env.example成.env环境变量文件修改里面配置
复制.env.example后重命名成.env环境变量文件修改里面配置
```
##### 环境配置phpStudy
```bash
@ -91,6 +91,8 @@ location / {
}
```
###### Apache
- httpd.conf 配置文件中加载 mod_rewrite.so 模块
- AllowOverride None 将 None 改为 All
```bash
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
@ -98,7 +100,7 @@ location / {
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
```
> 不设置伪静态接口文档无法访问
@ -113,30 +115,27 @@ git clone https://gitee.com/skyselang/yylAdminWeb.git
```bash
cd yylAdminWeb
```
#### 使用 cnpm
```bash
npm install -g cnpm@6.2.0 --registry=https://registry.npmmirror.com
```
#### 安装依赖
```bash
cnpm install
npm install
```
#### 修改配置
```bash
在.env.xxx环境变量文件里面修改接口baseURL
VUE_APP_BASE_URL = 'http://localhost:9526'
复制.env.xxx后重命名成.env.xxx.local环境变量文件修改里面配置
```
#### 本地开发 启动项目
```bash
cnpm run dev
npm run dev
```
> 也可以使用 cnpm、pnpm、yarn
#### 开发完打包正式环境
```bash
cnpm run build:prod
npm run build:prod
```
#### 开发完打包测试环境
```bash
cnpm run build:stage
npm run build:stage
```
### 访问后台

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-142f1268"],{"4cea":function(t,a,e){"use strict";e("7da7")},7880:function(t,a,e){"use strict";e.r(a);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"app-container"},[a("el-row",[a("el-col",{attrs:{span:12,offset:6}},[a("el-result",{attrs:{icon:"error",title:"404","sub-title":"页面不存在"}})],1)],1),a("el-row",[a("el-col",{staticClass:"ya-center ya-top",attrs:{span:6,offset:6}},[a("el-button",{attrs:{icon:"el-icon-arrow-left"},on:{click:t.back}},[t._v("返回")])],1),a("el-col",{staticClass:"ya-center ya-top",attrs:{span:6}},[a("el-button",{attrs:{icon:"el-icon-s-home"},on:{click:t.dashboard}},[t._v("控制台")])],1)],1),a("el-row",[a("el-col",{staticClass:"ya-center ya-top",attrs:{span:12,offset:6}},[a("a",{attrs:{href:"https://gitee.com/skyselang/yylAdmin",target:"_blank",title:""}},[a("img",{attrs:{src:"https://gitee.com/skyselang/yylAdmin/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b",alt:"",srcset:""}})])])],1)],1)},o=[],r=(e("a717"),{name:"System404",data:function(){return{name:"404页面"}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/dashboard"}):this.$router.go(-1)},dashboard:function(){this.$router.push({path:"/dashboard"})}}}),n=r,c=(e("4cea"),e("e607")),l=Object(c["a"])(n,s,o,!1,null,"7b3ea164",null);a["default"]=l.exports},"7da7":function(t,a,e){}}]);

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0d7805"],{"76a1":function(e,n,t){"use strict";t.r(n);t("7869"),t("8b7f");var r,a,u={name:"SystemRedirect",data:function(){return{name:"跳转页面"}},created:function(){var e=this.$route,n=e.params,t=e.query,r=n.path;this.$router.replace({path:"/"+r,query:t}).catch((function(){}))},render:function(e){return e()}},c=u,o=t("e607"),i=Object(o["a"])(c,r,a,!1,null,null,null);n["default"]=i.exports}}]);
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0d7805"],{"76a1":function(e,n,t){"use strict";t.r(n);t("ac1f"),t("5319");var r,a,u={name:"SystemRedirect",data:function(){return{name:"跳转页面"}},created:function(){var e=this.$route,n=e.params,t=e.query,r=n.path;this.$router.replace({path:"/"+r,query:t}).catch((function(){}))},render:function(e){return e()}},c=u,o=t("2877"),i=Object(o["a"])(c,r,a,!1,null,null,null);n["default"]=i.exports}}]);

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-3850cfbb"],{a17d:function(t,s,e){"use strict";e.r(s);var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"app-container"},[s("el-row",[s("el-col",{attrs:{span:12,offset:6}},[s("el-result",{attrs:{icon:"warning",title:"401","sub-title":"没有权限访问"}})],1)],1),s("el-row",[s("el-col",{staticClass:"yyl-center yyl-top",attrs:{span:6,offset:6}},[s("el-button",{attrs:{icon:"el-icon-arrow-left"},on:{click:t.back}},[t._v("返回")])],1),s("el-col",{staticClass:"yyl-center yyl-top",attrs:{span:6}},[s("el-button",{attrs:{icon:"el-icon-s-home"},on:{click:t.dashboard}},[t._v("控制台")])],1)],1),s("el-row",[s("el-col",{staticClass:"yyl-center yyl-top",attrs:{span:12,offset:6}},[s("a",{attrs:{href:"https://gitee.com/skyselang/yylAdmin",target:"_blank",title:""}},[s("img",{attrs:{src:"https://gitee.com/skyselang/yylAdmin/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b",alt:"",srcset:""}})])])],1)],1)},o=[],c=(e("14d9"),{name:"System401",data:function(){return{name:"401页面"}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/dashboard"}):this.$router.go(-1)},dashboard:function(){this.$router.push({path:"/dashboard"})}}}),n=c,r=(e("f5cd"),e("2877")),l=Object(r["a"])(n,a,o,!1,null,"3f60b424",null);s["default"]=l.exports},cc54:function(t,s,e){},f5cd:function(t,s,e){"use strict";e("cc54")}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-50c5734b"],{"10ec":function(t,n,e){var o=e("31c1"),c=e("5653").values;o({target:"Object",stat:!0},{values:function(t){return c(t)}})},"2a80":function(t,n,e){"use strict";e.r(n),e.d(n,"excelExport",(function(){return c}));e("3a9d"),e("f209"),e("b0b8"),e("a717"),e("10ec"),e("6d69"),e("f6b8");var o=e("391f");function c(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"export-excel",c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"xlsx",r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];n.length||(n=Object.keys(t[0])),e||(e="export-excel"),c||(c="xlsx");var h=[],u=[];n.forEach((function(t){"string"===typeof t?(h.push(t),u.push(t)):(h.push(Object.values(t)[0]),u.push(Object.keys(t)[0]))}));var a=[];a.push(h),t.forEach((function(t){var n=[];u.forEach((function(e){n.push(t[e])})),a.push(n)}));var i=o["b"].book_new(),s=o["b"].aoa_to_sheet(a);if(r){for(var l=a.map((function(t){return t.map((function(t){return null==t?{wch:10}:t.toString().charCodeAt(0)>255?{wch:2*t.toString().length+2}:{wch:t.toString().length+3}}))})),f=l[0],p=1;p<l.length;p++)for(var v=0;v<l[p].length;v++)f[v]["wch"]<l[p][v]["wch"]&&(f[v]["wch"]=l[p][v]["wch"]);s["!cols"]=f}else{var g=[];h.forEach((function(t){var n={};null===t||void 0===t?n.wch=10:t.toString().charCodeAt(0)>255?n.wch=2*t.toString().length+2:n.wch=t.toString().length+2,g.push(n)})),s["!cols"]=g}o["b"].book_append_sheet(i,s,e),o["c"](i,e+"."+c)}},5653:function(t,n,e){var o=e("1966"),c=e("90ea"),r=e("6336"),h=e("7f47"),u=e("7a6f").f,a=c(u),i=c([].push),s=function(t){return function(n){var e,c=h(n),u=r(c),s=u.length,l=0,f=[];while(s>l)e=u[l++],o&&!a(c,e)||i(f,t?[e,c[e]]:c[e]);return f}};t.exports={entries:s(!0),values:s(!1)}}}]);

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-54912b74"],{"07ac":function(t,n,e){"use strict";var r=e("23e7"),c=e("6f53").values;r({target:"Object",stat:!0},{values:function(t){return c(t)}})},"2a80":function(t,n,e){"use strict";e.r(n),e.d(n,"excelExport",(function(){return c}));e("b64b"),e("d3b7"),e("159b"),e("14d9"),e("07ac"),e("d81d"),e("25f0");var r=e("25ca");function c(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"export-excel",c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"xlsx",o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];n.length||(n=Object.keys(t[0])),e||(e="export-excel"),c||(c="xlsx");var u=[],h=[];n.forEach((function(t){"string"===typeof t?(u.push(t),h.push(t)):(u.push(Object.values(t)[0]),h.push(Object.keys(t)[0]))}));var a=[];a.push(u),t.forEach((function(t){var n=[];h.forEach((function(e){n.push(t[e])})),a.push(n)}));var i=r["b"].book_new(),s=r["b"].aoa_to_sheet(a);if(o){for(var l=a.map((function(t){return t.map((function(t){return null==t?{wch:10}:t.toString().charCodeAt(0)>255?{wch:2*t.toString().length+2}:{wch:t.toString().length+3}}))})),f=l[0],p=1;p<l.length;p++)for(var v=0;v<l[p].length;v++)f[v]["wch"]<l[p][v]["wch"]&&(f[v]["wch"]=l[p][v]["wch"]);s["!cols"]=f}else{var g=[];u.forEach((function(t){var n={};null===t||void 0===t?n.wch=10:t.toString().charCodeAt(0)>255?n.wch=2*t.toString().length+2:n.wch=t.toString().length+2,g.push(n)})),s["!cols"]=g}r["b"].book_append_sheet(i,s,e),r["c"](i,e+"."+c)}},"6f53":function(t,n,e){"use strict";var r=e("83ab"),c=e("d039"),o=e("e330"),u=e("e163"),h=e("df75"),a=e("fc6a"),i=e("d1e7").f,s=o(i),l=o([].push),f=r&&c((function(){var t=Object.create(null);return t[2]=2,!s(t,2)})),p=function(t){return function(n){var e,c=a(n),o=h(c),i=f&&null===u(c),p=o.length,v=0,g=[];while(p>v)e=o[v++],r&&!(i?e in c:s(c,e))||l(g,t?[e,c[e]]:c[e]);return g}};t.exports={entries:p(!0),values:p(!1)}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-9f8c43b0"],{"4bd9":function(t,e,s){},"4cea":function(t,e,s){"use strict";s("4bd9")},7880:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"app-container"},[e("el-row",[e("el-col",{attrs:{span:12,offset:6}},[e("el-result",{attrs:{icon:"error",title:"404","sub-title":"页面不存在"}})],1)],1),e("el-row",[e("el-col",{staticClass:"ya-center ya-top",attrs:{span:6,offset:6}},[e("el-button",{attrs:{icon:"el-icon-arrow-left"},on:{click:t.back}},[t._v("返回")])],1),e("el-col",{staticClass:"ya-center ya-top",attrs:{span:6}},[e("el-button",{attrs:{icon:"el-icon-s-home"},on:{click:t.dashboard}},[t._v("控制台")])],1)],1),e("el-row",[e("el-col",{staticClass:"ya-center ya-top",attrs:{span:12,offset:6}},[e("a",{attrs:{href:"https://gitee.com/skyselang/yylAdmin",target:"_blank",title:""}},[e("img",{attrs:{src:"https://gitee.com/skyselang/yylAdmin/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b",alt:"",srcset:""}})])])],1)],1)},o=[],r=(s("14d9"),{name:"System404",data:function(){return{name:"404页面"}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/dashboard"}):this.$router.go(-1)},dashboard:function(){this.$router.push({path:"/dashboard"})}}}),n=r,c=(s("4cea"),s("2877")),l=Object(c["a"])(n,a,o,!1,null,"7b3ea164",null);e["default"]=l.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-e38de44e"],{a17d:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"app-container"},[e("el-row",[e("el-col",{attrs:{span:12,offset:6}},[e("el-result",{attrs:{icon:"warning",title:"401","sub-title":"没有权限访问"}})],1)],1),e("el-row",[e("el-col",{staticClass:"yyl-center yyl-top",attrs:{span:6,offset:6}},[e("el-button",{attrs:{icon:"el-icon-arrow-left"},on:{click:t.back}},[t._v("返回")])],1),e("el-col",{staticClass:"yyl-center yyl-top",attrs:{span:6}},[e("el-button",{attrs:{icon:"el-icon-s-home"},on:{click:t.dashboard}},[t._v("控制台")])],1)],1),e("el-row",[e("el-col",{staticClass:"yyl-center yyl-top",attrs:{span:12,offset:6}},[e("a",{attrs:{href:"https://gitee.com/skyselang/yylAdmin",target:"_blank",title:""}},[e("img",{attrs:{src:"https://gitee.com/skyselang/yylAdmin/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b",alt:"",srcset:""}})])])],1)],1)},o=[],n=(s("a717"),{name:"System401",data:function(){return{name:"401页面"}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/dashboard"}):this.$router.go(-1)},dashboard:function(){this.$router.push({path:"/dashboard"})}}}),r=n,c=(s("f5cd"),s("e607")),l=Object(c["a"])(r,a,o,!1,null,"3f60b424",null);e["default"]=l.exports},f43b:function(t,e,s){},f5cd:function(t,e,s){"use strict";s("f43b")}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{
"name": "yyladminweb",
"version": "2.7.0",
"version": "3.0.0",
"description": "Minimalist background management system based on ThinkPHP6 and Vue2",
"author": "https://github.com/skyselang/",
"scripts": {
@ -12,29 +12,26 @@
"dependencies": {
"axios": "0.27.2",
"clipboard": "2.0.11",
"core-js": "^3.23.5",
"core-js": "^3.30.2",
"crypto-js": "^4.1.1",
"e-icon-picker": "^1.1.7",
"echarts": "5.4.1",
"echarts": "5.4.2",
"element-ui": "2.15.12",
"file-saver": "^2.0.5",
"fuse.js": "3.6.1",
"js-cookie": "3.0.1",
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"path-to-regexp": "6.2.1",
"qrcode.vue": "1.7.0",
"screenfull": "5.2.0",
"script-loader": "^0.7.2",
"vue": "2.7.13",
"vue-router": "3.5.4",
"vue": "2.7.14",
"vue-router": "3.6.5",
"vuex": "3.6.2",
"wangeditor": "4.7.15",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.5.18",
"@vue/cli-service": "4.5.18",
"@vue/cli-plugin-babel": "4.5.19",
"@vue/cli-service": "4.5.19",
"autoprefixer": "9.8.8",
"babel-eslint": "10.1.0",
"eslint": "7.32.0",
@ -45,7 +42,7 @@
"less": "4.1.2",
"less-loader": "7.3.0",
"lint-staged": "10.5.4",
"node-sass": "5.0.0",
"node-sass": "6.0.1",
"sass": "1.32.13",
"sass-loader": "10.2.1",
"script-ext-html-webpack-plugin": "2.1.5",

View File

@ -122,3 +122,14 @@ export function disable(data) {
data
})
}
/**
* 内容发布时间
* @param {array} data 请求数据
*/
export function release(data) {
return request({
url: url + 'release',
method: 'post',
data
})
}

View File

@ -1,6 +1,28 @@
import request from '@/utils/request'
// 会员设置
const url = '/admin/member.Setting/'
/**
* 会员设置信息
* @param {array} params 请求参数
*/
export function memberInfo(params) {
return request({
url: url + 'memberInfo',
method: 'get',
params: params
})
}
/**
* 会员设置修改
* @param {array} data 请求数据
*/
export function memberEdit(data) {
return request({
url: url + 'memberEdit',
method: 'post',
data
})
}
/**
* Token设置信息
* @param {array} params 请求参数
@ -111,6 +133,28 @@ export function logregEdit(data) {
data
})
}
/**
* 第三方账号设置信息
* @param {array} params 请求参数
*/
export function thirdInfo(params) {
return request({
url: url + 'thirdInfo',
method: 'get',
params: params
})
}
/**
* 第三方账号设置修改
* @param {array} data 请求数据
*/
export function thirdEdit(data) {
return request({
url: url + 'thirdEdit',
method: 'post',
data
})
}
/**
* 自定义设置信息
* @param {array} params 请求参数

69
src/api/member/third.js Normal file
View File

@ -0,0 +1,69 @@
import request from '@/utils/request'
// 会员第三方账号
const url = '/admin/member.Third/'
/**
* 会员第三方账号列表
* @param {array} params 请求参数
*/
export function list(params) {
return request({
url: url + 'list',
method: 'get',
params: params
})
}
/**
* 会员第三方账号信息
* @param {array} params 请求参数
*/
export function info(params) {
return request({
url: url + 'info',
method: 'get',
params: params
})
}
/**
* 会员第三方账号添加
* @param {array} data 请求数据
*/
export function add(data) {
return request({
url: url + 'add',
method: 'post',
data
})
}
/**
* 会员第三方账号修改
* @param {array} data 请求数据
*/
export function edit(data) {
return request({
url: url + 'edit',
method: 'post',
data
})
}
/**
* 会员第三方账号删除
* @param {array} data 请求数据
*/
export function dele(data) {
return request({
url: url + 'dele',
method: 'post',
data
})
}
/**
* 会员第三方账号是否禁用
* @param {array} data 请求数据
*/
export function disable(data) {
return request({
url: url + 'disable',
method: 'post',
data
})
}

80
src/api/setting/link.js Normal file
View File

@ -0,0 +1,80 @@
import request from '@/utils/request'
// 友链管理
const url = '/admin/setting.Link/'
/**
* 友链列表
* @param {array} params 请求参数
*/
export function list(params) {
return request({
url: url + 'list',
method: 'get',
params: params
})
}
/**
* 友链信息
* @param {array} params 请求参数
*/
export function info(params) {
return request({
url: url + 'info',
method: 'get',
params: params
})
}
/**
* 友链添加
* @param {array} data 请求数据
*/
export function add(data) {
return request({
url: url + 'add',
method: 'post',
data
})
}
/**
* 友链修改
* @param {array} data 请求数据
*/
export function edit(data) {
return request({
url: url + 'edit',
method: 'post',
data
})
}
/**
* 友链删除
* @param {array} data 请求数据
*/
export function dele(data) {
return request({
url: url + 'dele',
method: 'post',
data
})
}
/**
* 友链是否禁用
* @param {array} data 请求数据
*/
export function disable(data) {
return request({
url: url + 'disable',
method: 'post',
data
})
}
/**
* 友链修改有效期
* @param {array} data 请求数据
*/
export function expiration(data) {
return request({
url: url + 'expiration',
method: 'post',
data
})
}

View File

@ -1,47 +0,0 @@
import request from '@/utils/request'
// 微信设置
const url = '/admin/setting.Wechat/'
/**
* 公众号信息
* @param {array} params 请求参数
*/
export function offiInfo(params) {
return request({
url: url + 'offiInfo',
method: 'get',
params: params
})
}
/**
* 公众号修改
* @param {array} data 请求数据
*/
export function offiEdit(data) {
return request({
url: url + 'offiEdit',
method: 'post',
data
})
}
/**
* 小程序信息
* @param {array} params 请求参数
*/
export function miniInfo(params) {
return request({
url: url + 'miniInfo',
method: 'get',
params: params
})
}
/**
* 小程序修改
* @param {array} data 请求数据
*/
export function miniEdit(data) {
return request({
url: url + 'miniEdit',
method: 'post',
data
})
}

View File

@ -6,9 +6,11 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="搜索字段">
<el-option :value="idkey" label="ID" />
<el-option value="unique" label="标识" />
<el-option value="file_name" label="名称" />
<el-option value="file_ext" label="后缀" />
<el-option value="domain" label="域名" />
<el-option value="remark" label="备注" />
<el-option value="file_ext" label="后缀" />
<el-option value="file_path" label="路径" />
<el-option value="file_md5" label="MD5" />
<el-option value="file_hash" label="散列" />
@ -22,7 +24,7 @@
<el-option value="update_time" label="修改时间" />
<el-option v-if="recycle" value="delete_time" label="删除时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder="结束日期" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
<el-button v-if="checkPermission(['admin/file.File/recycle'])" style="float:right" :type="recycle?'primary':''" @click="showRecycle">回收站</el-button>
@ -48,6 +50,7 @@
<el-upload v-else name="file" class="ya-upload" :limit="uploadLimit" :file-list="uploadFilelist" :multiple="true" :show-file-list="false" :auto-upload="true" :action="uploadAction" :headers="uploadHeaders" :data="uploadData" :accept="uploadAccept" :before-upload="uploadBefore" :on-success="uploadSuccess" :on-error="uploadError" :on-change="uploadChange" :on-exceed="uploadExceed">
<el-button type="primary" title="上传文件" @click="uploadClear">上传</el-button>
</el-upload>
<!-- 排序 -->
<el-select v-model="query.sort_field" class="filter-item ya-search-field ya-margin-left" filterable clearable placeholder="排序字段" @change="sort">
<el-option :value="idkey" label="ID" />
<el-option value="file_name" label="名称" />
@ -55,6 +58,8 @@
<el-option value="file_hash" label="散列" />
<el-option value="file_ext" label="后缀" />
<el-option value="file_size" label="大小" />
<el-option value="is_disable" label="禁用" />
<el-option value="sort" label="排序" />
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
<el-option v-if="recycle" value="delete_time" label="删除时间" />
@ -63,6 +68,7 @@
<el-option value="asc" label="升序" />
<el-option value="desc" label="降序" />
</el-select>
<!-- 分组筛选 -->
<el-select v-model="query.group_id" class="filter-item ya-search-field ya-margin-left" filterable clearable placeholder="分组" @change="groupSelect">
<el-option v-for="(item, index) in groupData" :key="index" :value="item.group_id" :label="item.group_name" />
</el-select>
@ -71,6 +77,7 @@
<el-button type="text" icon="el-icon-edit" :title="'修改'+groupName" @click="groupEdit()" />
<el-button type="text" icon="el-icon-delete" :title="'删除'+groupName" @click="groupDele()" />
</el-button-group>
<!-- 标签筛选 -->
<el-select v-model="query.tag_ids" class="filter-item ya-margin-left" filterable clearable multiple collapse-tags placeholder="标签" @change="tagSelect">
<el-option v-for="(item, index) in tagData" :key="index" :value="item.tag_id" :label="item.tag_name" />
</el-select>
@ -98,7 +105,7 @@
</el-form-item>
<el-form-item v-else-if="selectType==='edittype'" label="文件类型" prop="file_type">
<el-select v-model="file_type">
<el-option v-for="(item, index) in filetype" :key="index" :value="index" :label="item" />
<el-option v-for="(item, index) in file_types" :key="index" :value="index" :label="item" />
</el-select>
</el-form-item>
<el-form-item v-else-if="selectType==='editdomain'" label="文件域名" prop="">
@ -129,7 +136,10 @@
<el-input v-model="groupModel.group_name" placeholder="请输入分组名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="group_desc">
<el-input v-model="groupModel.group_desc" clearable />
<el-input v-model="groupModel.group_desc" type="textarea" autosize clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="groupModel.remark" placeholder="" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="groupModel.sort" type="number" />
@ -147,7 +157,10 @@
<el-input v-model="tagModel.tag_name" placeholder="请输入标签名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="tag_desc">
<el-input v-model="tagModel.tag_desc" clearable />
<el-input v-model="tagModel.tag_desc" type="textarea" autosize clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="tagModel.remark" placeholder="" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="tagModel.sort" type="number" />
@ -161,7 +174,7 @@
<!-- 列表筛选 -->
<el-row :gutter="3">
<!-- 筛选 -->
<el-col :span="3" class="dialog-body" :style="{height:height+'px'}">
<el-col :span="2" class="dialog-body" :style="{height:height+'px'}">
<!-- 类型筛选 -->
<el-row>
<el-col>
@ -219,13 +232,13 @@
</el-col>
<!-- 卡片展示 -->
<div v-if="showMode=='card'">
<el-col v-if="count>0" :span="21" class="dialog-body" :style="{height:height+'px'}">
<el-col v-if="count>0" :span="22" class="dialog-body" :style="{height:height+'px'}">
<el-row v-loading="loading" :gutter="3" style="margin-top:6px">
<el-checkbox-group v-model="selection" @change="select">
<el-col v-for="(item, index) in data" :key="index" :span="4" style="margin-bottom:6px;text-align:center">
<el-card class="ya-file-card" :body-style="{minWidth:'16.5%', height:(height-height*0.1)/3+'px', minHeight:'126px', padding:'0 6px'}">
<div style="text-align:left">
<el-checkbox :key="item[idkey]" :label="item[idkey]">{{ item[idkey] }} ({{ item.file_size }}{{ item.file_ext }})</el-checkbox>
<el-checkbox :key="item[idkey]" :label="item[idkey]">{{ item[idkey] }} ({{ item.file_size }}, {{ item.file_ext }}</el-checkbox>
</div>
<div :style="{width:'100%', height:((height-height*0.1)/3)-((height-height*0.1)/3*0.5)+'px', minHeight:'62px'}">
<el-image v-if="item.file_type==='image'" style="height:100%" fit="contain" :src="item.file_url" :preview-src-list="fileImgPre" title="点击看大图" lazy />
@ -249,6 +262,7 @@
<div :style="{paddingTop:'5px', minHeight:'50px'}">
<span class="ya-file-name" :title="item.file_name+'.'+item.file_ext">{{ item.file_name }}.{{ item.file_ext }}</span>
<div class="bottom clearfix">
<el-button type="text" icon="el-icon-star-off" :title="'标识:'+item.unique+' (点击复制)'" @click="copy(item.unique, $event)" />
<el-button v-if="item.is_disable" type="text" icon="el-icon-warning" title="已禁用,点击修改" @click="selectOpen('disable',[item.file_id])" />
<el-button v-else type="text" icon="el-icon-warning-outline" title="已启用,点击修改" @click="selectOpen('disable',[item.file_id])" />
<el-button type="text" icon="el-icon-download" title="下载文件" @click="fileDownload(item, $event)" />
@ -261,16 +275,17 @@
</el-checkbox-group>
</el-row>
</el-col>
<el-col v-else :span="21">
<el-col v-else :span="22">
<el-empty :description="'暂无'+name" />
</el-col>
</div>
<!-- 表格展示 -->
<div v-else>
<el-col :span="21" style="padding:0">
<el-col :span="22" style="padding:0">
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select" @cell-dblclick="cellDbclick">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" min-width="80" sortable="custom" />
<el-table-column prop="unique" label="标识" min-width="80" show-overflow-tooltip />
<el-table-column prop="file_url" label="文件" min-width="90">
<template slot-scope="scope">
<div style="height:30px">
@ -296,19 +311,19 @@
</el-table-column>
<el-table-column prop="file_type_name" label="类型" min-width="55" />
<el-table-column prop="file_name" label="名称" min-width="120" sortable="custom" show-overflow-tooltip />
<el-table-column prop="file_ext" label="后缀" min-width="75" sortable="custom" />
<el-table-column prop="file_ext" label="后缀" min-width="75" sortable="custom" show-overflow-tooltip />
<el-table-column prop="file_size" label="大小" min-width="85" sortable="custom" show-overflow-tooltip />
<el-table-column prop="group_name" label="分组" min-width="120" show-overflow-tooltip />
<el-table-column prop="tag_names" label="标签" min-width="120" show-overflow-tooltip />
<el-table-column prop="group_name" label="分组" min-width="116" show-overflow-tooltip />
<el-table-column prop="tag_names" label="标签" min-width="116" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="73" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="73" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="152" sortable="custom" />
<el-table-column v-if="recycle" prop="delete_time" label="删除时间" min-width="152" sortable="custom" />
<el-table-column v-else prop="update_time" label="修改时间" min-width="152" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="152" sortable="custom" />
<el-table-column v-if="recycle" prop="delete_time" label="删除时间" width="152" sortable="custom" />
<el-table-column v-else prop="update_time" label="修改时间" width="152" sortable="custom" />
<el-table-column label="操作" width="160">
<template slot-scope="scope">
<el-button v-if="recycle" type="text" size="mini" @click="selectOpen('reco',[scope.row])">恢复</el-button>
@ -326,6 +341,9 @@
<!-- 修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" append-to-body :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable />
</el-form-item>
<el-form-item v-if="model.file_id" label="文件" prop="file">
<el-col :span="18">
<div style="height:200px">
@ -372,9 +390,6 @@
<el-option v-for="(item, index) in file_types" :key="index" :value="index" :label="item" />
</el-select>
</el-form-item>
<el-form-item label="文件排序" prop="sort">
<el-input v-model="model.sort" type="number" placeholder="250" clearable />
</el-form-item>
<el-form-item v-if="model.file_id" label="文件域名" prop="domain">
<el-input v-model="model.domain" placeholder="请输入域名" clearable>
<el-button slot="append" icon="el-icon-copy-document" title="复制" @click="copy(model.domain, $event)" />
@ -395,6 +410,12 @@
<el-option v-for="(item, index) in storages" :key="index" :value="index" :label="item" />
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" placeholder="250" clearable />
</el-form-item>
<el-form-item v-if="model.file_id" label="是否禁用" prop="is_disable">
<el-switch v-model="model.is_disable" :active-value="1" :inactive-value="0" disabled />
</el-form-item>
@ -476,7 +497,9 @@ export default {
is_disable: '',
search_field: 'file_name',
search_exp: 'like',
date_field: 'create_time'
date_field: 'create_time',
sort_field: 'file_id',
sort_value: ''
},
data: [],
count: 0,
@ -486,6 +509,7 @@ export default {
model: {
type: 'upl',
file_id: '',
unique: '',
group_id: '',
tag_ids: [],
storage: 'local',
@ -498,6 +522,7 @@ export default {
file_size: '',
file_ext: '',
file_url: '',
remark: '',
sort: 250,
is_front: 0,
is_disable: 0,
@ -540,6 +565,7 @@ export default {
group_id: '',
group_name: '',
group_desc: '',
remark: '',
sort: 250
},
groupRules: {
@ -554,6 +580,7 @@ export default {
tag_id: '',
tag_name: '',
tag_desc: '',
remark: '',
sort: 250
},
tagRules: {
@ -629,8 +656,8 @@ export default {
this.groupData = data.group
this.tagData = data.tag
this.exps = data.exps
this.loading = false
this.imagePreview(data.list)
this.loading = false
},
//
uploadBefore() {
@ -671,7 +698,7 @@ export default {
this.uploadNumber = this.uploadCount = 0
this.uploadFilelist = []
},
//
//
add() {
this.dialog = true
this.dialogTitle = this.name + '添加'

View File

@ -88,6 +88,8 @@
cursor: pointer;
background: #fff;
color: #fff;
appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;

View File

@ -7,10 +7,14 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="category_name" label="名称" />
<el-option value="category_unique" label="标识" />
<el-option value="category_name" label="名称" />
<el-option value="category_pid" label="上级" />
<el-option value="is_disable" label="禁用" />
<el-option value="title" label="标题" />
<el-option value="keywords" label="关键词" />
<el-option value="description" label="描述" />
<el-option value="remark" label="备注" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
<el-option v-for="exp in exps" :key="exp.exp" :value="exp.exp" :label="exp.name" />
@ -25,7 +29,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" @click="search()">查询</el-button>
<el-button class="filter-item" @click="refresh()">刷新</el-button>
</el-col>
@ -69,10 +73,10 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height+50" :row-key="idkey" default-expand-all @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column prop="category_name" label="名称" min-width="250" show-overflow-tooltip />
<el-table-column prop="cover_url" label="封面" min-width="60">
<el-table-column prop="image_url" label="图片" min-width="60">
<template slot-scope="scope">
<div style="height:30px">
<el-image v-if="scope.row.cover_url" style="height:30px" fit="contain" :src="scope.row.cover_url" :preview-src-list="[scope.row.cover_url]" title="点击看大图">
<el-image v-if="scope.row.image_url" style="height:30px" fit="contain" :src="scope.row.image_url" :preview-src-list="[scope.row.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
@ -88,8 +92,8 @@
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" />
<el-table-column prop="create_time" label="添加时间" min-width="155" />
<el-table-column prop="update_time" label="修改时间" min-width="155" />
<el-table-column prop="create_time" label="添加时间" width="155" />
<el-table-column prop="update_time" label="修改时间" width="155" />
<el-table-column label="操作" width="155">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="contentShow(scope.row)">内容</el-button>
@ -99,32 +103,37 @@
</template>
</el-table-column>
</el-table>
<el-row>
<el-descriptions title="" :column="12" :colon="false" size="medium">
<el-descriptions-item label=""> {{ count }} </el-descriptions-item>
</el-descriptions>
</el-row>
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false" destroy-on-close>
<el-form ref="ref" :rules="rules" :model="model" class="dialog-body" label-width="100px" :style="{height:height+'px'}">
<el-form-item label="标识" prop="category_unique">
<el-input v-model="model.category_unique" placeholder="请输入分类标识(唯一)" clearable />
</el-form-item>
<el-form-item label="上级" prop="category_pid">
<el-cascader v-model="model.category_pid" :options="trees" :props="props" style="width:100%" placeholder="一级分类" clearable filterable />
</el-form-item>
<el-form-item label="名称" prop="category_name">
<el-input v-model="model.category_name" placeholder="请输入分类名称" clearable />
</el-form-item>
<el-form-item label="封面" prop="cover_id">
<el-form-item label="图片" prop="image_id">
<el-col :span="12" style="height:100px">
<el-image v-if="model.cover_url" style="height:100px" fit="contain" :src="model.cover_url" :preview-src-list="[model.cover_url]" title="点击看大图">
<el-image v-if="model.image_url" style="height:100px" fit="contain" :src="model.image_url" :preview-src-list="[model.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('image', 'cover_id', '上传封面')">上传封面</el-button>
<el-button size="mini" @click="fileDelete(0, 'cover_id')">删除</el-button>
<el-button size="mini" @click="fileUpload('image', 'image_id', '上传图片')">上传图片</el-button>
<el-button size="mini" @click="fileDelete(0, 'image_id')">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="标识" prop="category_unique">
<el-input v-model="model.category_unique" placeholder="请输入分类标识(唯一)" clearable />
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="model.title" placeholder="title" clearable />
</el-form-item>
@ -132,18 +141,22 @@
<el-input v-model="model.keywords" placeholder="keywords" clearable />
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input v-model="model.description" type="textarea" placeholder="description" clearable />
<el-input v-model="model.description" type="textarea" autosize placeholder="description" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="remark" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" placeholder="250" clearable />
</el-form-item>
<el-form-item label="图片" prop="images">
<el-form-item label="图片列表" prop="images">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('image', 'images', '上传图片')">上传图片</el-button>
<span>图片小于 250 KBjpgpng格式</span>
</el-col>
<el-col :span="12">
<span><el-button size="mini" @click="fileDelete('all', 'images')">全部删除</el-button> 250 KBjpgpng</span>
<el-button size="mini" @click="fileDelete('all', 'images')">全部删除</el-button>
</el-col>
</el-row>
<el-row>
@ -204,10 +217,10 @@
<el-table ref="contentRef" v-loading="contentLoad" :data="contentData" :height="height-20" @sort-change="contentSort" @selection-change="contentSelect">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="contentPk" label="内容ID" min-width="80" sortable="custom" />
<el-table-column prop="cover_url" label="封面" min-width="60">
<el-table-column prop="image_url" label="图片" min-width="60">
<template slot-scope="scope">
<div style="height:30px">
<el-image v-if="scope.row.cover_url" style="height:30px" fit="contain" :src="scope.row.cover_url" :preview-src-list="[scope.row.cover_url]" title="点击看大图">
<el-image v-if="scope.row.image_url" style="height:30px" fit="contain" :src="scope.row.image_url" :preview-src-list="[scope.row.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
@ -269,22 +282,24 @@ export default {
loading: false,
idkey: 'category_id',
query: { search_field: 'category_name', search_exp: 'like', date_field: 'create_time' },
exps: [],
exps: [{ exp: 'like', name: '包含' }],
data: [],
count: '',
dialog: false,
dialogTitle: '',
model: {
category_id: '',
category_unique: '',
category_pid: 0,
category_name: '',
category_unique: '',
cover_id: 0,
cover_url: '',
image_id: 0,
image_url: '',
title: '',
keywords: '',
description: '',
images: [],
sort: 250
remark: '',
sort: 250,
images: []
},
rules: {
category_name: [{ required: true, message: '请输入分类名称', trigger: 'blur' }]
@ -330,6 +345,7 @@ export default {
this.data = res.data.list
this.trees = res.data.tree
this.exps = res.data.exps
this.count = res.data.count
this.isExpandAll = false
this.loading = false
}).catch(() => {
@ -554,10 +570,10 @@ export default {
const fileField = this.fileField
const fileLength = fileList.length
if (fileLength) {
if (fileField === 'cover_id') {
if (fileField === 'image_id') {
const i = fileLength - 1
this.model.cover_id = fileList[i]['file_id']
this.model.cover_url = fileList[i]['file_url']
this.model.image_id = fileList[i]['file_id']
this.model.image_url = fileList[i]['file_url']
} else {
for (let i = 0; i < fileLength; i++) {
if (fileField === 'images') {
@ -592,9 +608,9 @@ export default {
setTimeout(() => { window.open(file.file_url, '_blank') }, 500)
},
fileDelete(index, field = '') {
if (field === 'cover_id') {
this.model.cover_id = 0
this.model.cover_url = ''
if (field === 'image_id') {
this.model.image_id = 0
this.model.image_url = ''
} else if (field === 'images') {
if (index === 'all') {
this.model.images = []

View File

@ -7,14 +7,18 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="name" label="名称" />
<el-option value="unique" label="标识" />
<el-option value="name" label="名称" />
<el-option value="category_ids" label="分类" />
<el-option value="tag_ids" label="标签" />
<el-option value="is_top" label="置顶" />
<el-option value="is_hot" label="热门" />
<el-option value="is_rec" label="推荐" />
<el-option value="is_disable" label="禁用" />
<el-option value="title" label="标题" />
<el-option value="keywords" label="关键词" />
<el-option value="description" label="描述" />
<el-option value="remark" label="备注" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
<el-option v-for="exp in exps" :key="exp.exp" :value="exp.exp" :label="exp.name" />
@ -44,8 +48,9 @@
<el-select v-model="query.date_field" class="filter-item ya-date-field" placeholder="时间类型">
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
<el-option value="release_time" label="发布时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -53,6 +58,7 @@
<!-- 选中操作 -->
<el-row>
<el-col>
<el-button title="发布时间" @click="selectOpen('release')">发布时间</el-button>
<el-button title="修改分类" @click="selectOpen('editcate')">分类</el-button>
<el-button title="修改标签" @click="selectOpen('edittag')">标签</el-button>
<el-button title="是否置顶" @click="selectOpen('istop')">置顶</el-button>
@ -88,6 +94,9 @@
<el-form-item v-else-if="selectType === 'disable'" label="是否禁用" prop="">
<el-switch v-model="is_disable" :active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item v-else-if="selectType === 'release'" label="发布时间" prop="">
<el-date-picker v-model="release_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" />
</el-form-item>
<el-form-item v-else-if="selectType === 'dele'" label="" prop="">
<span style="color:red">确定要删除选中的{{ name }}</span>
</el-form-item>
@ -102,15 +111,16 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="cover_url" label="封面" min-width="60">
<el-table-column prop="unique" label="标识" min-width="80" show-overflow-tooltip />
<el-table-column prop="image_url" label="图片" min-width="60" show-overflow-tooltip>
<template slot-scope="scope">
<div style="height:30px">
<el-image
v-if="scope.row.cover_url"
v-if="scope.row.image_url"
style="height:30px"
fit="contain"
:src="scope.row.cover_url"
:preview-src-list="[scope.row.cover_url]"
:src="scope.row.image_url"
:preview-src-list="[scope.row.image_url]"
title="点击看大图"
lazy
scroll-container=".el-table__body-wrapper"
@ -123,7 +133,6 @@
</template>
</el-table-column>
<el-table-column prop="name" label="名称" min-width="200" show-overflow-tooltip />
<el-table-column prop="unique" label="标识" min-width="80" show-overflow-tooltip />
<el-table-column prop="category_names" label="分类" min-width="120" show-overflow-tooltip />
<el-table-column prop="tag_names" label="标签" min-width="120" show-overflow-tooltip />
<el-table-column prop="is_top" label="置顶" min-width="72" sortable="custom">
@ -146,10 +155,10 @@
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="hits" label="点击" min-width="72" sortable="custom" />
<el-table-column prop="sort" label="排序" min-width="72" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="hits" label="点击" min-width="72" show-overflow-tooltip sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column prop="release_time" label="发布时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" title="信息/修改" @click="edit(scope.row)">修改</el-button>
@ -162,26 +171,26 @@
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{ height: height + 'px' }">
<el-form-item label="封面" prop="cover_id">
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable />
</el-form-item>
<el-form-item label="图片" prop="image_id">
<el-col :span="12" style="height:100px">
<el-image v-if="model.cover_url" style="height:100px" fit="contain" :src="model.cover_url" :preview-src-list="[model.cover_url]" title="点击看大图">
<el-image v-if="model.image_url" style="height:100px" fit="contain" :src="model.image_url" :preview-src-list="[model.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('image', 'cover_id', '上传封面')">上传封面</el-button>
<el-button size="mini" @click="fileDelete(0, 'cover_id')">删除</el-button>
<el-button size="mini" @click="fileUpload('image', 'image_id', '上传图片')">上传图片</el-button>
<el-button size="mini" @click="fileDelete(0, 'image_id')">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="model.name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable />
</el-form-item>
<el-form-item label="分类" prop="category_ids">
<el-cascader v-model="model.category_ids" :options="categoryData" :props="categoryProps" class="ya-width-100p" clearable filterable />
</el-form-item>
@ -197,7 +206,10 @@
<el-input v-model="model.keywords" placeholder="keywords" clearable />
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input v-model="model.description" type="textarea" placeholder="description" clearable />
<el-input v-model="model.description" type="textarea" autosize placeholder="description" clearable />
</el-form-item>
<el-form-item label="来源" prop="source">
<el-input v-model="model.source" placeholder="source" clearable />
</el-form-item>
<el-form-item label="作者" prop="author">
<el-input v-model="model.author" placeholder="author" clearable />
@ -205,10 +217,30 @@
<el-form-item label="链接" prop="url">
<el-input v-model="model.url" placeholder="url" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="remark" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" placeholder="sort" clearable />
</el-form-item>
<el-form-item label="图片" prop="images">
<el-form-item label="初始点击" prop="hits_initial">
<el-col :span="6">
<el-input v-model="model.hits_initial" type="number" placeholder="初始点击量" clearable />
</el-col>
<el-col :span="3" class="ya-center">
真实点击
</el-col>
<el-col :span="6">
<el-input v-model="model.hits" type="number" placeholder="真实点击量" disabled />
</el-col>
<el-col :span="3" class="ya-center">
展示点击
</el-col>
<el-col :span="6">
<el-input :value="parseFloat(model.hits_initial) + parseFloat(model.hits)" type="number" placeholder="初始点击量" disabled />
</el-col>
</el-form-item>
<el-form-item label="图片列表" prop="images">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('image', 'images', '上传图片')">上传图片</el-button>
@ -230,7 +262,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="视频" prop="videos">
<el-form-item label="视频列表" prop="videos">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('video', 'videos', '上传视频')">上传视频</el-button>
@ -259,7 +291,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="音频" prop="audios">
<el-form-item label="音频列表" prop="audios">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('audio', 'audios', '上传音频')">上传音频</el-button>
@ -285,7 +317,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="文档" prop="words">
<el-form-item label="文档列表" prop="words">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('word', 'words', '上传文档')">上传文档</el-button>
@ -307,7 +339,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="其它" prop="others">
<el-form-item label="其它列表" prop="others">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('other', 'others', '上传其它')">上传其它</el-button>
@ -365,7 +397,7 @@ import FileManage from '@/components/FileManage'
import RichEditor from '@/components/RichEditor'
import clip from '@/utils/clipboard'
import { arrayColumn } from '@/utils/index'
import { list, info, add, edit, dele, editcate, edittag, istop, ishot, isrec, disable } from '@/api/content/content'
import { list, info, add, edit, dele, editcate, edittag, istop, ishot, isrec, disable, release } from '@/api/content/content'
export default {
name: 'ContentContent',
@ -377,7 +409,7 @@ export default {
height: 680,
loading: false,
idkey: 'content_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -385,23 +417,28 @@ export default {
dialogTitle: '',
model: {
content_id: '',
unique: '',
category_ids: [],
tag_ids: [],
cover_id: 0,
cover_url: '',
image_id: 0,
image_url: '',
name: '',
title: '',
keywords: '',
description: '',
content: '',
source: '',
author: '',
url: '',
remark: '',
sort: 250,
hits: 0,
hits_initial: 0,
images: [],
videos: [],
audios: [],
words: [],
others: [],
sort: 250
others: []
},
rules: {
name: [{ required: true, message: '请输入名称', trigger: 'blur' }]
@ -420,6 +457,7 @@ export default {
is_hot: 0,
is_rec: 0,
is_disable: 0,
release_time: '',
fileDialog: false,
fileTitle: '文件管理',
fileType: 'image',
@ -555,6 +593,8 @@ export default {
this.selectTitle = this.name + '是否推荐'
} else if (selectType === 'disable') {
this.selectTitle = this.name + '是否禁用'
} else if (selectType === 'release') {
this.selectTitle = this.name + '发布时间'
} else if (selectType === 'dele') {
this.selectTitle = this.name + '删除'
}
@ -582,6 +622,8 @@ export default {
this.isrec(this.selection, true)
} else if (selectType === 'disable') {
this.disable(this.selection, true)
} else if (selectType === 'release') {
this.release(this.selection, true)
} else if (selectType === 'dele') {
this.dele(this.selection)
}
@ -701,6 +743,23 @@ export default {
})
}
},
//
release(row, select = false) {
if (!row.length) {
this.selectAlert()
} else {
this.loading = true
release({
ids: this.selectGetIds(row),
release_time: this.release_time
}).then(res => {
this.list()
this.$message.success(res.msg)
}).catch(() => {
this.list()
})
}
},
//
dele(row) {
if (!row.length) {
@ -735,10 +794,10 @@ export default {
const fileField = this.fileField
const fileLength = fileList.length
if (fileLength) {
if (fileField === 'cover_id') {
if (fileField === 'image_id') {
const i = fileLength - 1
this.model.cover_id = fileList[i]['file_id']
this.model.cover_url = fileList[i]['file_url']
this.model.image_id = fileList[i]['file_id']
this.model.image_url = fileList[i]['file_url']
} else {
for (let i = 0; i < fileLength; i++) {
if (fileField === 'images') {
@ -781,9 +840,9 @@ export default {
setTimeout(() => { window.open(file.file_url, '_blank') }, 500)
},
fileDelete(index, field = '') {
if (field === 'cover_id') {
this.model.cover_id = 0
this.model.cover_url = ''
if (field === 'image_id') {
this.model.image_id = 0
this.model.image_url = ''
} else if (field === 'images') {
if (index === 'all') {
this.model.images = []

View File

@ -1,44 +1,130 @@
<template>
<div class="app-container">
<!-- 内容设置 -->
<el-card>
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-tabs>
<el-tab-pane label="内容设置" name="" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="内容管理" prop="is_content">
<el-col :span="3">
<el-switch v-model="model.is_content" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="21">
<span>内容是否开启关闭后前台无法访问内容</span>
</el-col>
</el-form-item>
<el-form-item label="自定义设置">
<el-col :span="3">
键名
</el-col>
<el-col :span="5">
键值
<el-tab-pane label="基本信息" class="dialog-body" :style="{ height: height + 'px' }">
<el-form-item label="favicon" prop="favicon_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.favicon_url" style="height:100px" fit="contain" :src="model.favicon_url" :preview-src-list="[model.favicon_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
说明
</el-col>
<el-col :span="2">
<el-button type="primary" @click="add()">增加</el-button>
<el-button size="mini" @click="fileUpload('favicon', '上传favicon')">上传favicon</el-button>
<el-button size="mini" @click="fileDelete('favicon')">删除</el-button>
<p>图片小于 50 KBjpgpngico格式128 x 128</p>
</el-col>
</el-form-item>
<el-form-item v-for="(item, index) in model.diy_config" :key="index" label="">
<el-col :span="3">
<el-input v-model="item.config_key" clearable placeholder="请输入键名" />
</el-col>
<el-col :span="5">
<el-input v-model="item.config_val" clearable placeholder="请输入键值" />
<el-form-item label="logo" prop="logo_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.logo_url" style="height:100px" fit="contain" :src="model.logo_url" :preview-src-list="[model.logo_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
<el-input v-model="item.config_desc" clearable placeholder="请输入说明" />
<el-button size="mini" @click="fileUpload('logo', '上传logo')">上传logo</el-button>
<el-button size="mini" @click="fileDelete('logo')">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
<el-col :span="2">
<el-button type="text" @click="dele(index)">删除</el-button>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-col :span="12">
<el-input v-model="model.name" placeholder="name" clearable />
</el-col>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-col :span="12">
<el-input v-model="model.title" placeholder="title" clearable />
</el-col>
</el-form-item>
<el-form-item label="关键词" prop="keywords">
<el-col :span="12">
<el-input v-model="model.keywords" placeholder="keywords" clearable />
</el-col>
</el-form-item>
<el-form-item label="描述" prop="description">
<el-col :span="12">
<el-input v-model="model.description" type="textarea" :autosize="{ minRows: 2, maxRows: 20 }" placeholder="description" />
</el-col>
</el-form-item>
<el-form-item label="备案号" prop="icp">
<el-col :span="12">
<el-input v-model="model.icp" placeholder="icp" clearable />
</el-col>
</el-form-item>
<el-form-item label="版权" prop="copyright">
<el-col :span="12">
<el-input v-model="model.copyright" placeholder="copyright" clearable />
</el-col>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="联系信息" class="dialog-body" :style="{ height: height + 'px' }">
<el-form-item label="公众号码" prop="offi_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.offi_url" style="height:100px" fit="contain" :src="model.offi_url" :preview-src-list="[model.offi_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
<el-button size="mini" @click="fileUpload('offi', '上传公众号码')">上传公众号码</el-button>
<el-button size="mini" @click="fileDelete('offi')">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="小程序码" prop="mini_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.mini_url" style="height:100px" fit="contain" :src="model.mini_url" :preview-src-list="[model.mini_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
<el-button size="mini" @click="fileUpload('mini', '上传小程序码')">上传小程序码</el-button>
<el-button size="mini" @click="fileDelete('mini')">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="地址" prop="address">
<el-col :span="12">
<el-input v-model="model.address" placeholder="address" clearable />
</el-col>
</el-form-item>
<el-form-item label="电话" prop="tel">
<el-col :span="12">
<el-input v-model="model.tel" placeholder="tel" clearable />
</el-col>
</el-form-item>
<el-form-item label="传真" prop="fax">
<el-col :span="12">
<el-input v-model="model.fax" placeholder="fax" clearable />
</el-col>
</el-form-item>
<el-form-item label="手机" prop="mobile">
<el-col :span="12">
<el-input v-model="model.mobile" placeholder="mobile" clearable />
</el-col>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-col :span="12">
<el-input v-model="model.email" placeholder="email" clearable />
</el-col>
</el-form-item>
<el-form-item label="微信" prop="wechat">
<el-col :span="12">
<el-input v-model="model.wechat" placeholder="wechat" clearable />
</el-col>
</el-form-item>
<el-form-item label="QQ" prop="qq">
<el-col :span="12">
<el-input v-model="model.qq" placeholder="qq" clearable />
</el-col>
</el-form-item>
</el-tab-pane>
@ -49,26 +135,52 @@
</el-form-item>
</el-form>
</el-card>
<el-dialog :title="fileTitle" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
</div>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import FileManage from '@/components/FileManage'
import { info, edit } from '@/api/content/setting'
export default {
name: 'ContentSetting',
components: { },
components: { FileManage },
data() {
return {
name: '内容设置',
height: 680,
loading: false,
model: {
is_content: 1,
diy_config: []
favicon_id: 0,
favicon_url: '',
logo_id: 0,
logo_url: '',
name: '',
title: '',
keywords: '',
description: '',
icp: '',
copyright: '',
offi_id: 0,
offi_url: '',
mini_id: 0,
mini_url: '',
address: '',
tel: '',
fax: '',
mobile: '',
email: '',
qq: '',
wechat: ''
},
rules: {}
rules: {},
fileDialog: false,
fileField: 'logo',
fileTitle: '文件管理'
}
},
created() {
@ -82,20 +194,6 @@ export default {
this.model = res.data
})
},
//
add() {
this.model.diy_config.push({ config_key: '', config_val: '', config_desc: '' })
},
//
dele(index) {
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.model.diy_config.splice(index, 1)
}).catch(() => { })
},
//
refresh() {
this.loading = true
@ -122,6 +220,51 @@ export default {
this.$message.error('请完善必填项*')
}
})
},
//
fileUpload(field, title = '') {
this.fileField = field
this.fileTitle = title
this.fileDialog = true
},
fileCancel() {
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileField = this.fileField
const fileLength = fileList.length
if (fileLength) {
const i = fileLength - 1
if (fileField === 'favicon') {
this.model.favicon_id = fileList[i]['file_id']
this.model.favicon_url = fileList[i]['file_url']
} else if (fileField === 'logo') {
this.model.logo_id = fileList[i]['file_id']
this.model.logo_url = fileList[i]['file_url']
} else if (fileField === 'offi') {
this.model.offi_id = fileList[i]['file_id']
this.model.offi_url = fileList[i]['file_url']
} else if (fileField === 'mini') {
this.model.mini_id = fileList[i]['file_id']
this.model.mini_url = fileList[i]['file_url']
}
}
},
fileDelete(field = '') {
if (field === 'favicon') {
this.model.favicon_id = 0
this.model.favicon_url = ''
} else if (field === 'logo') {
this.model.logo_id = 0
this.model.logo_url = ''
} else if (field === 'offi') {
this.model.offi_id = 0
this.model.offi_url = ''
} else if (field === 'mini') {
this.model.mini_id = 0
this.model.mini_url = ''
}
}
}
}

View File

@ -7,10 +7,13 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="tag_name" label="名称" />
<el-option value="tag_unique" label="标识" />
<el-option value="tag_desc" label="描述" />
<el-option value="tag_name" label="名称" />
<el-option value="is_disable" label="禁用" />
<el-option value="title" label="标题" />
<el-option value="keywords" label="关键词" />
<el-option value="description" label="描述" />
<el-option value="remark" label="备注" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
<el-option v-for="exp in exps" :key="exp.exp" :value="exp.exp" :label="exp.name" />
@ -24,7 +27,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -63,17 +66,27 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="tag_name" label="名称" min-width="130" show-overflow-tooltip />
<el-table-column prop="tag_unique" label="标识" min-width="80" show-overflow-tooltip />
<el-table-column prop="tag_desc" label="描述" min-width="150" show-overflow-tooltip />
<el-table-column prop="image_url" label="图片" min-width="60">
<template slot-scope="scope">
<div style="height:30px">
<el-image v-if="scope.row.image_url" style="height:30px" fit="contain" :src="scope.row.image_url" :preview-src-list="[scope.row.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</div>
</template>
</el-table-column>
<el-table-column prop="tag_name" label="名称" min-width="130" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="contentShow(scope.row)">内容</el-button>
@ -87,18 +100,64 @@
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="名称" prop="tag_name">
<el-input v-model="model.tag_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="标识" prop="tag_unique">
<el-input v-model="model.tag_unique" placeholder="请输入标识(唯一)" clearable />
</el-form-item>
<el-form-item label="描述" prop="tag_desc">
<el-input v-model="model.tag_desc" placeholder="请输入描述" clearable />
<el-form-item label="名称" prop="tag_name">
<el-input v-model="model.tag_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="图片" prop="image_id">
<el-col :span="12" style="height:100px">
<el-image v-if="model.image_url" style="height:100px" fit="contain" :src="model.image_url" :preview-src-list="[model.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('image', 'image_id', '上传图片')">上传图片</el-button>
<el-button size="mini" @click="fileDelete(0, 'image_id')">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="model.title" placeholder="title" clearable />
</el-form-item>
<el-form-item label="关键词" prop="keywords">
<el-input v-model="model.keywords" placeholder="keywords" clearable />
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input v-model="model.description" type="textarea" autosize placeholder="description" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="remark" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
</el-form-item>
<el-form-item label="图片列表" prop="images">
<el-row>
<el-col :span="12">
<el-button size="mini" @click="fileUpload('image', 'images', '上传图片')">上传图片</el-button>
<span>图片小于 250 KBjpgpng格式</span>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileDelete('all', 'images')">全部删除</el-button>
</el-col>
</el-row>
<el-row>
<el-col v-for="(item, index) in model.images" :key="index" :span="6" class="ya-file">
<el-image style="height:100px" fit="contain" :src="item.file_url" :preview-src-list="[item.file_url]" title="点击看大图" />
<div>
<span class="ya-file-name" :title="item.file_name+'.'+item.file_ext">{{ item.file_name }}.{{ item.file_ext }}</span>
<el-button type="text" size="medium" icon="el-icon-d-arrow-left" title="向左移动" @click="fileRemoval(index, 'images', 'left')" />
<el-button type="text" size="medium" icon="el-icon-d-arrow-right" title="向左移动" @click="fileRemoval(index, 'images', 'right')" />
<el-button type="text" size="medium" icon="el-icon-download" title="下载" @click="fileDownload(item, $event)" />
<el-button type="text" size="medium" icon="el-icon-delete" title="删除" @click="fileDelete(index, 'images')" />
</div>
</el-col>
</el-row>
</el-form-item>
<el-form-item v-if="model[idkey]" label="添加时间" prop="create_time">
<el-input v-model="model.create_time" disabled />
</el-form-item>
@ -114,6 +173,10 @@
<el-button :loading="loading" type="primary" @click="submit">提交</el-button>
</div>
</el-dialog>
<!-- 文件管理 -->
<el-dialog :title="fileTitle" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage :file-type="fileType" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
<!-- 标签内容 -->
<el-dialog :title="contentDialogTitle" :visible.sync="contentDialog" width="70%" top="5vh" :close-on-click-modal="false" :close-on-press-escape="false">
<!-- 选中操作 -->
@ -140,10 +203,10 @@
<el-table ref="contentRef" v-loading="contentLoad" :data="contentData" :height="height-20" @sort-change="contentSort" @selection-change="contentSelect">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="contentPk" label="内容ID" min-width="80" sortable="custom" />
<el-table-column prop="cover_url" label="封面" min-width="60">
<el-table-column prop="image_url" label="图片" min-width="60">
<template slot-scope="scope">
<div style="height:30px">
<el-image v-if="scope.row.cover_url" style="height:30px" fit="contain" :src="scope.row.cover_url" :preview-src-list="[scope.row.cover_url]" title="点击看大图">
<el-image v-if="scope.row.image_url" style="height:30px" fit="contain" :src="scope.row.image_url" :preview-src-list="[scope.row.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
@ -188,20 +251,22 @@
<script>
import screenHeight from '@/utils/screen-height'
import FileManage from '@/components/FileManage'
import Pagination from '@/components/Pagination'
import clip from '@/utils/clipboard'
import { arrayColumn } from '@/utils/index'
import { list, info, add, edit, dele, disable, content, contentRemove } from '@/api/content/tag'
export default {
name: 'ContentTag',
components: { Pagination },
components: { FileManage, Pagination },
data() {
return {
name: '内容标签',
height: 680,
loading: false,
idkey: 'tag_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'tag_name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -211,8 +276,14 @@ export default {
tag_id: '',
tag_name: '',
tag_unique: '',
tag_desc: '',
sort: 250
image_id: 0,
image_url: '',
title: '',
keywords: '',
description: '',
remark: '',
sort: 250,
images: []
},
rules: {
tag_name: [{ required: true, message: '请输入名称', trigger: 'blur' }]
@ -223,6 +294,10 @@ export default {
selectDialog: false,
selectType: '',
is_disable: 0,
fileDialog: false,
fileTitle: '文件管理',
fileType: 'image',
fileField: '',
contentPk: 'content_id',
contentName: '内容',
contentDialog: false,
@ -439,6 +514,73 @@ export default {
})
}
},
//
fileUpload(fileType, fileField = '', fileTitle = '文件管理') {
this.fileType = fileType
this.fileField = fileField
this.fileTitle = fileTitle
this.fileDialog = true
},
fileCancel() {
this.fileType = 'image'
this.fileField = ''
this.fileTitle = '文件管理'
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileField = this.fileField
const fileLength = fileList.length
if (fileLength) {
if (fileField === 'image_id') {
const i = fileLength - 1
this.model.image_id = fileList[i]['file_id']
this.model.image_url = fileList[i]['file_url']
} else {
for (let i = 0; i < fileLength; i++) {
if (fileField === 'images') {
this.model.images.push(fileList[i])
}
}
}
}
},
fileRemoval(index, field, direction) {
const length = this.model[field].length
var index1 = index
if (direction === 'left') {
if (index <= 0) {
return false
}
--index1
} else {
if (index >= (length - 1)) {
return false
}
++index1
}
const value = this.model[field][index]
const value1 = this.model[field][index1]
this.model[field][index] = value1
this.model[field][index1] = value
this.$forceUpdate()
},
fileDownload(file, event) {
clip(file.file_name, event, '文件名复制成功')
setTimeout(() => { window.open(file.file_url, '_blank') }, 500)
},
fileDelete(index, field = '') {
if (field === 'image_id') {
this.model.image_id = 0
this.model.image_url = ''
} else if (field === 'images') {
if (index === 'all') {
this.model.images = []
} else {
this.model.images.splice(index, 1)
}
}
},
//
contentShow(row) {
this.contentDialog = true
@ -533,4 +675,18 @@ export default {
</script>
<style scoped>
.ya-file {
text-align: center;
border: 1px solid #dcdfe6;
}
.ya-file-name {
display: block;
height: 24px;
line-height: 24px;
padding: 0 4px;
font-size: 12px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>

View File

@ -9,6 +9,7 @@
<el-option :value="idkey" label="ID" />
<el-option value="group_name" label="名称" />
<el-option value="group_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -23,7 +24,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -63,15 +64,16 @@
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="group_name" label="名称" min-width="130" show-overflow-tooltip />
<el-table-column prop="group_desc" label="描述" min-width="150" show-overflow-tooltip />
<el-table-column prop="group_desc" label="描述" min-width="160" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="fileShow(scope.row)">文件</el-button>
@ -89,7 +91,10 @@
<el-input v-model="model.group_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="group_desc">
<el-input v-model="model.group_desc" placeholder="请输入描述" clearable />
<el-input v-model="model.group_desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
@ -196,7 +201,7 @@ export default {
height: 680,
loading: false,
idkey: 'group_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'group_name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -206,6 +211,7 @@ export default {
group_id: '',
group_name: '',
group_desc: '',
remark: '',
sort: 250
},
rules: {

View File

@ -9,6 +9,7 @@
<el-option :value="idkey" label="ID" />
<el-option value="tag_name" label="名称" />
<el-option value="tag_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -23,7 +24,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -62,16 +63,17 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="tag_name" label="名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="tag_desc" label="描述" min-width="150" show-overflow-tooltip />
<el-table-column prop="tag_name" label="名称" min-width="130" show-overflow-tooltip />
<el-table-column prop="tag_desc" label="描述" min-width="160" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="fileShow(scope.row)">文件</el-button>
@ -89,7 +91,10 @@
<el-input v-model="model.tag_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="tag_desc">
<el-input v-model="model.tag_desc" placeholder="请输入描述" clearable />
<el-input v-model="model.tag_desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" placeholder="" />
@ -196,7 +201,7 @@ export default {
height: 680,
loading: false,
idkey: 'tag_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'tag_name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -206,6 +211,7 @@ export default {
tag_id: '',
tag_name: '',
tag_desc: '',
remark: '',
sort: 250
},
rules: {

View File

@ -28,7 +28,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -123,6 +123,11 @@
</template>
</el-table-column>
</el-table>
<el-row>
<el-descriptions title="" :column="12" :colon="false" size="medium">
<el-descriptions-item label=""> {{ count }} </el-descriptions-item>
</el-descriptions>
</el-row>
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false" destroy-on-close>
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height-50+'px'}">
@ -218,7 +223,7 @@ export default {
height: 680,
loading: false,
idkey: 'api_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { search_field: 'api_name', search_exp: 'like', date_field: 'create_time' },
data: [],
dialog: false,
@ -260,7 +265,8 @@ export default {
groupSelectIds: '',
groupSelectTitle: '选中操作',
groupSelectDialog: false,
groupSelectType: ''
groupSelectType: '',
count: {}
}
},
created() {
@ -275,6 +281,7 @@ export default {
this.data = res.data.list
this.trees = res.data.tree
this.exps = res.data.exps
this.count = res.data.count
this.isExpandAll = false
this.loading = false
}).catch(() => {

View File

@ -1,29 +1,25 @@
<template>
<el-card class="dialog-body" :style="{height:height+'px'}">
<el-row>
<el-col :span="14">
<el-col :span="16">
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item label="会员接口" prop="is_member_api">
<el-col :span="24">
<el-col :span="4">
<el-switch v-model="model.is_member_api" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="24">
关闭后校验接口和权限所有接口免登除外均需登录访问
<el-col :span="20">
关闭后校验接口和权限所有接口免登除外均需登录访问
</el-col>
</el-form-item>
<el-form-item label="接口速率">
<el-col :span="8">
<el-input v-model="model.api_rate_num" type="number" placeholder="次数">
<template slot="append"></template>
</el-input>
<el-col :span="4">
<el-input v-model="model.api_rate_num" type="number" placeholder="次数" />
</el-col>
<el-col :span="1" style="text-align:center">/</el-col>
<el-col :span="8">
<el-input v-model="model.api_rate_time" type="number" placeholder="时间">
<template slot="append"></template>
</el-input>
<el-col :span="4">
<el-input v-model="model.api_rate_time" type="number" placeholder="时间" />
</el-col>
<el-col :span="24"> 3/13次1秒次数 0 不限率</el-col>
<el-col :span="15"> /次数 0 不限率</el-col>
</el-form-item>
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>

View File

@ -3,20 +3,24 @@
<el-row>
<el-col :span="14">
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item label="注册验证码" prop="captcha_register">
<el-form-item label="验证码方式" prop="captcha_mode">
<el-col :span="8">
<el-switch v-model="model.captcha_register" :active-value="1" :inactive-value="0" />
<el-select v-model="model.captcha_mode" placeholder="" @change="moldChange">
<el-option v-for="item in mold" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-col>
<el-col :span="16">
开启后会员注册需要输入验证码
字符输入字符行为滑动或点选
</el-col>
</el-form-item>
<el-form-item label="登录验证码" prop="captcha_login">
<el-form-item label="验证码类型" prop="captcha_type">
<el-col :span="8">
<el-switch v-model="model.captcha_login" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
开启后会员登录需要输入验证码
<el-select v-if="model.captcha_mode==1" v-model="model.captcha_type" placeholder="">
<el-option v-for="item in typestr" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-else v-model="model.captcha_type" placeholder="">
<el-option v-for="item in typeaj" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-col>
</el-form-item>
<el-form-item>
@ -42,10 +46,25 @@ export default {
height: 680,
loading: false,
model: {
captcha_register: 0,
captcha_login: 0
captcha_mode: 1,
captcha_type: 1
},
rules: {}
rules: {},
mold: [
{ value: 1, label: '字符' },
{ value: 2, label: '行为' }
],
typestr: [
{ value: 1, label: '数字' },
{ value: 2, label: '字母' },
{ value: 3, label: '数字字母' },
{ value: 4, label: '算术' },
{ value: 5, label: '中文' }
],
typeaj: [
{ value: 1, label: '滑动拼图' },
{ value: 2, label: '点选文字' }
]
}
},
created() {
@ -62,15 +81,13 @@ export default {
//
refresh() {
this.loading = true
captchaInfo()
.then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
})
.catch(() => {
this.loading = false
})
captchaInfo().then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
},
//
submit() {
@ -78,7 +95,6 @@ export default {
if (valid) {
this.loading = true
captchaEdit(this.model).then(res => {
this.info()
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
@ -86,6 +102,9 @@ export default {
})
}
})
},
moldChange(value) {
this.model.captcha_type = 1
}
}
}

View File

@ -1,114 +0,0 @@
<template>
<el-card class="dialog-body" :style="{height:height+'px'}">
<el-row>
<el-col :span="16">
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item label="自定义设置" prop="">
<el-col :span="5">
键名
</el-col>
<el-col :span="8">
键值
</el-col>
<el-col :span="10">
说明
</el-col>
<el-col :span="1">
<el-button type="primary" @click="add()">增加</el-button>
</el-col>
</el-form-item>
<el-form-item v-for="(item, index) in model.diy_config" :key="index" label="">
<el-col :span="5">
<el-input v-model="item.config_key" clearable placeholder="请输入键名" />
</el-col>
<el-col :span="8">
<el-input v-model="item.config_val" clearable placeholder="请输入键值" />
</el-col>
<el-col :span="10">
<el-input v-model="item.config_desc" clearable placeholder="请输入说明" />
</el-col>
<el-col :span="1">
<el-button type="text" @click="dele(index)">删除</el-button>
</el-col>
</el-form-item>
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</el-card>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import { diyInfo, diyEdit } from '@/api/member/setting'
export default {
name: 'MemberSettingDiy',
components: {},
data() {
return {
name: '自定义设置',
height: 680,
loading: false,
model: {
diy_config: []
},
rules: {}
}
},
created() {
this.height = screenHeight(170)
this.info()
},
methods: {
//
info() {
diyInfo().then(res => {
this.model = res.data
})
},
//
add() {
this.model.diy_config.push({ config_key: '', config_val: '', config_desc: '' })
},
//
dele(index) {
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.model.diy_config.splice(index, 1)
}).catch(() => {})
},
//
refresh() {
this.loading = true
diyInfo().then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
},
//
submit() {
this.$refs['ref'].validate(valid => {
if (valid) {
this.loading = true
diyEdit(this.model).then(res => {
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
})
}
}
}
</script>

View File

@ -8,7 +8,7 @@
<el-switch v-model="model.log_switch" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
开启后会记录会员日志
开启后会记录会员日志
</el-col>
</el-form-item>
<el-form-item label="日志保留时间" prop="log_save_time">
@ -18,7 +18,7 @@
</el-input>
</el-col>
<el-col :span="16">
会员日志保留天数0永久保留
会员日志保留天数0永久保留
</el-col>
</el-form-item>
<el-form-item>

View File

@ -1,14 +1,30 @@
<template>
<el-card class="dialog-body" :style="{height:height+'px'}">
<el-row>
<el-col :span="12">
<el-col :span="14">
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item label="注册验证码" prop="is_captcha_register">
<el-col :span="8">
<el-switch v-model="model.is_captcha_register" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
开启后会员账号密码注册需要输入验证码
</el-col>
</el-form-item>
<el-form-item label="注册" prop="is_register">
<el-col :span="8">
<el-switch v-model="model.is_register" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
关闭后不能再注册用户名手机邮箱
关闭后不能使用账号密码注册
</el-col>
</el-form-item>
<el-form-item label="登录验证码" prop="is_captcha_login">
<el-col :span="8">
<el-switch v-model="model.is_captcha_login" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
开启后会员账号密码登录需要输入验证码
</el-col>
</el-form-item>
<el-form-item label="登录" prop="is_login">
@ -16,39 +32,39 @@
<el-switch v-model="model.is_login" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
关闭后不能再登录用户名手机邮箱
关闭后不能使用账号密码登录
</el-col>
</el-form-item>
<el-form-item label="公众号注册" prop="is_offi_register">
<el-form-item label="手机验证码注册" prop="is_phone_register">
<el-col :span="8">
<el-switch v-model="model.is_offi_register" :active-value="1" :inactive-value="0" />
<el-switch v-model="model.is_phone_register" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
关闭后不能再注册公众号
关闭后不能使用手机+验证码注册
</el-col>
</el-form-item>
<el-form-item label="公众号登录" prop="is_offi_login">
<el-form-item label="手机验证码登录" prop="is_phone_login">
<el-col :span="8">
<el-switch v-model="model.is_offi_login" :active-value="1" :inactive-value="0" />
<el-switch v-model="model.is_phone_login" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
关闭后不能再登录公众号
关闭后不能使用手机+验证码登录
</el-col>
</el-form-item>
<el-form-item label="小程序注册" prop="is_mini_register">
<el-form-item label="邮箱验证码注册" prop="is_email_register">
<el-col :span="8">
<el-switch v-model="model.is_mini_register" :active-value="1" :inactive-value="0" />
<el-switch v-model="model.is_email_register" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
关闭后不能再注册小程序
关闭后不能使用邮箱+验证码注册
</el-col>
</el-form-item>
<el-form-item label="小程序登录" prop="is_mini_login">
<el-form-item label="邮箱验证码登录" prop="is_email_login">
<el-col :span="8">
<el-switch v-model="model.is_mini_login" :active-value="1" :inactive-value="0" />
<el-switch v-model="model.is_email_login" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
关闭后不能再登录小程序
关闭后不能使用邮箱+验证码登录
</el-col>
</el-form-item>
<el-form-item>
@ -75,11 +91,13 @@ export default {
loading: false,
model: {
is_register: 1,
is_captcha_register: 0,
is_login: 1,
is_offi_register: 1,
is_offi_login: 1,
is_mini_register: 1,
is_mini_login: 1
is_captcha_login: 0,
is_phone_register: 1,
is_phone_login: 1,
is_email_register: 1,
is_email_login: 1
},
rules: {}
}

View File

@ -0,0 +1,121 @@
<template>
<el-card class="dialog-body" :style="{height:height+'px'}">
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item label="默认头像" prop="default_avatar_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.default_avatar_url" style="height:100px" fit="contain" :src="model.default_avatar_url" :preview-src-list="[model.default_avatar_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
<el-button size="mini" @click="fileUpload('default_avatar', '上传默认头像')">上传默认头像</el-button>
<el-button size="mini" @click="fileDelete('default_avatar')">删除</el-button>
<p>图片小于 50 KBjpgpngico格式128 x 128</p>
</el-col>
</el-form-item>
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
</el-form-item>
</el-form>
<el-dialog :title="fileTitle" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
</el-card>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import FileManage from '@/components/FileManage'
import { memberInfo, memberEdit } from '@/api/member/setting'
export default {
name: 'SettingMember',
components: { FileManage },
data() {
return {
name: '会员设置',
height: 680,
loading: false,
model: {
default_avatar_id: 0,
default_avatar_url: ''
},
rules: {},
fileDialog: false,
fileField: 'logo',
fileTitle: '文件管理'
}
},
created() {
this.height = screenHeight(170)
this.info()
},
methods: {
//
info() {
memberInfo().then((res) => {
this.model = res.data
})
},
//
refresh() {
this.loading = true
memberInfo().then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
},
//
submit() {
this.$refs['ref'].validate((valid) => {
if (valid) {
this.loading = true
memberEdit(this.model).then((res) => {
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
})
},
//
fileUpload(field, title = '') {
this.fileField = field
this.fileTitle = title
this.fileDialog = true
},
fileCancel() {
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileField = this.fileField
const fileLength = fileList.length
if (fileLength) {
const i = fileLength - 1
if (fileField === 'default_avatar') {
this.model.default_avatar_id = fileList[i]['file_id']
this.model.default_avatar_url = fileList[i]['file_url']
}
}
},
fileDelete(field = '') {
if (field === 'default_avatar') {
this.model.default_avatar_id = 0
this.model.default_avatar_url = ''
}
}
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,161 @@
<template>
<el-card class="dialog-body" :style="{height:height+'px'}">
<el-row>
<el-col :span="24">
<el-form ref="ref" label-width="120px">
<el-form-item label="" prop="">
<el-col :span="8">
AppID
</el-col>
<el-col :span="9">
AppSecret
</el-col>
<el-col :span="2">
注册
</el-col>
<el-col :span="2">
登录
</el-col>
<el-col :span="2">
绑定
</el-col>
</el-form-item>
</el-form>
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item v-for="(item, index) in apps" :key="index" :label="apps[index]" prop="">
<el-col :span="8">
<el-input v-model="model[index+'_appid']" />
</el-col>
<el-col :span="9">
<el-input v-model="model[index+'_appsecret']" />
</el-col>
<el-col :span="2">
<el-switch v-model="model[index+'_register']" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="2">
<el-switch v-model="model[index+'_login']" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="2">
<el-switch v-model="model[index+'_bind']" :active-value="1" :inactive-value="0" />
</el-col>
</el-form-item>
</el-form>
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
</el-form-item>
</el-form>
<el-dialog title="说明" :visible.sync="dialogFormVisible" label-width="0" center>
<el-form :model="model">
<el-form-item label="" prod="platform_desc">
<div v-html="model.platform_desc" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogFormVisible = false">关闭</el-button>
</div>
</el-dialog>
</el-col>
</el-row>
</el-card>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import { thirdInfo, thirdEdit } from '@/api/member/setting'
export default {
name: 'MemberSettingThird',
components: {},
data() {
return {
name: '第三方账号设置',
height: 680,
loading: false,
apps: { wx_miniapp: '微信小程序', wx_offiacc: '微信公众号', wx_website: '微信网站应用', wx_mobile: '微信移动应用', qq_miniapp: 'QQ小程序', qq_website: 'QQ网站应用', qq_mobile: 'QQ移动应用', wb_website: '微博网站应用' },
model: {
wx_miniapp_appid: '',
wx_miniapp_appsecret: '',
wx_miniapp_register: 1,
wx_miniapp_login: 1,
wx_miniapp_bind: 1,
wx_offiacc_appid: '',
wx_offiacc_appsecret: '',
wx_offiacc_register: 1,
wx_offiacc_login: 1,
wx_offiacc_bind: 1,
wx_website_appid: '',
wx_website_appsecret: '',
wx_owebsite_register: 1,
wx_owebsite_login: 1,
wx_owebsite_bind: 1,
wx_mobile_appid: '',
wx_mobile_appsecret: '',
wx_mobile_register: 1,
wx_mobile_login: 1,
wx_mobile_bind: 1,
qq_miniapp_appid: '',
qq_miniapp_appsecret: '',
qq_miniapp_register: 1,
qq_miniapp_login: 1,
qq_miniapp_bind: 1,
qq_website_appid: '',
qq_website_appsecret: '',
qq_website_register: 1,
qq_website_login: 1,
qq_website_bind: 1,
qq_mobile_appid: '',
qq_mobile_appsecret: '',
qq_mobile_register: 1,
qq_mobile_login: 1,
qq_mobile_bind: 1,
wb_website_appid: '',
wb_website_appsecret: '',
wb_owebsite_register: 1,
wb_owebsite_login: 1,
wb_owebsite_bind: 1
},
rules: {},
dialogFormVisible: false
}
},
created() {
this.height = screenHeight(170)
this.info()
},
methods: {
//
info() {
thirdInfo().then(res => {
this.model = res.data
})
},
//
refresh() {
this.loading = true
thirdInfo().then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
},
//
submit() {
this.$refs['ref'].validate(valid => {
if (valid) {
this.loading = true
thirdEdit(this.model).then(res => {
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
})
}
}
}
</script>

View File

@ -8,7 +8,7 @@
<el-input v-model="model.token_key" type="text" clearable />
</el-col>
<el-col :span="16">
修改后会员登录状态失效需重新登录
修改后会员登录状态失效需重新登录
</el-col>
</el-form-item>
<el-form-item label="Token有效时间" prop="token_exp">
@ -16,7 +16,7 @@
<el-input v-model="model.token_exp" type="number" />
</el-col>
<el-col :span="16">
小时登录后超过此时间需重新登录
小时登录后超过此时间需重新登录
</el-col>
</el-form-item>
<el-form-item label="多端登录" prop="is_multi_login">
@ -24,7 +24,7 @@
<el-switch v-model="model.is_multi_login" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="16">
开启后可以在多个设备同时登录
开启后可以在多个设备同时登录
</el-col>
</el-form-item>
<el-form-item>

View File

@ -9,6 +9,7 @@
<el-option :value="idkey" label="ID" />
<el-option value="group_name" label="名称" />
<el-option value="group_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_default" label="默认" />
<el-option value="is_disable" label="禁用" />
</el-select>
@ -24,7 +25,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -91,8 +92,9 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="group_name" label="名称" min-width="160" />
<el-table-column prop="group_desc" label="描述" min-width="160" />
<el-table-column prop="group_name" label="名称" min-width="160" show-overflow-tooltip />
<el-table-column prop="group_desc" label="描述" min-width="220" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_default" label="默认" min-width="80" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_default" :active-value="1" :inactive-value="0" @change="defaults([scope.row])" />
@ -104,8 +106,8 @@
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="80" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="memberShow(scope.row)">会员</el-button>
@ -123,7 +125,10 @@
<el-input v-model="model.group_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="group_desc">
<el-input v-model="model.group_desc" placeholder="请输入描述" clearable />
<el-input v-model="model.group_desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort" placeholder="250">
<el-input v-model="model.sort" type="number" />
@ -234,7 +239,7 @@ export default {
height: 680,
loading: false,
idkey: 'group_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'group_name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -244,6 +249,7 @@ export default {
group_id: '',
group_name: '',
group_desc: '',
remark: '',
sort: 250,
api_ids: []
},

View File

@ -22,7 +22,7 @@
<el-option v-for="(item, index) in logTypes" :key="index" :value="index" :label="item" />
</el-select>
<el-input v-else v-model="query.search_value" class="filter-item ya-search-value" placeholder="查询内容" clearable />
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -64,7 +64,7 @@
<el-table-column prop="request_isp" label="请求ISP" min-width="105" show-overflow-tooltip />
<el-table-column prop="response_code" label="返回码" min-width="80" show-overflow-tooltip />
<el-table-column prop="response_msg" label="返回描述" min-width="120" show-overflow-tooltip />
<el-table-column prop="create_time" label="请求时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="请求时间" width="155" sortable="custom" />
<el-table-column label="操作" width="85">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="info(scope.row)">详情</el-button>
@ -117,7 +117,7 @@
<el-input v-model="model.response_msg" />
</el-form-item>
<el-form-item label="用户代理" prop="user_agent">
<el-input v-model="model.user_agent" type="textarea" />
<el-input v-model="model.user_agent" type="textarea" autosize />
</el-form-item>
<el-form-item label="请求参数" prop="request_param">
<el-button type="text" icon="el-icon-copy-document" title="复制参数" @click="requestParamCopy($event)" />
@ -149,7 +149,7 @@ export default {
height: 680,
loading: false,
idkey: 'log_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'member_id', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,

View File

@ -19,8 +19,8 @@
<el-option value="name" label="姓名" />
<el-option value="gender" label="性别" />
<el-option value="region_id" label="所在地" />
<el-option value="reg_channel" label="注册渠道" />
<el-option value="reg_type" label="注册方式" />
<el-option value="platform" label="注册平台" />
<el-option value="application" label="注册应用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
<el-option v-for="exp in exps" :key="exp.exp" :value="exp.exp" :label="exp.name" />
@ -35,12 +35,12 @@
<el-option :value="1" label="是" />
<el-option :value="0" label="否" />
</el-select>
<el-select v-else-if="query.search_field==='reg_channel'" v-model="query.search_value" class="filter-item ya-search-value" clearable>
<el-option v-for="(item,index) in reg_channels" :key="index" :label="item" :value="index" />
<el-select v-else-if="query.search_field==='application'" v-model="query.search_value" class="filter-item ya-search-value" clearable>
<el-option v-for="(item,index) in applications" :key="index" :label="item" :value="index" />
</el-select>
<el-cascader v-else-if="query.search_field==='region_id'" v-model="query.search_value" class="filter-item ya-search-value" :options="regionData" :props="regionQueryProps" clearable filterable collapse-tags />
<el-select v-else-if="query.search_field==='reg_type'" v-model="query.search_value" class="filter-item ya-search-value" clearable>
<el-option v-for="(item,index) in reg_types" :key="index" :label="item" :value="index" />
<el-select v-else-if="query.search_field==='platform'" v-model="query.search_value" class="filter-item ya-search-value" clearable>
<el-option v-for="(item,index) in platforms" :key="index" :label="item" :value="index" />
</el-select>
<el-select v-else-if="query.search_field==='gender'" v-model="query.search_value" class="filter-item ya-search-value" clearable>
<el-option v-for="(item,index) in genders" :key="index" :label="item" :value="index" />
@ -51,7 +51,7 @@
<el-option value="login_time" label="登录时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -158,7 +158,7 @@
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" width="75" sortable="custom" />
<el-table-column prop="create_time" label="注册时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="注册时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
@ -171,125 +171,181 @@
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :model="model" :rules="rules" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="头像" prop="avatar_url">
<el-col :span="12" style="height:100px">
<el-image style="width:100px;height:100px;border-radius:50%;" :src="model.avatar_url" :preview-src-list="[model.avatar_url]" fit="contain" title="点击看大图">
<div slot="error" class="image-slot">
<el-avatar :size="100" icon="el-icon-user-solid" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload()">上传头像</el-button>
<el-button size="mini" @click="fileDelete()">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="昵称" prop="nickname">
<el-input key="nickname" v-model="model.nickname" placeholder="请输入昵称" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.nickname, $event)" />
</el-input>
</el-form-item>
<el-form-item label="用户名" prop="username">
<el-input key="username" v-model="model.username" placeholder="请输入用户名" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.username, $event)" />
</el-input>
</el-form-item>
<el-form-item v-if="model.member_id==''" label="密码" prop="password">
<el-input key="password" v-model="model.password" placeholder="请输入密码" clearable show-password />
</el-form-item>
<el-form-item label="手机" prop="phone">
<el-input v-model="model.phone" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.phone, $event)" />
</el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="model.email" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.email, $event)" />
</el-input>
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="model.name" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.name, $event)" />
</el-input>
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-select v-model="model.gender">
<el-option v-for="(item,index) in genders" :key="index" :label="item" :value="index" />
</el-select>
</el-form-item>
<el-form-item label="标签" prop="tag_ids">
<el-select v-model="model.tag_ids" class="ya-width-100p" multiple clearable filterable>
<el-option v-for="item in tagData" :key="item.tag_id" :label="item.tag_name" :value="item.tag_id" />
</el-select>
</el-form-item>
<el-form-item label="分组" prop="group_ids">
<el-select v-model="model.group_ids" class="ya-width-100p" clearable filterable multiple>
<el-option v-for="item in groupData" :key="item.group_id" :label="item.group_name" :value="item.group_id" />
</el-select>
</el-form-item>
<el-form-item label="所在地" prop="region_id">
<el-cascader v-model="model.region_id" class="ya-width-100p" :options="regionData" :props="regionProps" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" clearable />
</el-form-item>
<el-form-item v-if="model[idkey]" label="openid" prop="openid">
<el-input v-model="model.openid" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="unionid" prop="unionid">
<el-input v-model="model.unionid" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="注册时间" prop="create_time">
<el-input v-model="model.create_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="修改时间" prop="update_time">
<el-input v-model="model.update_time" disabled />
</el-form-item>
<el-form-item v-if="model.delete_time" label="删除时间" prop="delete_time">
<el-input v-model="model.delete_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录时间" prop="login_time">
<el-input v-model="model.login_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录地区" prop="login_region">
<el-input v-model="model.login_region" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="注册渠道" prop="reg_channel_name">
<el-input v-model="model.reg_channel_name" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="注册方式" prop="reg_type_name">
<el-input v-model="model.reg_type_name" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="接口(权限)" prop="api_ids">
<span>
<el-checkbox v-model="apiExpandAll" @change="apiExpandAllChange">展开</el-checkbox>
</span>
<el-tree ref="apiRef" :data="model.api_tree" :props="apiProps" :default-checked-keys="model.api_ids" :expand-on-click-node="true" :default-expand-all="false" :check-strictly="true" node-key="api_id" highlight-current>
<span slot-scope="scope" class="custom-tree-node">
<span>{{ scope.node.label }}<i v-if="scope.data.is_check" class="el-icon-check" style="color:#1890ff" title="已分配" /></span>
<el-tabs>
<el-tab-pane label="基础信息">
<el-form-item label="头像" prop="avatar_url">
<el-col :span="12" style="height:100px">
<el-image style="width:100px;height:100px;border-radius:50%;" :src="model.avatar_url" :preview-src-list="[model.avatar_url]" fit="contain" title="点击看大图">
<div slot="error" class="image-slot">
<el-avatar :size="100" icon="el-icon-user-solid" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload()">上传头像</el-button>
<el-button size="mini" @click="fileDelete()">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="昵称" prop="nickname">
<el-input key="nickname" v-model="model.nickname" placeholder="请输入昵称" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.nickname, $event)" />
</el-input>
</el-form-item>
<el-form-item label="用户名" prop="username">
<el-input key="username" v-model="model.username" placeholder="请输入用户名" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.username, $event)" />
</el-input>
</el-form-item>
<el-form-item v-if="model.member_id==''" label="密码" prop="password">
<el-input key="password" v-model="model.password" placeholder="请输入密码" clearable show-password />
</el-form-item>
<el-form-item label="手机" prop="phone">
<el-input v-model="model.phone" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.phone, $event)" />
</el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="model.email" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.email, $event)" />
</el-input>
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="model.name" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.name, $event)" />
</el-input>
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-select v-model="model.gender">
<el-option v-for="(item,index) in genders" :key="index" :label="item" :value="index" />
</el-select>
</el-form-item>
<el-form-item label="所在地" prop="region_id">
<el-cascader v-model="model.region_id" class="ya-width-100p" :options="regionData" :props="regionProps" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" clearable />
</el-form-item>
</el-tab-pane>
<el-tab-pane label="权限信息">
<el-form-item label="超会" prop="is_super">
<el-switch v-model="model.is_super" :active-value="1" :inactive-value="0" disabled />
</el-form-item>
<el-form-item label="禁用" prop="is_disable">
<el-switch v-model="model.is_disable" :active-value="1" :inactive-value="0" disabled />
</el-form-item>
<el-form-item label="标签" prop="tag_ids">
<el-select v-model="model.tag_ids" class="ya-width-100p" multiple clearable filterable>
<el-option v-for="item in tagData" :key="item.tag_id" :label="item.tag_name" :value="item.tag_id" />
</el-select>
</el-form-item>
<el-form-item label="分组(角色)" prop="group_ids">
<el-select v-model="model.group_ids" class="ya-width-100p" clearable filterable multiple>
<el-option v-for="item in groupData" :key="item.group_id" :label="item.group_name" :value="item.group_id" />
</el-select>
</el-form-item>
<el-form-item v-if="model[idkey]" label="接口(权限)" prop="api_ids">
<span>
<i v-if="scope.data.api_url" class="el-icon-link" style="margin-left:10px" :title="scope.data.api_url" />
<i v-else class="el-icon-link" style="margin-left:10px;color:#fff" />
<i v-if="scope.data.is_group" class="el-icon-s-custom" style="margin-left:10px" title="分组" />
<i v-else class="el-icon-s-custom" style="margin-left:10px;color:#fff" />
<i v-if="scope.data.is_unauth" class="el-icon-unlock" style="margin-left:10px;" title="免权" />
<i v-else class="el-icon-unlock" style="margin-left:10px;color:#fff" />
<i v-if="scope.data.is_unlogin" class="el-icon-user" style="margin-left:10px;" title="免登" />
<i v-else class="el-icon-user" style="margin-left:10px;color:#fff" />
<el-checkbox v-model="apiExpandAll" @change="apiExpandAllChange">展开</el-checkbox>
</span>
</span>
</el-tree>
</el-form-item>
<el-tree ref="apiRef" :data="model.api_tree" :props="apiProps" :default-checked-keys="model.api_ids" :expand-on-click-node="true" :default-expand-all="false" :check-strictly="true" node-key="api_id" highlight-current>
<span slot-scope="scope" class="custom-tree-node">
<span>{{ scope.node.label }}<i v-if="scope.data.is_check" class="el-icon-check" style="color:#1890ff" title="已分配" /></span>
<span>
<i v-if="scope.data.api_url" class="el-icon-link" style="margin-left:10px" :title="scope.data.api_url" />
<i v-else class="el-icon-link" style="margin-left:10px;color:#fff" />
<i v-if="scope.data.is_group" class="el-icon-s-custom" style="margin-left:10px" title="分组" />
<i v-else class="el-icon-s-custom" style="margin-left:10px;color:#fff" />
<i v-if="scope.data.is_unauth" class="el-icon-unlock" style="margin-left:10px;" title="免权" />
<i v-else class="el-icon-unlock" style="margin-left:10px;color:#fff" />
<i v-if="scope.data.is_unlogin" class="el-icon-user" style="margin-left:10px;" title="免登" />
<i v-else class="el-icon-user" style="margin-left:10px;color:#fff" />
</span>
</span>
</el-tree>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="其它信息">
<el-form-item v-if="model[idkey]" label="登录IP" prop="login_ip">
<el-input v-model="model.login_ip" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录地区" prop="login_region">
<el-input v-model="model.login_region" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录时间" prop="login_time">
<el-input v-model="model.login_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录次数" prop="login_num">
<el-input v-model="model.login_num" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="注册平台" prop="platform_name">
<el-input v-model="model.platform_name" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="注册应用" prop="application_name">
<el-input v-model="model.application_name" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="注册时间" prop="create_time">
<el-input v-model="model.create_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="修改时间" prop="update_time">
<el-input v-model="model.update_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="退出时间" prop="logout_time">
<el-input v-model="model.logout_time" disabled />
</el-form-item>
<el-form-item v-if="model.delete_time" label="删除时间" prop="delete_time">
<el-input v-model="model.delete_time" disabled />
</el-form-item>
</el-tab-pane>
<el-tab-pane label="第三方账号">
<el-table v-if="model[idkey]" :data="model.thirds">
<el-table-column prop="third_id" label="ID" width="80" />
<el-table-column prop="headimgurl" label="头像" min-width="50">
<template slot-scope="scope">
<div style="height:25px">
<el-image v-if="scope.row.headimgurl" style="width:25px;height:25px;border-radius:50%;" :src="scope.row.headimgurl" :preview-src-list="[scope.row.headimgurl]" fit="contain" title="点击看大图">
<div slot="error" class="image-slot">
<el-avatar :size="25" icon="el-icon-user-solid" />
</div>
</el-image>
</div>
</template>
</el-table-column>
<el-table-column prop="nickname" label="昵称" min-width="100" show-overflow-tooltip />
<el-table-column prop="platform_name" label="平台" min-width="80" show-overflow-tooltip />
<el-table-column prop="application_name" label="应用" min-width="110" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :loading="thirdUnbindLoad" :active-value="1" :inactive-value="0" @change="thirdDisable(scope.row)" />
</template>
</el-table-column>
<el-table-column prop="create_time" label="添加/绑定时间" min-width="155" />
<el-table-column prop="login_time" label="登录时间" width="155" />
<el-table-column label="操作" width="75">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="thirdUnbindBtn(scope.row)">解绑</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loading" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="submit">提交</el-button>
</div>
</el-dialog>
<!-- 第三方账号解绑 -->
<el-dialog title="会员第三方账号解绑" :visible.sync="thirdUnbindDialog" width="25%" top="20vh">
<span style="color:#ff0000">解绑后该会员无法再通过该第三方账号登录确定要解绑吗</span>
<span slot="footer" class="dialog-footer">
<el-button :loading="thirdUnbindLoad" @click="thirdUnbindDialog=false">取消</el-button>
<el-button :loading="thirdUnbindLoad" type="primary" @click="thirdUnbindSubmit">确定</el-button>
</span>
</el-dialog>
<!-- 文件管理 -->
<el-dialog title="上传头像" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
@ -316,7 +372,7 @@ export default {
height: 680,
loading: false,
idkey: 'member_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'nickname', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -338,7 +394,8 @@ export default {
region_id: '',
remark: '',
sort: 250,
api_ids: []
api_ids: [],
thirds: []
},
rules: {
nickname: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
@ -346,8 +403,8 @@ export default {
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
},
genders: [],
reg_channels: [],
reg_types: [],
platforms: [],
applications: [],
regionData: [],
regionProps: { checkStrictly: true, value: 'region_id', label: 'region_name', emitPath: false },
regionQueryProps: { checkStrictly: true, value: 'region_id', label: 'region_name', multiple: true, emitPath: false },
@ -370,7 +427,10 @@ export default {
exportAutoWidth: false,
apiProps: { label: 'api_name', children: 'children' },
apiCheckAll: false,
apiExpandAll: false
apiExpandAll: false,
thirdUnbindDialog: false,
thirdUnbindModel: {},
thirdUnbindLoad: false
}
},
created() {
@ -386,8 +446,8 @@ export default {
this.data = res.data.list
this.count = res.data.count
this.genders = res.data.genders
this.reg_channels = res.data.reg_channels
this.reg_types = res.data.reg_types
this.platforms = res.data.platforms
this.applications = res.data.applications
this.regionData = res.data.region
this.tagData = res.data.tag
this.groupData = res.data.group
@ -420,6 +480,8 @@ export default {
this.$refs['ref'].validate(valid => {
if (valid) {
this.loading = true
this.model.api_tree = []
this.model.thirds = []
if (this.model[this.idkey]) {
edit(this.model).then(res => {
this.list()
@ -652,7 +714,7 @@ export default {
}
},
//
disable(row, select = false) {
disable(row, select = false, type = 'member') {
if (!row.length) {
this.selectAlert()
} else {
@ -747,6 +809,53 @@ export default {
this.model.avatar_id = 0
this.model.avatar_url = ''
},
//
thirdUnbindBtn(row) {
this.thirdUnbindDialog = true
this.thirdUnbindModel = row
},
thirdUnbindSubmit() {
const row = this.thirdUnbindModel
if (!row) {
this.$alert('请选择需要操作的' + this.name + '第三方账号', '提示', { type: 'warning', callback: action => { } })
} else {
this.thirdUnbindLoad = true
dele({
ids: [row.third_id],
type: 'third'
}).then(res => {
var id = {}
id[this.idkey] = row[this.idkey]
info(id).then(res => {
this.model.thirds = res.data.thirds
}).catch(() => { })
this.thirdUnbindLoad = false
this.thirdUnbindDialog = false
this.$message.success(res.msg)
}).catch(() => {
this.thirdUnbindLoad = false
})
}
},
//
thirdDisable(row) {
var id = {}
id[this.idkey] = row[this.idkey]
disable({
ids: [row.third_id],
is_disable: row.is_disable,
type: 'third'
}).then(res => {
info(id).then(res => {
this.model.thirds = res.data.thirds
}).catch(() => { })
this.$message.success(res.msg)
}).catch(() => {
info(id).then(res => {
this.model.thirds = res.data.thirds
}).catch(() => { })
})
},
//
copy(text, event) {
clip(text, event)

View File

@ -1,6 +1,15 @@
<template>
<div class="app-container">
<el-tabs>
<el-tab-pane v-if="checkPermission(['admin/member.Setting/memberInfo'])" label="会员设置" lazy>
<setting-member />
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/member.Setting/logregInfo'])" label="登录注册设置" lazy>
<setting-logreg />
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/member.Setting/thirdInfo'])" label="第三方账号设置" lazy>
<setting-third />
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/member.Setting/captchaInfo'])" label="验证码设置" lazy>
<setting-captcha />
</el-tab-pane>
@ -13,28 +22,23 @@
<el-tab-pane v-if="checkPermission(['admin/member.Setting/apiInfo'])" label="接口设置" lazy>
<setting-api />
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/member.Setting/logregInfo'])" label="登录注册设置" lazy>
<setting-logreg />
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/member.Setting/diyInfo'])" label="自定义设置" lazy>
<setting-diy />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import checkPermission from '@/utils/permission' //
import SettingToken from './components/SettingToken'
import SettingApi from './components/SettingApi'
import SettingCaptcha from './components/SettingCaptcha'
import SettingLog from './components/SettingLog'
import SettingApi from './components/SettingApi'
import SettingLogreg from './components/SettingLogreg'
import SettingDiy from './components/SettingDiy'
import SettingMember from './components/SettingMember'
import SettingThird from './components/SettingThird'
import SettingToken from './components/SettingToken'
export default {
name: 'MemberSetting',
components: { SettingToken, SettingCaptcha, SettingLog, SettingApi, SettingLogreg, SettingDiy },
components: { SettingApi, SettingCaptcha, SettingLog, SettingLogreg, SettingMember, SettingThird, SettingToken },
data() {
return {
name: '会员设置'

View File

@ -9,6 +9,7 @@
<el-option :value="idkey" label="ID" />
<el-option value="tag_name" label="名称" />
<el-option value="tag_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -23,7 +24,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -62,16 +63,17 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="tag_name" label="名称" min-width="200" show-overflow-tooltip />
<el-table-column prop="tag_desc" label="描述" min-width="200" show-overflow-tooltip />
<el-table-column prop="tag_name" label="名称" min-width="160" show-overflow-tooltip />
<el-table-column prop="tag_desc" label="描述" min-width="220" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="80" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="80" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="memberShow(scope.row)">会员</el-button>
@ -89,7 +91,10 @@
<el-input v-model="model.tag_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="tag_desc">
<el-input v-model="model.tag_desc" placeholder="请输入描述" clearable />
<el-input v-model="model.tag_desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
@ -178,7 +183,7 @@ export default {
height: 680,
loading: false,
idkey: 'tag_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'tag_name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -188,6 +193,7 @@ export default {
tag_id: '',
tag_name: '',
tag_desc: '',
remark: '',
sort: 250
},
rules: {

436
src/views/member/third.vue Normal file
View File

@ -0,0 +1,436 @@
<template>
<div class="app-container">
<!-- 查询操作 -->
<div class="filter-container">
<!-- 查询 -->
<el-row>
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="member_id" label="会员ID" />
<el-option value="nickname" label="昵称" />
<el-option value="platform" label="平台" />
<el-option value="application" label="应用" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
<el-option value="unionid" label="unionid" />
<el-option value="openid" label="openid" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
<el-option v-for="exp in exps" :key="exp.exp" :value="exp.exp" :label="exp.name" />
</el-select>
<el-select v-if="query.search_field==='is_disable'" v-model="query.search_value" class="filter-item ya-search-value">
<el-option :value="1" label="是" />
<el-option :value="0" label="否" />
</el-select>
<el-select v-else-if="query.search_field==='platform'" v-model="query.search_value" class="filter-item ya-search-value">
<el-option v-for="platform in platforms" :key="platform.value" :value="platform.value" :label="platform.label" />
</el-select>
<el-select v-else-if="query.search_field==='application'" v-model="query.search_value" class="filter-item ya-search-value">
<el-option v-for="application in applications" :key="application.value" :value="application.value" :label="application.label" />
</el-select>
<el-input v-else v-model="query.search_value" class="filter-item ya-search-value" placeholder="查询内容" clearable />
<el-select v-model="query.date_field" class="filter-item ya-date-field" placeholder="时间类型">
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
<el-option value="login_time" label="登录时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
</el-row>
<!-- 选中操作 -->
<el-row>
<el-col>
<el-button title="是否禁用" @click="selectOpen('disable')">禁用</el-button>
<el-button title="删除" @click="selectOpen('dele')">删除</el-button>
<el-button type="primary" @click="add()">添加</el-button>
</el-col>
</el-row>
<el-dialog :title="selectTitle" :visible.sync="selectDialog" top="20vh" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="selectRef" label-width="120px">
<el-form-item :label="name+'ID'" prop="">
<el-input v-model="selectIds" type="textarea" :autosize="{minRows: 5, maxRows: 12}" disabled />
</el-form-item>
<el-form-item v-if="selectType==='disable'" label="是否禁用" prop="">
<el-switch v-model="is_disable" :active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item v-else-if="selectType==='dele'" label="" prop="">
<span style="color:red">确定要删除选中的{{ name }}</span>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="selectCancel">取消</el-button>
<el-button type="primary" @click="selectSubmit">提交</el-button>
</div>
</el-dialog>
</div>
<!-- 列表 -->
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="member_id" label="会员ID" width="100" sortable="custom" />
<el-table-column prop="member_nickname" label="会员昵称" min-width="135" show-overflow-tooltip />
<el-table-column prop="member_username" label="会员用户名" min-width="135" show-overflow-tooltip />
<el-table-column prop="headimgurl" label="头像" min-width="50">
<template slot-scope="scope">
<div style="height:25px">
<el-image v-if="scope.row.headimgurl" style="width:25px;height:25px;border-radius:50%;" :src="scope.row.headimgurl" :preview-src-list="[scope.row.headimgurl]" fit="contain" title="点击看大图">
<div slot="error" class="image-slot">
<el-avatar :size="25" icon="el-icon-user-solid" />
</div>
</el-image>
</div>
</template>
</el-table-column>
<el-table-column prop="nickname" label="昵称" min-width="135" show-overflow-tooltip />
<el-table-column prop="platform_name" label="平台" min-width="80" show-overflow-tooltip />
<el-table-column prop="application_name" label="应用" min-width="120" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="create_time" label="添加/绑定时间" min-width="155" />
<el-table-column prop="update_time" label="修改时间" min-width="155" />
<el-table-column prop="login_time" label="登录时间" width="155" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
<el-button size="mini" type="text" title="解绑" @click="selectOpen('dele',scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<pagination v-show="count>0" :total="count" :page.sync="query.page" :limit.sync="query.limit" @pagination="list" />
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="会员ID" prop="member_id">
<el-input v-model="model.member_id" type="number" placeholder="请输入会员ID" clearable />
</el-form-item>
<el-form-item label="平台" prop="platform">
<el-select v-model="model.platform">
<el-option v-for="platform in platforms" :key="platform.value" :value="platform.value" :label="platform.label" />
</el-select>
</el-form-item>
<el-form-item label="应用" prop="application">
<el-select v-model="model.application">
<el-option v-for="application in applications" :key="application.value" :value="application.value" :label="application.label" />
</el-select>
</el-form-item>
<el-form-item label="unionid" prop="unionid">
<el-input v-model="model.unionid" placeholder="请输入unionid" clearable />
</el-form-item>
<el-form-item label="openid" prop="openid">
<el-input v-model="model.openid" placeholder="请输入openid" clearable />
</el-form-item>
<el-form-item label="头像" prop="headimgurl">
<el-input v-model="model.headimgurl" placeholder="请输入头像链接或上传头像" clearable />
</el-form-item>
<el-form-item label="" prop="headimgurl">
<el-col :span="12" style="height:100px">
<el-image style="width:100px;height:100px;border-radius:50%;" :src="model.headimgurl" :preview-src-list="[model.headimgurl]" fit="contain" title="点击看大图">
<div slot="error" class="image-slot">
<el-avatar :size="100" icon="el-icon-user-solid" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload()">上传头像</el-button>
<el-button size="mini" @click="fileDelete()">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="昵称" prop="nickname">
<el-input v-model="model.nickname" placeholder="请输入昵称" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录IP" prop="login_ip">
<el-input v-model="model.login_ip" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录地区" prop="login_region">
<el-input v-model="model.login_region" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录时间" prop="login_time">
<el-input v-model="model.login_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="登录次数" prop="login_num">
<el-input v-model="model.login_num" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="添加/绑定时间" prop="create_time">
<el-input v-model="model.create_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="修改时间" prop="update_time">
<el-input v-model="model.update_time" disabled />
</el-form-item>
<el-form-item v-if="model.delete_time" label="删除时间" prop="delete_time">
<el-input v-model="model.delete_time" disabled />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loading" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="submit">提交</el-button>
</div>
</el-dialog>
<!-- 文件管理 -->
<el-dialog title="上传头像" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
</div>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import Pagination from '@/components/Pagination'
import FileManage from '@/components/FileManage'
import { arrayColumn } from '@/utils/index'
import { list, info, add, edit, dele, disable } from '@/api/member/third'
export default {
name: 'MemberThird',
components: { Pagination, FileManage },
data() {
return {
name: '会员第三方账号',
height: 680,
loading: false,
idkey: 'third_id',
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'nickname', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
platforms: [],
applications: [],
dialog: false,
dialogTitle: '',
model: {
third_id: '',
member_id: 0,
platform: 20,
application: 21,
unionid: '',
openid: '',
headimgurl: '',
nickname: '',
remark: ''
},
rules: {
member_id: [{ required: true, message: '请输入openid', trigger: 'blur' }],
openid: [{ required: true, message: '请输入openid', trigger: 'blur' }]
},
selection: [],
selectIds: '',
selectTitle: '选中操作',
selectDialog: false,
selectType: '',
is_disable: 0,
fileDialog: false
}
},
created() {
this.height = screenHeight()
this.list()
},
methods: {
//
list() {
this.loading = true
list(this.query).then(res => {
this.data = res.data.list
this.count = res.data.count
this.exps = res.data.exps
this.platforms = res.data.platforms
this.applications = res.data.applications
this.loading = false
}).catch(() => {
this.loading = false
})
},
//
add() {
this.dialog = true
this.dialogTitle = this.name + '添加'
this.reset()
},
edit(row) {
this.dialog = true
this.dialogTitle = this.name + '修改:' + row[this.idkey]
var id = {}
id[this.idkey] = row[this.idkey]
info(id).then(res => {
this.reset(res.data)
}).catch(() => { })
},
cancel() {
this.dialog = false
this.reset()
},
submit() {
this.$refs['ref'].validate(valid => {
if (valid) {
this.loading = true
if (this.model[this.idkey]) {
edit(this.model).then(res => {
this.list()
this.dialog = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
} else {
add(this.model).then(res => {
this.list()
this.dialog = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
}
})
},
//
reset(row) {
if (row) {
this.model = row
} else {
this.model = this.$options.data().model
}
if (this.$refs['ref'] !== undefined) {
this.$refs['ref'].resetFields()
this.$refs['ref'].clearValidate()
}
},
//
search() {
this.query.page = 1
this.list()
},
//
refresh() {
const limit = this.query.limit
this.query = this.$options.data().query
this.$refs['table'].clearSort()
this.query.limit = limit
this.list()
},
//
sort(sort) {
this.query.sort_field = sort.prop
this.query.sort_value = ''
if (sort.order === 'ascending') {
this.query.sort_value = 'asc'
this.list()
}
if (sort.order === 'descending') {
this.query.sort_value = 'desc'
this.list()
}
},
//
select(selection) {
this.selection = selection
this.selectIds = this.selectGetIds(selection).toString()
},
selectGetIds(selection) {
return arrayColumn(selection, this.idkey)
},
selectAlert() {
this.$alert('请选择需要操作的' + this.name, '提示', { type: 'warning', callback: action => { } })
},
selectOpen(selectType, selectRow = '') {
if (selectRow) {
this.$refs['table'].clearSelection()
this.$refs['table'].toggleRowSelection(selectRow)
}
if (!this.selection.length) {
this.selectAlert()
} else {
this.selectTitle = '选中操作'
if (selectType === 'disable') {
this.selectTitle = this.name + '是否禁用'
} else if (selectType === 'dele') {
this.selectTitle = this.name + '删除'
}
this.selectDialog = true
this.selectType = selectType
}
},
selectCancel() {
this.selectDialog = false
},
selectSubmit() {
if (!this.selection.length) {
this.selectAlert()
} else {
const selectType = this.selectType
if (selectType === 'disable') {
this.disable(this.selection, true)
} else if (selectType === 'dele') {
this.dele(this.selection, true)
}
this.selectDialog = false
}
},
//
disable(row, select = false) {
if (!row.length) {
this.selectAlert()
} else {
this.loading = true
var is_disable = row[0].is_disable
if (select) {
is_disable = this.is_disable
}
disable({
ids: this.selectGetIds(row),
is_disable: is_disable
}).then(res => {
this.list()
this.$message.success(res.msg)
}).catch(() => {
this.list()
})
}
},
//
dele(row) {
if (!row.length) {
this.selectAlert()
} else {
this.loading = true
dele({
ids: this.selectGetIds(row)
}).then(res => {
this.list()
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
},
//
fileUpload() {
this.fileDialog = true
},
fileCancel() {
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileLength = fileList.length
if (fileLength) {
const i = fileLength - 1
this.model.headimgurl = fileList[i]['file_url']
}
}
}
}
</script>
<style scoped>
</style>

View File

@ -7,8 +7,10 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="name" label="名称" />
<el-option value="unique" label="标识" />
<el-option value="name" label="名称" />
<el-option value="desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -23,7 +25,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -58,16 +60,18 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select" @cell-dblclick="cellDbclick">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="name" label="名称" min-width="220" sortable="custom" show-overflow-tooltip />
<el-table-column prop="unique" label="标识" min-width="120" sortable="custom" show-overflow-tooltip />
<el-table-column prop="name" label="名称" min-width="120" sortable="custom" show-overflow-tooltip />
<el-table-column prop="desc" label="描述" min-width="160" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
@ -80,15 +84,21 @@
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false" destroy-on-close>
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.unique, $event)" />
</el-input>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="model.name" placeholder="请输入名称" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.name, $event)" />
</el-input>
</el-form-item>
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.unique, $event)" />
</el-input>
<el-form-item label="描述" prop="desc">
<el-input v-model="model.desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
@ -132,7 +142,7 @@ export default {
height: 680,
loading: false,
idkey: 'accord_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -142,9 +152,10 @@ export default {
accord_id: '',
unique: '',
name: '',
desc: '',
content: '',
sort: 250,
is_disable: 0
remark: '',
sort: 250
},
rules: {
unique: [{ required: true, message: '请输入标识', trigger: 'blur' }],

View File

@ -7,10 +7,11 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="title" label="标题" />
<el-option value="unique" label="标识" />
<el-option value="title" label="标题" />
<el-option value="position" label="位置" />
<el-option value="desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -25,7 +26,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -64,6 +65,7 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select" @cell-dblclick="cellDbclick">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="unique" label="标识" min-width="100" sortable="custom" show-overflow-tooltip />
<el-table-column prop="file_url" label="文件" min-width="130">
<template slot-scope="scope">
<div v-if="scope.row.file_url" style="height:30px">
@ -95,18 +97,17 @@
</el-table-column>
<el-table-column prop="file_type_name" label="类型" min-width="75" />
<el-table-column prop="title" label="标题" min-width="150" sortable="custom" show-overflow-tooltip />
<el-table-column prop="unique" label="标识" min-width="100" sortable="custom" show-overflow-tooltip />
<el-table-column prop="link" label="链接" min-width="180" sortable="custom" show-overflow-tooltip />
<el-table-column prop="position" label="位置" min-width="120" sortable="custom" show-overflow-tooltip />
<el-table-column prop="desc" label="描述" min-width="120" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" sortable="custom" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
@ -119,6 +120,11 @@
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false" destroy-on-close>
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.unique, $event)" />
</el-input>
</el-form-item>
<el-form-item label="文件" prop="file_id">
<el-col :span="16">
<div style="height:180px">
@ -168,21 +174,16 @@
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.title, $event)" />
</el-input>
</el-form-item>
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.unique, $event)" />
</el-input>
</el-form-item>
<el-form-item label="链接" prop="link">
<el-input v-model="model.link" placeholder="请输入链接" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.link, $event)" />
</el-input>
</el-form-item>
<el-form-item label="描述" prop="desc">
<el-input v-model="model.desc" placeholder="请输入描述" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.desc, $event)" />
<el-input v-model="model.desc" type="textarea" autosize placeholder="请输入描述" clearable /></el-form-item>
<el-form-item label="链接" prop="url">
<el-input v-model="model.url" placeholder="请输入链接" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.url, $event)" />
</el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
</el-form-item>
@ -271,7 +272,7 @@ export default {
height: 680,
loading: false,
idkey: 'carousel_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'title', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -286,15 +287,14 @@ export default {
file_name: '',
file_ext: '',
title: '',
link: '',
position: '',
url: '',
desc: '',
remark: '',
sort: 250,
is_disable: 0,
file_list: []
},
rules: {
file_type: [{ required: true, message: '请选择类型', trigger: 'blur' }],
title: [{ required: true, message: '请输入标题', trigger: 'blur' }]
},
selection: [],

View File

@ -1,155 +0,0 @@
<template>
<el-card>
<el-form ref="ref" :model="model" :rules="rules" label-width="130px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="名称" prop="name">
<el-col :span="12">
<el-input v-model="model.name" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.name, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="原始ID" prop="origin_id">
<el-col :span="12">
<el-input v-model="model.origin_id" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.origin_id, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="小程序码" prop="qrcode_url">
<el-col :span="6" style="height:100px">
<el-image v-if="model.qrcode_url" style="height:100px" fit="contain" :src="model.qrcode_url" :preview-src-list="[model.qrcode_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
<el-button size="mini" @click="fileUpload()">上传小程序码</el-button>
<el-button size="mini" @click="fileDelete()">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="* AppID" prop="appid">
<el-col :span="12">
<el-input v-model="model.appid" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.appid, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="* AppSecret" prop="appsecret">
<el-col :span="12">
<el-input v-model="model.appsecret" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.appsecret, $event)" />
</el-input>
</el-col>
</el-form-item>
</el-form>
<el-form ref="form" label-width="120px">
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
</el-form-item>
</el-form>
<el-dialog title="上传二维码" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
</el-card>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import clip from '@/utils/clipboard'
import FileManage from '@/components/FileManage'
import { miniInfo, miniEdit } from '@/api/setting/wechat'
export default {
name: 'SettingWechatMini',
components: { FileManage },
data() {
return {
name: '微信小程序',
height: 680,
loading: false,
model: {
name: '',
origin_id: '',
qrcode_id: 0,
qrcode_url: '',
appid: '',
appsecret: ''
},
rules: {
},
fileDialog: false
}
},
created() {
this.height = screenHeight(270)
this.info()
},
methods: {
//
info() {
miniInfo().then((res) => {
this.model = res.data
})
},
//
refresh() {
this.loading = true
miniInfo().then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
},
//
submit() {
this.$refs['ref'].validate((valid) => {
if (valid) {
this.loading = true
miniEdit(this.model).then((res) => {
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
})
},
//
fileUpload() {
this.fileDialog = true
},
fileCancel() {
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileLength = fileList.length
if (fileLength) {
const i = fileLength - 1
this.model.qrcode_id = fileList[i]['file_id']
this.model.qrcode_url = fileList[i]['file_url']
}
},
fileDelete() {
this.model.qrcode_id = 0
this.model.qrcode_url = ''
},
//
copy(text, event) {
if (text) {
clip(text, event)
} else {
this.$message.error('内容为空')
}
}
}
}
</script>
<style scoped>
</style>

View File

@ -1,192 +0,0 @@
<template>
<el-card>
<el-form ref="ref" :model="model" :rules="rules" label-width="130px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="名称" prop="name">
<el-col :span="12">
<el-input v-model="model.name" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.name, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="原始ID" prop="origin_id">
<el-col :span="12">
<el-input v-model="model.origin_id" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.origin_id, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="公众号码" prop="qrcode_url">
<el-col :span="6" style="height:100px">
<el-image v-if="model.qrcode_url" style="height:100px" fit="contain" :src="model.qrcode_url" :preview-src-list="[model.qrcode_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="6">
<el-button size="mini" @click="fileUpload()">上传公众号码</el-button>
<el-button size="mini" @click="fileDelete()">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="* AppID" prop="appid">
<el-col :span="12">
<el-input v-model="model.appid" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.appid, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="* AppSecret" prop="appsecret">
<el-col :span="12">
<el-input v-model="model.appsecret" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.appsecret, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="服务器地址(URL)" prop="server_url">
<el-col :span="12">
<el-input v-model="model.server_url" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.server_url, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="令牌(Token)" prop="token">
<el-col :span="12">
<el-input v-model="model.token" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.token, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="消息加解密密钥" prop="encoding_aes_key">
<el-col :span="12">
<el-input v-model="model.encoding_aes_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.encoding_aes_key, $event)" />
</el-input>
</el-col>
</el-form-item>
<el-form-item label="消息加解密方式" prop="encoding_aes_type">
<el-col :span="12">
<el-radio-group v-model="model.encoding_aes_type">
<el-radio v-for="item in encoding_aes_types" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-col>
</el-form-item>
</el-form>
<el-form ref="form" label-width="120px">
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
</el-form-item>
</el-form>
<el-dialog title="上传二维码" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
</el-card>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import clip from '@/utils/clipboard'
import FileManage from '@/components/FileManage'
import { offiInfo, offiEdit } from '@/api/setting/wechat'
export default {
name: 'SettingWechatOffi',
components: { FileManage },
data() {
return {
name: '微信公众号',
height: 680,
loading: false,
model: {
name: '',
origin_id: '',
qrcode_id: 0,
qrcode_url: '',
appid: '',
appsecret: '',
server_url: '',
token: '',
encoding_aes_key: '',
encoding_aes_type: 1
},
rules: {
},
encoding_aes_types: [
{ value: 1, label: '明文模式' },
{ value: 2, label: '兼容模式' },
{ value: 3, label: '安全模式' }
],
fileDialog: false
}
},
created() {
this.height = screenHeight(270)
this.info()
},
methods: {
//
info() {
offiInfo().then((res) => {
this.model = res.data
})
},
//
refresh() {
this.loading = true
offiInfo().then((res) => {
this.model = res.data
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
},
//
submit() {
this.$refs['ref'].validate((valid) => {
if (valid) {
this.loading = true
offiEdit(this.model).then((res) => {
this.loading = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
})
},
//
fileUpload() {
this.fileDialog = true
},
fileCancel() {
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileLength = fileList.length
if (fileLength) {
const i = fileLength - 1
this.model.qrcode_id = fileList[i]['file_id']
this.model.qrcode_url = fileList[i]['file_url']
}
},
fileDelete() {
this.model.qrcode_id = 0
this.model.qrcode_url = ''
},
//
copy(text, event) {
if (text) {
clip(text, event)
} else {
this.$message.error('内容为空')
}
}
}
}
</script>
<style scoped>
</style>

View File

@ -13,6 +13,7 @@
<el-option value="phone" label="手机" />
<el-option value="email" label="邮箱" />
<el-option value="receipt_no" label="回执" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -33,7 +34,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -91,8 +92,8 @@
</template>
</el-table-column>
<el-table-column prop="receipt_no" label="回执编号" min-width="100" show-overflow-tooltip />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" title="修改" @click="edit(scope.row)">修改</el-button>
@ -106,11 +107,11 @@
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" class="dialog-body" label-width="100px" :style="{ height: height + 'px' }">
<el-form-item label="会员ID" prop="member_id">
<el-col :span="10">
<el-col :span="8">
<el-input v-model="model.member_id" placeholder="请输入会员ID" clearable />
</el-col>
<el-col class="ya-center" :span="4">会员用户名</el-col>
<el-col :span="10">
<el-col :span="12">
<el-input v-model="model.member_username" placeholder="" disabled />
</el-col>
</el-form-item>
@ -123,7 +124,7 @@
<el-input v-model="model.title" placeholder="请输入标题" clearable />
</el-form-item>
<el-form-item label="内容" prop="content">
<el-input v-model="model.content" type="textarea" placeholder="请输入内容" clearable :autosize="{ minRows: 5, maxRows: 20 }" />
<el-input v-model="model.content" type="textarea" :autosize="{ minRows: 5, maxRows: 20 }" placeholder="请输入内容" clearable />
</el-form-item>
<el-form-item label="图片" prop="images">
<el-row>
@ -154,7 +155,7 @@
<el-input v-model="model.email" placeholder="" clearable />
</el-form-item>
<el-form-item label="回复" prop="reply">
<el-input v-model="model.reply" type="textarea" placeholder="请输入回复" clearable :autosize="{ minRows: 5, maxRows: 20 }" />
<el-input v-model="model.reply" type="textarea" :autosize="{ minRows: 5, maxRows: 20 }" placeholder="请输入回复" clearable />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="model.status">
@ -207,7 +208,7 @@ export default {
height: 680,
loading: false,
idkey: 'feedback_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'title', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,

451
src/views/setting/link.vue Normal file
View File

@ -0,0 +1,451 @@
<template>
<div class="app-container">
<!-- 查询操作 -->
<div class="filter-container">
<!-- 查询 -->
<el-row>
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="unique" label="标识" />
<el-option value="name" label="名称" />
<el-option value="desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
<el-option v-for="exp in exps" :key="exp.exp" :value="exp.exp" :label="exp.name" />
</el-select>
<el-select v-if="query.search_field==='is_disable'" v-model="query.search_value" class="filter-item ya-search-value">
<el-option :value="1" label="是" />
<el-option :value="0" label="否" />
</el-select>
<el-input v-else v-model="query.search_value" class="filter-item ya-search-value" placeholder="查询内容" clearable />
<el-select v-model="query.date_field" class="filter-item ya-date-field" placeholder="时间字段">
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
<el-option value="expiration_date" label="有效期" />
</el-select>
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
</el-row>
<!-- 选中操作 -->
<el-row>
<el-col>
<el-button title="修改有效期" @click="selectOpen('expiration')">有效期</el-button>
<el-button title="是否禁用" @click="selectOpen('disable')">禁用</el-button>
<el-button title="删除" @click="selectOpen('dele')">删除</el-button>
<el-button type="primary" @click="add()">添加</el-button>
</el-col>
</el-row>
<el-dialog :title="selectTitle" :visible.sync="selectDialog" top="20vh" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="selectRef" label-width="120px">
<el-form-item :label="name+'ID'" prop="">
<el-input v-model="selectIds" type="textarea" :autosize="{minRows: 5, maxRows: 12}" disabled />
</el-form-item>
<el-form-item v-if="selectType==='expiration'" label="有效期" prop="">
<el-date-picker v-model="expiration_date" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="23:59:59" placeholder="有效期" />
</el-form-item>
<el-form-item v-else-if="selectType==='disable'" label="是否禁用" prop="">
<el-switch v-model="is_disable" :active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item v-else-if="selectType==='dele'" label="" prop="">
<span style="color:red">确定要删除选中的{{ name }}</span>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loading" @click="selectCancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="selectSubmit">提交</el-button>
</div>
</el-dialog>
</div>
<!-- 列表 -->
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="unique" label="标识" min-width="90" show-overflow-tooltip />
<el-table-column prop="image_id" label="图片" min-width="60">
<template slot-scope="scope">
<div style="height:30px">
<el-image v-if="scope.row.image_url" style="height:30px" fit="contain" :src="scope.row.image_url" :preview-src-list="[scope.row.image_url]" title="点击看大图" lazy scroll-container=".el-table__body-wrapper">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</div>
</template>
</el-table-column>
<el-table-column prop="name" label="名称" min-width="120" show-overflow-tooltip>
<template slot-scope="scope">
<span :style="{'color':scope.row.name_color}">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="url" label="链接" min-width="200" show-overflow-tooltip />
<el-table-column prop="desc" label="描述" width="180" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="expiration_date" label="有效期" width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
<el-button size="mini" type="text" @click="selectOpen('dele',scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<pagination v-show="count>0" :total="count" :page.sync="query.page" :limit.sync="query.limit" @pagination="list" />
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :model="model" :rules="rules" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
<el-form-item label="标识" prop="unique">
<el-input v-model="model.unique" placeholder="请输入标识(唯一)" clearable />
</el-form-item>
<el-form-item label="图片" prop="image_url">
<el-col :span="12" style="height:100px">
<el-image v-if="model.image_url" style="height:100px" fit="contain" :src="model.image_url" :preview-src-list="[model.image_url]" title="点击看大图">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
</el-col>
<el-col :span="12">
<el-button size="mini" @click="fileUpload()">上传图片</el-button>
<el-button size="mini" @click="fileDelete()">删除</el-button>
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-col :span="18">
<el-input v-model="model.name" placeholder="请输入名称" clearable />
</el-col>
<el-col :span="3" style="text-align:center">名称颜色</el-col>
<el-col :span="3">
<el-color-picker v-model="model.name_color" />
</el-col>
</el-form-item>
<el-form-item label="链接" prop="url">
<el-col :span="18">
<el-input v-model="model.url" placeholder="请输入链接" clearable />
</el-col>
<el-col :span="3" style="text-align:center">下划线</el-col>
<el-col :span="3">
<el-switch v-model="model.underline" :active-value="1" :inactive-value="0" />
</el-col>
</el-form-item>
<el-form-item label="描述" prop="desc">
<el-input v-model="model.desc" type="textarea" :autosize="{ minRows: 2, maxRows: 5}" placeholder="请输入描述" />
</el-form-item>
<el-form-item label="有效期" prop="expiration_date">
<el-date-picker v-model="model.expiration_date" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="23:59:59" placeholder="有效期" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" placeholder="请输入排序" />
</el-form-item>
<el-form-item v-if="model[idkey]" label="添加时间" prop="create_time">
<el-input v-model="model.create_time" disabled />
</el-form-item>
<el-form-item v-if="model[idkey]" label="修改时间" prop="update_time">
<el-input v-model="model.update_time" disabled />
</el-form-item>
<el-form-item v-if="model.delete_time" label="删除时间" prop="delete_time">
<el-input v-model="model.delete_time" disabled />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loading" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="submit">提交</el-button>
</div>
</el-dialog>
<!-- 文件管理 -->
<el-dialog title="上传图片" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
</div>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import Pagination from '@/components/Pagination'
import FileManage from '@/components/FileManage'
import { arrayColumn } from '@/utils/index'
import { list, info, add, edit, dele, expiration, disable } from '@/api/setting/link'
export default {
name: 'SettingLink',
components: { Pagination, FileManage },
data() {
return {
name: '友链',
height: 680,
loading: false,
idkey: 'link_id',
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
dialog: false,
dialogTitle: '',
model: {
link_id: '',
unique: '',
image_id: 0,
image_url: '',
name: '',
name_color: '#606266',
url: '',
desc: '',
expiration_date: '2099-12-31 23:59:59',
underline: 0,
remark: '',
sort: 250
},
rules: {
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
expiration_date: [{ required: true, message: '请输入有效期', trigger: 'blur' }]
},
types: [],
selection: [],
selectIds: '',
selectTitle: '选中操作',
selectDialog: false,
selectType: '',
expiration_date: '',
is_disable: 0,
fileDialog: false
}
},
created() {
this.height = screenHeight()
this.list()
},
methods: {
//
list() {
this.loading = true
list(this.query).then(res => {
this.data = res.data.list
this.count = res.data.count
this.exps = res.data.exps
this.loading = false
}).catch(() => {
this.loading = false
})
},
//
add() {
this.dialog = true
this.dialogTitle = this.name + '添加'
this.reset()
},
edit(row) {
this.dialog = true
this.dialogTitle = this.name + '修改:' + row[this.idkey]
var id = {}
id[this.idkey] = row[this.idkey]
info(id).then(res => {
this.reset(res.data)
}).catch(() => { })
},
cancel() {
this.dialog = false
this.reset()
},
submit() {
this.$refs['ref'].validate(valid => {
if (valid) {
this.loading = true
if (this.model[this.idkey]) {
edit(this.model).then(res => {
this.list()
this.dialog = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
} else {
add(this.model).then(res => {
this.list()
this.dialog = false
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
}
})
},
//
reset(row) {
if (row) {
this.model = row
} else {
this.model = this.$options.data().model
}
if (this.$refs['ref'] !== undefined) {
this.$refs['ref'].resetFields()
this.$refs['ref'].clearValidate()
}
},
//
search() {
this.query.page = 1
this.list()
},
//
refresh() {
const limit = this.query.limit
this.query = this.$options.data().query
this.$refs['table'].clearSort()
this.query.limit = limit
this.list()
},
//
sort(sort) {
this.query.sort_field = sort.prop
this.query.sort_value = ''
if (sort.order === 'ascending') {
this.query.sort_value = 'asc'
this.list()
}
if (sort.order === 'descending') {
this.query.sort_value = 'desc'
this.list()
}
},
//
select(selection) {
this.selection = selection
this.selectIds = this.selectGetIds(selection).toString()
},
selectGetIds(selection) {
return arrayColumn(selection, this.idkey)
},
selectAlert() {
this.$alert('请选择需要操作的' + this.name, '提示', { type: 'warning', callback: action => { } })
},
selectOpen(selectType, selectRow = '') {
if (selectRow) {
this.$refs['table'].clearSelection()
this.$refs['table'].toggleRowSelection(selectRow)
}
if (!this.selection.length) {
this.selectAlert()
} else {
this.selectTitle = '选中操作'
if (selectType === 'dele') {
this.selectTitle = this.name + '删除'
} else if (selectType === 'disable') {
this.selectTitle = this.name + '是否禁用'
} else if (selectType === 'expiration') {
this.selectTitle = this.name + '修改有效期'
}
this.selectDialog = true
this.selectType = selectType
}
},
selectCancel() {
this.selectDialog = false
},
selectSubmit() {
if (!this.selection.length) {
this.selectAlert()
} else {
const selectType = this.selectType
if (selectType === 'dele') {
this.dele(this.selection)
} else if (selectType === 'disable') {
this.disable(this.selection, true)
} else if (selectType === 'expiration') {
this.expiration(this.selection)
}
this.selectDialog = false
}
},
//
dele(row) {
if (!row.length) {
this.selectAlert()
} else {
dele({
ids: this.selectGetIds(row)
}).then(res => {
this.list()
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
},
//
disable(row, select = false) {
if (!row.length) {
this.selectAlert()
} else {
this.loading = true
var is_disable = row[0].is_disable
if (select) {
is_disable = this.is_disable
}
disable({
ids: this.selectGetIds(row),
is_disable: is_disable
}).then(res => {
this.list()
this.$message.success(res.msg)
}).catch(() => {
this.list()
})
}
},
//
expiration(row) {
if (!row.length) {
this.selectAlert()
} else {
this.loading = true
expiration({
ids: this.selectGetIds(row),
expiration_date: this.expiration_date,
end_time: this.end_time
}).then(res => {
this.list()
this.$message.success(res.msg)
}).catch(() => {
this.loading = false
})
}
},
//
fileUpload() {
this.fileDialog = true
},
fileCancel() {
this.fileDialog = false
},
fileSubmit(fileList) {
this.fileDialog = false
const fileLength = fileList.length
if (fileLength) {
const i = fileLength - 1
this.model.image_id = fileList[i]['file_id']
this.model.image_url = fileList[i]['file_url']
}
},
fileDelete() {
this.model.image_id = 0
this.model.image_url = ''
}
}
}
</script>

View File

@ -9,6 +9,8 @@
<el-option :value="idkey" label="ID" />
<el-option value="type" label="类型" />
<el-option value="title" label="标题" />
<el-option value="desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -28,7 +30,7 @@
<el-option value="start_time" label="开始时间" />
<el-option value="end_time" label="结束时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -92,16 +94,16 @@
<span :style="{'color':scope.row.title_color}">{{ scope.row.title }}</span>
</template>
</el-table-column>
<el-table-column prop="start_time" label="开始时间" min-width="160" sortable="custom" />
<el-table-column prop="end_time" label="结束时间" min-width="160" sortable="custom" />
<el-table-column prop="start_time" label="开始时间" width="155" sortable="custom" />
<el-table-column prop="end_time" label="结束时间" width="155" sortable="custom" />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
@ -134,19 +136,25 @@
</el-select>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="model.title" placeholder="请输入标题" clearable />
<el-col :span="18">
<el-input v-model="model.title" placeholder="请输入标题" clearable />
</el-col>
<el-col :span="3" class="ya-center">标题颜色</el-col>
<el-col :span="3">
<el-color-picker v-model="model.title_color" />
</el-col>
</el-form-item>
<el-form-item label="标题颜色" prop="title_color">
<el-color-picker v-model="model.title_color" />
</el-form-item>
<el-form-item label="简介" prop="intro">
<el-input v-model="model.intro" type="textarea" placeholder="请输入简介" :autosize="{ minRows: 2, maxRows: 5}" />
<el-form-item label="描述" prop="desc">
<el-input v-model="model.desc" type="textarea" autosize placeholder="请输入描述" />
</el-form-item>
<el-form-item label="开始时间" prop="start_time">
<el-date-picker v-model="model.start_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="00:00:00" placeholder="禁用开始时间" />
<el-date-picker v-model="model.start_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="00:00:00" placeholder="开始时间" />
</el-form-item>
<el-form-item label="结束时间" prop="end_time">
<el-date-picker v-model="model.end_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="23:59:59" placeholder="禁用结束时间" />
<el-date-picker v-model="model.end_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="23:59:59" placeholder="结束时间" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" placeholder="请输入排序" />
@ -193,7 +201,7 @@ export default {
height: 680,
loading: false,
idkey: 'notice_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'title', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -208,8 +216,9 @@ export default {
title_color: '#606266',
start_time: '',
end_time: '',
intro: '',
desc: '',
content: '',
remark: '',
sort: 250
},
rules: {

View File

@ -24,7 +24,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -91,6 +91,11 @@
</template>
</el-table-column>
</el-table>
<el-row>
<el-descriptions title="" :column="12" :colon="false" size="medium">
<el-descriptions-item label=""> {{ count }} </el-descriptions-item>
</el-descriptions>
</el-row>
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height-50+'px'}">
@ -128,12 +133,12 @@
</el-input>
</el-form-item>
<el-form-item label="经度" prop="region_longitude">
<el-input v-model="model.region_longitude" placeholder="请输入经度eg116.403263" clearable>
<el-input v-model="model.region_longitude" placeholder="请输入经度(高德)eg116.403263" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.region_longitude, $event)" />
</el-input>
</el-form-item>
<el-form-item label="纬度" prop="region_latitude">
<el-input v-model="model.region_latitude" placeholder="请输入纬度eg39.915156" clearable>
<el-input v-model="model.region_latitude" placeholder="请输入纬度(高德)eg39.915156" clearable>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.region_latitude, $event)" />
</el-input>
</el-form-item>
@ -142,6 +147,16 @@
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.sort, $event)" />
</el-input>
</el-form-item>
<el-form-item v-if="model[idkey]" label="完整名称" prop="region_fullname">
<el-input v-model="model.region_fullname" placeholder="" disabled>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.region_fullname, $event)" />
</el-input>
</el-form-item>
<el-form-item v-if="model[idkey]" label="完整拼音" prop="region_fullname_py">
<el-input v-model="model.region_fullname_py" placeholder="" disabled>
<el-button slot="append" icon="el-icon-document-copy" title="复制" @click="copy(model.region_fullname_py, $event)" />
</el-input>
</el-form-item>
<el-form-item v-if="model[idkey]" label="添加时间" prop="create_time">
<el-input v-model="model.create_time" placeholder="" disabled />
</el-form-item>
@ -176,7 +191,7 @@ export default {
loading: false,
idkey: 'region_id',
tbKey: 1,
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { search_field: 'region_name', search_exp: 'like', date_field: 'create_time' },
data: [],
dialog: false,
@ -207,7 +222,8 @@ export default {
region_pid: 0,
region_citycode: '',
region_zipcode: '',
is_disable: 0
is_disable: 0,
count: ''
}
},
created() {
@ -222,6 +238,7 @@ export default {
this.data = res.data.list
this.trees = res.data.tree
this.exps = res.data.exps
this.count = res.data.count
this.loading = false
}).catch(() => {
this.loading = false

View File

@ -1,48 +1,9 @@
<template>
<div class="app-container">
<!-- 内容设置 -->
<el-card>
<el-form ref="ref" :model="model" :rules="rules" label-width="120px">
<el-tabs>
<el-tab-pane label="设置管理" name="" class="dialog-body" :style="{ height: height + 'px' }">
<el-form-item label="反馈管理" prop="is_feedback">
<el-col :span="3">
<el-switch v-model="model.is_feedback" :active-value="1" :inactive-value="0" />
</el-col>
<el-col :span="21">
<span>反馈是否开启关闭后前台无法提交反馈</span>
</el-col>
</el-form-item>
<el-form-item label="自定义设置">
<el-col :span="3">
键名
</el-col>
<el-col :span="5">
键值
</el-col>
<el-col :span="6">
说明
</el-col>
<el-col :span="2">
<el-button type="primary" @click="add()">增加</el-button>
</el-col>
</el-form-item>
<el-form-item v-for="(item, index) in model.diy_config" :key="index" label="">
<el-col :span="3">
<el-input v-model="item.config_key" clearable placeholder="请输入键名" />
</el-col>
<el-col :span="5">
<el-input v-model="item.config_val" clearable placeholder="请输入键值" />
</el-col>
<el-col :span="6">
<el-input v-model="item.config_desc" clearable placeholder="请输入说明" />
</el-col>
<el-col :span="2">
<el-button type="text" @click="dele(index)">删除</el-button>
</el-col>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="基本信息" name="" class="dialog-body" :style="{ height: height + 'px' }">
<el-tab-pane label="基本信息" class="dialog-body" :style="{ height: height + 'px' }">
<el-form-item label="favicon" prop="favicon_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.favicon_url" style="height:100px" fit="contain" :src="model.favicon_url" :preview-src-list="[model.favicon_url]" title="点击看大图">
@ -88,7 +49,7 @@
</el-form-item>
<el-form-item label="描述" prop="description">
<el-col :span="12">
<el-input v-model="model.description" type="textarea" placeholder="description" :autosize="{ minRows: 2, maxRows: 20 }" />
<el-input v-model="model.description" type="textarea" :autosize="{ minRows: 2, maxRows: 20 }" placeholder="description" />
</el-col>
</el-form-item>
<el-form-item label="备案号" prop="icp">
@ -102,7 +63,7 @@
</el-col>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="联系信息" name="" class="dialog-body" :style="{ height: height + 'px' }">
<el-tab-pane label="联系信息" class="dialog-body" :style="{ height: height + 'px' }">
<el-form-item label="公众号" prop="offi_id">
<el-col :span="6" style="height:100px">
<el-image v-if="model.offi_url" style="height:100px" fit="contain" :src="model.offi_url" :preview-src-list="[model.offi_url]" title="点击看大图">
@ -174,7 +135,6 @@
</el-form-item>
</el-form>
</el-card>
<!-- 文件管理 -->
<el-dialog :title="fileTitle" :visible.sync="fileDialog" width="80%" top="1vh" :close-on-click-modal="false" :close-on-press-escape="false">
<file-manage file-type="image" @fileCancel="fileCancel" @fileSubmit="fileSubmit" />
</el-dialog>
@ -215,10 +175,8 @@ export default {
fax: '',
mobile: '',
email: '',
qq: '',
wechat: '',
is_feedback: 1,
diy_config: []
qq: ''
},
rules: {},
fileDialog: false,
@ -237,20 +195,6 @@ export default {
this.model = res.data
})
},
//
add() {
this.model.diy_config.push({ config_key: '', config_val: '', config_desc: '' })
},
//
dele(index) {
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.model.diy_config.splice(index, 1)
}).catch(() => { })
},
//
refresh() {
this.loading = true

View File

@ -1,33 +0,0 @@
<template>
<div class="app-container">
<el-tabs>
<el-tab-pane v-if="checkPermission(['admin/setting.Wechat/offiInfo'])" label="公众号" lazy>
<wechat-offi />
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/setting.Wechat/miniInfo'])" label="小程序" lazy>
<wechat-mini />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import checkPermission from '@/utils/permission' //
import WechatOffi from './components/WechatOffi'
import WechatMini from './components/WechatMini'
export default {
name: 'SettingWechat',
components: { WechatOffi, WechatMini },
data() {
return {
name: '微信设置'
}
},
created() {
},
methods: {
checkPermission
}
}
</script>

View File

@ -93,7 +93,7 @@ export default {
idkey: 'notice_id',
query: { page: 1, limit: 10 },
data: [],
exps: [],
exps: [{ exp: 'like', name: '包含' }],
count: 0,
dialog: false,
dialogTitle: '公告',

View File

@ -58,7 +58,7 @@
<el-input v-model="model.email_test" type="text" clearable />
</el-col>
<el-col :span="16">
<el-button :loading="loading" type="primary" title="先提交再发送" @click="test()">发送测试邮件</el-button>
<el-button :loading="loading" type="text" title="先提交再发送" @click="test()">发送测试邮件</el-button>
</el-col>
</el-form-item>
<el-form-item>

View File

@ -2,7 +2,10 @@
<el-card class="dialog-body" :style="{ height: height + 'px' }">
<el-row :gutter="8">
<el-col :span="12">
<el-form :model="model" label-width="150px">
<el-form :model="model" label-width="150px" size="small">
<el-form-item label="ThinkPHP">
<el-input v-model="model.thinkphp" />
</el-form-item>
<el-form-item label="OS">
<el-input v-model="model.system_info" />
</el-form-item>
@ -42,11 +45,11 @@
</el-form>
</el-col>
<el-col :span="12">
<el-form :model="model" label-width="150px">
<el-form :model="model" label-width="150px" size="small">
<el-form-item label="缓存类型" prop="type">
<el-input v-model="model.type" />
<el-input v-model="model.cache_type" />
</el-form-item>
<div v-if="model.type === 'redis'">
<div v-if="model.cache_type === 'redis'">
<el-form-item label="Redis" prop="">
<el-input v-model="model.redis_version" />
</el-form-item>
@ -83,7 +86,7 @@
</el-form-item>
</template>
</div>
<div v-else-if="model.type === 'memcache'">
<div v-else-if="model.cache_type === 'memcache'">
<el-form-item label="memcache" prop="">
<el-input v-model="model.version" />
</el-form-item>
@ -118,7 +121,7 @@
<el-input v-model="model.time" />
</el-form-item>
</div>
<div v-else-if="model.type === 'wincache'">
<div v-else-if="model.cache_type === 'wincache'">
<el-form-item label="缓存信息" prop="wincache_info">
<pre>{{ model.wincache_info }}</pre>
</el-form-item>
@ -126,7 +129,7 @@
</el-form>
</el-col>
<el-col :span="24">
<el-form :model="model" label-width="150px">
<el-form :model="model" label-width="150px" size="small">
<el-form-item>
<el-button :loading="loading" title="刷新" @click="refresh()">刷新</el-button>
</el-form-item>
@ -178,4 +181,7 @@ export default {
</script>
<style scoped>
.my-label {
color: #303133;
}
</style>

View File

@ -19,7 +19,7 @@
<el-option :value="2" label="操作日志" />
</el-select>
<el-input v-else v-model="query.search_value" class="filter-item ya-search-value" placeholder="查询内容" clearable />
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -57,11 +57,12 @@ export default {
height: 680,
loading: true,
idkey: 'log_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: {
page: 1,
limit: 12,
search_field: 'request_region',
search_exp: 'like',
date_field: 'create_time'
},
data: [],

View File

@ -11,6 +11,7 @@
<el-option value="dept_name" label="名称" />
<el-option value="dept_abbr" label="简称" />
<el-option value="dept_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -26,7 +27,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -79,8 +80,8 @@
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" />
<el-table-column prop="create_time" label="添加时间" min-width="155" />
<el-table-column prop="update_time" label="修改时间" min-width="155" />
<el-table-column prop="create_time" label="添加时间" width="155" />
<el-table-column prop="update_time" label="修改时间" width="155" />
<el-table-column label="操作" width="155">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="userShow(scope.row)">用户</el-button>
@ -90,6 +91,11 @@
</template>
</el-table-column>
</el-table>
<el-row>
<el-descriptions title="" :column="12" :colon="false" size="medium">
<el-descriptions-item label=""> {{ count }} </el-descriptions-item>
</el-descriptions>
</el-row>
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false" destroy-on-close>
<el-form ref="ref" :rules="rules" :model="model" class="dialog-body" label-width="100px" :style="{height:height+'px'}">
@ -103,7 +109,7 @@
<el-input v-model="model.dept_abbr" placeholder="请输入部门简称" clearable />
</el-form-item>
<el-form-item label="描述" prop="dept_desc">
<el-input v-model="model.dept_desc" placeholder="请输入部门描述" clearable />
<el-input v-model="model.dept_desc" type="textarea" autosize placeholder="请输入部门描述" clearable />
</el-form-item>
<el-form-item label="电话" prop="dept_tel">
<el-input v-model="model.dept_tel" placeholder="" clearable />
@ -117,6 +123,9 @@
<el-form-item label="地址" prop="dept_addr">
<el-input v-model="model.dept_addr" placeholder="" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" placeholder="250" clearable />
</el-form-item>
@ -202,7 +211,7 @@ export default {
height: 680,
loading: false,
idkey: 'dept_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { search_field: 'dept_name', search_exp: 'like', date_field: 'create_time' },
data: [],
dialog: false,
@ -217,6 +226,7 @@ export default {
dept_fax: '',
dept_email: '',
dept_addr: '',
remark: '',
sort: 250
},
rules: {
@ -244,7 +254,8 @@ export default {
userSelectIds: '',
userSelectTitle: '选中操作',
userSelectDialog: false,
userSelectType: ''
userSelectType: '',
count: ''
}
},
created() {
@ -259,6 +270,7 @@ export default {
this.data = res.data.list
this.trees = res.data.tree
this.exps = res.data.exps
this.count = res.data.count
this.isExpandAll = false
this.loading = false
}).catch(() => {

View File

@ -35,7 +35,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -154,6 +154,11 @@
</template>
</el-table-column>
</el-table>
<el-row>
<el-descriptions title="" :column="12" :colon="false" size="medium">
<el-descriptions-item label=""> {{ count }} </el-descriptions-item>
</el-descriptions>
</el-row>
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height-50+'px'}">
@ -250,6 +255,7 @@
<el-checkbox v-model="model.add_add">添加</el-checkbox>
<el-checkbox v-model="model.add_edit">修改</el-checkbox>
<el-checkbox v-model="model.add_dele">删除</el-checkbox>
<el-checkbox v-model="model.add_disable">禁用</el-checkbox>
</el-form-item>
<el-form-item v-if="model.menu_type===1" v-show="model[idkey]" label="快速修改" prop="edit">
<el-button icon="el-icon-question" class="ya-margin-right" title="快速修改,需要输入菜单链接:应用/控制器/操作;区分大小写" />
@ -257,6 +263,7 @@
<el-checkbox v-model="model.edit_add">添加</el-checkbox>
<el-checkbox v-model="model.edit_edit">修改</el-checkbox>
<el-checkbox v-model="model.edit_dele">删除</el-checkbox>
<el-checkbox v-model="model.edit_disable">禁用</el-checkbox>
</el-form-item>
<el-form-item v-if="model[idkey]" label="添加时间" prop="create_time">
<el-input v-model="model.create_time" disabled />
@ -337,7 +344,7 @@ export default {
height: 680,
loading: false,
idkey: 'menu_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { search_field: 'menu_name', search_exp: 'like', date_field: 'create_time' },
data: [],
dialog: false,
@ -359,10 +366,12 @@ export default {
add_add: false,
add_edit: false,
add_dele: false,
add_disable: false,
edit_info: false,
edit_add: false,
edit_edit: false,
edit_dele: false
edit_dele: false,
edit_disable: false
},
rules: {
menu_name: [{ required: true, message: '请输入菜单名称', trigger: 'blur' }],
@ -397,7 +406,8 @@ export default {
roleSelectIds: '',
roleSelectTitle: '选中操作',
roleSelectDialog: false,
roleSelectType: ''
roleSelectType: '',
count: ''
}
},
created() {
@ -412,6 +422,7 @@ export default {
this.data = res.data.list
this.trees = res.data.tree
this.exps = res.data.exps
this.count = res.data.count
this.isExpandAll = false
this.loading = false
}).catch(() => {
@ -475,8 +486,8 @@ export default {
this.$refs['ref'].resetFields()
this.$refs['ref'].clearValidate()
}
this.model.add_info = this.model.add_add = this.model.add_edit = this.model.add_dele = false
this.model.edit_info = this.model.edit_add = this.model.edit_edit = this.model.edit_dele = false
this.model.add_info = this.model.add_add = this.model.add_edit = this.model.add_dele = this.model.add_disable = false
this.model.edit_info = this.model.edit_add = this.model.edit_edit = this.model.edit_dele = this.model.edit_disable = false
},
//
search() {

View File

@ -8,6 +8,8 @@
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="title" label="标题" />
<el-option value="desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -24,7 +26,7 @@
<el-option value="start_time" label="开始时间" />
<el-option value="end_time" label="结束时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -81,16 +83,16 @@
<span :style="{'color':scope.row.title_color}">{{ scope.row.title }}</span>
</template>
</el-table-column>
<el-table-column prop="start_time" label="开始时间" min-width="160" sortable="custom" />
<el-table-column prop="end_time" label="结束时间" min-width="160" sortable="custom" />
<el-table-column prop="start_time" label="开始时间" width="160" sortable="custom" />
<el-table-column prop="end_time" label="结束时间" width="160" sortable="custom" />
<el-table-column prop="is_disable" label="禁用" min-width="75" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="edit(scope.row)">修改</el-button>
@ -118,13 +120,16 @@
</el-col>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="model.title" placeholder="请输入标题" clearable />
<el-col :span="18">
<el-input v-model="model.title" placeholder="请输入标题" clearable />
</el-col>
<el-col :span="3" style="text-align:center">标题颜色</el-col>
<el-col :span="3">
<el-color-picker v-model="model.title_color" />
</el-col>
</el-form-item>
<el-form-item label="标题颜色" prop="title_color">
<el-color-picker v-model="model.title_color" />
</el-form-item>
<el-form-item label="简介" prop="intro">
<el-input v-model="model.intro" type="textarea" placeholder="请输入简介" :autosize="{ minRows: 2, maxRows: 5}" />
<el-form-item label="简介" prop="desc">
<el-input v-model="model.desc" type="textarea" :autosize="{ minRows: 2, maxRows: 5}" placeholder="请输入简介" />
</el-form-item>
<el-form-item label="开始时间" prop="start_time">
<el-date-picker v-model="model.start_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="00:00:00" placeholder="禁用开始时间" />
@ -132,6 +137,9 @@
<el-form-item label="结束时间" prop="end_time">
<el-date-picker v-model="model.end_time" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" default-time="23:59:59" placeholder="禁用结束时间" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
</el-form-item>
@ -177,7 +185,7 @@ export default {
height: 680,
loading: false,
idkey: 'notice_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'title', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -192,8 +200,9 @@ export default {
title_color: '#606266',
start_time: '',
end_time: '',
intro: '',
desc: '',
content: '',
remark: '',
sort: 250
},
rules: {

View File

@ -11,6 +11,7 @@
<el-option value="post_name" label="名称" />
<el-option value="post_abbr" label="简称" />
<el-option value="post_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -26,7 +27,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -79,8 +80,8 @@
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="75" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="155">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="userShow(scope.row)">用户</el-button>
@ -90,6 +91,11 @@
</template>
</el-table-column>
</el-table>
<el-row>
<el-descriptions title="" :column="12" :colon="false" size="medium">
<el-descriptions-item label=""> {{ count }} </el-descriptions-item>
</el-descriptions>
</el-row>
<!-- 添加修改 -->
<el-dialog :title="dialogTitle" :visible.sync="dialog" top="5vh" :before-close="cancel" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="ref" :rules="rules" :model="model" label-width="100px" class="dialog-body" :style="{height:height+'px'}">
@ -103,7 +109,10 @@
<el-input v-model="model.post_abbr" placeholder="请输入简称" clearable />
</el-form-item>
<el-form-item label="描述" prop="post_desc">
<el-input v-model="model.post_desc" placeholder="请输入描述" clearable />
<el-input v-model="model.post_desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="model.sort" type="number" />
@ -189,16 +198,18 @@ export default {
height: 680,
loading: false,
idkey: 'post_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { search_field: 'post_name', search_exp: 'like', date_field: 'create_time' },
data: [],
dialog: false,
dialogTitle: '',
model: {
post_id: '',
post_pid: '',
post_name: '',
post_abbr: '',
post_desc: '',
remark: '',
sort: 250
},
rules: {
@ -226,7 +237,8 @@ export default {
userSelectIds: '',
userSelectTitle: '选中操作',
userSelectDialog: false,
userSelectType: ''
userSelectType: '',
count: ''
}
},
created() {
@ -241,6 +253,7 @@ export default {
this.data = res.data.list
this.trees = res.data.tree
this.exps = res.data.exps
this.count = res.data.count
this.loading = false
}).catch(() => {
this.loading = false

View File

@ -9,6 +9,7 @@
<el-option :value="idkey" label="ID" />
<el-option value="role_name" label="名称" />
<el-option value="role_desc" label="描述" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -23,7 +24,7 @@
<el-option value="create_time" label="添加时间" />
<el-option value="update_time" label="修改时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -85,16 +86,17 @@
<el-table ref="table" v-loading="loading" :data="data" :height="height" @sort-change="sort" @selection-change="select">
<el-table-column type="selection" width="42" title="全选/反选" />
<el-table-column :prop="idkey" label="ID" width="80" sortable="custom" />
<el-table-column prop="role_name" label="名称" min-width="150" show-overflow-tooltip />
<el-table-column prop="role_desc" label="描述" min-width="150" show-overflow-tooltip />
<el-table-column prop="role_name" label="名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="role_desc" label="描述" min-width="160" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_disable" label="禁用" min-width="80" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_disable" :active-value="1" :inactive-value="0" @change="disable([scope.row])" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="80" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="userShow(scope.row)">用户</el-button>
@ -112,7 +114,10 @@
<el-input v-model="model.role_name" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="描述" prop="role_desc">
<el-input v-model="model.role_desc" placeholder="请输入描述" clearable />
<el-input v-model="model.role_desc" type="textarea" autosize placeholder="请输入描述" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="model.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort" placeholder="250">
<el-input v-model="model.sort" type="number" />
@ -220,7 +225,7 @@ export default {
height: 680,
loading: false,
idkey: 'role_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'role_name', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -232,6 +237,7 @@ export default {
menu_ids: [],
role_name: '',
role_desc: '',
remark: '',
sort: 250
},
rules: {

View File

@ -13,6 +13,7 @@
<el-option value="request_region" label="请求地区" />
<el-option value="request_isp" label="请求ISP" />
<el-option value="response_code" label="返回码" />
<el-option value="response_msg" label="返回描述" />
<el-option value="log_type" label="日志类型" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -48,7 +49,7 @@
<el-option v-for="(item, index) in logTypes" :key="index" :value="index" :label="item" />
</el-select>
<el-input v-else v-model="query.search_value" class="filter-item ya-search-value" placeholder="查询内容" clearable />
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -90,7 +91,7 @@
<el-table-column prop="request_isp" label="请求ISP" min-width="105" show-overflow-tooltip />
<el-table-column prop="response_code" label="返回码" min-width="80" show-overflow-tooltip />
<el-table-column prop="response_msg" label="返回描述" min-width="120" show-overflow-tooltip />
<el-table-column prop="create_time" label="请求时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="请求时间" width="155" sortable="custom" />
<el-table-column label="操作" width="85">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="info(scope.row)">详情</el-button>
@ -143,7 +144,7 @@
<el-input v-model="model.response_msg" type="textarea" />
</el-form-item>
<el-form-item label="用户代理" prop="user_agent">
<el-input v-model="model.user_agent" type="textarea" />
<el-input v-model="model.user_agent" type="textarea" autosize />
</el-form-item>
<el-form-item label="请求参数" prop="request_param">
<el-button type="text" icon="el-icon-copy-document" title="复制参数" @click="requestParamCopy($event)" />
@ -175,7 +176,7 @@ export default {
height: 680,
loading: false,
idkey: 'log_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'user_id', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,

View File

@ -7,6 +7,7 @@
<el-col>
<el-select v-model="query.search_field" class="filter-item ya-search-field" placeholder="查询字段">
<el-option :value="idkey" label="ID" />
<el-option value="number" label="编号" />
<el-option value="nickname" label="昵称" />
<el-option value="username" label="账号" />
<el-option value="phone" label="手机" />
@ -15,6 +16,7 @@
<el-option value="post_ids" label="职位" />
<el-option value="role_ids" label="角色" />
<el-option value="is_super" label="超管" />
<el-option value="remark" label="备注" />
<el-option value="is_disable" label="禁用" />
</el-select>
<el-select v-model="query.search_exp" class="filter-item ya-search-exp">
@ -36,7 +38,7 @@
<el-option value="login_time" label="登录时间" />
<el-option value="logout_time" label="退出时间" />
</el-select>
<el-date-picker v-model="query.date_value" type="daterange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" />
<el-date-picker v-model="query.date_value" type="datetimerange" class="filter-item ya-date-value" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" />
<el-button class="filter-item" type="primary" title="查询/刷新" @click="search()">查询</el-button>
<el-button class="filter-item" icon="el-icon-refresh" title="重置" @click="refresh()" />
</el-col>
@ -104,11 +106,12 @@
</div>
</template>
</el-table-column>
<el-table-column prop="number" label="编号" min-width="73" sortable="custom" show-overflow-tooltip />
<el-table-column prop="nickname" label="昵称" min-width="105" sortable="custom" show-overflow-tooltip />
<el-table-column prop="username" label="账号" min-width="105" sortable="custom" show-overflow-tooltip />
<el-table-column prop="dept_names" label="部门" min-width="155" show-overflow-tooltip />
<el-table-column prop="post_names" label="职位" min-width="155" show-overflow-tooltip />
<el-table-column prop="role_names" label="角色" min-width="155" show-overflow-tooltip />
<el-table-column prop="dept_names" label="部门" min-width="150" show-overflow-tooltip />
<el-table-column prop="post_names" label="职位" min-width="150" show-overflow-tooltip />
<el-table-column prop="role_names" label="角色" min-width="150" show-overflow-tooltip />
<el-table-column prop="is_super" label="超管" min-width="73" sortable="custom">
<template slot-scope="scope">
<el-switch v-model="scope.row.is_super" :active-value="1" :inactive-value="0" @change="issuper([scope.row])" />
@ -120,9 +123,9 @@
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="73" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" min-width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" min-width="155" sortable="custom" />
<el-table-column prop="login_time" label="登录时间" min-width="155" sortable="custom" />
<el-table-column prop="create_time" label="添加时间" width="155" sortable="custom" />
<el-table-column prop="update_time" label="修改时间" width="155" sortable="custom" />
<el-table-column prop="login_time" label="登录时间" width="155" sortable="custom" />
<el-table-column label="操作" width="86">
<template slot-scope="scope">
<el-button size="mini" type="text" title="信息/修改" @click="edit(scope.row)">修改</el-button>
@ -146,6 +149,9 @@
<p>图片小于 200 KBjpgpng格式</p>
</el-col>
</el-form-item>
<el-form-item label="编号" prop="number">
<el-input key="number" v-model="model.number" placeholder="请输入编号(工号)" clearable />
</el-form-item>
<el-form-item label="昵称" prop="nickname">
<el-input key="nickname" v-model="model.nickname" placeholder="请输入昵称(姓名)" clearable />
</el-form-item>
@ -247,7 +253,7 @@ export default {
height: 680,
loading: false,
idkey: 'user_id',
exps: [],
exps: [{ exp: 'like', name: '包含' }],
query: { page: 1, limit: 12, search_field: 'username', search_exp: 'like', date_field: 'create_time' },
data: [],
count: 0,
@ -255,6 +261,7 @@ export default {
dialogTitle: '',
model: {
user_id: '',
number: '',
avatar_id: 0,
avatar_url: '',
nickname: '',