first commit
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\qfadmin;
|
||||
|
||||
use think\App;
|
||||
use think\facade\View;
|
||||
|
||||
use app\model\Admin as AdminModel;
|
||||
use app\model\Access as AccessModel;
|
||||
use app\model\Auth as AuthModel;
|
||||
use app\model\Node as NodeModel;
|
||||
use app\model\Group as GroupModel;
|
||||
use app\model\Conf as ConfModel;
|
||||
|
||||
/**
|
||||
* 控制器基础类
|
||||
*/
|
||||
abstract class QfShop
|
||||
{
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
protected $module;
|
||||
protected $controller;
|
||||
protected $action;
|
||||
|
||||
//模型
|
||||
protected $AdminModel;
|
||||
protected $accessModel;
|
||||
protected $authModel;
|
||||
protected $nodeModel;
|
||||
protected $groupModel;
|
||||
protected $confModel;
|
||||
|
||||
//主键key
|
||||
protected $pk = '';
|
||||
//表名称
|
||||
protected $table = '';
|
||||
//主键value
|
||||
protected $pk_value = '';
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->request = $this->app->request;
|
||||
|
||||
// 控制器初始化
|
||||
$this->initialize();
|
||||
}
|
||||
|
||||
// 初始化
|
||||
protected function initialize()
|
||||
{
|
||||
$this->module = "qfadmin";
|
||||
$this->controller = $this->request->controller() ? $this->request->controller() : "Index";
|
||||
$this->action = strtolower($this->request->action()) ? strtolower($this->request->action()) : "index";
|
||||
View::assign('controller', strtolower($this->controller));
|
||||
View::assign('action', strtolower($this->action));
|
||||
|
||||
$this->table = strtolower($this->controller);
|
||||
$this->pk = $this->table . "_id";
|
||||
$this->pk_value = input($this->pk);
|
||||
|
||||
$this->adminModel = new AdminModel();
|
||||
$this->accessModel = new AccessModel();
|
||||
$this->authModel = new AuthModel();
|
||||
$this->nodeModel = new NodeModel();
|
||||
$this->groupModel = new GroupModel();
|
||||
$this->confModel = new ConfModel();
|
||||
|
||||
|
||||
$configs = $this->confModel->select()->toArray();
|
||||
$c = [];
|
||||
foreach ($configs as $config) {
|
||||
$c[$config['conf_key']] = $config['conf_value'];
|
||||
}
|
||||
config($c, 'yadmin');
|
||||
}
|
||||
/**
|
||||
* 后台简单的身份判断
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function access()
|
||||
{
|
||||
$callback = "/qfadmin";
|
||||
if (strtolower($this->controller) != "index") {
|
||||
$callback .= "/" . strtolower($this->controller);
|
||||
}
|
||||
if ($this->action != "index") {
|
||||
$callback .= "/" . $this->action;
|
||||
}
|
||||
$access_token = cookie('access_token');
|
||||
if (!$access_token) {
|
||||
return redirect('/qfadmin/admin/login/?callback=' . urlencode($callback));
|
||||
}
|
||||
View::assign("access_token", $access_token);
|
||||
$this->admin = $this->adminModel->getAdminByAccessToken($access_token);
|
||||
if (!$this->admin) {
|
||||
return redirect('/qfadmin/admin/login/?callback=' . urlencode($callback));
|
||||
}
|
||||
if ($this->admin['admin_status'] > 0) {
|
||||
return $this->error("抱歉,你的帐号已被禁用,暂时无法登录系统!");
|
||||
}
|
||||
cookie("access_token", $access_token);
|
||||
View::assign('adminInfo', $this->admin);
|
||||
$this->group = $this->groupModel->where('group_id', $this->admin['admin_group'])->find();
|
||||
if ($this->group) {
|
||||
if ($this->group['group_id'] != 1 && $this->group['group_status'] == 1) {
|
||||
return $this->error("抱歉,你所在的用户组已被禁用,暂时无法登录系统");
|
||||
} else {
|
||||
$menuList = $this->authModel->getAdminMenuListByAdminId($this->group['group_id']);
|
||||
View::assign('menuList', $menuList);
|
||||
|
||||
$node = $this->nodeModel->where(['node_module' => $this->module, 'node_controller' => strtolower($this->controller), 'node_action' => $this->action])->find();
|
||||
View::assign('node', $node);
|
||||
|
||||
if($node['node_pid']==0){
|
||||
View::assign('menu', 0);
|
||||
}else{
|
||||
$res = $this->nodeModel->where('node_id',$node['node_pid'])->find();
|
||||
View::assign('menu', $res['node_pid']);
|
||||
}
|
||||
$menuLists = [];
|
||||
foreach ($menuList as $key => $value) {
|
||||
if($value['node_id'] == $node['node_pid']){
|
||||
$menuLists = $value['subList'];
|
||||
}else{
|
||||
foreach ($value['subList'] as $k => $v) {
|
||||
if($v['node_id'] == $node['node_pid']){
|
||||
$menuLists = $value['subList'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
View::assign('menuLists', $menuLists);
|
||||
View::assign('action', $this->request->action());
|
||||
}
|
||||
} else {
|
||||
return $this->error("抱歉,没有查到你的用户组信息,暂时无法登录系统");
|
||||
}
|
||||
}
|
||||
protected function error($message)
|
||||
{
|
||||
echo $message;
|
||||
die;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace app\qfadmin\controller;
|
||||
|
||||
use app\qfadmin\QfShop;
|
||||
use think\facade\View;
|
||||
|
||||
class Error extends QfShop
|
||||
{
|
||||
/**
|
||||
* 监听所有请求 渲染对应控制器下方法的页面
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
// 判断是否是登录/注册/找回密码
|
||||
// 否则进行accesss授权验证 如错误 直接返回
|
||||
if (!(strtolower($this->controller) == "admin" && in_array(strtolower($this->action), ['login', 'resetpassword', 'reg']))) {
|
||||
$error = $this->access();
|
||||
if ($error) {
|
||||
return $error;
|
||||
}
|
||||
}else{
|
||||
cookie('access_token', null);
|
||||
}
|
||||
if (key_exists('callback', $args)) {
|
||||
View::assign('callback', $args['callback']);
|
||||
} else {
|
||||
View::assign('callback', '/qfadmin');
|
||||
}
|
||||
View::assign('datas', $args);
|
||||
return View::fetch();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,449 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-form :inline="true">
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-plus" size="small" @click="clickAdd" plain>添加</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-delete" size="small" @click="postMultDelete" plain>批量删除</el-button>
|
||||
</el-form-item>
|
||||
<div style="float:right">
|
||||
<el-form-item>
|
||||
<el-select placeholder="请选择状态" size="small" v-model="search.admin_status">
|
||||
<el-option value="" label="全部用户">
|
||||
</el-option>
|
||||
<el-option value="0" label="正常用户">
|
||||
</el-option>
|
||||
<el-option value="1" label="禁用用户">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item style="width:120px;">
|
||||
<el-select placeholder="筛选类别" size="small" v-model="search.filter">
|
||||
<el-option value="admin_id" label="用户ID">
|
||||
</el-option>
|
||||
<el-option value="admin_name" label="用户昵称">
|
||||
</el-option>
|
||||
<el-option value="admin_account" label="用户帐号">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input placeholder="输入关键词搜索" size="small" v-model="search.keyword"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="getList_search" plain>搜索</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-table :data="dataList.data" @selection-change="changeSelection" v-loading="loading">
|
||||
<el-table-column type="selection" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column prop="admin_id" label="ID" width="100">
|
||||
</el-table-column>
|
||||
<el-table-column prop="admin_account" label="帐号">
|
||||
</el-table-column>
|
||||
<el-table-column prop="admin_name" label="昵称">
|
||||
</el-table-column>
|
||||
<el-table-column prop="group_name" label="用户组">
|
||||
</el-table-column>
|
||||
<el-table-column prop="admin_ipreg" label="注册IP" width="150">
|
||||
</el-table-column>
|
||||
<el-table-column label="最后活跃" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{time2string(scope.row.admin_updatetime)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="注册时间" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{time2string(scope.row.admin_createtime)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="禁用" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.admin_status==1?true:false" active-color="#ff4949"
|
||||
@change="clickStatus(scope.row)">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-link type="primary" @click="clickEdit(scope.row)" :underline="false">编辑</el-link>
|
||||
<el-link type="danger" @click="clickDelete(scope.row)" :underline="false">删除</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
|
||||
<div class="page">
|
||||
<el-pagination @size-change="handleSizeChange" :page-sizes="[10, 20, 50, 100,200,500]" :page-size="10"
|
||||
layout="total, sizes, prev, pager, next, jumper" background @current-change="changeCurrentPage"
|
||||
:current-page="dataList.current_page" :page-count="dataList.last_page" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- 添加框 -->
|
||||
<el-dialog title="添加用户" :visible.sync="dialogFormAdd" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formAdd" status-icon :rules="rules" ref="formAdd">
|
||||
<el-form-item label="帐号" :label-width="formLabelWidth" prop="admin_account">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.admin_account"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" :label-width="formLabelWidth" prop="admin_password">
|
||||
<el-input size="medium" show-password="true" autocomplete="off" v-model="formAdd.admin_password">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="昵称" :label-width="formLabelWidth" prop="admin_name">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.admin_name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" :label-width="formLabelWidth" prop="admin_email">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.admin_email"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证" :label-width="formLabelWidth" prop="admin_idcard">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.admin_idcard"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="真实姓名" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.admin_truename"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户组" :label-width="formLabelWidth">
|
||||
<el-select size="medium" placeholder="请选择用户组" v-model="formAdd.admin_group">
|
||||
<el-option v-for="group_add in groupList" :value="group_add.group_id" :label="group_add.group_name">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postAdd">确认添加</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 修改框 -->
|
||||
<el-dialog title="修改用户" :visible.sync="dialogFormEdit" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formEdit" status-icon :rules="rules" ref="formEdit">
|
||||
<el-form-item label="帐号" :label-width="formLabelWidth" prop="admin_account">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.admin_account"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" :label-width="formLabelWidth" prop="new_password">
|
||||
<el-input size="medium" show-password="true" autocomplete="off" v-model="formEdit.new_password"
|
||||
placeholder="不修改请留空">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="昵称" :label-width="formLabelWidth" prop="admin_name">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.admin_name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" :label-width="formLabelWidth" prop="admin_email">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.admin_email"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证" :label-width="formLabelWidth" prop="admin_idcard">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.admin_idcard"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="真实姓名" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.admin_truename"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户组" :label-width="formLabelWidth">
|
||||
<el-select size="medium" placeholder="请选择用户组" v-model="formEdit.admin_group">
|
||||
<el-option v-for="group_edit in groupList" :value="group_edit.group_id"
|
||||
:label="group_edit.group_name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postEdit">确认修改</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getList();
|
||||
return {
|
||||
search: {
|
||||
admin_status: "",
|
||||
keyword: "",
|
||||
filter: "admin_id"
|
||||
},
|
||||
formLabelWidth: '80px',
|
||||
dialogFormAdd: false,
|
||||
dialogFormEdit: false,
|
||||
loading: true,
|
||||
dataList: [],
|
||||
groupList: [],
|
||||
selectList: [],
|
||||
form: {
|
||||
page: 1,
|
||||
per_page: 10
|
||||
},
|
||||
formAdd: {
|
||||
admin_group: 1
|
||||
},
|
||||
formEdit: {
|
||||
admin_group: 1
|
||||
},
|
||||
rules: {
|
||||
admin_account: [
|
||||
{ required: true, message: '帐号必须填写', trigger: 'blur' },
|
||||
],
|
||||
admin_name: [
|
||||
{ required: true, message: '昵称必须填写', trigger: 'blur' },
|
||||
],
|
||||
admin_password: [
|
||||
{ required: true, message: '密码必须填写', trigger: 'blur' },
|
||||
// { required: true, pattern: /^(?=.*[a-z])(?=.*\d).{6,16}$/, message: '密码必须包含字母和数字(6-16位)', trigger: 'blur' },
|
||||
],
|
||||
new_password: [
|
||||
{ required: true, message: '密码必须填写', trigger: 'blur' },
|
||||
// { pattern: /^(?=.*[a-z])(?=.*\d).{6,16}$/, message: '密码必须包含字母和数字(6-16位)', trigger: 'blur' },
|
||||
],
|
||||
admin_email: [
|
||||
{ pattern: /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/, message: '邮箱格式不正确', trigger: 'blur' },
|
||||
],
|
||||
admin_idcard: [
|
||||
{ pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, message: '身份证格式不正确', trigger: 'blur' },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getList_search() {
|
||||
this.form.page = 1;
|
||||
this.getList();
|
||||
},
|
||||
time2string(timestamps) {
|
||||
var now = new Date(timestamps * 1000),
|
||||
y = now.getFullYear(),
|
||||
m = now.getMonth() + 1,
|
||||
d = now.getDate();
|
||||
// return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
|
||||
return (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 5);
|
||||
},
|
||||
handleSizeChange(per_page) {
|
||||
this.form.per_page = per_page;
|
||||
this.getList();
|
||||
},
|
||||
postMultDelete() {
|
||||
var that = this;
|
||||
if (that.selectList.length == 0) {
|
||||
that.$message.error('未选择任何用户!');
|
||||
return;
|
||||
}
|
||||
this.$confirm('即将删除选中的用户, 是否确认?', '批量删除', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/admin/delete', Object.assign({}, PostBase, {
|
||||
admin_id: that.selectList.join(",")
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
changeSelection(list) {
|
||||
var that = this;
|
||||
that.selectList = [];
|
||||
for (var index in list) {
|
||||
that.selectList.push(list[index].admin_id);
|
||||
}
|
||||
},
|
||||
postEdit() {
|
||||
var that = this;
|
||||
that.$refs['formEdit'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/admin/update', Object.assign({}, PostBase, that.formEdit))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormEdit = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
postAdd() {
|
||||
var that = this;
|
||||
that.$refs['formAdd'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/admin/add', Object.assign({}, PostBase, that.formAdd))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormAdd = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
clickAdd() {
|
||||
var that = this;
|
||||
that.formAdd = {
|
||||
admin_group: 1
|
||||
};
|
||||
axios.post('/admin/group/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
that.groupList = response.data.data;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dialogFormAdd = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickDelete(row) {
|
||||
var that = this;
|
||||
this.$confirm('即将删除这个用户, 是否确认?', '删除提醒', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/admin/delete', Object.assign({}, PostBase, {
|
||||
admin_id: row.admin_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
clickStatus(row) {
|
||||
var that = this;
|
||||
axios.post(row.admin_status ? '/admin/admin/enable' : '/admin/admin/disable', Object.assign({}, PostBase, {
|
||||
admin_id: row.admin_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickEdit(row) {
|
||||
var that = this;
|
||||
that.formEdit = row;
|
||||
axios.post('/admin/group/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.groupList = response.data.data;
|
||||
axios.post('/admin/admin/detail', Object.assign({}, PostBase, {
|
||||
admin_id: row.admin_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.formEdit = response.data.data;
|
||||
that.dialogFormEdit = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/admin/getList', Object.assign({}, PostBase, that.form, that.search))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,263 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>后台管理系统</title>
|
||||
<meta charset="UTF-8">
|
||||
<!-- import CSS -->
|
||||
<link rel="stylesheet" href="/static/admin/css/element.css">
|
||||
<link rel="stylesheet" href="/static/admin/css/YAdmin.css">
|
||||
<style>
|
||||
.login-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
min-width: 1280px;
|
||||
min-height: 800px;
|
||||
background: url(/static/admin/images/login_bg.jpg) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.login-container:before{
|
||||
content: " ";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: url(/static/admin/images/login_bg_bottom.png) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
height: 170px;
|
||||
}
|
||||
.login-box img{
|
||||
width: 720px;
|
||||
}
|
||||
.login-border {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
top: -30px;
|
||||
right: 100px;
|
||||
}
|
||||
.login-main{
|
||||
background-color: #ffffff;
|
||||
padding: 35px 45px 15px 45px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.login-main .vadmin{
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #6881ec;
|
||||
line-height: 20px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
.login-logo {
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
.login-logo p {
|
||||
color: #ffffff;
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.login-submit {
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
.login-form {
|
||||
margin: 10px 0;
|
||||
}
|
||||
.login-form .el-form-item__content {
|
||||
width: 270px;
|
||||
}
|
||||
.login-form .el-form-item {
|
||||
margin-bottom: 26px;
|
||||
}
|
||||
.login-form .el-input input {
|
||||
text-indent: 5px;
|
||||
border-color: #DCDCDC;
|
||||
border-radius: 3px;
|
||||
border: none;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.login-form .el-input .el-input__prefix i {
|
||||
padding: 0 5px;
|
||||
font-size: 16px !important;
|
||||
}
|
||||
.login-code {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.login-code-img {
|
||||
margin-top: 1px;
|
||||
width: 100px;
|
||||
height: 38px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app" v-cloak>
|
||||
<div id="app" v-cloak>
|
||||
<div class="login-container">
|
||||
<div class="login-box">
|
||||
<img src="/static/admin/images/login_bg_box.png">
|
||||
</div>
|
||||
<div class="login-border">
|
||||
<div class="login-logo">
|
||||
<p>后台登录</p>
|
||||
</div>
|
||||
<div class="login-main">
|
||||
<p class="vadmin">管理员登录</p>
|
||||
<el-form class="login-form" status-icon :rules="loginRules" ref="loginForm" :model="loginForm"
|
||||
label-width="0" size="default">
|
||||
<el-form-item prop="admin_account">
|
||||
<el-input @keyup.enter.native="handleLogin()" v-model="loginForm.admin_account"
|
||||
auto-complete="off" placeholder="请输入账号">
|
||||
<i slot="prefix" class="el-icon-user"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="admin_password">
|
||||
<el-input @keyup.enter.native="handleLogin()" v-model="loginForm.admin_password" show-password
|
||||
auto-complete="off" placeholder="请输入密码">
|
||||
<i slot="prefix" class="el-icon-key"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="codeUrl" prop="admin_code">
|
||||
<el-row :span="34">
|
||||
<el-col :span="14">
|
||||
<el-input @keyup.enter.native="handleLogin()" v-model="loginForm.admin_code"
|
||||
auto-complete="off" placeholder="请输入验证码">
|
||||
<i slot="prefix" class="el-icon-mobile"></i>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" class="login-code-img" @click="getCaptcha" alt="" />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="loading" @click.native.prevent="handleLogin"
|
||||
class="login-submit">登 录
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script src="/static/admin/js/vue-2.6.10.min.js"></script>
|
||||
<script src="/static/admin/js/axios.min.js"></script>
|
||||
<script src="/static/admin/js/element.js"></script>
|
||||
<script src="/static/admin/js/YAdmin.js"></script>
|
||||
<script>
|
||||
new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
codeUrl: '',
|
||||
codeToken: '',
|
||||
loading: false,
|
||||
loginForm: {
|
||||
admin_account: '',
|
||||
admin_password: '',
|
||||
admin_code: '',
|
||||
},
|
||||
loginRules: {
|
||||
admin_account: [
|
||||
{ required: true, message: '请输入账号', trigger: 'blur' }
|
||||
],
|
||||
admin_password: [
|
||||
{ required: true, message: '请输入密码', trigger: 'blur' },
|
||||
{ min: 6, message: '密码长度最少为6位', trigger: 'blur' }
|
||||
],
|
||||
admin_code: [
|
||||
{ required: true, message: '请输入验证码', trigger: 'blur' },
|
||||
{ min: 4, max: 4, message: '验证码长度为4位', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getCaptcha();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* @description 正式登录
|
||||
*/
|
||||
handleLogin() {
|
||||
var that = this;
|
||||
this.$refs.loginForm.validate(valid => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
this.loginForm.token = this.codeToken
|
||||
axios.post('/admin/admin/login', Object.assign({}, PostBase, this.loginForm))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: '登录成功,正在跳转中',
|
||||
type: 'success'
|
||||
});
|
||||
setTimeout(function () {
|
||||
location.replace('/qfadmin');
|
||||
}, 1000)
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
that.loading = false
|
||||
that.getCaptcha();
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('登录失败,服务器内部错误');
|
||||
that.loading = false
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
onSubmit() {
|
||||
var that = this;
|
||||
axios.post('/admin/admin/login', Object.assign({}, PostBase, this.form))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: '登录成功,正在跳转中',
|
||||
type: 'success'
|
||||
});
|
||||
setTimeout(function () {
|
||||
location.replace('{$callback}');
|
||||
}, 1000)
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('登录失败,服务器内部错误');
|
||||
});
|
||||
},
|
||||
getCaptcha() {
|
||||
var that = this;
|
||||
axios.post('/admin/system/getCaptcha', Object.assign({}, PostBase))
|
||||
.then(function (res) {
|
||||
that.codeUrl = res.data.data.img
|
||||
that.codeToken = res.data.data.token
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('获取失败');
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,94 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>修改我的密码</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<el-form :model="form" status-icon :rules="rules" ref="form" label-width="80px">
|
||||
<el-form-item label="原密码" prop="oldPassword">
|
||||
<el-input show-password v-model="form.oldPassword" placeholder="请输入原密码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="新密码" prop="newPassword">
|
||||
<el-input show-password password="password" v-model="form.newPassword" placeholder="请输入新密码">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="新密码" prop="checkPassword">
|
||||
<el-input show-password v-model="form.checkPassword" placeholder="请确认新密码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit">修改密码</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-card>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
oldPassword: "",
|
||||
newPassword: "",
|
||||
checkPassword: "",
|
||||
},
|
||||
rules: {
|
||||
oldPassword: [
|
||||
{ required: true, message: '原密码必须输入', trigger: 'blur' },
|
||||
],
|
||||
newPassword: [
|
||||
{ required: true, pattern: /^(?=.*[a-z])(?=.*\d).{6,16}$/, message: '密码必须包含大小写字母和数字(6-16位)', trigger: 'blur' },
|
||||
],
|
||||
checkPassword: [
|
||||
{ required: true, pattern: /^(?=.*[a-z])(?=.*\d).{6,16}$/, message: '密码必须包含大小写字母和数字(6-16位)', trigger: 'blur' },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onSubmit() {
|
||||
var that = this;
|
||||
that.$refs['form'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
if (that.form.newPassword != that.form.checkPassword) {
|
||||
that.$message.error('两次密码输入不一致,请确认');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/admin/motifypassword', Object.assign({}, PostBase, {
|
||||
oldPassword: that.form.oldPassword,
|
||||
newPassword: that.form.newPassword,
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
setTimeout(function () {
|
||||
location.href = "/qfadmin";
|
||||
}, 2000);
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
});
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>修改我的资料</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<el-form :model="form" status-icon :rules="rules" ref="form" label-width="80px">
|
||||
<el-form-item label="昵称" prop="admin_name">
|
||||
<el-input v-model="form.admin_name" placeholder="请输入你的昵称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="admin_truename">
|
||||
<el-input v-model="form.admin_truename" placeholder="请输入你的真实姓名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" prop="admin_email">
|
||||
<el-input v-model="form.admin_email" placeholder="请输入你的邮箱"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证" prop="admin_idcard">
|
||||
<el-input v-model="form.admin_idcard" placeholder="请输入你的身份证"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit">更新资料</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-card>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getData();
|
||||
return {
|
||||
form: {
|
||||
},
|
||||
rules: {
|
||||
admin_name: [
|
||||
{ required: true, message: '昵称必须填写', trigger: 'blur' },
|
||||
],
|
||||
admin_email: [
|
||||
{ pattern: /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/, message: '邮箱格式不正确', trigger: 'blur' },
|
||||
],
|
||||
admin_idcard: [
|
||||
{ pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, message: '身份证格式不正确', trigger: 'blur' },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getData() {
|
||||
var that = this;
|
||||
axios.post('/admin/admin/getmyinfo', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.form = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
onSubmit() {
|
||||
var that = this;
|
||||
that.$refs['form'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
if (that.form.newPassword != that.form.checkPassword) {
|
||||
that.$message.error('两次密码输入不一致,请确认');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/admin/updateMyInfo', Object.assign({}, PostBase, that.form))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
});
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,214 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
<el-form :inline="true">
|
||||
<el-form-item>
|
||||
<el-upload class="upload-demo" action="/admin/attach/uploadImage" :on-success="handleUploadSuccess"
|
||||
:file-list="fileList" :show-file-list="false" :before-upload="beforeUpload" :data="postData"
|
||||
v-loading.fullscreen.lock="fullscreenLoading">
|
||||
<el-button size="small" type="primary">上传图片</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-delete" size="small" @click="postMultDelete" plain>批量删除</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table :data="dataList.data" @selection-change="changeSelection" v-loading="loading">
|
||||
<el-table-column type="selection" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column prop="attach_id" label="ID" width="60">
|
||||
</el-table-column>
|
||||
<el-table-column label="文件预览" width="120">
|
||||
<template slot-scope="scope">
|
||||
<div style="display: flex;align-items: center;">
|
||||
<el-link :href="scope.row.attach_path" :underline="false" target="_blank">
|
||||
<el-image style="width: 80px; height: 80px;flex:none;margin-right: 10px;background-color: #f8f8f9;border-radius: 6px;"
|
||||
fit="contain" :src="scope.row.attach_path">
|
||||
</el-image>
|
||||
</el-link>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="attach_name" label="文件名称">
|
||||
</el-table-column>
|
||||
<el-table-column prop="attach_size" label="附件大小" width="100">
|
||||
</el-table-column>
|
||||
<el-table-column label="附件类型" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-tag size="medium" type="warning">{{scope.row.attach_type.toUpperCase()}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-link type="danger" @click="clickDelete(scope.row)" :underline="false">删除</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
<div class="page">
|
||||
<el-pagination @size-change="handleSizeChange" :page-sizes="[10, 20, 50, 100,200,500]" :page-size="10"
|
||||
layout="total, sizes, prev, pager, next, jumper" background @current-change="changeCurrentPage"
|
||||
:current-page="dataList.current_page" :page-count="dataList.last_page" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getList();
|
||||
return {
|
||||
fullscreenLoading: false,
|
||||
search: {
|
||||
keyword: "",
|
||||
filter: "attach_phone"
|
||||
},
|
||||
loading: true,
|
||||
dataList: [],
|
||||
selectList: [],
|
||||
fileList: [],
|
||||
form: {
|
||||
page: 1,
|
||||
per_page: 10,
|
||||
},
|
||||
postData: PostBase,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleUploadSuccess(res, file) {
|
||||
this.fullscreenLoading = false;
|
||||
if (res.code == CODE_SUCCESS) {
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: 'success'
|
||||
});
|
||||
this.getList();
|
||||
} else {
|
||||
this.$message.error(res.message);
|
||||
}
|
||||
},
|
||||
beforeUpload(file) {
|
||||
const isImage = file.type === 'image/jpeg' || file.type === 'image/png';
|
||||
const isLt2M = file.size / 1024 / 1024 < 2;
|
||||
if (!isImage) {
|
||||
this.$message.error('上传图片只能是 JPG/PNG 格式!');
|
||||
}
|
||||
if (!isLt2M) {
|
||||
this.$message.error('上传头像图片大小不能超过 2MB!');
|
||||
}
|
||||
this.fullscreenLoading = true;
|
||||
return isImage && isLt2M;
|
||||
},
|
||||
handleSizeChange(per_page) {
|
||||
this.form.per_page = per_page;
|
||||
this.getList();
|
||||
},
|
||||
time2string(timestamps, formatStr = 'MM-dd hh:mm') {
|
||||
var now = new Date(timestamps * 1000),
|
||||
y = now.getFullYear(),
|
||||
m = now.getMonth() + 1,
|
||||
d = now.getDate();
|
||||
return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
|
||||
},
|
||||
postMultDelete() {
|
||||
var that = this;
|
||||
if (that.selectList.length == 0) {
|
||||
that.$message.error('未选择任何附件!');
|
||||
return;
|
||||
}
|
||||
this.$confirm('即将删除选中的附件, 是否确认?', '批量删除', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/attach/delete', Object.assign({}, PostBase, {
|
||||
attach_id: that.selectList.join(",")
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => { });
|
||||
},
|
||||
changeSelection(list) {
|
||||
var that = this;
|
||||
that.selectList = [];
|
||||
for (var index in list) {
|
||||
that.selectList.push(list[index].attach_id);
|
||||
}
|
||||
},
|
||||
clickAdd() {
|
||||
var that = this;
|
||||
that.formAdd = {};
|
||||
that.dialogFormAdd = true;
|
||||
},
|
||||
clickDelete(row) {
|
||||
var that = this;
|
||||
this.$confirm('即将删除这个附件, 是否确认?', '删除提醒', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/attach/delete', Object.assign({}, PostBase, {
|
||||
attach_id: row.attach_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => { });
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/attach/getList', Object.assign({}, PostBase, that.form, that.search))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
<Uploads ref="upload"></Uploads>
|
||||
<Goodslists ref="goodslist"></Goodslists>
|
||||
</div>
|
||||
</body>
|
||||
{include file="component/view"/}
|
||||
<script src="/static/admin/js/vue-2.6.10.min.js"></script>
|
||||
<script src="/static/admin/js/axios.min.js"></script>
|
||||
<script src="/static/admin/js/element.js"></script>
|
||||
<script src="/static/admin/js/YAdmin.js"></script>
|
||||
<script src="/static/admin/js/SkuForm.umd.js"></script>
|
||||
<script src="/static/admin/UEditor/vue-ueditor-wrap.min.js"></script>
|
||||
<script src="/static/admin/UEditor/ueditor.config.js"></script>
|
||||
<script src="/static/admin/UEditor/ueditor.all.js"></script>
|
||||
<script src="/static/admin/js/component.js"></script>
|
||||
<script src="/static/admin/js/Sortable.min.js"></script>
|
||||
<script src="/static/admin/js/vuedraggable.umd.min.js"></script>
|
||||
@@ -0,0 +1,67 @@
|
||||
<meta charset="UTF-8">
|
||||
<!-- import CSS -->
|
||||
<link rel="stylesheet" href="/static/admin/css/element.css">
|
||||
<link rel="stylesheet" href="/static/admin/css/YAdmin.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app" v-cloak>
|
||||
<el-container>
|
||||
<el-header>
|
||||
<el-col style="width: auto;">
|
||||
<el-menu class="el-menu-vertical" text-color="#333333" :default-active="'{if condition="$node.node_pid"}{$node.node_pid}{else}{$node.node_id}{/if}'" unique-opened
|
||||
style="border:none;" mode="horizontal" active-text-color="#333333">
|
||||
{volist name="menuList" id="item"}
|
||||
{if condition="count($item.subList)>0"}
|
||||
{if condition="count($item.subList[0]['subList'])>0"}
|
||||
<el-menu-item index="{$item.node_id}"
|
||||
onclick="location.href='/{$item['subList'][0]['subList'][0]['node_module']}/{$item['subList'][0]['subList'][0]['node_controller']}/{$item['subList'][0]['subList'][0]['node_action']}';"
|
||||
{if
|
||||
condition="$menu==$item.node_id"
|
||||
}class="is-active" {/if}>
|
||||
<i class="{$item.node_icon}"></i> {$item.node_title}
|
||||
</el-menu-item>
|
||||
{else}
|
||||
<el-menu-item index="{$item.node_id}"
|
||||
onclick="location.href='/{$item['subList'][0]['node_module']}/{$item['subList'][0]['node_controller']}/{$item['subList'][0]['node_action']}';" {if
|
||||
condition="$menu==$item.node_id"
|
||||
}class="is-active" {/if}>
|
||||
<i class="{$item.node_icon}"></i> {$item.node_title}
|
||||
</el-menu-item>
|
||||
{/if}
|
||||
{else}
|
||||
{if condition="count($item.subList)>0 || $item.node_controller=='index'"}
|
||||
<el-menu-item index="{$item.node_id}"
|
||||
onclick="location.href='/{$item.node_module}/{$item.node_controller}/{$item.node_action}';" {if
|
||||
condition="$menu==$item.node_id"
|
||||
}class="is-active" {/if}>
|
||||
<i class="{$item.node_icon}"></i> {$item.node_title}
|
||||
</el-menu-item>
|
||||
{/if}
|
||||
{/if}
|
||||
{/volist}
|
||||
</el-menu>
|
||||
</el-col>
|
||||
|
||||
<el-col style="width: 240px;float: right;">
|
||||
<span class="topArea">
|
||||
<el-link :underline="false" class="el-icon-full-screen menuicon" onclick="requestFullScreen()"></el-link>
|
||||
<!-- <el-link :underline="false" class="el-icon-brush menuicon"></el-link> -->
|
||||
<el-dropdown>
|
||||
<el-link :underline="false"> {$adminInfo['admin_name']}<i class="el-icon-arrow-down"></i></el-link>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item onclick="location.href='/qfadmin/admin/updatemyinfo';">修改资料
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item onclick="location.href='/qfadmin/admin/motifypassword';">修改密码
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item onclick="location.href='/qfadmin/system/clean';">清除缓存
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item onclick="logout()">退出登录</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-header>
|
||||
<el-container class="body">
|
||||
{include file="common/menu"/}
|
||||
<el-main>
|
||||
@@ -0,0 +1,47 @@
|
||||
<meta charset="UTF-8">
|
||||
<!-- import CSS -->
|
||||
<link rel="stylesheet" href="/static/admin/css/element.css">
|
||||
<link rel="stylesheet" href="/static/admin/css/YAdmin.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app" v-cloak>
|
||||
<el-container>
|
||||
<el-header>
|
||||
<el-col style="width: auto;">
|
||||
<el-menu class="el-menu-vertical" text-color="#333333" unique-opened
|
||||
style="border:none;" mode="horizontal" active-text-color="#333333">
|
||||
<el-menu-item onclick="location.href='./index.html?meeting_id={$datas.meeting_id??''}'" {if
|
||||
condition="$action=='index'"
|
||||
}class="is-active" {/if}>
|
||||
<i class="el-icon-user-solid"></i> 客户管理
|
||||
</el-menu-item>
|
||||
<el-menu-item onclick="location.href='./team.html?meeting_id={$datas.meeting_id??''}'" {if
|
||||
condition="$action=='team'"
|
||||
}class="is-active" {/if}>
|
||||
<i class="el-icon-s-custom"></i> 团队管理
|
||||
</el-menu-item>
|
||||
<el-menu-item onclick="location.href='./valetor.html?meeting_id={$datas.meeting_id??''}'" {if
|
||||
condition="$action=='valetor'"
|
||||
}class="is-active" {/if}>
|
||||
<i class="el-icon-s-help"></i> 会务人员管理
|
||||
</el-menu-item>
|
||||
</el-menu>
|
||||
</el-col>
|
||||
|
||||
<el-col style="width: 240px;float: right;">
|
||||
<span class="topArea">
|
||||
<el-link :underline="false" class="el-icon-full-screen menuicon" onclick="requestFullScreen()"></el-link>
|
||||
<!-- <el-link :underline="false" class="el-icon-brush menuicon"></el-link> -->
|
||||
<el-dropdown>
|
||||
<el-link :underline="false"> {$adminInfo['admin_name']}<i class="el-icon-arrow-down"></i></el-link>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item onclick="logout()">退出登录</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-header>
|
||||
<el-container class="body">
|
||||
{include file="common/menu"/}
|
||||
<el-main>
|
||||
@@ -0,0 +1,44 @@
|
||||
{if condition="$menuLists"}
|
||||
<el-aside width="160px">
|
||||
<a class="titlehome" href="/qfadmin" style="display: block;height: 62px;line-height: 62px;text-align: center;"><img src="/static/admin/images/logo.png" width="40px" style="vertical-align: middle;" /></a>
|
||||
<el-menu class="el-menu-vertical-demo" text-color="#333333" default-active="'{$node.node_pid}-{$node.node_id}'" :collapse="false" :default-openeds="['{$node.node_pid}']">
|
||||
{volist name="menuLists" id="item"}
|
||||
{if condition="count($item.subList)>0"}
|
||||
<el-submenu index="{$item.node_id}">
|
||||
<template slot="title">
|
||||
<i {if condition='$item.node_icon'}class="{$item.node_icon}"{else}class="el-icon-menu"{/if}></i> {$item.node_title}
|
||||
</template>
|
||||
{volist name="$item.subList" id="subItem"}
|
||||
<el-menu-item onclick="location.href='/{$subItem.node_module}/{$subItem.node_controller}/{$subItem.node_action}';"
|
||||
index="{$item.node_id}-{$subItem.node_id}" {if
|
||||
condition="$subItem.node_controller==strtolower($controller) && $subItem.node_action==strtolower($action)"
|
||||
}class="is-active" {/if}>{$subItem.node_title}</el-menu-item>
|
||||
{/volist}
|
||||
</el-submenu>
|
||||
{else}
|
||||
{if condition="$item.node_controller=='' && $item.node_action==''"}
|
||||
<el-menu-item index="{$item.node_id}" onclick="testalert('暂无该功能')">
|
||||
<i {if condition='$item.node_icon' }class="{$item.node_icon}" {else}class="el-icon-menu" {/if}></i>
|
||||
{$item.node_title}
|
||||
</el-menu-item>
|
||||
{else}
|
||||
<el-menu-item index="{$item.node_id}"
|
||||
onclick="location.href='/{$item.node_module}/{$item.node_controller}/{$item.node_action}';" {if
|
||||
condition="$item.node_controller==strtolower($controller) && $item.node_action==strtolower($action)"
|
||||
}class="is-active" {/if}>
|
||||
<i {if condition='$item.node_icon' }class="{$item.node_icon}" {else}class="el-icon-menu" {/if}></i>
|
||||
{$item.node_title}
|
||||
</el-menu-item>
|
||||
{/if}
|
||||
{/if}
|
||||
{/volist}
|
||||
<div style="height: 120px;"></div>
|
||||
</el-menu>
|
||||
<div class="version">资源管理系统<br> Version 1.0.0</div>
|
||||
</el-aside>
|
||||
{else}
|
||||
<div style="position: absolute;top: -72px;left: 0;width: 160px;background-color: #ffffff;box-shadow: 0 0 12px 0 rgb(47 75 168 / 6%);border-radius: 12px;">
|
||||
<a class="title" href="/admin" style="display: block;height: 62px;line-height: 62px;text-align: center;"><img
|
||||
src="/static/admin/images/logo.png" width="40px" style="vertical-align: middle;" /></a>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -0,0 +1,152 @@
|
||||
<template id="Upload">
|
||||
<el-dialog title="图片库" :visible.sync="visible" :modal-append-to-body='false' append-to-body :close-on-click-modal="false"
|
||||
width="725px">
|
||||
<div class="upload-boxs">
|
||||
<el-upload class="upload-right" action="/admin/attach/uploadImage" :on-success="handleUploadSuccess"
|
||||
:file-list="fileList" :show-file-list="false" :before-upload="beforeUpload" :data="postData"
|
||||
v-loading.fullscreen.lock="fullscreenLoading">
|
||||
<el-button size="small" type="primary" icon="el-icon-upload">上传图片</el-button>
|
||||
</el-upload>
|
||||
</div>
|
||||
<ul class="storage-list">
|
||||
<li :class="item.select?'active':''" v-for="(item, index) in dataList.data" :key="index" @click="select(index)">
|
||||
<el-image fit="contain" :src="item.attach_path"></el-image>
|
||||
<p>{{item.attach_name}}</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p v-if="dataList.data&&dataList.data.length==0" style="text-align: center;">暂无资源</p>
|
||||
<el-pagination @current-change="changeCurrentPage" layout="prev, pager, next" :current-page="dataList.current_page"
|
||||
:page-count="dataList.last_page" hide-on-single-page background>
|
||||
</el-pagination>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<div style="float: left; font-size: 13px;">
|
||||
<span v-if="multiple">
|
||||
当前已选 <span style="color: #F56C6C;">{{selectList.length+selected_num}}</span> 个,最多允许选择 <span
|
||||
style="color: #F56C6C;">{{total_num}}</span> 个资源
|
||||
</span>
|
||||
<span v-else>当前已选 <span style="color: #F56C6C;">{{selectList.length}}</span> 个资源</span>
|
||||
</div>
|
||||
<el-button @click="visible = false" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="save" size="small">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
|
||||
<template id="Single">
|
||||
<div class="slectimg" v-if="multiple">
|
||||
<block v-if="value.length>0">
|
||||
<draggable v-model="value" chosenClass="chosen" forceFallback="true" animation="600" @start="onStart"
|
||||
@end="onEnd">
|
||||
<transition-group>
|
||||
<div class="imgs" v-for="(v, s) in value" :key="s" style="cursor: all-scroll;">
|
||||
<el-image fit="contain" :src="v" :preview-src-list="value" :z-index="s"></el-image>
|
||||
<!-- <el-image fit="contain" :src="v" ></el-image> -->
|
||||
<i class="close el-icon-error" @click="deles(s)"></i>
|
||||
</div>
|
||||
</transition-group>
|
||||
</draggable>
|
||||
</block>
|
||||
<div class="noimg" @click="selectimg()">
|
||||
<i class="el-icon-plus"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="slectimg" v-else>
|
||||
<div class="imgs" v-if="value.length>0">
|
||||
<el-image fit="contain" :src="value" :preview-src-list="[value]"></el-image>
|
||||
<i class="close el-icon-error" @click="deles()"></i>
|
||||
</div>
|
||||
<div class="noimg" v-else @click="selectimg()">
|
||||
<i class="el-icon-plus"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="Ueditor">
|
||||
<Ueditors v-model="value" ref="Ueditor" :config="config"></Ueditors>
|
||||
</template>
|
||||
|
||||
|
||||
<template id="skuforms">
|
||||
<div>
|
||||
<div style="padding-bottom: 10px;">
|
||||
<el-input style="width: 120px;" v-if="inputVisible" v-model="inputValue" ref="saveTagInput" size="small"
|
||||
@keyup.enter.native="handleInputConfirm" placeholder="回车确定">
|
||||
</el-input>
|
||||
<el-button v-else class="button-new-tag" size="small" @click="showInput" style="width: 120px;">+添加规格组</el-button>
|
||||
</div>
|
||||
<sku-form :source-attribute="sourceAttribute" :attribute.sync="attribute" :structure="structure" :sku.sync="sku"
|
||||
ref="skuForm"></sku-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<template id="Goodslist">
|
||||
<el-dialog title="商品库" :before-close="handleClose" :visible.sync="visible" :modal-append-to-body='false' append-to-body
|
||||
:close-on-click-modal="false" width="900px">
|
||||
|
||||
<el-form :inline="true">
|
||||
<div style="float:right">
|
||||
<el-form-item style="width:100px; margin-bottom: 0;">
|
||||
<el-cascader v-model="search.classify" placeholder="商品分类" :options="categoryList" :props="cascaderProps"
|
||||
style="width: 100%;" filterable clearable size="small" :show-all-levels="false">
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-bottom: 0;">
|
||||
<el-input placeholder="输入商品名称搜索" size="small" v-model="search.keyword" @keyup.enter.native="getList_search"
|
||||
clearable @clear="getList_search"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-bottom: 0;">
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="getList_search" plain>搜索
|
||||
</el-button>
|
||||
<el-button icon="el-icon-refresh-left" size="small" @click="getList_search(0)" plain>重置</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
<el-table :data="dataList.data" ref="multipleTable" @selection-change="changeSelection" row-key="goods_id" reserve-selection="true" style="min-height: 425px;" v-loading="loading">
|
||||
<el-table-column align="center" type="selection" reserve-selection="true" width="55"></el-table-column>
|
||||
|
||||
<el-table-column label="商品" prop="goods_id" min-width="380">
|
||||
<template slot-scope="scope">
|
||||
<el-image class="goods-image" style="width: 50px;height: 50px;" :src="scope.row.picture[0]" :preview-src-list="[scope.row.picture[0]]"
|
||||
fit="contain" lazy></el-image>
|
||||
|
||||
<div class="goods-info cs-ml">
|
||||
<p class="action" style="overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;">
|
||||
<span :title="scope.row.goods_name" class="link">{{scope.row.goods_name}}</span>
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="本店价" prop="goods_price">
|
||||
<template slot-scope="scope">
|
||||
<div class="action">
|
||||
<span class="goods-shop-price">{{scope.row.goods_price}}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="库存" prop="stock_total">
|
||||
<template slot-scope="scope">
|
||||
<div class="action">
|
||||
<span>{{scope.row.stock_total}}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<p style="padding-bottom: 10px;">
|
||||
<el-pagination hide-on-single-page="true" layout="prev, pager, next" background :current-page="form.page" @current-change="changeCurrentPage" :page-size="5" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</p>
|
||||
<p>
|
||||
<el-button @click="cancels" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="save" size="small">确定</el-button>
|
||||
</p>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
@@ -0,0 +1,186 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
<el-card class="box-card" shadow="never">
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane :label="item.name" :name="item.val" v-for="(item, index) in tabname" :key="index" v-if="item.show">
|
||||
<div class="base_form" style="padding-right: 220px;">
|
||||
<el-form ref="form" label-width="220px">
|
||||
<block v-for="(items, indexs) in form" :key="indexs">
|
||||
<el-form-item :label="items.conf_title?items.conf_title:items.conf_key" v-if="items.conf_type==item.val">
|
||||
<block v-if="items.conf_spec==1">
|
||||
<el-input type="textarea" :rows="4" v-model="items.conf_value"></el-input>
|
||||
</block>
|
||||
<block v-else-if="items.conf_spec==2">
|
||||
<el-radio v-model="items.conf_value" v-for="(val, key) in items.conf_content" :key="key" :label="val.value">{{val.name}}</el-radio>
|
||||
</block>
|
||||
<block v-else-if="items.conf_spec==3">
|
||||
<el-checkbox-group v-model="items.conf_value">
|
||||
<el-checkbox v-for="(val, key) in items.conf_content" :key="key" :label="val.value">{{val.name}}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</block>
|
||||
<block v-else-if="items.conf_spec==4">
|
||||
<Single v-model="items.conf_value"/>
|
||||
</block>
|
||||
<block v-else-if="items.conf_spec==5">
|
||||
<Single v-model="items.conf_value" multiple="true" :selected_num="items.conf_value.length"/>
|
||||
</block>
|
||||
<block v-else-if="items.conf_spec==6">
|
||||
<Ueditor v-model="items.conf_value"></Ueditor>
|
||||
</block>
|
||||
<block v-else>
|
||||
<el-input v-model="items.conf_value"></el-input>
|
||||
</block>
|
||||
<span class="f_tips" v-html="items.conf_desc"><span v-if="items.conf_spec==5"> 最多上传10张</span></span>
|
||||
</el-form-item>
|
||||
</block>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit(item.val)">保存配置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</el-card>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getData();
|
||||
return {
|
||||
form: [],
|
||||
activeName: "0",
|
||||
tabname: [
|
||||
{
|
||||
name: '基础设置',
|
||||
val: '0',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '微信设置',
|
||||
val: '8',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '交易设置',
|
||||
val: '10',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '售后设置',
|
||||
val: '11',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '上传配置',
|
||||
val: '2',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '短信配置',
|
||||
val: '3',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '物流配置',
|
||||
val: '9',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '其他配置',
|
||||
val: '4',
|
||||
show: false,
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getData() {
|
||||
var that = this;
|
||||
axios.post('/admin/conf/getBaseConfig', Object.assign({}, PostBase))
|
||||
.then(function (res) {
|
||||
if (res.data.code == 200) {
|
||||
for (let item of res.data.data) {
|
||||
if (item.conf_spec == 2) {
|
||||
for (let i = 0; i < item.conf_content.length; i++) {
|
||||
let d = item.conf_content[i].split("=>");
|
||||
item.conf_content[i] = {
|
||||
name: d[0].toString(),
|
||||
value: d[1].toString()
|
||||
}
|
||||
}
|
||||
}else if(item.conf_spec==3){
|
||||
for (let i = 0; i < item.conf_content.length; i++) {
|
||||
let d = item.conf_content[i].split("=>");
|
||||
item.conf_content[i] = {
|
||||
name: d[0].toString(),
|
||||
value: d[1].toString()
|
||||
}
|
||||
}
|
||||
if(item.conf_value){
|
||||
item.conf_value = item.conf_value.split(",");
|
||||
}else{
|
||||
item.conf_value = []
|
||||
}
|
||||
}else if (item.conf_spec == 5) {
|
||||
if(item.conf_value){
|
||||
item.conf_value = item.conf_value.split(",");
|
||||
for (let i = 0; i < item.conf_value.length; i++) {
|
||||
if (!item.conf_value[i]) {
|
||||
item.conf_value.splice(i, 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
item.conf_value = []
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < that.tabname.length; i++) {
|
||||
if(that.tabname[i].val == item.conf_type){
|
||||
that.tabname[i].show = true
|
||||
}
|
||||
}
|
||||
}
|
||||
that.form = res.data.data;
|
||||
} else {
|
||||
that.$message.error(res.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
onSubmit(index) {
|
||||
var that = this;
|
||||
var postData = {};
|
||||
for (var i = 0; i < that.form.length; i++) {
|
||||
if(that.form[i].conf_type == index){
|
||||
postData[that.form[i].conf_key] = that.form[i].conf_value;
|
||||
}
|
||||
}
|
||||
axios.post('/admin/conf/updateBaseConfig', Object.assign({}, PostBase, postData))
|
||||
.then(function (res) {
|
||||
if (res.data.code == 200) {
|
||||
that.$message({
|
||||
message: res.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(res.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,467 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-form :inline="true">
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-plus" size="small" @click="clickAdd" plain>添加</el-button>
|
||||
</el-form-item>
|
||||
<div style="float:right">
|
||||
<el-form-item style="width:120px;">
|
||||
<el-select placeholder="筛选类别" size="small" v-model="search.filter">
|
||||
<el-option value="conf_id" label="参数ID">
|
||||
</el-option>
|
||||
<el-option value="conf_title" label="参数名称">
|
||||
</el-option>
|
||||
<el-option value="conf_key" label="参数字段">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input placeholder="输入关键词搜索" size="small" v-model="search.keyword"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="getList_search" plain>搜索</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-table :data="dataList.data" @selection-change="changeSelection" v-loading="loading">
|
||||
<el-table-column prop="conf_id" label="ID" width="60">
|
||||
</el-table-column>
|
||||
<el-table-column prop="conf_type" label="所属分类" width="150">
|
||||
<template slot-scope="scope">
|
||||
<el-tag size="small" type="success" v-if="scope.row.conf_type==1">店铺设置</el-tag>
|
||||
<el-tag size="small" type="warning" v-else-if="scope.row.conf_type==2">上传配置</el-tag>
|
||||
<el-tag size="small" type="info" v-else-if="scope.row.conf_type==3">短信配置</el-tag>
|
||||
<el-tag size="small" type="danger" v-else-if="scope.row.conf_type==4">其他配置</el-tag>
|
||||
<el-tag size="small" type="success" v-else-if="scope.row.conf_type==5">微信支付配置</el-tag>
|
||||
<el-tag size="small" type="warning" v-else-if="scope.row.conf_type==6">支付宝支付配置</el-tag>
|
||||
<el-tag size="small" type="success" v-else-if="scope.row.conf_type==7">微信小程序配置</el-tag>
|
||||
<el-tag size="small" type="danger" v-else-if="scope.row.conf_type==8">微信公众号配置</el-tag>
|
||||
<el-tag size="small" type="danger" v-else-if="scope.row.conf_type==9">物流配置</el-tag>
|
||||
<el-tag size="small" type="danger" v-else-if="scope.row.conf_type==10">交易设置</el-tag>
|
||||
<el-tag size="small" type="danger" v-else-if="scope.row.conf_type==11">售后设置</el-tag>
|
||||
<el-tag size="small" v-else>基础设置</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="conf_title" label="参数名称">
|
||||
</el-table-column>
|
||||
<el-table-column prop="conf_desc" label="参数描述">
|
||||
</el-table-column>
|
||||
<el-table-column prop="conf_key" label="参数字段">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip class="item" effect="dark" :content="scope.row.conf_title" placement="top">
|
||||
<el-link>{{scope.row.conf_key}}</el-link>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="conf_sort" label="排序" width="90">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-link type="primary" @click="clickEdit(scope.row)" :underline="false">编辑</el-link>
|
||||
<el-link type="danger" @click="clickDelete(scope.row)" :underline="false" v-if="scope.row.conf_system==0">删除</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<div class="page">
|
||||
<el-pagination @size-change="handleSizeChange" :page-sizes="[10, 20, 50, 100,200,500]" :page-size="10"
|
||||
layout="total, sizes, prev, pager, next, jumper" background @current-change="changeCurrentPage"
|
||||
:current-page="dataList.current_page" :page-count="dataList.last_page" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- 添加框 -->
|
||||
<el-dialog title="添加配置" :visible.sync="dialogFormAdd" width="800px" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formAdd" status-icon :rules="rules" ref="formAdd">
|
||||
<el-form-item label="所属分类" :label-width="formLabelWidth" prop="conf_type">
|
||||
<el-select v-model="formAdd.conf_type" placeholder="请选择所属分类" size="medium">
|
||||
<el-option label="基础设置" value="0"></el-option>
|
||||
<el-option label="店铺设置" value="1"></el-option>
|
||||
<el-option label="上传配置" value="2"></el-option>
|
||||
<el-option label="短信配置" value="3"></el-option>
|
||||
<el-option label="其他配置" value="4"></el-option>
|
||||
<el-option label="微信支付配置" value="5"></el-option>
|
||||
<el-option label="支付宝支付配置" value="6"></el-option>
|
||||
<el-option label="微信小程序配置" value="7"></el-option>
|
||||
<el-option label="微信公众号配置" value="8"></el-option>
|
||||
<el-option label="物流配置" value="9"></el-option>
|
||||
<el-option label="交易设置" value="10"></el-option>
|
||||
<el-option label="售后设置" value="11"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数名称" :label-width="formLabelWidth" prop="conf_title">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.conf_title"></el-input>
|
||||
<span style="color: #999;">参数名称,如:网站LOGO</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数字段" :label-width="formLabelWidth" prop="conf_key">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.conf_key"></el-input>
|
||||
<span style="color: #999;">参数字段,如:logo</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数描述" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.conf_desc"></el-input>
|
||||
<span style="color: #999;">参数描述,如:建议尺寸: 300*300</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="字段类型" :label-width="formLabelWidth">
|
||||
<el-radio-group v-model="formAdd.conf_spec" size="small">
|
||||
<el-radio-button label="0">文本框</el-radio-button>
|
||||
<el-radio-button label="1">多行文本框</el-radio-button>
|
||||
<el-radio-button label="2">单选框</el-radio-button>
|
||||
<el-radio-button label="3">多选框</el-radio-button>
|
||||
<el-radio-button label="4">单图</el-radio-button>
|
||||
<el-radio-button label="5">多图</el-radio-button>
|
||||
<el-radio-button label="6">富文本</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-input v-if="formAdd.conf_spec==2 || formAdd.conf_spec==3" type="textarea" v-model="formAdd.conf_content"
|
||||
:rows="4" placeholder="参数方式例如: 开启=>1 关闭=>0" style="margin-top: 10px;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="显示隐藏" :label-width="formLabelWidth">
|
||||
<el-switch size="medium" v-model="formAdd.conf_status"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" :label-width="formLabelWidth">
|
||||
<el-input-number v-model="formAdd.conf_sort" :min="0" :max="999" size="medium" style="width: 120px;" controls-position="right" />
|
||||
</el-form-item>
|
||||
<el-form-item label="系统参数" :label-width="formLabelWidth">
|
||||
<el-switch size="medium" v-model="formAdd.conf_system"></el-switch>
|
||||
<div style="color: #999;">开启后,添加的参数将无法删除</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postAdd">确认添加</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 修改框 -->
|
||||
<el-dialog title="修改配置" :visible.sync="dialogFormEdit" width="800px" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formEdit" status-icon :rules="rules" ref="formEdit">
|
||||
<el-form-item label="所属分类" :label-width="formLabelWidth" prop="conf_type">
|
||||
<el-select v-model="formEdit.conf_type" placeholder="请选择所属分类" size="medium">
|
||||
<el-option label="基础设置" value="0"></el-option>
|
||||
<el-option label="店铺设置" value="1"></el-option>
|
||||
<el-option label="上传配置" value="2"></el-option>
|
||||
<el-option label="短信配置" value="3"></el-option>
|
||||
<el-option label="其他配置" value="4"></el-option>
|
||||
<el-option label="微信支付配置" value="5"></el-option>
|
||||
<el-option label="支付宝支付配置" value="6"></el-option>
|
||||
<el-option label="微信小程序配置" value="7"></el-option>
|
||||
<el-option label="微信公众号配置" value="8"></el-option>
|
||||
<el-option label="物流配置" value="9"></el-option>
|
||||
<el-option label="交易设置" value="10"></el-option>
|
||||
<el-option label="售后设置" value="11"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数名称" :label-width="formLabelWidth" prop="conf_title">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.conf_title"></el-input>
|
||||
<span style="color: #999;">参数名称,如:网站LOGO</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数字段" :label-width="formLabelWidth" prop="conf_key">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.conf_key"></el-input>
|
||||
<span style="color: #6881ec;">参数字段,切勿随意修改</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数描述" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.conf_desc"></el-input>
|
||||
<span style="color: #999;">参数描述,如:建议尺寸: 300*300</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="字段类型" :label-width="formLabelWidth">
|
||||
<el-radio-group v-model="formEdit.conf_spec" size="small">
|
||||
<el-radio-button label="0">文本框</el-radio-button>
|
||||
<el-radio-button label="1">多行文本框</el-radio-button>
|
||||
<el-radio-button label="2">单选框</el-radio-button>
|
||||
<el-radio-button label="3">多选框</el-radio-button>
|
||||
<el-radio-button label="4">单图</el-radio-button>
|
||||
<el-radio-button label="5">多图</el-radio-button>
|
||||
<el-radio-button label="6">富文本</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-input v-if="formEdit.conf_spec==2 || formEdit.conf_spec==3" type="textarea" v-model="formEdit.conf_content" :rows="4" placeholder="参数方式例如: 开启=>1 关闭=>0" style="margin-top: 10px;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="显示隐藏" :label-width="formLabelWidth">
|
||||
<el-switch size="medium" v-model="formEdit.conf_status"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" :label-width="formLabelWidth">
|
||||
<el-input-number v-model="formEdit.conf_sort" :min="0" :max="999" size="medium" style="width: 120px;"
|
||||
controls-position="right" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postEdit">确认修改</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getList();
|
||||
return {
|
||||
search: {
|
||||
keyword: "",
|
||||
filter: "conf_id"
|
||||
},
|
||||
formLabelWidth: '80px',
|
||||
dialogFormAdd: false,
|
||||
dialogFormEdit: false,
|
||||
loading: true,
|
||||
dataList: [],
|
||||
selectList: [],
|
||||
form: {
|
||||
page: 1,
|
||||
per_page: 10
|
||||
},
|
||||
formAdd: {
|
||||
conf_status: true,
|
||||
conf_spec: 0,
|
||||
conf_sort: 0,
|
||||
},
|
||||
formEdit: {},
|
||||
rules: {
|
||||
conf_title: [
|
||||
{ required: true, message: '参数名称必须填写', trigger: 'blur' },
|
||||
],
|
||||
conf_key: [
|
||||
{ required: true, message: '参数字段必须填写', trigger: 'blur' },
|
||||
],
|
||||
conf_type: [
|
||||
{ required: true, message: '所属分类必须填写', trigger: 'blur' },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getList_search() {
|
||||
this.form.page = 1;
|
||||
this.getList();
|
||||
},
|
||||
handleSizeChange(per_page) {
|
||||
this.form.per_page = per_page;
|
||||
this.getList();
|
||||
},
|
||||
postMultDelete() {
|
||||
var that = this;
|
||||
if (that.selectList.length == 0) {
|
||||
that.$message.error('未选择任何配置!');
|
||||
return;
|
||||
}
|
||||
this.$confirm('即将删除选中的配置, 是否确认?', '批量删除', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/conf/delete', Object.assign({}, PostBase, {
|
||||
conf_id: that.selectList.join(",")
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
changeSelection(list) {
|
||||
var that = this;
|
||||
that.selectList = [];
|
||||
for (var index in list) {
|
||||
that.selectList.push(list[index].conf_id);
|
||||
}
|
||||
},
|
||||
postEdit() {
|
||||
var that = this;
|
||||
that.$refs['formEdit'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/conf/update', Object.assign({}, PostBase, that.formEdit))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormEdit = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
postAdd() {
|
||||
var that = this;
|
||||
that.$refs['formAdd'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/conf/add', Object.assign({}, PostBase, that.formAdd))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormAdd = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
clickAdd() {
|
||||
var that = this;
|
||||
that.formAdd = {
|
||||
conf_status: true,
|
||||
conf_spec: 0,
|
||||
conf_sort: 0,
|
||||
};
|
||||
axios.post('/admin/conf/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
that.groupList = response.data.data;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dialogFormAdd = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickDelete(row) {
|
||||
var that = this;
|
||||
this.$confirm('即将删除这个配置, 是否确认?', '删除提醒', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/conf/delete', Object.assign({}, PostBase, {
|
||||
conf_id: row.conf_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
clickStatus(row) {
|
||||
var that = this;
|
||||
axios.post(row.conf_status ? '/admin/conf/enable' : '/admin/conf/disable', Object.assign({}, PostBase, {
|
||||
conf_id: row.conf_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickEdit(row) {
|
||||
var that = this;
|
||||
that.formEdit = row;
|
||||
axios.post('/admin/conf/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.groupList = response.data.data;
|
||||
axios.post('/admin/conf/detail', Object.assign({}, PostBase, {
|
||||
conf_id: row.conf_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
response.data.data.conf_status = response.data.data.conf_status?true:false;
|
||||
response.data.data.conf_type = response.data.data.conf_type.toString();
|
||||
that.formEdit = response.data.data;
|
||||
that.dialogFormEdit = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/conf/getList', Object.assign({}, PostBase, that.form, that.search))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,408 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-form :inline="true">
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-plus" size="small" @click="clickAdd" plain>添加</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-delete" size="small" @click="postMultDelete" plain>批量删除</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table :data="dataList" @selection-change="changeSelection" v-loading="loading">
|
||||
<el-table-column type="selection" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column prop="group_id" label="组ID" width="100">
|
||||
</el-table-column>
|
||||
<el-table-column prop="group_name" label="组名称" width="200">
|
||||
</el-table-column>
|
||||
<el-table-column prop="group_desc" label="组描述">
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column label="禁用" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.group_status==1?true:false" active-color="#ff4949"
|
||||
@change="clickStatus(scope.row)">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-link type="primary" @click="clickEdit(scope.row)" :underline="false">编辑</el-link>
|
||||
<el-link type="primary" @click="clickAuth(scope.row)" :underline="false">授权</el-link>
|
||||
<el-link type="danger" @click="clickDelete(scope.row)" :underline="false">删除</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
|
||||
|
||||
<!-- 添加框 -->
|
||||
<el-dialog title="添加用户组" :visible.sync="dialogFormAdd" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formAdd" status-icon :rules="rules" ref="formAdd">
|
||||
<el-form-item label="组名称" :label-width="formLabelWidth" prop="group_name">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.group_name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="组描述" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.group_desc"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postAdd">确认添加</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 修改框 -->
|
||||
<el-dialog title="修改用户组" :visible.sync="dialogFormEdit" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formEdit" status-icon :rules="rules" ref="formEdit">
|
||||
<el-form-item label="组名称" :label-width="formLabelWidth" prop="group_name">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.group_name"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="组描述" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.group_desc"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postEdit">确认修改</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 授权框 -->
|
||||
<el-dialog class="pub_dialog" title="用户组授权" :visible.sync="dialogFormAuth" :modal-append-to-body='false' append-to-body
|
||||
width="60%" :close-on-click-modal='false'>
|
||||
<div style="padding: 10px 30px;">
|
||||
<el-tree :data="nodeList" @check="currentChecked" show-checkbox node-key="node_id" :props="defaultProps" :default-checked-keys="defaultkeys"></el-tree>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postAuth">确认授权</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getList();
|
||||
return {
|
||||
checkAll: false,
|
||||
search: {
|
||||
group_status: "",
|
||||
keyword: "",
|
||||
filter: "group_id"
|
||||
},
|
||||
formLabelWidth: '80px',
|
||||
dialogFormAdd: false,
|
||||
dialogFormEdit: false,
|
||||
dialogFormAuth: false,
|
||||
loading: true,
|
||||
dataList: [],
|
||||
groupList: [],
|
||||
selectList: [],
|
||||
selectNodeList: [],
|
||||
selectedGroupId: 0,
|
||||
nodeList: [],
|
||||
defaultProps: {
|
||||
children: 'sub',
|
||||
label: 'node_title'
|
||||
},
|
||||
defaultkeys: [],
|
||||
form: {
|
||||
page: 1
|
||||
},
|
||||
formAdd: {},
|
||||
formEdit: {},
|
||||
rules: {
|
||||
group_name: [
|
||||
{ required: true, message: '组名称必须填写', trigger: 'blur' },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
postMultDelete() {
|
||||
var that = this;
|
||||
if (that.selectList.length == 0) {
|
||||
that.$message.error('未选择任何用户!');
|
||||
return;
|
||||
}
|
||||
this.$confirm('即将删除选中的用户, 是否确认?', '批量删除', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/group/delete', Object.assign({}, PostBase, {
|
||||
group_id: that.selectList.join(",")
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
changeSelection(list) {
|
||||
var that = this;
|
||||
that.selectList = [];
|
||||
for (var index in list) {
|
||||
that.selectList.push(list[index].group_id);
|
||||
}
|
||||
},
|
||||
postAuth() {
|
||||
var that = this;
|
||||
axios.post('/admin/group/authorize', Object.assign({}, PostBase, {
|
||||
node_ids: that.selectNodeList.join(','),
|
||||
group_id: that.selectedGroupId
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormAuth = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
postEdit() {
|
||||
var that = this;
|
||||
that.$refs['formEdit'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/group/update', Object.assign({}, PostBase, that.formEdit))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormEdit = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
postAdd() {
|
||||
var that = this;
|
||||
that.$refs['formAdd'].validate((valid) => {
|
||||
if (!valid) {
|
||||
that.$message.error('仔细检查检查,是不是有个地方写得不对?');
|
||||
return;
|
||||
}
|
||||
axios.post('/admin/group/add', Object.assign({}, PostBase, that.formAdd))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormAdd = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
clickAdd() {
|
||||
var that = this;
|
||||
that.formAdd = {};
|
||||
axios.post('/admin/group/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
that.groupList = response.data.data;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dialogFormAdd = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickDelete(row) {
|
||||
var that = this;
|
||||
this.$confirm('即将删除这个用户, 是否确认?', '删除提醒', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/group/delete', Object.assign({}, PostBase, {
|
||||
group_id: row.group_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
clickStatus(row) {
|
||||
var that = this;
|
||||
axios.post(row.group_status ? '/admin/group/enable' : '/admin/group/disable', Object.assign({}, PostBase, {
|
||||
group_id: row.group_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickAuth(row) {
|
||||
var that = this;
|
||||
that.selectNodeList = [];
|
||||
that.selectedGroupId = row.group_id;
|
||||
axios.post('/admin/node/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.nodeList = response.data.data.data;
|
||||
that.dialogFormAuth = true;
|
||||
that.getAuthList(row);
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
getAuthList(row) {
|
||||
var that = this;
|
||||
that.defaultkeys = [];
|
||||
axios.post('/admin/group/getAuthorize', Object.assign({}, PostBase, {
|
||||
group_id: row.group_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.defaultkeys = [];
|
||||
for (var i in response.data.data) {
|
||||
that.defaultkeys.push(response.data.data[i].auth_node);
|
||||
}
|
||||
that.dialogFormAuth = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('设置选中状态失败');
|
||||
});
|
||||
},
|
||||
|
||||
currentChecked(nodeObj, SelectedObj) {
|
||||
this.selectNodeList = SelectedObj.checkedKeys
|
||||
},
|
||||
clickEdit(row) {
|
||||
var that = this;
|
||||
that.formEdit = row;
|
||||
axios.post('/admin/group/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.groupList = response.data.data;
|
||||
axios.post('/admin/group/detail', Object.assign({}, PostBase, {
|
||||
group_id: row.group_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.formEdit = response.data.data;
|
||||
that.dialogFormEdit = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/group/getList', Object.assign({}, PostBase, that.form, that.search))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>后台管理系统</title>
|
||||
{include file="common/header"/}
|
||||
<div class="homecontainer" style="height: 100%;display: flex;align-items: center;justify-content: center;">
|
||||
<div>
|
||||
<img src="/static/admin/images/logo@2x.png" alt="">
|
||||
<p style="color: #999999;">@资源管理系统</p>
|
||||
</div>
|
||||
</div>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
data: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,462 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-form :inline="true">
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-plus" size="small" @click="clickAdd" plain>添加</el-button>
|
||||
</el-form-item>
|
||||
<div style="float:right">
|
||||
<el-form-item style="width:120px;">
|
||||
<el-select placeholder="显示状态" size="small" v-model="search.node_show">
|
||||
<el-option value="" label="全部状态">
|
||||
</el-option>
|
||||
<el-option v-for="show in showList" :value="show.show_id" :label="show.show_title">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item style="width:120px;">
|
||||
<el-select placeholder="筛选类别" size="small" v-model="search.filter">
|
||||
<el-option value="node_id" label="节点ID">
|
||||
</el-option>
|
||||
<el-option value="node_title" label="节点名称">
|
||||
</el-option>
|
||||
<el-option value="node_desc" label="节点描述">
|
||||
</el-option>
|
||||
<el-option value="node_module" label="模块">
|
||||
</el-option>
|
||||
<el-option value="node_controller" label="控制器">
|
||||
</el-option>
|
||||
<el-option value="node_action" label="方法">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input placeholder="输入关键词搜索" size="small" v-model="search.keyword"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="getList_search" plain>搜索</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-table :data="dataList" default-expand-all @selection-change="changeSelection" v-loading="loading" row-key="node_id" :tree-props="{children: 'sub', hasChildren: 'hasChildren'}">
|
||||
<el-table-column prop="node_id" label="ID" width="120">
|
||||
</el-table-column>
|
||||
<el-table-column prop="node_title" label="节点名称">
|
||||
<template slot-scope="scope">
|
||||
<i :class="scope.row.node_icon" style="font-size: 16px;"></i> {{scope.row.node_title}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="节点地址">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.node_module+"/"+scope.row.node_controller+"/"+scope.row.node_action}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="node_order" label="排序" width="">
|
||||
</el-table-column>
|
||||
<el-table-column label="隐藏" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.node_show==0?true:false" active-color="#ff4949"
|
||||
@change="clickShow(scope.row)">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-link type="primary" @click="clickEdit(scope.row)" :underline="false">编辑</el-link>
|
||||
<el-link type="danger" @click="clickDelete(scope.row)" :underline="false">删除</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- 添加框 -->
|
||||
<el-dialog title="添加节点" :visible.sync="dialogFormAdd" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formAdd" status-icon :rules="rules" ref="formAdd">
|
||||
<el-form-item label="节点名称" :label-width="formLabelWidth" prop="node_title">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_title"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点描述" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_desc"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点图标" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_icon"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属模块" :label-width="formLabelWidth" prop="node_module">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_module"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="控制器" :label-width="formLabelWidth" prop="node_controller">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_controller"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="方法" :label-width="formLabelWidth" prop="node_action">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_action"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否显示" :label-width="formLabelWidth">
|
||||
<el-select placeholder="请选择是否显示到菜单" size="small" v-model="formAdd.node_show">
|
||||
<el-option v-for="show in showList" :value="show.show_id" :label="show.show_title">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="父级菜单" :label-width="formLabelWidth">
|
||||
<el-select placeholder="请选择菜单" size="small" v-model="formAdd.node_pid">
|
||||
<el-option v-for="parent in parentList" :value="parent.node_id" :label="parent.node_title">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="父级菜单" :label-width="formLabelWidth">
|
||||
<el-cascader :options="parentList" v-model="formAdd.node_pid" :props="props" :show-all-levels="false">
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
<el-form-item label="显示顺序" :label-width="formLabelWidth" prop="node_order">
|
||||
<el-input size="medium" autocomplete="off" v-model="formAdd.node_order"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postAdd">确认添加</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 修改框 -->
|
||||
<el-dialog title="修改节点" :visible.sync="dialogFormEdit" :modal-append-to-body='false' append-to-body :close-on-click-modal='false'>
|
||||
<el-form :model="formEdit" status-icon :rules="rules" ref="formEdit">
|
||||
<el-form-item label="节点名称" :label-width="formLabelWidth" prop="node_title">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_title"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点描述" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_desc"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点图标" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_icon"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属模块" :label-width="formLabelWidth" prop="node_module">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_module"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="控制器" :label-width="formLabelWidth" prop="node_controller">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_controller"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="方法" :label-width="formLabelWidth" prop="node_action">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_action"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否显示" :label-width="formLabelWidth">
|
||||
<el-select placeholder="请选择是否显示到菜单" size="small" v-model="formEdit.node_show">
|
||||
<el-option v-for="show in showList" :value="show.show_id" :label="show.show_title">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="父级菜单" :label-width="formLabelWidth">
|
||||
<el-cascader :options="parentList" v-model="formEdit.node_pid" :props="props" :show-all-levels="false"></el-cascader>
|
||||
</el-form-item>
|
||||
<el-form-item label="显示顺序" :label-width="formLabelWidth" prop="node_order">
|
||||
<el-input size="medium" autocomplete="off" v-model="formEdit.node_order"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postEdit">确认修改</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
this.getList();
|
||||
return {
|
||||
search: {
|
||||
node_show: "",
|
||||
keyword: "",
|
||||
filter: "node_id"
|
||||
},
|
||||
formLabelWidth: '80px',
|
||||
dialogFormAdd: false,
|
||||
dialogFormEdit: false,
|
||||
loading: true,
|
||||
dataList: [],
|
||||
parentList: [],
|
||||
props: {
|
||||
checkStrictly: true,
|
||||
emitPath: false,
|
||||
value: 'node_id',
|
||||
label: 'node_title',
|
||||
children: 'sub',
|
||||
},
|
||||
showList: [
|
||||
{
|
||||
show_id: 0,
|
||||
show_title: "隐藏"
|
||||
},
|
||||
{
|
||||
show_id: 1,
|
||||
show_title: "显示"
|
||||
}
|
||||
],
|
||||
selectList: [],
|
||||
formAdd: {
|
||||
node_readonly: 0,
|
||||
node_pid: 0,
|
||||
node_order: 1,
|
||||
node_show: 1,
|
||||
},
|
||||
formEdit: {
|
||||
node_readonly: 0,
|
||||
node_pid: 0,
|
||||
},
|
||||
rules: {
|
||||
node_title: [
|
||||
{ required: true, message: '节点名称必须填写', trigger: 'blur' },
|
||||
],
|
||||
node_controller: [
|
||||
// { required: true, pattern: /^[a-z]+$/, message: '控制器为有效小写字母', trigger: 'blur' },
|
||||
],
|
||||
node_module: [
|
||||
{ required: true, pattern: /^[a-z]+$/, message: '模块名为有效小写字母', trigger: 'blur' },
|
||||
],
|
||||
node_action: [
|
||||
{ required: true, pattern: /^[a-z]+$/, message: '方法名为有效小写字母', trigger: 'blur' },
|
||||
],
|
||||
node_order: [
|
||||
{ required: true, pattern: /^\d$/, message: '顺序为有效自然数', trigger: 'blur' },
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getList_search() {
|
||||
this.form.page = 1;
|
||||
this.getList();
|
||||
},
|
||||
postMultDelete() {
|
||||
var that = this;
|
||||
if (that.selectList.length == 0) {
|
||||
that.$message.error('未选择任何节点!');
|
||||
return;
|
||||
}
|
||||
this.$confirm('即将删除选中的节点, 是否确认?', '批量删除', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/node/delete', Object.assign({}, PostBase, {
|
||||
node_id: that.selectList.join(",")
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
changeSelection(list) {
|
||||
var that = this;
|
||||
that.selectList = [];
|
||||
for (var index in list) {
|
||||
that.selectList.push(list[index].node_id);
|
||||
}
|
||||
},
|
||||
postEdit() {
|
||||
var that = this;
|
||||
axios.post('/admin/node/update', Object.assign({}, PostBase, that.formEdit))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormEdit = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
postAdd() {
|
||||
var that = this;
|
||||
axios.post('/admin/node/add', Object.assign({}, PostBase, that.formAdd))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormAdd = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickAdd() {
|
||||
var that = this;
|
||||
that.formAdd = {
|
||||
node_readonly: 0,
|
||||
node_pid: 0,
|
||||
node_order: 1,
|
||||
node_show: 1,
|
||||
};
|
||||
axios.post('/admin/node/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
that.groupList = response.data.data;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dialogFormAdd = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickDelete(row) {
|
||||
var that = this;
|
||||
this.$confirm('即将删除这个节点, 是否确认?', '删除提醒', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/node/delete', Object.assign({}, PostBase, {
|
||||
node_id: row.node_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
clickShow(row) {
|
||||
var that = this;
|
||||
axios.post(row.node_show ? '/admin/node/hide_menu' : '/admin/node/show_menu', Object.assign({}, PostBase, {
|
||||
node_id: row.node_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
clickEdit(row) {
|
||||
var that = this;
|
||||
that.formEdit = row;
|
||||
axios.post('/admin/node/getList', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.groupList = response.data.data;
|
||||
axios.post('/admin/node/detail', Object.assign({}, PostBase, {
|
||||
node_id: row.node_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
response.data.data.node_pid = response.data.data.node_pid==0?'0':response.data.data.node_pid
|
||||
that.formEdit = response.data.data;
|
||||
that.dialogFormEdit = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/node/getList', Object.assign({}, PostBase, that.form, that.search))
|
||||
.then(function (res) {
|
||||
that.loading = false;
|
||||
if (res.data.code == 200) {
|
||||
that.dataList = JSON.parse(JSON.stringify(res.data.data.data));
|
||||
that.parentList = [];
|
||||
that.parentList.push({
|
||||
node_id: "0",
|
||||
node_title: "顶级菜单",
|
||||
sub: [],
|
||||
});
|
||||
for (var i in res.data.data.data) {
|
||||
res.data.data.data[i].node_id = res.data.data.data[i].node_id
|
||||
that.parentList.push(res.data.data.data[i]);
|
||||
}
|
||||
for (let item of that.parentList) {
|
||||
if(item.sub.length>0){
|
||||
for (let items of item.sub) {
|
||||
items.sub = undefined
|
||||
}
|
||||
}else{
|
||||
item.sub = undefined
|
||||
}
|
||||
}
|
||||
} else {
|
||||
that.$message.error(res.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,212 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>目前仅支持夸克</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>设置夸克cookie</span>
|
||||
</div>
|
||||
<div style="font-size:14px;color:#666;">
|
||||
<el-form :model="form">
|
||||
<el-form-item>
|
||||
<el-input style="width: 100%;" v-model="form.cookie" placeholder="夸克云盘网页版的cookie"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<p>Tips:夸克云盘网页版的cookie,不懂如何获取请百度;填写并保存后才能使用下面功能</p>
|
||||
</div>
|
||||
</el-card>
|
||||
<br>
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>一键转存他人链接</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;font-size:14px;color:#666;">
|
||||
<font color=orangered>简单理解就是将别人的资源分享转成自己的并添加该资源到系统中</font>
|
||||
<p>功能说明:</p>
|
||||
<p>1、转存短剧资源到自己的网盘</p>
|
||||
<p>2、生成自己的分享链接</p>
|
||||
<p>3、将分享链接添加到该系统资源管理中</p>
|
||||
<p>Tips:该功能仅支持单条操作;资源标题重复的会跳过;复制他人分享的网盘链接,如:https://pan.quark.cn/s/fb8402aed9c4</p>
|
||||
</div>
|
||||
<el-button type="danger" @click="s1Btn">立即转存</el-button>
|
||||
</el-card>
|
||||
<br>
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>每日自动更新</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;font-size:14px;color:#666;">
|
||||
<p>自动更新:<font color=orangered>转存当日及昨天的资源数据;</font></p>
|
||||
<font color=orangered>将此接口添加到计划任务中,计划任务每日执行一次即可;接口地址:https://你的域名/api/source/day</font>
|
||||
<p>Tips:添加计划任务后方可生效;名称重复的资源会跳过转存;</p>
|
||||
</div>
|
||||
</el-card>
|
||||
<br>
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>转存心悦搜剧资源</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;font-size:14px;color:#666;">
|
||||
<p>全部转存:<font color=orangered>一键转存心悦搜剧所有资源到自己的网盘及系统中</font></p>
|
||||
<font color=orangered>全部转存速度比较慢,提交后请耐心等待;名称重复的资源会跳过转存;</font>
|
||||
<p>Tips:心悦搜剧:https://pan.xinyuedh.com;</p>
|
||||
</div>
|
||||
<el-button type="danger" @click="s2Btn">全部转存</el-button>
|
||||
</el-card>
|
||||
<!-- <el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>清除缓存</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;font-size:14px;color:#666;">
|
||||
清除缓存
|
||||
<font color=orangered>不可逆操作</font>
|
||||
</div>
|
||||
<el-button type="danger" @click="">清除缓存</el-button>
|
||||
</el-card> -->
|
||||
</div>
|
||||
</el-card>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
cookie: '',
|
||||
},
|
||||
file: '',
|
||||
files: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getData();
|
||||
this.getFile()
|
||||
},
|
||||
methods: {
|
||||
getData(){
|
||||
let that = this
|
||||
axios.post('/admin/conf/getBaseConfig', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == 200) {
|
||||
for (let item of response.data.data) {
|
||||
if(item.conf_key === 'quark_cookie'){
|
||||
that.form.cookie = item.conf_value
|
||||
}
|
||||
if(item.conf_key === 'quark_file'){
|
||||
that.file = item.conf_value
|
||||
}
|
||||
}
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
},
|
||||
onSubmit(){
|
||||
let that = this
|
||||
axios.post('/admin/conf/updateBaseConfig', Object.assign({}, PostBase, {
|
||||
quark_cookie: that.form.cookie
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == 200) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.getFile()
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
|
||||
s1Btn(){
|
||||
let that = this
|
||||
this.$prompt('请输入夸克资源分享地址', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputPattern: /.+/,
|
||||
inputErrorMessage: '不能为空'
|
||||
}).then(({ value }) => {
|
||||
axios.post('/admin/source/transfer', Object.assign({}, PostBase, {
|
||||
url: value
|
||||
}))
|
||||
.then(function (res) {
|
||||
if (res.data.code == 200) {
|
||||
that.$message({
|
||||
message: res.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(res.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {});
|
||||
},
|
||||
|
||||
s2Btn(){
|
||||
let that = this
|
||||
this.$confirm('全部转存速度比较慢,提交后请耐心等待, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/source/transferAll', Object.assign({}, PostBase))
|
||||
.then(function (res) {
|
||||
if (res.data.code == 200) {
|
||||
} else {
|
||||
that.$message.error(res.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
});
|
||||
that.$message({
|
||||
message: "已提交任务,稍后查看结果",
|
||||
type: 'success'
|
||||
});
|
||||
}).catch(() => {});
|
||||
|
||||
},
|
||||
|
||||
|
||||
getFile(){
|
||||
let that = this
|
||||
axios.post('/admin/source/getFiles', Object.assign({}, PostBase))
|
||||
.then(function (res) {
|
||||
if (res.data.code == 200) {
|
||||
that.files = res.data || []
|
||||
} else {
|
||||
that.$message.error(res.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-table :data="dataList.data" v-loading="loading">
|
||||
<el-table-column prop="id" label="ID" align="center" width="100">
|
||||
</el-table-column>
|
||||
<el-table-column prop="content" label="用户想要的资源描述">
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_time" label="提交时间" align="center" width="200">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<div class="page">
|
||||
<el-pagination @size-change="handleSizeChange" :page-sizes="[10, 20, 50, 100,200,500]" :page-size="10"
|
||||
layout="total, sizes, prev, pager, next, jumper" background @current-change="changeCurrentPage"
|
||||
:current-page="dataList.current_page" :page-count="dataList.last_page" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
dataList: [],
|
||||
form: {
|
||||
page: 1,
|
||||
per_page: 10,
|
||||
order: 'id desc'
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
handleSizeChange(per_page) {
|
||||
this.form.per_page = per_page;
|
||||
this.getList();
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/feedback/getList', Object.assign({}, PostBase, that.form))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,320 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-form :inline="true" @submit.native.prevent>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-plus" size="small" @click="clickAdd" plain>添加资源</el-button>
|
||||
<el-button icon="el-icon-plus" size="small" @click="ImportShow" plain>导入资源</el-button>
|
||||
</el-form-item>
|
||||
<div style="float:right">
|
||||
<el-form-item>
|
||||
<el-input placeholder="输入关键词搜索" size="small" v-model="search.keyword" @keyup.enter.native="getList_search"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="getList_search" plain>搜索
|
||||
</el-button>
|
||||
<el-button icon="el-icon-refresh-left" size="small" @click="getList_search(0)" plain>重置</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-table :data="dataList.data" v-loading="loading">
|
||||
<el-table-column prop="source_id" label="ID" width="60">
|
||||
</el-table-column>
|
||||
<el-table-column prop="title" label="资源名称">
|
||||
</el-table-column>
|
||||
<el-table-column prop="url" label="资源地址" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_time" label="入库时间" align="center" width="200">
|
||||
</el-table-column>
|
||||
<el-table-column prop="update_time" label="更新时间" align="center" width="200">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180" align="center">
|
||||
<template slot-scope="scope">
|
||||
<div class="order-text">
|
||||
<p>
|
||||
<el-link type="success" @click="clickEdit(scope.row)" :underline="false">编辑</el-link>
|
||||
</p>
|
||||
<p>
|
||||
<el-link type="danger" @click="clickDelete(scope.row)" :underline="false">删除</el-link>
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
|
||||
<div class="page">
|
||||
<el-pagination @size-change="handleSizeChange" :page-sizes="[10, 20, 50, 100,200,500]" :page-size="10"
|
||||
layout="total, sizes, prev, pager, next, jumper" background @current-change="changeCurrentPage"
|
||||
:current-page="dataList.current_page" :page-count="dataList.last_page" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 添加框 -->
|
||||
<el-dialog title="添加资源" :visible.sync="dialogFormAdd" :modal-append-to-body='false' append-to-body
|
||||
:close-on-click-modal='false' width="680px">
|
||||
<el-form :model="formAdd" :rules="rules" ref="formAdd">
|
||||
<el-form-item prop="title" label="资源名称" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" placeholder="请输入资源名称" v-model="formAdd.title"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="资源地址" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" placeholder="请输入资源地址" v-model="formAdd.url"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postAdd()">确认添加</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 修改框 -->
|
||||
<el-dialog title="修改资源" :visible.sync="dialogFormEdit" :modal-append-to-body='false' append-to-body
|
||||
:close-on-click-modal='false' width="680px">
|
||||
<el-form :model="formEdit" :rules="rules" ref="formEdit">
|
||||
<el-form-item prop="title" label="资源名称" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" placeholder="请输入资源名称" v-model="formEdit.title"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="资源地址" :label-width="formLabelWidth">
|
||||
<el-input size="medium" autocomplete="off" placeholder="请输入资源地址" v-model="formEdit.url"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="postEdit()">确认修改</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 导入数据 -->
|
||||
<el-dialog title="导入资源" :visible.sync="dialogImport" :modal-append-to-body='false' append-to-body
|
||||
:close-on-click-modal='false' width="600px">
|
||||
<el-form :model="Importform">
|
||||
|
||||
<el-form-item label="" :label-width="formLabelWidth">
|
||||
<el-upload class="upload-demo" :data="Importform" name="file"
|
||||
ref="ImportUpload"
|
||||
drag
|
||||
:auto-upload="false"
|
||||
limit="1"
|
||||
:on-exceed="handleExceed"
|
||||
:on-success="handleAvatarSuccess"
|
||||
action="/admin/source/imports"
|
||||
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
</el-upload>
|
||||
<span style="color: #999;">请导入夸克官方导出的csv文件</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="ImportPost()">提交</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
search: {
|
||||
keyword: "",
|
||||
filter: "title"
|
||||
},
|
||||
formLabelWidth: '120px',
|
||||
dialogFormAdd: false,
|
||||
dialogFormEdit: false,
|
||||
loading: true,
|
||||
dataList: [],
|
||||
form: {
|
||||
page: 1,
|
||||
per_page: 10,
|
||||
order: 'source_id desc'
|
||||
},
|
||||
formAdd: {
|
||||
},
|
||||
formEdit: {
|
||||
},
|
||||
rules: {
|
||||
title: [{ required: true, message: '请输入资源名称', trigger: 'blur' }],
|
||||
url: [{ required: true, message: '请输入资源地址', trigger: 'blur' }],
|
||||
},
|
||||
dialogImport: false,
|
||||
Importform: {
|
||||
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList_search(val) {
|
||||
if (val == 0) {
|
||||
this.search = {
|
||||
keyword: "",
|
||||
filter: "title"
|
||||
}
|
||||
}
|
||||
this.form.page = 1;
|
||||
this.getList();
|
||||
},
|
||||
handleSizeChange(per_page) {
|
||||
this.form.per_page = per_page;
|
||||
this.getList();
|
||||
},
|
||||
postEdit() {
|
||||
var that = this;
|
||||
that.$refs["formEdit"].validate((valid) => {
|
||||
if (valid) {
|
||||
axios.post('/admin/source/update', Object.assign({}, PostBase, that.formEdit))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormEdit = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
postAdd() {
|
||||
var that = this;
|
||||
that.$refs['formAdd'].validate((valid) => {
|
||||
if (valid) {
|
||||
axios.post('/admin/source/add', Object.assign({}, PostBase, that.formAdd))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
that.dialogFormAdd = false;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
clickAdd() {
|
||||
var that = this;
|
||||
that.formAdd = { status: 1, share_image: '' };
|
||||
that.dialogFormAdd = true;
|
||||
},
|
||||
clickDelete(row) {
|
||||
var that = this;
|
||||
this.$confirm('删除后,资源将无法查看,是否继续删除?', '删除提醒', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/source/delete', Object.assign({}, PostBase, {
|
||||
source_id: row.source_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
that.getList();
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
clickEdit(row) {
|
||||
var that = this;
|
||||
that.formEdit = row;
|
||||
axios.post('/admin/source/detail', Object.assign({}, PostBase, {
|
||||
source_id: row.source_id
|
||||
}))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.formEdit = response.data.data;
|
||||
that.dialogFormEdit = true;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/source/getList', Object.assign({}, PostBase, that.form, that.search))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
},
|
||||
|
||||
//导入数据
|
||||
ImportShow() {
|
||||
this.Importform = {
|
||||
}
|
||||
this.dialogImport = true
|
||||
},
|
||||
handleExceed(files, fileList) {
|
||||
this.$message.warning(`只能选择一个文件`);
|
||||
},
|
||||
handleAvatarSuccess(res, file) {
|
||||
if (res.code == 200) {
|
||||
this.getList();
|
||||
this.$message({
|
||||
message: res.message,
|
||||
type: 'success'
|
||||
});
|
||||
this.dialogImport = false;
|
||||
} else {
|
||||
this.$message.error(res.message);
|
||||
}
|
||||
this.$refs.ImportUpload.clearFiles();
|
||||
},
|
||||
ImportPost(){
|
||||
this.Importform = Object.assign(this.Importform, PostBase)
|
||||
this.$nextTick(() => {
|
||||
this.$refs.ImportUpload.submit();
|
||||
})
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
|
||||
<el-table :data="dataList.data" v-loading="loading">
|
||||
<el-table-column prop="name" label="转存任务名称">
|
||||
</el-table-column>
|
||||
<el-table-column prop="total_num" label="转存总数" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="new_num" label="新增数" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="skip_num" label="重复跳过" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="fail_num" label="失败数" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.end_time">已完成</el-tag>
|
||||
<el-tag type="danger" v-else>转存中</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_time" label="时间" align="center" width="240">
|
||||
<template slot-scope="scope">
|
||||
<p>任务开始:{{scope.row.create_time}}</p>
|
||||
<p v-if="scope.row.end_time">任务结束:{{scope.row.end_time}}</p>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<div class="page">
|
||||
<el-pagination @size-change="handleSizeChange" :page-sizes="[10, 20, 50, 100,200,500]" :page-size="10"
|
||||
layout="total, sizes, prev, pager, next, jumper" background @current-change="changeCurrentPage"
|
||||
:current-page="dataList.current_page" :page-count="dataList.last_page" :total="dataList.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
dataList: [],
|
||||
form: {
|
||||
page: 1,
|
||||
per_page: 10,
|
||||
order: 'source_log_id desc'
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
handleSizeChange(per_page) {
|
||||
this.form.per_page = per_page;
|
||||
this.getList();
|
||||
},
|
||||
changeCurrentPage(page) {
|
||||
this.form.page = page;
|
||||
this.getList();
|
||||
},
|
||||
getList() {
|
||||
var that = this;
|
||||
that.loading = true;
|
||||
axios.post('/admin/source_log/getList', Object.assign({}, PostBase, that.form))
|
||||
.then(function (response) {
|
||||
that.loading = false;
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.dataList = response.data.data;
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.loading = false;
|
||||
that.$message.error('服务器内部错误');
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,100 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$node.node_title}</title>
|
||||
{include file="common/header"/}
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>系统数据清理</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<!-- <el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>清理授权记录</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;font-size:14px;color:#666;">
|
||||
用户组授权信息清理为
|
||||
<font color=orangered>不可逆操作</font>,请谨慎操作!<br> 清理完毕后,除超级管理用户组外,其他任何用户组将无法访问系统任何功能!
|
||||
<br> 建议仅在用户组权限混乱或出现其他账号安全问题时进行清理操作。
|
||||
<br> 清理成功后可重新对用户组进行权限授权,即可恢复正常使用。
|
||||
</div>
|
||||
<el-button type="danger" @click="clearAuth">清理授权</el-button>
|
||||
</el-card>
|
||||
<br> -->
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>清除缓存</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;font-size:14px;color:#666;">
|
||||
清除缓存
|
||||
<font color=orangered>不可逆操作</font>
|
||||
</div>
|
||||
<el-button type="danger" @click="clearLog">清除缓存</el-button>
|
||||
</el-card>
|
||||
</div>
|
||||
</el-card>
|
||||
{include file="common/footer"/}
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
methods: {
|
||||
clearLog() {
|
||||
var that = this;
|
||||
this.$confirm('即将清除缓存, 是否确认?', '删除日志', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
axios.post('/admin/system/clean', Object.assign({}, PostBase))
|
||||
.then(function (response) {
|
||||
if (response.data.code == CODE_SUCCESS) {
|
||||
that.$message({
|
||||
message: response.data.message,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$message.error(response.data.message);
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
that.$message.error('服务器内部错误');
|
||||
console.log(error);
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
// clearAuth() {
|
||||
// var that = this;
|
||||
// this.$confirm('即将删除授权信息, 是否确认?', '清空授权', {
|
||||
// confirmButtonText: '删除',
|
||||
// cancelButtonText: '取消',
|
||||
// type: 'warning'
|
||||
// }).then(() => {
|
||||
// axios.post('/admin/auth/clean', Object.assign({}, PostBase))
|
||||
// .then(function (response) {
|
||||
// if (response.data.code == CODE_SUCCESS) {
|
||||
// that.$message({
|
||||
// message: response.data.message,
|
||||
// type: 'success'
|
||||
// });
|
||||
// } else {
|
||||
// that.$message.error(response.data.message);
|
||||
// }
|
||||
// })
|
||||
// .catch(function (error) {
|
||||
// that.$message.error('服务器内部错误');
|
||||
// console.log(error);
|
||||
// });
|
||||
// }).catch(() => {
|
||||
// });
|
||||
// },
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user