Commit e214d5f6 authored by qddidi's avatar qddidi

1

parents
Pipeline #62 canceled with stages
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
}
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}
# kitty
### 在线演示
演示地址:http://139.196.87.48:9002/kitty
用户名:admin 密码:admin
温馨提示:
有在演示环境删除数据的童鞋们,如果可以的话,麻烦动动小指,点击头像面板,
选择 -> 备份还原 帮忙恢复到系统默认备份数据,方便后来的童鞋查看,谢谢啦。
### 技术交流
为了方便大家提问和技术交流,整了个QQ群,欢迎童鞋们加入。
QQ技术交流群: 528818161
### 博客教程
本人技术博客提供同步系列文章教程, 讲解了Kitty从零开始搭建的全过程:
[Vue.js + Element UI 实现权限管理系统 前端篇](https://www.cnblogs.com/xifengxiaoma/p/9533018.html)
[Spring Boot + Spring Cloud 实现权限管理系统 后端篇](https://www.cnblogs.com/xifengxiaoma/p/9474953.html)
### 分支说明
- master: 主推版本分支,支持分布式,服务治理(Spring Security + Spring Cloud)
- dev: 开发分支,适时合并到master分支,支持分布式,服务治理(Spring Security + Spring Cloud)
- shiro-cloud: 基于Spring Boot + Shiro + Spring Cloud,支持分布式、服务治理
- shiro: 基于Spring Boot + Shiro,不包含 Spring Cloud,部署环境稍微简单一点
### 项目介绍
- Kitty是基于Spring Boot、Spring Cloud、Vue、Element实现的Java快速开发平台。
- 目标是搭建出一套简洁易用的快速解决方案,可以帮助用户有效降低项目开发难度和成本。
- 个人博客提供本项目开发过程同步系列教程文章,手把手的教你如何开发同类系统。
### 功能列表
- ✔ 系统登录:系统用户登录,系统登录认证(token方式)
- ✔ 用户管理:新建用户,修改用户,删除用户,查询用户
- ✔ 机构管理:新建机构,修改机构,删除机构,查询机构
- ✔ 角色管理:新建角色,修改角色,删除角色,查询角色
- ✔ 菜单管理:新建菜单,修改菜单,删除菜单,查询菜单
- ✔ 字典管理:新建字典,修改字典,删除字典,查询字典
- ✔ 系统日志:记录用户操作日志,查看系统执行日志记录
- ✔ 数据监控:定制Druid信息,提供简洁有效的SQL监控
- ✔ 聚合文档:定制在线文档,提供简洁美观的API文档
- ✔ 备份还原:系统备份还原,一键恢复系统初始化数据
- ✔ 主题切换:支持主题切换,自定主题颜色,一键换肤
- ✔ 服务治理:集成Consul注册中心,实现服务注册和发现
- ✔ 服务监控:集成Spring Boot Admin,实现服务监控
- ✔ 服务消费:集成Ribbon、Feign,服务调用和负载均衡
- ✔ 服务熔断:集成Hystrix、Turbine,实现熔断和监控
- ✔ 服务网关:集成Spring Cloud Zuul,实现API网关
- ✔ 链路追踪:集成Sleuth、Zipkin,实现分布式链路追踪
- ✔ 配置中心:集成Config、Bus,实现分布式配置中心
- ✔ 代码生成:提供代码生成器,最大化的降低代码开发量
- ✘ 单点登录:利用 OAuth2, 提供统一的单点登录功能
- ✘ 系统登录:集成第三方登录功能(QQ、微信、微博)
- ...
### 代码生成器
代码生成器放在独立项目,地址如下:
[https://gitee.com/liuge1988/kitty-generator](https://gitee.com/liuge1988/kitty-generator)
### 软件架构
#### 后端架构
##### 开发环境
- IDE : eclipse 4.x
- JDK : JDK1.8.x
- Maven : Maven 3.5.x
- MySQL: MySQL 5.7.x
##### 技术选型
- 核心框架:Spring Boot 2.x
- 服务治理:Spring Cloud Finchley
- 安全框架:Spring Security 5.x
- 视图框架:Spring MVC 5.x
- 持久层框架:MyBatis 3.x
- 数据库连接池:Druid 1.x
- 日志管理:SLF4J、Log4j
##### 项目结构
- kitty-common: 公共代码模块,主要放置一些工具类
- kitty-core: 核心代码模块,主要封装公共业务模块
- kitty-admin: 后台管理模块,包含用户、角色、菜单管理等
- kitty-backup: 系统数据备份备份模块,可选择独立部署
- kitty-monitor: 系统监控服务端,监控Spring Boot服务模块
- kitty-producer: 服务提供者示例,方便在此基础上搭建模块
- kitty-consumer: 服务消费者示例,方便在此基础上搭建模块
- kitty-hystrix: 服务熔断监控模块,收集汇总熔断统计信息
- kitty-zuul: API服务网关模块,统一管理和转发外部调用请求
- kitty-config: 配置中心服务端,生成GIT配置文件的访问接口
- kitty-consul: 注册中心,安装说明目录,内附安装引导说明
- kitty-zipkin: 链路追踪,安装说明目录,内附安装引导说明
- config-repo: 配置中心仓库,在GIT上统一存储系统配置文件
- kitty-pom: 聚合模块,仅为简化打包,一键执行打包所有模块
#### 前端架构
##### 开发环境
- IDE : VS Code 1.27
- NODE: Node 8.9.x
- NPM : NPM 6.4.x
##### 技术选型
- 前端框架:Vue 2.x
- 页面组件:Element 2.x
- 状态管理:Vuex 2.x
- 后台交互:axios 0.18.x
- 图标使用:Font Awesome 4.x
##### 项目结构
kitty-ui
- assets: 图标、字体、国际化信息等静态信息
- components: 组件库,对常用组件进行封装
- http: 后台交互模块,统一后台接口请求API
- i18n: 国际化模块,使用Vue i18n进行国际化
- mock: Mock模块,模拟接口调用并返回定制数据
- permission: 权限控制模块,处理权限认证逻辑
- router: 路由管理模块,负责页面各种路由配置
- store: 状态管理模块,提供组件间状态共享
- utils: 工具模块,提供一些通用的工具方法
- views: 页面模块,主要放置各种页面视图组件
### 安装教程
#### 后端安装
1. 下载源码
git clone https://gitee.com/liuge1988/kitty.git
2. 导入工程
使用 Eclipse导入 Maven 项目,在此之前请确认已安装 JDK 和 Maven 工具。
3. 编译代码
找到 kitty-pom 工程的 pom.xml,执行 maven clean install 命令编译一键打包。
一般来说不会有什么问题,如果还是编译不成功,可以按照优先级逐个编译试一试。
4. 导入数据库
新建 kitty 数据库,导入 kitty-admin 工程 doc/kitty.sql 脚本,导入初始化数据库。
修改 kitty-admin 下 application.yml 中的数据库连接和账号密码为自己的数据库配置。
修改 kitty-backup 下 application.yml 中的数据库连接和账号密码为自己的数据库配置。
5. 启动系统
基础必需模块(注册中心:kitty-consul,服务监控:kitty-monitor)
找到 kitty-consul 工程,根据安装说明安装注册中心,完成后执行 consul agent -dev 启动。
找到 kitty-monitor 工程下的 KittyMonitorApplication, 启动项目,开启服务监控。
权限管理模块(权限管理:kitty-admin,备份还原:kitty-backup)
找到 kitty-admin 工程下的 KittyAdminApplication, 启动项目,开启权限管理系统服务。
找到 kitty-backup 工程下的 KittyBackupApplication.java,启动项目,开启备份还原服务。
其他模块根据各自需要选择性启动,模块依赖可以参见我的博客同步教程...
注意事项:
如果需要链路追踪服务,需要安装zipkin,找到 kitty-zipkin 工程,根据安装说明安装zipkin。
如果需要配置中心服务,需要安装rabbitMQ,找到 kitty-config 工程,根据安装说明安装rabbitMQ。
#### 前端安装
1. 下载源码
git clone https://gitee.com/liuge1988/kitty-ui.git
2. 编译代码
进入项目根目录,执行 npm install, 下载和安装项目相关依赖包。
3. 启动系统
执行 npm run dev 命令,启动项目,通过 http://localhost:8090 访问。
4. 项目打包
执行 npm run build 命令,启动打包,完成之后会生成 dist 目录。
5. Mock 开关
通过修改src/mock/index.js中的openMock变量,可以一键开启或关闭Mock功能。
6. 修改配置
如果想自定义端口(默认是8090),可以修改 config/index.js 下的 port 属性。
后台接口和备份服务器地址配置在 src/utils/global.js,如有修改请做相应变更。
### 系统展示
#### 登录界面
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/155412_c2f72f83_645970.png "屏幕截图.png")
#### 用户管理
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154342_b8a9eaeb_645970.png "屏幕截图.png")
#### 机构管理
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154417_7aefe6c2_645970.png "屏幕截图.png")
#### 角色管理
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154431_6d8efe43_645970.png "屏幕截图.png")
#### 菜单管理
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154446_61cd21a5_645970.png "屏幕截图.png")
#### 字典管理
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154459_22ae6f2d_645970.png "屏幕截图.png")
#### 系统日志
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154510_3c1bfd3f_645970.png "屏幕截图.png")
#### 数据监控
用户名:admin, 密码:admin,即服务端配置的密码
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154556_8de439d5_645970.png "屏幕截图.png")
#### 服务监控
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154701_6bcd25f2_645970.png "屏幕截图.png")
#### 注册中心
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154734_877e893e_645970.png "屏幕截图.png")
#### 接口文档
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154803_6a612548_645970.png "屏幕截图.png")
#### 代码生成
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154840_18fc781c_645970.png "屏幕截图.png")
#### 主题切换
![输入图片说明](https://images.gitee.com/uploads/images/2018/1227/154943_1752c336_645970.png "屏幕截图.png")
### 参与贡献
1. Fork 本项目
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [http://git.mydoc.io/](http://git.mydoc.io/)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
\ No newline at end of file
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath: '../../'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: ["babel-polyfill", "./src/main.js"]
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
},
{
test: /\.scss$/,
loaders: ['style', 'css', 'sass']
}
]
},
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
setImmediate: false,
// prevent webpack from injecting mocks to Node native modules
// that does not make sense for the client
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
}
}
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: {
rewrites: [
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
],
},
hot: true,
contentBase: false, // since we use CopyWebpackPlugin.
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
module.exports = new Promise((resolve, reject) => {
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
// publish the new Port, necessary for e2e tests
process.env.PORT = port
// add port to devServer config
devWebpackConfig.devServer.port = port
// Add FriendlyErrorsPlugin
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
compilationSuccessInfo: {
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors
? utils.createNotifierCallback()
: undefined
}))
resolve(devWebpackConfig)
}
})
})
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const env = require('../config/prod.env')
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
// Setting the following option to `false` will not extract CSS from codesplit chunks.
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
allChunks: true,
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap
? { safe: true, map: { inline: false } }
: { safe: true }
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
// keep module.id stable when vendor modules does not change
new webpack.HashedModuleIdsPlugin(),
// enable scope hoisting
new webpack.optimize.ModuleConcatenationPlugin(),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks (module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: '0.0.0.0', // can be overwritten by process.env.HOST
port: 8090, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
cssSourceMap: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: './',
/**
* Source Maps
*/
productionSourceMap: true,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}
'use strict'
module.exports = {
NODE_ENV: '"production"'
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>西充居保管理平台</title>
</head>
<script>
//console.log=function(){}
console.warn=function(){}</script>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
<script>
// function stop(){
// alert("已禁止进入控制台")
// return false;
// }
//document.oncontextmenu=stop;
document.onkeydown = document.onkeyup = document.onkeypress = function(event) {
var e = event || window.event || arguments.callee.caller.arguments[0];
if (e && e.keyCode == 123) {
e.returnValue = false;
return (false);
}
}
</script>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "xichong",
"version": "1.0.0",
"description": "kitty ui project",
"author": "Louis",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js"
},
"dependencies": {
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"element-ui": "^2.4.6",
"font-awesome": "^4.7.0",
"js-cookie": "^2.2.0",
"vue": "^2.5.2",
"vue-i18n": "^8.0.0",
"vue-router": "^3.0.1",
"vuex": "^3.0.1"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"crypto-js": "^3.1.9-1",
"css-loader": "^0.28.0",
"element-theme": "^2.0.1",
"element-theme-chalk": "^2.4.6",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"mockjs": "^1.0.1-beta3",
"node-notifier": "^5.1.2",
"node-sass": "^4.9.3",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"sass-loader": "^7.1.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
<template>
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #484a4d;
/* background: #b6bbbb21; */
position: absolute;
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
}
</style>
*{margin: 0;padding: 0;list-style: none;}
/*
KISSY CSS Reset
理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
特色:1. 适应中文;2. 基于最新主流浏览器。
维护:玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>
*/
/** 清除内外边距 **/
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
th, td /* table elements 表格元素 */ {
margin: 0;
padding: 0;
}
/** 设置默认字体 **/
body,
button, input, select, textarea /* for ie */ {
font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
}
h1, h2, h3, h4, h5, h6 { font-size: 100%; }
address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
/** 重置列表元素 **/
ul, ol { list-style: none; }
/** 重置文本格式元素 **/
a { text-decoration: none; }
a:hover { text-decoration: underline; }
/** 重置表单元素 **/
legend { color: #000; } /* for ie6 */
fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
/* 注:optgroup 无法扶正 */
/** 重置表格元素 **/
table { border-collapse: collapse; border-spacing: 0; }
/* 清除浮动 */
.ks-clear:after, .clear:after {
content: '\20';
display: block;
height: 0;
clear: both;
}
.ks-clear, .clear {
*zoom: 1;
}
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}
.helps{margin-top:40px;}
.helps pre{
padding:20px;
margin:10px 0;
border:solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists{
width: 100% !important;
}
.icon_lists li{
float:left;
width: 100px;
height:180px;
text-align: center;
list-style: none !important;
}
.icon_lists .icon{
font-size: 42px;
line-height: 100px;
margin: 10px 0;
color:#333;
-webkit-transition: font-size 0.25s ease-out 0s;
-moz-transition: font-size 0.25s ease-out 0s;
transition: font-size 0.25s ease-out 0s;
}
.icon_lists .icon:hover{
font-size: 100px;
}
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p,
.markdown pre {
margin: 1em 0;
}
.markdown > p,
.markdown > blockquote,
.markdown > .highlight,
.markdown > ol,
.markdown > ul {
width: 80%;
}
.markdown ul > li {
list-style: circle;
}
.markdown > ul li,
.markdown blockquote ul > li {
margin-left: 20px;
padding-left: 4px;
}
.markdown > ul li p,
.markdown > ol li p {
margin: 0.6em 0;
}
.markdown ol > li {
list-style: decimal;
}
.markdown > ol li,
.markdown blockquote ol > li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown pre {
border-radius: 6px;
background: #f7f7f7;
padding: 20px;
}
.markdown pre code {
border: none;
background: #f7f7f7;
margin: 0;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown > table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown > table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown > table th,
.markdown > table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown > table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
font-style: italic;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown > br,
.markdown > p > br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
pre{
background: #fff;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1536117540094'); /* IE9*/
src: url('iconfont.eot?t=1536117540094#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),
url('iconfont.ttf?t=1536117540094') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=1536117540094#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
[class^="kt-icon"],
[class*=" kt-icon"]
{
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.kt-icon-bijibendiannao:before { content: "\eabb"; }
.kt-icon-bianjibiaoge:before { content: "\eabc"; }
.kt-icon-chizi:before { content: "\eabd"; }
.kt-icon-biaoqian:before { content: "\eabe"; }
.kt-icon-dayinji:before { content: "\eabf"; }
.kt-icon-baocun:before { content: "\eac0"; }
.kt-icon-bianji:before { content: "\eac1"; }
.kt-icon-daochu:before { content: "\eac2"; }
.kt-icon-daoru:before { content: "\eac3"; }
.kt-icon-diannao:before { content: "\eac4"; }
.kt-icon-fuzhi:before { content: "\eac5"; }
.kt-icon-ding:before { content: "\eac6"; }
.kt-icon-jianqie:before { content: "\eac7"; }
.kt-icon-jianpan:before { content: "\eac8"; }
.kt-icon-jiesuo:before { content: "\eac9"; }
.kt-icon-shaixuan:before { content: "\eaca"; }
.kt-icon-shouji:before { content: "\eacb"; }
.kt-icon-suoding:before { content: "\eacc"; }
.kt-icon-tupian:before { content: "\eacd"; }
.kt-icon-tianjiafujian:before { content: "\eace"; }
.kt-icon-wenben:before { content: "\eacf"; }
.kt-icon-bangongbao:before { content: "\ead0"; }
.kt-icon-shu:before { content: "\ead1"; }
.kt-icon-wenjianjia:before { content: "\ead2"; }
.kt-icon-touyingyi:before { content: "\ead3"; }
.kt-icon-cangku_cangchuguanli:before { content: "\ead4"; }
.kt-icon-cangku_kucun:before { content: "\ead5"; }
.kt-icon-cangku_kucunxiangqing:before { content: "\ead6"; }
.kt-icon-cangku:before { content: "\ead7"; }
.kt-icon-cangku_zhongzhuanchuzhan:before { content: "\ead8"; }
.kt-icon-cangku_cangneishicao:before { content: "\ead9"; }
.kt-icon-fuwuguanli:before { content: "\eada"; }
.kt-icon-fuwuliu:before { content: "\eadb"; }
.kt-icon-cangku_daozhan:before { content: "\eadc"; }
.kt-icon-cangku_kucunshuaxin:before { content: "\eadd"; }
.kt-icon-gongzuoliu:before { content: "\eade"; }
.kt-icon-guanliyuanrenzheng:before { content: "\eadf"; }
.kt-icon-jinzhidengji:before { content: "\eae0"; }
.kt-icon-dianbiao:before { content: "\eae1"; }
.kt-icon-guanliyuansousuo:before { content: "\eae2"; }
.kt-icon-kuaisugongzuoliu:before { content: "\eae3"; }
.kt-icon-rengonggaichengyunshang:before { content: "\eae4"; }
.kt-icon-rengongbuma:before { content: "\eae5"; }
.kt-icon-rengonggaizhan:before { content: "\eae6"; }
.kt-icon-saomafuquan:before { content: "\eae7"; }
.kt-icon-fuwuxunhuanguanli:before { content: "\eae8"; }
.kt-icon-shebeidadian:before { content: "\eae9"; }
.kt-icon-shangjia:before { content: "\eaea"; }
.kt-icon-saomajiahuiche:before { content: "\eaeb"; }
.kt-icon-shuibiao:before { content: "\eaec"; }
.kt-icon-shebeisousuo:before { content: "\eaed"; }
.kt-icon-shebeijiance:before { content: "\eaee"; }
.kt-icon-shuiweichuanganqi:before { content: "\eaef"; }
.kt-icon-tuihuochuzhan:before { content: "\eaf0"; }
.kt-icon-xunjianweixiu:before { content: "\eaf1"; }
.kt-icon-yemianliu:before { content: "\eaf2"; }
.kt-icon-yichangshangbao:before { content: "\eaf3"; }
.kt-icon-zhongkong:before { content: "\eaf4"; }
.kt-icon-weixiufuwu:before { content: "\eaf5"; }
.kt-icon-wenshiduchuanganqi:before { content: "\eaf6"; }
.kt-icon-duoxuanxuanzhong:before { content: "\eaf7"; }
.kt-icon-bofang:before { content: "\eaf8"; }
.kt-icon-duibi:before { content: "\eaf9"; }
.kt-icon-huojianjiasu:before { content: "\eafa"; }
.kt-icon-gouwudai:before { content: "\eafb"; }
.kt-icon-gouwu:before { content: "\eafc"; }
.kt-icon-danxuanweixuanzhong:before { content: "\eafd"; }
.kt-icon-danxuanxuanzhong:before { content: "\eafe"; }
.kt-icon-jiqiren:before { content: "\eaff"; }
.kt-icon-jinxianshibutong:before { content: "\eb00"; }
.kt-icon-kefu:before { content: "\eb01"; }
.kt-icon-lanya:before { content: "\eb02"; }
.kt-icon-leida-faxianx:before { content: "\eb03"; }
.kt-icon-lianjie:before { content: "\eb04"; }
.kt-icon-duoxuanweixuanzhong:before { content: "\eb05"; }
.kt-icon-liangliangduibi:before { content: "\eb06"; }
.kt-icon-quxiaolianjie:before { content: "\eb07"; }
.kt-icon-liangdu:before { content: "\eb08"; }
.kt-icon-liwu:before { content: "\eb09"; }
.kt-icon-shanguangdeng:before { content: "\eb0a"; }
.kt-icon-shanguangdengzidong:before { content: "\eb0b"; }
.kt-icon-shengyin:before { content: "\eb0c"; }
.kt-icon-renlianshibie:before { content: "\eb0d"; }
.kt-icon-tingzhi:before { content: "\eb0e"; }
.kt-icon-tanhao:before { content: "\eb0f"; }
.kt-icon-shanguangdengguanbi:before { content: "\eb10"; }
.kt-icon-wenhao:before { content: "\eb11"; }
.kt-icon-xinxi:before { content: "\eb12"; }
.kt-icon-shounadaohang:before { content: "\eb13"; }
.kt-icon-yinliang:before { content: "\eb14"; }
.kt-icon-yingwen:before { content: "\eb15"; }
.kt-icon-yuyin:before { content: "\eb16"; }
.kt-icon-yuechi:before { content: "\eb17"; }
.kt-icon-yunsuancaozuo:before { content: "\eb18"; }
.kt-icon-zhediedaohang:before { content: "\eb19"; }
.kt-icon-zhinanzhen:before { content: "\eb1a"; }
.kt-icon-zhongwen:before { content: "\eb1b"; }
.kt-icon-zanting:before { content: "\eb1c"; }
.kt-icon-zhuti_yifu:before { content: "\eb1d"; }
.kt-icon-zhendong:before { content: "\eb1e"; }
.kt-icon-zhuti_tiaosepan:before { content: "\eb1f"; }
.kt-icon-zhuti:before { content: "\eb20"; }
.kt-icon-zuanshi:before { content: "\eb21"; }
.kt-icon-anniu_guanbi:before { content: "\eb22"; }
.kt-icon-anquan:before { content: "\eb23"; }
.kt-icon-bangzhu:before { content: "\eb24"; }
.kt-icon-biaoge:before { content: "\eb25"; }
.kt-icon-anniu_xuanzhong:before { content: "\eb26"; }
.kt-icon-chexiao:before { content: "\eb27"; }
.kt-icon-shouye:before { content: "\eb28"; }
.kt-icon-duihao:before { content: "\eb29"; }
.kt-icon-erweima:before { content: "\eb2a"; }
.kt-icon-caidan:before { content: "\eb2b"; }
.kt-icon-guanbi:before { content: "\eb2c"; }
.kt-icon-guanyu:before { content: "\eb2d"; }
.kt-icon-cengji:before { content: "\eb2e"; }
.kt-icon-dengyu:before { content: "\eb2f"; }
.kt-icon-daohang:before { content: "\eb30"; }
.kt-icon-jiahao:before { content: "\eb31"; }
.kt-icon-jiazai_dan:before { content: "\eb32"; }
.kt-icon-jiazai_shuaxin:before { content: "\eb33"; }
.kt-icon-jieshaoxinxi:before { content: "\eb34"; }
.kt-icon-jiazai_shuang:before { content: "\eb35"; }
.kt-icon-jianhao:before { content: "\eb36"; }
.kt-icon-jinyong:before { content: "\eb37"; }
.kt-icon-kaiguan:before { content: "\eb38"; }
.kt-icon-jinggao:before { content: "\eb39"; }
.kt-icon-lishijilu:before { content: "\eb3a"; }
.kt-icon-linggan:before { content: "\eb3b"; }
.kt-icon-liebiao:before { content: "\eb3c"; }
.kt-icon-pinleijianshao:before { content: "\eb3d"; }
.kt-icon-pinleishanchu:before { content: "\eb3e"; }
.kt-icon-pinleizengjia:before { content: "\eb3f"; }
.kt-icon-kongzhizhongxin:before { content: "\eb40"; }
.kt-icon-shanchu:before { content: "\eb41"; }
.kt-icon-saoyisao:before { content: "\eb42"; }
.kt-icon-shipin:before { content: "\eb43"; }
.kt-icon-quanjushezhi:before { content: "\eb44"; }
.kt-icon-shitujuzhen:before { content: "\eb45"; }
.kt-icon-shuliang-zengjia:before { content: "\eb46"; }
.kt-icon-shuaxin:before { content: "\eb47"; }
.kt-icon-shuliangjianshao:before { content: "\eb48"; }
.kt-icon-tishi:before { content: "\eb49"; }
.kt-icon-renwuzhongxin:before { content: "\eb4a"; }
.kt-icon-sousuo:before { content: "\eb4b"; }
.kt-icon-tuwen:before { content: "\eb4c"; }
.kt-icon-xinzengdaohangliebiao:before { content: "\eb4d"; }
.kt-icon-Androidgengduo:before { content: "\eb4e"; }
.kt-icon-iosgengduo:before { content: "\eb4f"; }
.kt-icon-xiangji:before { content: "\eb50"; }
.kt-icon-yemiankuangjia:before { content: "\eb51"; }
.kt-icon-yingyongAPP:before { content: "\eb52"; }
.kt-icon-anniu_jiantoushouqi:before { content: "\eb53"; }
.kt-icon-anniu-jiantouxiangyou:before { content: "\eb54"; }
.kt-icon-jiantou_liebiaoxiangyou:before { content: "\eb55"; }
.kt-icon-anniu_jiantouzhankai:before { content: "\eb56"; }
.kt-icon-jiantou_liebiaoshouqi:before { content: "\eb57"; }
.kt-icon-jiantou_liebiaoxiangzuo:before { content: "\eb58"; }
.kt-icon-jiantou_qiehuanxiangxia:before { content: "\eb59"; }
.kt-icon-jiantou_liebiaozhankai:before { content: "\eb5a"; }
.kt-icon-jiantou_qiehuanyou:before { content: "\eb5b"; }
.kt-icon-jiantou_qiehuanxiangshang:before { content: "\eb5c"; }
.kt-icon-jiantou_qiehuanzuo:before { content: "\eb5d"; }
.kt-icon-jiantou_shangyiye:before { content: "\eb5e"; }
.kt-icon-anniu_jiantouxiangzuo:before { content: "\eb5f"; }
.kt-icon-jiantou_xiayiye:before { content: "\eb60"; }
.kt-icon-jiantou_xiangyou:before { content: "\eb61"; }
.kt-icon-jiantou_xiangzuo:before { content: "\eb62"; }
.kt-icon-jiantou_xiangyouliangci:before { content: "\eb63"; }
.kt-icon-jiantou_shangxiaqiehuan:before { content: "\eb64"; }
.kt-icon-jiantou_yemian_xiangshang:before { content: "\eb65"; }
.kt-icon-jiantou_xiangxia:before { content: "\eb66"; }
.kt-icon-jiantou_xiangshang:before { content: "\eb67"; }
.kt-icon-jiantou_xiangzuoliangci:before { content: "\eb68"; }
.kt-icon-jiantou_yemian_xiangxia:before { content: "\eb69"; }
.kt-icon-jiantou_yemian_xiangyou:before { content: "\eb6a"; }
.kt-icon-jiantou_youshang:before { content: "\eb6b"; }
.kt-icon-jiantou_zuoshang:before { content: "\eb6c"; }
.kt-icon-jiantou_youxia:before { content: "\eb6d"; }
.kt-icon-jiantou_zuoyouqiehuan:before { content: "\eb6e"; }
.kt-icon-jiaobiaoweixuanzhong:before { content: "\eb6f"; }
.kt-icon-jiaobiaoxuanzhong:before { content: "\eb70"; }
.kt-icon-moduanshouqi:before { content: "\eb71"; }
.kt-icon-jiantou_zuoxia:before { content: "\eb72"; }
.kt-icon-jiantou_yemian_xiangzuo:before { content: "\eb73"; }
.kt-icon-moduanzhankai:before { content: "\eb74"; }
.kt-icon-moduanzuoyouzhankai:before { content: "\eb75"; }
.kt-icon-quxiaoquanping:before { content: "\eb76"; }
.kt-icon-sanjiaoxing_shang:before { content: "\eb77"; }
.kt-icon-quanping:before { content: "\eb78"; }
.kt-icon-sanjiaoxing:before { content: "\eb79"; }
.kt-icon-moduanzuoyoushouqi:before { content: "\eb7a"; }
.kt-icon-shangxiazhankai:before { content: "\eb7b"; }
.kt-icon-xiazai:before { content: "\eb7c"; }
.kt-icon-xuanzeqishouqi:before { content: "\eb7d"; }
.kt-icon-shangchuan:before { content: "\eb7e"; }
.kt-icon-xiangzuo:before { content: "\eb7f"; }
.kt-icon-xuanzeqixiayige:before { content: "\eb80"; }
.kt-icon-xuanzeqizhankai:before { content: "\eb81"; }
.kt-icon-zhiding:before { content: "\eb82"; }
.kt-icon-dunpaibaowei:before { content: "\eb83"; }
.kt-icon-dunpaibaoxianrenzheng:before { content: "\eb84"; }
.kt-icon-huobiliu:before { content: "\eb85"; }
.kt-icon-dunpaibaoxianzhiliang:before { content: "\eb86"; }
.kt-icon-jisuanqi:before { content: "\eb87"; }
.kt-icon-jiekuan:before { content: "\eb88"; }
.kt-icon-hongbao:before { content: "\eb89"; }
.kt-icon-jinbi:before { content: "\eb8a"; }
.kt-icon-cunkuan:before { content: "\eb8b"; }
.kt-icon-meiyuan:before { content: "\eb8c"; }
.kt-icon-qianbao:before { content: "\eb8d"; }
.kt-icon-yinhangqia:before { content: "\eb8e"; }
.kt-icon-zhangdan_kong:before { content: "\eb8f"; }
.kt-icon-zhangdan_xiangqing:before { content: "\eb90"; }
.kt-icon-zhangdan_quxiao:before { content: "\eb91"; }
.kt-icon-zhangdan_xinzeng:before { content: "\eb92"; }
.kt-icon-jinrongguanli:before { content: "\eb93"; }
.kt-icon-zhangdan-wancheng:before { content: "\eb94"; }
.kt-icon-zhangdan:before { content: "\eb95"; }
.kt-icon-zhibi_renminbi:before { content: "\eb96"; }
.kt-icon-renminbi:before { content: "\eb97"; }
.kt-icon-zijin_dongjie:before { content: "\eb98"; }
.kt-icon-zijin:before { content: "\eb99"; }
.kt-icon-zijinxunhuan:before { content: "\eb9a"; }
.kt-icon-anniucai:before { content: "\eb9b"; }
.kt-icon-cai:before { content: "\eb9c"; }
.kt-icon-biaoqing:before { content: "\eb9d"; }
.kt-icon-anniu-zan:before { content: "\eb9e"; }
.kt-icon-biaoqing_xiao:before { content: "\eb9f"; }
.kt-icon-chengchang:before { content: "\eba0"; }
.kt-icon-dianhua:before { content: "\eba1"; }
.kt-icon-duanxin:before { content: "\eba2"; }
.kt-icon-gerentouxiang:before { content: "\eba3"; }
.kt-icon-fenxiang:before { content: "\eba4"; }
.kt-icon-qiandao:before { content: "\eba5"; }
.kt-icon-qunzu:before { content: "\eba6"; }
.kt-icon-biaoqing_beishang:before { content: "\eba7"; }
.kt-icon-shoucang:before { content: "\eba8"; }
.kt-icon-tianjiahaoyou:before { content: "\eba9"; }
.kt-icon-wangwanglikai:before { content: "\ebaa"; }
.kt-icon-xiai:before { content: "\ebab"; }
.kt-icon-zan:before { content: "\ebac"; }
.kt-icon-wangwang:before { content: "\ebad"; }
.kt-icon-daibanrenwu_quxiao:before { content: "\ebae"; }
.kt-icon-daibanrenwu:before { content: "\ebaf"; }
.kt-icon-naozhong:before { content: "\ebb0"; }
.kt-icon-shijian:before { content: "\ebb1"; }
.kt-icon-riqi:before { content: "\ebb2"; }
.kt-icon-rili:before { content: "\ebb3"; }
.kt-icon-shuzhuangtu:before { content: "\ebb4"; }
.kt-icon-yun:before { content: "\ebb5"; }
.kt-icon-bingtu:before { content: "\ebb6"; }
.kt-icon-yunshangchuan:before { content: "\ebb7"; }
.kt-icon-yunxiazai:before { content: "\ebb8"; }
.kt-icon-zhexiantu:before { content: "\ebb9"; }
.kt-icon-zhuzhuangtu:before { content: "\ebba"; }
.kt-icon-baoguo_lanshou:before { content: "\ebbb"; }
.kt-icon-baoguo_dabao:before { content: "\ebbc"; }
.kt-icon-baoguo_huanbaohe:before { content: "\ebbd"; }
.kt-icon-baoguo_dakai:before { content: "\ebbe"; }
.kt-icon-baoguo_hezi:before { content: "\ebbf"; }
.kt-icon-baoguo_lingjian:before { content: "\ebc0"; }
.kt-icon-baoguo_shounahe:before { content: "\ebc1"; }
.kt-icon-baoguo_tihuoduanxin:before { content: "\ebc2"; }
.kt-icon-baoguo_quxiaoshouhuo:before { content: "\ebc3"; }
.kt-icon-baoguo_shouhuo:before { content: "\ebc4"; }
.kt-icon-baoguo_yidong:before { content: "\ebc5"; }
.kt-icon-che:before { content: "\ebc6"; }
.kt-icon-didiandingwei:before { content: "\ebc7"; }
.kt-icon-ditu_diqiu:before { content: "\ebc8"; }
.kt-icon-baoguo_fahuo:before { content: "\ebc9"; }
.kt-icon-ditu:before { content: "\ebca"; }
.kt-icon-ditu_dingwei:before { content: "\ebcb"; }
.kt-icon-feiji_qifei:before { content: "\ebcc"; }
.kt-icon-baoguo:before { content: "\ebcd"; }
.kt-icon-gouwuche:before { content: "\ebce"; }
.kt-icon-gaojijibao:before { content: "\ebcf"; }
.kt-icon-fenjianguocheng:before { content: "\ebd0"; }
.kt-icon-feiji_jiangla:before { content: "\ebd1"; }
.kt-icon-guizi:before { content: "\ebd2"; }
.kt-icon-huoche_zhuangche:before { content: "\ebd3"; }
.kt-icon-huoche_quxiaozhuangche:before { content: "\ebd4"; }
.kt-icon-huoche:before { content: "\ebd5"; }
.kt-icon-haiguan:before { content: "\ebd6"; }
.kt-icon-fuwu:before { content: "\ebd7"; }
.kt-icon-jiankong:before { content: "\ebd8"; }
.kt-icon-jibao:before { content: "\ebd9"; }
.kt-icon-jianzhu:before { content: "\ebda"; }
.kt-icon-jiancha:before { content: "\ebdb"; }
.kt-icon-jingliren:before { content: "\ebdc"; }
.kt-icon-paijian:before { content: "\ebdd"; }
.kt-icon-huopinfenliu:before { content: "\ebde"; }
.kt-icon-quxiaojibao:before { content: "\ebdf"; }
.kt-icon-kuaidiyuan:before { content: "\ebe0"; }
.kt-icon-sandengfen:before { content: "\ebe1"; }
.kt-icon-shijuedingwei:before { content: "\ebe2"; }
.kt-icon-wuliudanao:before { content: "\ebe3"; }
.kt-icon-tousu:before { content: "\ebe4"; }
.kt-icon-kuaidiyuanguanli:before { content: "\ebe5"; }
.kt-icon-yizhan:before { content: "\ebe6"; }
.kt-icon-yizhanxiangqing:before { content: "\ebe7"; }
.kt-icon-sidengfen:before { content: "\ebe8"; }
.kt-icon-CPhezuo:before { content: "\ebe9"; }
.kt-icon-PDA:before { content: "\ebea"; }
.kt-icon-xiangsishangpin:before { content: "\ebeb"; }
.kt-icon-yibiaopan:before { content: "\ebec"; }
.kt-icon-duanxinqunfa:before { content: "\ebed"; }
.kt-icon-xiaoxi:before { content: "\ebee"; }
.kt-icon-xinwen:before { content: "\ebef"; }
.kt-icon-tongzhizhongxin:before { content: "\ebf0"; }
.kt-icon-youjian:before { content: "\ebf1"; }
.kt-icon-dengchu:before { content: "\ebf2"; }
.kt-icon-gerenxinxi:before { content: "\ebf3"; }
.kt-icon-anniu_gerenzhongxin:before { content: "\ebf4"; }
.kt-icon-yanjing_yincang:before { content: "\ebf5"; }
.kt-icon-yanjing_xianshi:before { content: "\ebf6"; }
.kt-icon-baocun_o:before { content: "\ebf7"; }
.kt-icon-biaoqian_o:before { content: "\ebf8"; }
.kt-icon-bianjibiaoge_o:before { content: "\ebf9"; }
.kt-icon-dayinji_o:before { content: "\ebfa"; }
.kt-icon-chizi_o:before { content: "\ebfb"; }
.kt-icon-bangongbao_o:before { content: "\ebfc"; }
.kt-icon-daoru_o:before { content: "\ebfd"; }
.kt-icon-diannao_o:before { content: "\ebfe"; }
.kt-icon-bianji_o:before { content: "\ebff"; }
.kt-icon-bijibendiannao_o:before { content: "\ec00"; }
.kt-icon-ding_o:before { content: "\ec01"; }
.kt-icon-jianpan_o:before { content: "\ec02"; }
.kt-icon-jianqie_o:before { content: "\ec03"; }
.kt-icon-shaixuan_o:before { content: "\ec04"; }
.kt-icon-jiesuo_o:before { content: "\ec05"; }
.kt-icon-daochu_o:before { content: "\ec06"; }
.kt-icon-shouji_o:before { content: "\ec07"; }
.kt-icon-tianjiafujian_o:before { content: "\ec08"; }
.kt-icon-shu_o:before { content: "\ec09"; }
.kt-icon-fuzhi_o:before { content: "\ec0a"; }
.kt-icon-wenben_o:before { content: "\ec0b"; }
.kt-icon-touyingyi_o:before { content: "\ec0c"; }
.kt-icon-wenjianjia_o:before { content: "\ec0d"; }
.kt-icon-tupian_o:before { content: "\ec0e"; }
.kt-icon-suoding_o:before { content: "\ec0f"; }
.kt-icon-cangku_kucunxiangqing_o:before { content: "\ec10"; }
.kt-icon-cangku_daozhan_o:before { content: "\ec11"; }
.kt-icon-cangku_kucun_o:before { content: "\ec12"; }
.kt-icon-cangku_cangchuguanli_o:before { content: "\ec13"; }
.kt-icon-cangku_kucunshuaxin_o:before { content: "\ec14"; }
.kt-icon-cangku_cangneishicao_o:before { content: "\ec15"; }
.kt-icon-cangku_o:before { content: "\ec16"; }
.kt-icon-dianbiao_o:before { content: "\ec17"; }
.kt-icon-cangku_zhongzhuanchuzhan_o:before { content: "\ec18"; }
.kt-icon-fuwuliu_o:before { content: "\ec19"; }
.kt-icon-fuwuguanli_o:before { content: "\ec1a"; }
.kt-icon-gongzuoliu_o:before { content: "\ec1b"; }
.kt-icon-fuwuxunhuanguanli_o:before { content: "\ec1c"; }
.kt-icon-guanliyuanrenzheng_o:before { content: "\ec1d"; }
.kt-icon-jinzhidengji_o:before { content: "\ec1e"; }
.kt-icon-kuaisugongzuoliu_o:before { content: "\ec1f"; }
.kt-icon-rengongbuma_o:before { content: "\ec20"; }
.kt-icon-rengonggaichengyunshang_o:before { content: "\ec21"; }
.kt-icon-rengonggaizhan_o:before { content: "\ec22"; }
.kt-icon-saomafuquan_o:before { content: "\ec23"; }
.kt-icon-guanliyuansousuo_o:before { content: "\ec24"; }
.kt-icon-shangjia_o:before { content: "\ec25"; }
.kt-icon-shebeijiance_o:before { content: "\ec26"; }
.kt-icon-shebeisousuo_o:before { content: "\ec27"; }
.kt-icon-shuibiao_o:before { content: "\ec28"; }
.kt-icon-saomajiahuiche_o:before { content: "\ec29"; }
.kt-icon-tuihuochuzhan_o:before { content: "\ec2a"; }
.kt-icon-shebeidadian_o:before { content: "\ec2b"; }
.kt-icon-wenshiduchuanganqi_o:before { content: "\ec2c"; }
.kt-icon-shuiweichuanganqi_o:before { content: "\ec2d"; }
.kt-icon-yichangshangbao_o:before { content: "\ec2e"; }
.kt-icon-xunjianweixiu_o:before { content: "\ec2f"; }
.kt-icon-yemianliu_o:before { content: "\ec30"; }
.kt-icon-weixiufuwu_o:before { content: "\ec31"; }
.kt-icon-zhongkong_o:before { content: "\ec32"; }
.kt-icon-danxuanweixuanzhong_o:before { content: "\ec33"; }
.kt-icon-bofang_o:before { content: "\ec34"; }
.kt-icon-duoxuanweixuanzhong_o:before { content: "\ec35"; }
.kt-icon-duibi_o:before { content: "\ec36"; }
.kt-icon-duoxuanxuanzhong_o:before { content: "\ec37"; }
.kt-icon-eyu_o:before { content: "\ec38"; }
.kt-icon-gouwudai_o:before { content: "\ec39"; }
.kt-icon-gouwu_o:before { content: "\ec3a"; }
.kt-icon-huojianjiasu_o:before { content: "\ec3b"; }
.kt-icon-jiqiren_o:before { content: "\ec3c"; }
.kt-icon-kefu_o:before { content: "\ec3d"; }
.kt-icon-lanya_o:before { content: "\ec3e"; }
.kt-icon-shengyin_o:before { content: "\ec3f"; }
.kt-icon-leida-faxian_o:before { content: "\ec40"; }
.kt-icon-danxuanxuanzhong_o:before { content: "\ec41"; }
.kt-icon-lianjie_o:before { content: "\ec42"; }
.kt-icon-liwu_o:before { content: "\ec43"; }
.kt-icon-liangdu_o:before { content: "\ec44"; }
.kt-icon-liangliangduibi_o:before { content: "\ec45"; }
.kt-icon-renlianshibie_o:before { content: "\ec46"; }
.kt-icon-quxiaolianjie_o:before { content: "\ec47"; }
.kt-icon-jinxianshibutong_o:before { content: "\ec48"; }
.kt-icon-shanguangdeng_o:before { content: "\ec49"; }
.kt-icon-shanguangdengzidong_o:before { content: "\ec4a"; }
.kt-icon-shanguangdengguanbi_o:before { content: "\ec4b"; }
.kt-icon-tanhao_o:before { content: "\ec4c"; }
.kt-icon-wenhao_o:before { content: "\ec4d"; }
.kt-icon-xinxi_o:before { content: "\ec4e"; }
.kt-icon-tingzhi_o:before { content: "\ec4f"; }
.kt-icon-yuechi_o:before { content: "\ec50"; }
.kt-icon-yinliang_o:before { content: "\ec51"; }
.kt-icon-yingwen_o:before { content: "\ec52"; }
.kt-icon-yuyin_o:before { content: "\ec53"; }
.kt-icon-yunsuancaozuo_o:before { content: "\ec54"; }
.kt-icon-zanting_o:before { content: "\ec55"; }
.kt-icon-shounadaohang_o:before { content: "\ec56"; }
.kt-icon-zhediedaohang_o:before { content: "\ec57"; }
.kt-icon-zhendong_o:before { content: "\ec58"; }
.kt-icon-zhuti_tiaosepan_o:before { content: "\ec59"; }
.kt-icon-zhuti_yifu_o:before { content: "\ec5a"; }
.kt-icon-zhuti_o:before { content: "\ec5b"; }
.kt-icon-zuanshi_o:before { content: "\ec5c"; }
.kt-icon-zhongwen_o:before { content: "\ec5d"; }
.kt-icon-zhinanzhen_o:before { content: "\ec5e"; }
.kt-icon-anquan_o:before { content: "\ec5f"; }
.kt-icon-caidan_o:before { content: "\ec60"; }
.kt-icon-anniu_xuanzhong_o:before { content: "\ec61"; }
.kt-icon-bangzhu_o:before { content: "\ec62"; }
.kt-icon-cengji_o:before { content: "\ec63"; }
.kt-icon-chexiao_o:before { content: "\ec64"; }
.kt-icon-daohang_o:before { content: "\ec65"; }
.kt-icon-duihao_o:before { content: "\ec66"; }
.kt-icon-anniu_guanbi_o:before { content: "\ec67"; }
.kt-icon-erweima_o:before { content: "\ec68"; }
.kt-icon-Androidgengduo_o:before { content: "\ec69"; }
.kt-icon-guanbi_o:before { content: "\ec6a"; }
.kt-icon-biaoge_o:before { content: "\ec6b"; }
.kt-icon-guanyu_o:before { content: "\ec6c"; }
.kt-icon-jiahao_o:before { content: "\ec6d"; }
.kt-icon-dengyu_o:before { content: "\ec6e"; }
.kt-icon-jiazai_shuang_o:before { content: "\ec6f"; }
.kt-icon-jianhao_o:before { content: "\ec70"; }
.kt-icon-jieshaoxinxi_o:before { content: "\ec71"; }
.kt-icon-kaiguan_o:before { content: "\ec72"; }
.kt-icon-jiazai_dan_o:before { content: "\ec73"; }
.kt-icon-jiazai_shuaxin_o:before { content: "\ec74"; }
.kt-icon-lishijilu_o:before { content: "\ec75"; }
.kt-icon-liebiao_o:before { content: "\ec76"; }
.kt-icon-linggan_o:before { content: "\ec77"; }
.kt-icon-jinyong_o:before { content: "\ec78"; }
.kt-icon-pinleishanchu_o:before { content: "\ec79"; }
.kt-icon-pinleijianshao_o:before { content: "\ec7a"; }
.kt-icon-kongzhizhongxin_o:before { content: "\ec7b"; }
.kt-icon-pinleizengjia_o:before { content: "\ec7c"; }
.kt-icon-renwuzhongxin_o:before { content: "\ec7d"; }
.kt-icon-quanjushezhi_o:before { content: "\ec7e"; }
.kt-icon-jinggao_o:before { content: "\ec7f"; }
.kt-icon-saoyisao_o:before { content: "\ec80"; }
.kt-icon-shipin_o:before { content: "\ec81"; }
.kt-icon-shouye_o:before { content: "\ec82"; }
.kt-icon-shuliang-zengjia_o:before { content: "\ec83"; }
.kt-icon-shuaxin_o:before { content: "\ec84"; }
.kt-icon-shanchu_o:before { content: "\ec85"; }
.kt-icon-tishi_o:before { content: "\ec86"; }
.kt-icon-tuwen_o:before { content: "\ec87"; }
.kt-icon-shitujuzhen_o:before { content: "\ec88"; }
.kt-icon-xinzengdaohangliebiao_o:before { content: "\ec89"; }
.kt-icon-sousuo_o:before { content: "\ec8a"; }
.kt-icon-shuliangjianshao_o:before { content: "\ec8b"; }
.kt-icon-yemiankuangjia_o:before { content: "\ec8c"; }
.kt-icon-iosgengduo_o:before { content: "\ec8d"; }
.kt-icon-xiangji_o:before { content: "\ec8e"; }
.kt-icon-yingyongAPP_o:before { content: "\ec8f"; }
.kt-icon-anniu_jiantoushouqi_o:before { content: "\ec90"; }
.kt-icon-anniu_jiantouxiangzuo_o:before { content: "\ec91"; }
.kt-icon-anniu_jiantouzhankai_o:before { content: "\ec92"; }
.kt-icon-jiantou_liebiaoshouqi_o:before { content: "\ec93"; }
.kt-icon-jiantou_liebiaoxiangyou_o:before { content: "\ec94"; }
.kt-icon-jiantou_liebiaozhankai_o:before { content: "\ec95"; }
.kt-icon-jiantou_qiehuanxiangxia_o:before { content: "\ec96"; }
.kt-icon-anniu-jiantouxiangyou_o:before { content: "\ec97"; }
.kt-icon-jiantou_qiehuanyou_o:before { content: "\ec98"; }
.kt-icon-xuanzeqizhankai_o:before { content: "\ec99"; }
.kt-icon-jiantou_qiehuanxiangshang_o:before { content: "\ec9a"; }
.kt-icon-jiantou_zuoshang_o:before { content: "\ec9b"; }
.kt-icon-jiantou_liebiaoxiangzuo_o:before { content: "\ec9c"; }
.kt-icon-jiantou_shangyiye_o:before { content: "\ec9d"; }
.kt-icon-jiantou_xiayiye_o:before { content: "\ec9e"; }
.kt-icon-jiantou_xiangshang_o:before { content: "\ec9f"; }
.kt-icon-jiantou_xiangxia_o:before { content: "\eca0"; }
.kt-icon-jiantou_xiangyouliangci_o:before { content: "\eca1"; }
.kt-icon-jiantou_shangxiaqiehuan_o:before { content: "\eca2"; }
.kt-icon-jiantou_qiehuanzuo_o:before { content: "\eca3"; }
.kt-icon-jiantou_xiangzuo_o:before { content: "\eca4"; }
.kt-icon-jiantou_yemian_xiangshang_o:before { content: "\eca5"; }
.kt-icon-jiantou_xiangzuoliangci_o:before { content: "\eca6"; }
.kt-icon-jiantou_yemian_xiangyou_o:before { content: "\eca7"; }
.kt-icon-jiantou_youshang_o:before { content: "\eca8"; }
.kt-icon-jiantou_xiangyou_o:before { content: "\eca9"; }
.kt-icon-jiantou_yemian_xiangzuo_o:before { content: "\ecaa"; }
.kt-icon-jiantou_youxia_o:before { content: "\ecab"; }
.kt-icon-jiantou_zuoyouqiehuan_o:before { content: "\ecac"; }
.kt-icon-jiantou_yemian_xiangxia_o:before { content: "\ecad"; }
.kt-icon-jiaobiaoweixuanzhong_o:before { content: "\ecae"; }
.kt-icon-moduanzuoyoushouqi_o:before { content: "\ecaf"; }
.kt-icon-jiantou_zuoxia_o:before { content: "\ecb0"; }
.kt-icon-quxiaoquanping_o:before { content: "\ecb1"; }
.kt-icon-moduanshouqi_o:before { content: "\ecb2"; }
.kt-icon-jiaobiaoxuanzhong_o:before { content: "\ecb3"; }
.kt-icon-moduanzhankai_o:before { content: "\ecb4"; }
.kt-icon-moduanzuoyouzhankai_o:before { content: "\ecb5"; }
.kt-icon-sanjiaoxing_shang_o:before { content: "\ecb6"; }
.kt-icon-quanping_o:before { content: "\ecb7"; }
.kt-icon-xiangzuo_o:before { content: "\ecb8"; }
.kt-icon-shangxiazhankai_o:before { content: "\ecb9"; }
.kt-icon-xuanzeqishouqi_o:before { content: "\ecba"; }
.kt-icon-xuanzeqixiayige_o:before { content: "\ecbb"; }
.kt-icon-sanjiaoxing_o:before { content: "\ecbc"; }
.kt-icon-shangchuan_o:before { content: "\ecbd"; }
.kt-icon-xiazai_o:before { content: "\ecbe"; }
.kt-icon-zhiding_o:before { content: "\ecbf"; }
.kt-icon-dunpaibaowei_o:before { content: "\ecc0"; }
.kt-icon-huobiliu_o:before { content: "\ecc1"; }
.kt-icon-hongbao_o:before { content: "\ecc2"; }
.kt-icon-dunpaibaoxianzhiliang_o:before { content: "\ecc3"; }
.kt-icon-jiekuan_o:before { content: "\ecc4"; }
.kt-icon-jisuanqi_o:before { content: "\ecc5"; }
.kt-icon-jinrongguanli_o:before { content: "\ecc6"; }
.kt-icon-cunkuan_o:before { content: "\ecc7"; }
.kt-icon-dunpaibaoxianrenzheng_o:before { content: "\ecc8"; }
.kt-icon-qianbao_o:before { content: "\ecc9"; }
.kt-icon-jinbi_o:before { content: "\ecca"; }
.kt-icon-meiyuan_o:before { content: "\eccb"; }
.kt-icon-renminbi_o:before { content: "\eccc"; }
.kt-icon-zhangdan_quxiao_o:before { content: "\eccd"; }
.kt-icon-zhangdan_kong_o:before { content: "\ecce"; }
.kt-icon-zhangdan_xinzeng_o:before { content: "\eccf"; }
.kt-icon-zhangdan-wancheng_o:before { content: "\ecd0"; }
.kt-icon-zijin_dongjie_o:before { content: "\ecd1"; }
.kt-icon-zhangdan_o:before { content: "\ecd2"; }
.kt-icon-yinhangqia_o:before { content: "\ecd3"; }
.kt-icon-zijin_o:before { content: "\ecd4"; }
.kt-icon-zijinxunhuan_o:before { content: "\ecd5"; }
.kt-icon-zhangdan_xiangqing_o:before { content: "\ecd6"; }
.kt-icon-zhibi_renminbi_o:before { content: "\ecd7"; }
.kt-icon-anniu-zan_o:before { content: "\ecd8"; }
.kt-icon-anniucai_o:before { content: "\ecd9"; }
.kt-icon-biaoqing_xiao_o:before { content: "\ecda"; }
.kt-icon-chengchang_o:before { content: "\ecdb"; }
.kt-icon-duanxin_o:before { content: "\ecdc"; }
.kt-icon-biaoqing_beishang_o:before { content: "\ecdd"; }
.kt-icon-cai_o:before { content: "\ecde"; }
.kt-icon-fenxiang_o:before { content: "\ecdf"; }
.kt-icon-biaoqing_o:before { content: "\ece0"; }
.kt-icon-gerentouxiang_o:before { content: "\ece1"; }
.kt-icon-qiandao_o:before { content: "\ece2"; }
.kt-icon-qunzu_o:before { content: "\ece3"; }
.kt-icon-dianhua_o:before { content: "\ece4"; }
.kt-icon-tianjiahaoyou_o:before { content: "\ece5"; }
.kt-icon-shoucang_o:before { content: "\ece6"; }
.kt-icon-wangwang_o:before { content: "\ece7"; }
.kt-icon-xiai_o:before { content: "\ece8"; }
.kt-icon-zan_o:before { content: "\ece9"; }
.kt-icon-wangwanglikai_o:before { content: "\ecea"; }
.kt-icon-naozhong_o:before { content: "\eceb"; }
.kt-icon-shijian_o:before { content: "\ecec"; }
.kt-icon-riqi_o:before { content: "\eced"; }
.kt-icon-daibanrenwu_o:before { content: "\ecee"; }
.kt-icon-rili_o:before { content: "\ecef"; }
.kt-icon-daibanrenwu_quxiao_o:before { content: "\ecf0"; }
.kt-icon-shuzhuangtu_o:before { content: "\ecf1"; }
.kt-icon-zhexiantu_o:before { content: "\ecf2"; }
.kt-icon-yun_o:before { content: "\ecf3"; }
.kt-icon-yunshangchuan_o:before { content: "\ecf4"; }
.kt-icon-yunxiazai_o:before { content: "\ecf5"; }
.kt-icon-bingtu_o:before { content: "\ecf6"; }
.kt-icon-zhuzhuangtu_o:before { content: "\ecf7"; }
.kt-icon-baoguo_fahuo_o:before { content: "\ecf8"; }
.kt-icon-baoguo_dakai_o:before { content: "\ecf9"; }
.kt-icon-baoguo_hezi_o:before { content: "\ecfa"; }
.kt-icon-baoguo_dabao_o:before { content: "\ecfb"; }
.kt-icon-baoguo_huanbaohe_o:before { content: "\ecfc"; }
.kt-icon-baoguo_quxiaoshouhuo_o:before { content: "\ecfd"; }
.kt-icon-baoguo_shouhuo_o:before { content: "\ecfe"; }
.kt-icon-baoguo_lingjian_o:before { content: "\ecff"; }
.kt-icon-baoguo_shouna_o:before { content: "\ed00"; }
.kt-icon-baoguo_tihuoduanxin_o:before { content: "\ed01"; }
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"common": {
"home": "Home",
"login": "Login",
"logout": "Logout",
"doc": "Document",
"blog": "Blog",
"projectRepo": "Project",
"myMsg": "My Message",
"config": "Config",
"backup": "Backup",
"restore": "Restore",
"backupRestore": "Backup Restore",
"versionName": "Version",
"exit": "Exit"
},
"action": {
"operation": "Operation",
"add": "Add",
"edit": "Edit",
"delete": "Delete",
"batchDelete": "Batch Delete",
"search": "Search",
"loading": "loading",
"submit": "Submit",
"comfirm": "Comfirm",
"cancel": "Cancel",
"reset": "Reset"
},
"sys": {
"sysMng": "System Manage",
"userMng": "User Manage",
"deptMng": "Dept Manage",
"roleMng": "Role Manage",
"menuMng": "Menu Manage",
"logMng": "Log Manage",
"sysMonitor": "System Monitor"
}
}
\ No newline at end of file
{
"common": {
"home": "首页",
"login": "登录",
"logout": "退出登录",
"doc": "文档",
"blog": "博客",
"projectRepo": "项目",
"myMsg": "我的消息",
"config": "系统配置",
"backup": "备份",
"restore": "还原",
"backupRestore": "备份还原",
"versionName": "版本名称",
"exit": "退出"
},
"action": {
"operation": "操作",
"add": "新增",
"edit": "编辑",
"delete": "删除",
"batchDelete": "批量删除",
"search": "查询",
"loading": "拼命加载中",
"submit": "提交",
"comfirm": "确定",
"cancel": "取消",
"reset": "重置"
},
"sys": {
"sysMng": "系统管理",
"userMng": "用户管理",
"deptMng": "机构管理",
"roleMng": "角色管理",
"menuMng": "菜单管理",
"logMng": "日志管理",
"sysMonitor": "系统监控"
}
}
\ No newline at end of file
<template>
<el-breadcrumb separator="/" class="breadcrumb">
<el-breadcrumb-item v-for="item in $route.matched" :key="item.path">
<router-link :to="item.path">{{ item.name }}</router-link>
</el-breadcrumb-item>
</el-breadcrumb>
</template>
<script>
export default {
data() {
return {
};
},
methods: {
},
mounted() {
}
};
</script>
<style scoped lang="scss">
.breadcrumb {
padding: 10px;
}
</style>
\ No newline at end of file
<template>
<el-tooltip class="tooltip" placement="top" effect="light">
<div slot="content">
<p>推荐使用 Font Aweson 图标</p>
<p>使用步骤:</p>
<p>1.进入 <a href="http://www.fontawesome.com.cn/faicons/" target="_blank">Font Aweson</a> 页面</p>
<p>2.查找到需要的图标,点击查看。</p>
<p>3.复制图片样式到此处。</p>
<p>示例:fa fa-home fa-lg</p></div>
<i class="el-icon-warning"></i>
</el-tooltip>
</template>
<script>
export default {
data() {
return {
};
},
methods: {
},
mounted() {
}
};
</script>
<style scoped lang="scss">
.tooltip {
padding: 10px;
}
</style>
\ No newline at end of file
<template>
<svg t="1492500959545" @click="onClick == null ? emptyClick : onClick" class="hamburger" fill="#fff" fill-opacity="0.8" :class="{'is-active':isActive}" viewBox="0 0 1024 1024"
version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1691" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64">
<path d="M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z"
p-id="1692"></path>
<path d="M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z"
p-id="1693"></path>
<path d="M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z"
p-id="1694"></path>
</svg>
</template>
<script>
export default {
name: 'hamburger',
props: {
isActive: {
type: Boolean,
default: false
},
onClick: {
type: Function,
default: null
}
},
methods: {
emptyClick() {
}
}
}
</script>
<style scoped>
.hamburger {
display: inline-block;
cursor: pointer;
width: 20px;
height: 20px;
transform: rotate(90deg);
transition: .38s;
transform-origin: 50% 50%;
}
.hamburger.is-active {
transform: rotate(0deg);
}
</style>
\ No newline at end of file
<template>
<div class="lang-selector" :style="istyle" v-popover:popover>
<li :style="iconStyle" :class="icon"></li>
<el-popover ref="popover" placement="bottom-start" :trigger="trigger" v-model="visible">
<div class="item" @click="changeLanguage('zh_cn')">简体中文</div>
<div class="item" @click="changeLanguage('en_us')">English</div>
</el-popover>
</div>
</template>
<script>
export default {
name: 'LangSelector',
props: {
istyle: {
type: String,
default: 'width:60px;'
},
icon: {
type: String,
default: 'fa fa-language fa-lg'
},
iconStyle: {
type: String,
default: 'color:#fff;'
},
trigger: {
type: String,
default: 'click'
}
},
data() {
return {
visible: false
}
},
methods: {
// 语言切换
changeLanguage(lang) {
lang === '' ? 'zh_cn' : lang
this.$i18n.locale = lang
this.visible = false
}
}
}
</script>
<style scoped lang="scss">
.item {
font-size: 16px;
padding-left: 5px;
padding-top: 5px;
padding-bottom: 5px;
cursor: pointer;
}
.lang-selector:hover {
background: #636b6931;
}
.item:hover {
font-size: 18px;
background: #b0d6ce4d;
}
</style>
\ No newline at end of file
<template>
<el-submenu v-if="menu.children && menu.children.length >= 1" :index="'' + menu.id">
<template slot="title">
<i :class="menu.icon" ></i>
<span slot="title">{{menu.name}}</span>
</template>
<MenuTree v-for="item in menu.children" :key="item.id" :menu="item"></MenuTree>
</el-submenu>
<el-menu-item v-else :index="'' + menu.id" @click="handleRoute(menu)">
<i :class="menu.icon"></i>
<span slot="title">{{menu.name}}</span>
</el-menu-item>
</template>
<script>
import { getIFrameUrl, getIFramePath } from '@/utils/iframe'
export default {
name: 'MenuTree',
props: {
menu: {
type: Object,
required: true
}
},
methods: {
handleRoute (menu) {
// 如果是嵌套页面,转换成iframe的path
let path = getIFramePath(menu.url)
if(!path) {
path = menu.url
}
// 通过菜单URL跳转至指定路由
this.$router.push("/" + path)
}
}
}
</script>
<style scoped lang="scss">
// .el-submenu, .el-menu-item {
// background-color: #3c4b5a44;
// }
</style>
\ No newline at end of file
<template>
<div>
<el-popover ref="popover" :placement="placement" trigger="click">
<el-tree
:data="data"
:props="props"
node-key="nodeKey"
ref="popupTree"
@current-change="currentChangeHandle"
:default-expand-all="defaultExpandAll"
:highlight-current="true"
:expand-on-click-node="true">
</el-tree>
</el-popover>
<el-input v-model="prop" v-popover:popover :readonly="true" :placeholder="placeholder" style="cursor:pointer;"></el-input>
</div>
</template>
<script>
export default {
name: 'PopupTreeInput',
props: {
data: {
type: Array,
default: []
},
props: {
type: Object,
default: {}
},
prop: {
type: String,
default: ''
},
nodeKey: {
type: String,
default: ''
},
placeholder: {
type: String,
default: '点击选择内容'
},
placement: {
type: String,
default: 'right-start'
},
defaultExpandAll: {
type: Boolean,
default: false
},
currentChangeHandle: {
type: Function,
default: null
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<el-color-picker
class="theme-picker"
popper-class="theme-picker-dropdown"
v-model="theme"
:size="size">
</el-color-picker>
</template>
<script>
const version = require('element-ui/package.json').version // element-ui version from node_modules
const ORIGINAL_THEME = '#409EFF' // default color
export default {
name: 'ThemePicker',
props: {
default: { // 初始化主题,可由外部传入
type: String,
default: null
},
size: { // 初始化主题,可由外部传入
type: String,
default: 'small'
}
},
data() {
return {
chalk: '', // content of theme-chalk css
theme: ORIGINAL_THEME,
showSuccess: true // 是否弹出换肤成功消息
}
},
mounted() {
if(this.default != null) {
this.theme = this.default
this.$emit('onThemeChange', this.theme)
this.showSuccess = false
}
},
watch: {
theme(val, oldVal) {
if (typeof val !== 'string') return
const themeCluster = this.getThemeCluster(val.replace('#', ''))
const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
console.log(themeCluster, originalCluster)
const getHandler = (variable, id) => {
return () => {
const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
let styleTag = document.getElementById(id)
if (!styleTag) {
styleTag = document.createElement('style')
styleTag.setAttribute('id', id)
document.head.appendChild(styleTag)
}
styleTag.innerText = newStyle
}
}
const chalkHandler = getHandler('chalk', 'chalk-style')
if (!this.chalk) {
const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`
this.getCSSString(url, chalkHandler, 'chalk')
} else {
chalkHandler()
}
const styles = [].slice.call(document.querySelectorAll('style'))
.filter(style => {
const text = style.innerText
return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
})
styles.forEach(style => {
const { innerText } = style
if (typeof innerText !== 'string') return
style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
})
// 响应外部操作
this.$emit('onThemeChange', val)
if(this.showSuccess) {
this.$message({
message: '换肤成功',
type: 'success'
})
} else {
this.showSuccess = true
}
}
},
methods: {
updateStyle(style, oldCluster, newCluster) {
let newStyle = style
oldCluster.forEach((color, index) => {
newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
})
return newStyle
},
getCSSString(url, callback, variable) {
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
callback()
}
}
xhr.open('GET', url)
xhr.send()
},
getThemeCluster(theme) {
const tintColor = (color, tint) => {
let red = parseInt(color.slice(0, 2), 16)
let green = parseInt(color.slice(2, 4), 16)
let blue = parseInt(color.slice(4, 6), 16)
if (tint === 0) { // when primary color is in its rgb space
return [red, green, blue].join(',')
} else {
red += Math.round(tint * (255 - red))
green += Math.round(tint * (255 - green))
blue += Math.round(tint * (255 - blue))
red = red.toString(16)
green = green.toString(16)
blue = blue.toString(16)
return `#${red}${green}${blue}`
}
}
const shadeColor = (color, shade) => {
let red = parseInt(color.slice(0, 2), 16)
let green = parseInt(color.slice(2, 4), 16)
let blue = parseInt(color.slice(4, 6), 16)
red = Math.round((1 - shade) * red)
green = Math.round((1 - shade) * green)
blue = Math.round((1 - shade) * blue)
red = red.toString(16)
green = green.toString(16)
blue = blue.toString(16)
return `#${red}${green}${blue}`
}
const clusters = [theme]
for (let i = 0; i <= 9; i++) {
clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
}
clusters.push(shadeColor(theme, 0.1))
return clusters
}
}
}
</script>
<style>
.theme-picker .el-color-picker__trigger {
vertical-align: middle;
}
.theme-picker-dropdown .el-color-dropdown__link-btn {
display: none;
}
</style>
\ No newline at end of file
<template>
<div class="action" :style="actionStyle" @click="onClick">
<li :style="iconStyle" :class="icon"></li>
</div>
</template>
<script>
export default {
name: 'Action',
props: {
actionStyle: {
type: String,
default: 'width:60px;display:inline-block;'
},
icon: {
type: String,
default: 'fa fa-home fa-lg'
},
iconStyle: {
type: String,
default: 'color:#fff;'
},
onClick: {
type: Function,
default: null
}
},
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped lang="scss">
.action:hover {
background: #636b6931;
}
</style>
\ No newline at end of file
/*
* 接口统一集成模块
*/
import * as login from './moudules/login'
import * as user from './moudules/user'
import * as dept from './moudules/dept'
import * as role from './moudules/role'
import * as menu from './moudules/menu'
import * as dict from './moudules/dict'
import * as log from './moudules/log'
import * as getlist from './moudules/getlist'
// 默认全部导出
export default {
login,
user,
dept,
role,
menu,
dict,
log,
getlist
}
\ No newline at end of file
import axios from 'axios';
import config from './config';
import Cookies from "js-cookie";
import router from '@/router'
// 使用vuex做全局loading时使用
// import store from '@/store'
export default function $axios(options) {
return new Promise((resolve, reject) => {
const instance = axios.create({
baseURL: config.baseUrl,
headers: config.headers,
timeout: config.timeout,
withCredentials: config.withCredentials
})
// request 拦截器
instance.interceptors.request.use(
config => {
let token = Cookies.get('token')
// 1. 请求开始的时候可以结合 vuex 开启全屏 loading 动画
// console.log(store.state.loading)
// console.log('准备发送请求...')
// 2. 带上token
if (token) {
config.headers.token = token
} else {
// 重定向到登录页面
router.push('/login')
}
// 3. 根据请求方法,序列化传来的参数,根据后端需求是否序列化
if (config.method === 'post') {
// if (config.data.__proto__ === FormData.prototype
// || config.url.endsWith('path')
// || config.url.endsWith('mark')
// || config.url.endsWith('patchs')
// ) {
// } else {
// config.data = qs.stringify(config.data)
// }
}
return config
},
error => {
// 请求错误时
console.log('request:', error)
// 1. 判断请求超时
if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
console.log('timeout请求超时')
// return service.request(originalRequest);// 再重复请求一次
}
// 2. 需要重定向到错误页面
const errorInfo = error.response
console.log(errorInfo)
if (errorInfo) {
error = errorInfo.data // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
const errorStatus = errorInfo.status; // 404 403 500 ...
router.push({
path: `/error/${errorStatus}`
})
}
return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
}
)
// response 拦截器
instance.interceptors.response.use(
response => {
let data;
// IE9时response.data是undefined,因此需要使用response.request.responseText(Stringify后的字符串)
if (response.data == undefined) {
data = JSON.parse(response.request.responseText)
} else {
data = response.data
}
if(data.code==401){
Cookies.remove("token")
router.push('/login')
}
// 根据返回的code值来做不同的处理
switch (data.rc) {
case 1:
console.log(data.desc)
break;
case 0:
store.commit('changeState')
// console.log('登录成功')
default:
}
// 若不是正确的返回code,且已经登录,就抛出错误
// const err = new Error(data.desc)
// err.data = data
// err.response = response
// throw err
return data
},
err => {
if (err && err.response) {
switch (err.response.status) {
case 400:
err.message = '请求错误'
break
case 401:
err.message = '未授权,请登录'
break
case 403:
err.message = '拒绝访问'
break
case 404:
err.message = `请求地址出错: ${err.response.config.url}`
break
case 408:
err.message = '请求超时'
break
case 500:
err.message = '服务器内部错误'
break
case 501:
err.message = '服务未实现'
break
case 502:
err.message = '网关错误'
break
case 503:
err.message = '服务不可用'
break
case 504:
err.message = '网关超时'
break
case 505:
err.message = 'HTTP版本不受支持'
break
default:
}
}
console.error(err)
return Promise.reject(err) // 返回接口返回的错误信息
}
)
// 请求处理
instance(options).then(res => {
resolve(res)
return false
}).catch(error => {
reject(error)
})
})
}
\ No newline at end of file
import { baseUrl } from '@/utils/global'
export default {
method: 'get',
// 基础url前缀
baseUrl: baseUrl,
// 请求头信息
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
// 参数
data: {},
// 设置超时时间
timeout: 10000,
// 携带凭证
withCredentials: true,
// 返回数据类型
responseType: 'json'
}
\ No newline at end of file
// 导入所有接口
import api from './api'
const install = Vue => {
if (install.installed)
return;
install.installed = true;
Object.defineProperties(Vue.prototype, {
// 注意,此处挂载在 Vue 原型的 $api 对象上
$api: {
get() {
return api
}
}
})
}
export default install
\ No newline at end of file
import axios from '../axios'
/*
* 机构管理模块
*/
// 保存
export const save = (data) => {
return axios({
url: '/dept/save',
method: 'post',
data
})
}
// 删除
export const batchDelete = (data) => {
return axios({
url: '/dept/delete',
method: 'post',
data
})
}
// 查询机构树
export const findDeptTree = () => {
return axios({
url: '/dept/findTree',
method: 'get'
})
}
\ No newline at end of file
import axios from '../axios'
/*
* 字典管理模块
*/
// 保存
export const save = (data) => {
return axios({
url: '/dict/save',
method: 'post',
data
})
}
// 删除
export const batchDelete = (data) => {
return axios({
url: '/dict/delete',
method: 'post',
data
})
}
// 分页查询
export const findPage = (data) => {
return axios({
url: '/dict/findPage',
method: 'post',
data
})
}
\ No newline at end of file
import axios from '../axios'
export const getlist = (data) => {
return axios({
url: '/examine/listExamining',
method: 'post',
data
})
}
export const shenhe = (data) => {
return axios({
url: '/examine/update',
method: 'post',
data
})
}
export const selectflowlist = (data) => {
return axios({
url: '/folw/selectflowlist',
method: 'post',
data
})
}
export const selectRoleinfo = (params) => {
return axios({
url: '/role/selectRoleinfo',
method: 'get',
params
})
}
export const progress = (params) => {
return axios({
url: '/examine/progressView',
method: 'get',
params
})
}
//审核记录
export const record = (data) => {
return axios({
url: '/examine/listExamed',
method: 'post',
data
})
}
//登记导出
export const seledjdc = (params) => {
return axios({
url: '/baseInfo/getBaseInfo',
method: 'get',
params
})
}
//导出
export const dccc = (params) => {
return axios({
url: '/exportExcel/insuredRegistration',
method: 'get',
params
})
}
//新闻
export const newsList = (params) => {
return axios({
url: '/news/list',
method: 'get',
params
})
}
//社保查询
export const shebao = (params) => {
return axios({
url: '/search/authentication.do',
method: 'get',
params
})
}
import axios from '../axios'
/*
* 日志管理模块
*/
// 分页查询
export const findPage = (data) => {
return axios({
url: '/log/findPage',
method: 'post',
data
})
}
\ No newline at end of file
import axios from '../axios'
/*
* 系统登录模块
*/
// 登录
export const login = data => {
return axios({
url: 'login',
method: 'post',
data
})
}
// 登出
export const logout = () => {
return axios({
url: 'logout',
method: 'get'
})
}
import axios from '../axios'
/*
* 菜单管理模块
*/
// 保存
export const save = (data) => {
return axios({
url: '/menu/save',
method: 'post',
data
})
}
// 删除
export const batchDelete = (data) => {
return axios({
url: '/menu/delete',
method: 'post',
data
})
}
// 查找导航菜单树
export const findNavTree = (params) => {
return axios({
url: '/menu/findNavTree',
method: 'get',
params
})
}
// 查找导航菜单树
export const findMenuTree = () => {
return axios({
url: '/menu/findMenuTree',
method: 'get'
})
}
\ No newline at end of file
import axios from '../axios'
/*
* 角色管理模块
*/
// 保存
export const save = (data) => {
return axios({
url: '/role/save',
method: 'post',
data
})
}
// 删除
export const batchDelete = (data) => {
return axios({
url: '/role/delete',
method: 'post',
data
})
}
// 分页查询
export const findPage = (data) => {
return axios({
url: '/role/findPage',
method: 'post',
data
})
}
// 查询全部
export const findAll = () => {
return axios({
url: '/role/findAll',
method: 'get'
})
}
// 查询角色菜单集合
export const findRoleMenus = (params) => {
return axios({
url: '/role/findRoleMenus',
method: 'get',
params
})
}
// 保存角色菜单集合
export const saveRoleMenus = (data) => {
return axios({
url: '/role/saveRoleMenus',
method: 'post',
data
})
}
\ No newline at end of file
import axios from '../axios'
/*
* 用户管理模块
*/
// 保存
export const save = (data) => {
return axios({
url: '/user/save',
method: 'post',
data
})
}
// 删除
export const batchDelete = (data) => {
return axios({
url: '/user/forbiddenUser',
method: 'post',
data
})
}
// 分页查询
export const findPage = (data) => {
return axios({
url: '/user/findPage',
method: 'post',
data
})
}
// 查找用户的菜单权限标识集合
export const findPermissions = (params) => {
return axios({
url: '/user/findPermissions',
method: 'get',
params
})
}
\ No newline at end of file
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
// 注册i18n实例并引入语言文件,文件格式等下解析
const i18n = new VueI18n({
locale: 'zh_cn',
messages: {
'zh_cn': require('@/assets/languages/zh_cn.json'),
'en_us': require('@/assets/languages/en_us.json')
}
})
export default i18n
\ No newline at end of file
import Vue from 'vue'
import App from './App'
import router from './router'
import api from './http'
import i18n from './i18n'
import store from './store'
import global from '@/utils/global'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import 'font-awesome/css/font-awesome.min.css'
import '@/assets/iconfont/iconfont.css'
Vue.use(ElementUI)
Vue.use(api)
Vue.prototype.global = global
new Vue({
el: '#app',
i18n,
router,
store,
render: h => h(App)
});
\ No newline at end of file
import Mock from 'mockjs'
import { baseUrl } from '@/utils/global'
import * as login from './modules/login'
import * as user from './modules/user'
import * as role from './modules/role'
import * as dept from './modules/dept'
import * as menu from './modules/menu'
import * as dict from './modules/dict'
import * as log from './modules/log'
// 1. 开启/关闭[所有模块]拦截, 通过调[openMock参数]设置.
// 2. 开启/关闭[业务模块]拦截, 通过调用fnCreate方法[isOpen参数]设置.
// 3. 开启/关闭[业务模块中某个请求]拦截, 通过函数返回对象中的[isOpen属性]设置.
// let openMock = true
let openMock = false
fnCreate(login, openMock)
fnCreate(user, openMock)
fnCreate(role, openMock)
fnCreate(dept, openMock)
fnCreate(menu, openMock)
fnCreate(dict, openMock)
fnCreate(log, openMock)
/**
* 创建mock模拟数据
* @param {*} mod 模块
* @param {*} isOpen 是否开启?
*/
function fnCreate (mod, isOpen = true) {
if (isOpen) {
for (var key in mod) {
((res) => {
if (res.isOpen !== false) {
let url = baseUrl
if(!url.endsWith("/")) {
url = url + "/"
}
url = url + res.url
Mock.mock(new RegExp(url), res.type, (opts) => {
opts['data'] = opts.body ? JSON.parse(opts.body) : null
delete opts.body
console.log('\n')
console.log('%cmock拦截, 请求: ', 'color:blue', opts)
console.log('%cmock拦截, 响应: ', 'color:blue', res.data)
return res.data
})
}
})(mod[key]() || {})
}
}
}
/*
* 机构管理模块
*/
// 保存
export function save() {
return {
url: 'dept/save',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 批量删除
export function batchDelete() {
return {
url: 'dept/delete',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
export function findDeptTree(params) {
// 查询机构树
let findTreeData = {
"code": 200,
"msg": null,
"data": {}
}
let content = []
for(let i=0; i<3; i++) {
let obj = {}
obj.id = i + 1
obj.parentId = 0
obj.name = '机构部门 ' + obj.id
obj.parentName = "顶级机构"
obj.children = []
content.push(obj)
}
for(let i=0; i<content.length; i++) {
let parent = content[i]
for(let j=0; j<5; j++) {
let obj = {}
obj.id = (i + 1) + "" + (j + 1)
obj.parentId = parent.id
obj.parentName = parent.name
obj.name = '机构部门 ' + (i + 1) + "-" + (j + 1)
parent.children.push(obj)
}
}
findTreeData.data = content
return {
url: 'dept/findTree',
type: 'get',
data: findTreeData
}
}
/*
* 字典管理模块
*/
// 保存
export function save() {
return {
url: 'dict/save',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 批量删除
export function batchDelete() {
return {
url: 'dict/delete',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 分页查询
export function findPage(params) {
let findPageData = {
"code": 200,
"msg": null,
"data": {}
}
let pageNum = 1
let pageSize = 8
if(params !== null) {
// pageNum = params.pageNum
}
if(params !== null) {
// pageSize = params.pageSize
}
let content = this.getContent(pageNum, pageSize)
findPageData.data.pageNum = pageNum
findPageData.data.pageSize = pageSize
findPageData.data.totalSize = 50
findPageData.data.content = content
return {
url: 'dict/findPage',
type: 'post',
data: findPageData
}
}
export function getContent(pageNum, pageSize) {
let content = []
for(let i=0; i<pageSize; i++) {
let obj = {}
let index = ((pageNum - 1) * pageSize) + i + 1
obj.id = index
obj.value = 'value' + index
obj.label = 'label' + index
obj.type = 'type' + index
obj.description = 'description' + index
obj.sort = 0
obj.name = 'dict' + index
obj.name = 'dict' + index
obj.name = 'dict' + index
obj.name = 'dict' + index
obj.remarks = 'remarks' + index
if(i % 2 === 0) {
}
obj.createBy= ''
obj.createTime= '2018-08-14 11:11:11'
obj.createBy= ''
obj.createTime= '2018-09-14 12:12:12'
content.push(obj)
}
return content
}
/*
* 日志管理模块
*/
// 分页查询
export function findPage(params) {
let findPageData = {
"code": 200,
"msg": null,
"data": {}
}
let pageNum = 1
let pageSize = 8
if(params !== null) {
// pageNum = params.pageNum
}
if(params !== null) {
// pageSize = params.pageSize
}
let content = this.getContent(pageNum, pageSize)
findPageData.data.pageNum = pageNum
findPageData.data.pageSize = pageSize
findPageData.data.totalSize = 50
findPageData.data.content = content
return {
url: 'log/findPage',
type: 'post',
data: findPageData
}
}
export function getContent(pageNum, pageSize) {
let content = []
for(let i=0; i<pageSize; i++) {
let obj = {}
let index = ((pageNum - 1) * pageSize) + i + 1
obj.id = index
obj.userName = '' + index
obj.operation = 'operation'
obj.method = 'com.louis.controller.SysUserController.findPage'
obj.params = '{"pageNum":"1","pageSize":"8"}'
obj.time = 12
obj.ip = '127.0.0.1'
obj.remark = 'remark log' + index
if(i % 2 === 0) {
}
obj.createBy= ''
obj.createTime= '2018-08-14 11:11:11'
obj.createBy= ''
obj.createTime= '2018-09-14 12:12:12'
content.push(obj)
}
return content
}
/*
* 系统登录模块
*/
// 登录接口
export function login() {
const loginData = {
"code": 200,
"msg": null,
"data": {
"id": null,
"userId": 1,
"token": "77ae89be36504adfb5c09ef71409ea0e",
"expireTime": "2018-09-01T16:24:50.473+0000",
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": "2018-09-01T04:24:50.473+0000"
}
}
return {
url: 'login',
type: 'post',
data: loginData
}
}
// 登出接口
export function logout() {
const logoutData = {
"code": 200,
"msg": null,
"data": {
}
}
return {
url: 'logout',
type: 'get',
data: logoutData
}
}
\ No newline at end of file
/*
* 菜单管理模块
*/
// 获取导航菜单树
export function findNavTree() {
const navTreeData = {
"code": 200,
"msg": null,
"data": [{
"id": 1,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 0,
"name": "系统管理",
"url": null,
"perms": null,
"type": 0,
"icon": "el-icon-setting",
"orderNum": 0,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 2,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "用户管理",
"url": "/sys/user",
"perms": null,
"type": 1,
"icon": "el-icon-service",
"orderNum": 1,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}, {
"id": 3,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "机构管理",
"url": "/sys/dept",
"perms": null,
"type": 1,
"icon": "el-icon-news",
"orderNum": 2,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}, {
"id": 4,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "角色管理",
"url": "/sys/role",
"perms": null,
"type": 1,
"icon": "el-icon-view",
"orderNum": 4,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}, {
"id": 5,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "菜单管理",
"url": "/sys/menu",
"perms": null,
"type": 1,
"icon": "el-icon-menu",
"orderNum": 5,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}, {
"id": 7,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "字典管理",
"url": "/sys/dict",
"perms": null,
"type": 1,
"icon": "el-icon-edit-outline",
"orderNum": 7,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}, {
"id": 8,
"createBy": null,
"createTime": null,
"lastUpdateBy": "",
"lastUpdateTime": "2018-09-23T11:32:28.000+0000",
"parentId": 1,
"name": "系统日志",
"url": "/sys/log",
"perms": "sys:log:view",
"type": 1,
"icon": "el-icon-info",
"orderNum": 8,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}]
}, {
"id": 43,
"createBy": "",
"createTime": "2018-12-27T02:57:29.000+0000",
"lastUpdateBy": "",
"lastUpdateTime": "2018-12-27T03:02:26.000+0000",
"parentId": 0,
"name": "系统监控",
"url": "",
"perms": "",
"type": 0,
"icon": "el-icon-info",
"orderNum": 1,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 6,
"createBy": null,
"createTime": null,
"lastUpdateBy": "",
"lastUpdateTime": "2018-12-27T03:03:45.000+0000",
"parentId": 43,
"name": "数据监控",
"url": "http://139.196.87.48:8001/druid/login.html",
"perms": null,
"type": 1,
"icon": "el-icon-warning",
"orderNum": 0,
"delFlag": 0,
"parentName": "系统监控",
"level": 1,
"children": []
}, {
"id": 38,
"createBy": "",
"createTime": "2018-11-02T12:02:15.000+0000",
"lastUpdateBy": "",
"lastUpdateTime": "2018-12-27T03:03:53.000+0000",
"parentId": 43,
"name": "服务监控",
"url": "http://139.196.87.48:8000/",
"perms": "",
"type": 1,
"icon": "el-icon-view",
"orderNum": 1,
"delFlag": 0,
"parentName": "系统监控",
"level": 1,
"children": []
}]
}, {
"id": 44,
"createBy": "",
"createTime": "2018-12-27T03:05:48.000+0000",
"lastUpdateBy": "",
"lastUpdateTime": "2018-12-27T03:06:39.000+0000",
"parentId": 0,
"name": "服务治理",
"url": "",
"perms": "",
"type": 0,
"icon": "el-icon-service",
"orderNum": 2,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 41,
"createBy": "",
"createTime": "2018-11-03T03:06:48.000+0000",
"lastUpdateBy": "",
"lastUpdateTime": "2018-12-27T03:08:11.000+0000",
"parentId": 44,
"name": "注册中心",
"url": "http://139.196.87.48:8500",
"perms": "",
"type": 1,
"icon": " el-icon-view",
"orderNum": 0,
"delFlag": 0,
"parentName": "服务治理",
"level": 1,
"children": []
}]
}, {
"id": 35,
"createBy": null,
"createTime": null,
"lastUpdateBy": "",
"lastUpdateTime": "2018-12-27T03:04:18.000+0000",
"parentId": 0,
"name": "接口文档",
"url": "http://139.196.87.48:8001/swagger-ui.html",
"perms": null,
"type": 1,
"icon": "el-icon-document",
"orderNum": 3,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": []
}, {
"id": 42,
"createBy": "",
"createTime": "2018-11-15T06:39:30.000+0000",
"lastUpdateBy": "",
"lastUpdateTime": "2018-11-15T06:56:18.000+0000",
"parentId": 0,
"name": "代码生成",
"url": "/generator/generator",
"perms": "",
"type": 1,
"icon": "el-icon-star-on",
"orderNum": 5,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": []
}, {
"id": 28,
"createBy": null,
"createTime": null,
"lastUpdateBy": "",
"lastUpdateTime": "2018-11-15T06:39:43.000+0000",
"parentId": 0,
"name": "使用案例",
"url": null,
"perms": null,
"type": 0,
"icon": "el-icon-picture-outline",
"orderNum": 6,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 29,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 28,
"name": "国际化",
"url": "/demo/i18n",
"perms": null,
"type": 1,
"icon": "el-icon-edit",
"orderNum": 1,
"delFlag": 0,
"parentName": "使用案例",
"level": 1,
"children": []
}, {
"id": 30,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 28,
"name": "换皮肤",
"url": "/demo/theme",
"perms": null,
"type": 1,
"icon": "el-icon-picture",
"orderNum": 2,
"delFlag": 0,
"parentName": "使用案例",
"level": 1,
"children": []
}]
}]
}
return {
url: 'menu/findNavTree',
type: 'get',
data: navTreeData
}
}
// 获取菜单树
export function findMenuTree() {
const menuTreeData = {
"code": 200,
"msg": null,
"data": [{
"id": 1,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 0,
"name": "系统管理",
"url": null,
"perms": null,
"type": 0,
"icon": "el-icon-setting",
"orderNum": 0,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 2,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "用户管理",
"url": "/sys/user",
"perms": null,
"type": 1,
"icon": "el-icon-service",
"orderNum": 1,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": [{
"id": 9,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 2,
"name": "查看",
"url": null,
"perms": "sys:user:view",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "用户管理",
"level": 2,
"children": []
}, {
"id": 10,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 2,
"name": "新增",
"url": null,
"perms": "sys:user:add",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "用户管理",
"level": 2,
"children": []
}, {
"id": 11,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 2,
"name": "修改",
"url": null,
"perms": "sys:user:edit",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "用户管理",
"level": 2,
"children": []
}, {
"id": 12,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 2,
"name": "删除",
"url": null,
"perms": "sys:user:delete",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "用户管理",
"level": 2,
"children": []
}]
}, {
"id": 3,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "机构管理",
"url": "/sys/dept",
"perms": null,
"type": 1,
"icon": "el-icon-news",
"orderNum": 2,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": [{
"id": 13,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 3,
"name": "查看",
"url": null,
"perms": "sys:dept:view",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "机构管理",
"level": 2,
"children": []
}, {
"id": 14,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 3,
"name": "新增",
"url": null,
"perms": "sys:dept:add",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "机构管理",
"level": 2,
"children": []
}, {
"id": 15,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 3,
"name": "修改",
"url": null,
"perms": "sys:dept:edit",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "机构管理",
"level": 2,
"children": []
}, {
"id": 16,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 3,
"name": "删除",
"url": null,
"perms": "sys:dept:delete",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "机构管理",
"level": 2,
"children": []
}]
}, {
"id": 4,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "角色管理",
"url": "/sys/role",
"perms": null,
"type": 1,
"icon": "el-icon-view",
"orderNum": 4,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": [{
"id": 17,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 4,
"name": "查看",
"url": null,
"perms": "sys:role:view",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "角色管理",
"level": 2,
"children": []
}, {
"id": 18,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 4,
"name": "新增",
"url": null,
"perms": "sys:role:add",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "角色管理",
"level": 2,
"children": []
}, {
"id": 19,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 4,
"name": "修改",
"url": null,
"perms": "sys:role:edit",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "角色管理",
"level": 2,
"children": []
}, {
"id": 20,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 4,
"name": "删除",
"url": null,
"perms": "sys:role:delete",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "角色管理",
"level": 2,
"children": []
}]
}, {
"id": 5,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "菜单管理",
"url": "/sys/menu",
"perms": null,
"type": 1,
"icon": "el-icon-menu",
"orderNum": 5,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": [{
"id": 21,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 5,
"name": "查看",
"url": null,
"perms": "sys:menu:view",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "菜单管理",
"level": 2,
"children": []
}, {
"id": 22,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 5,
"name": "新增",
"url": null,
"perms": "sys:menu:add",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "菜单管理",
"level": 2,
"children": []
}, {
"id": 23,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 5,
"name": "修改",
"url": null,
"perms": "sys:menu:edit",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "菜单管理",
"level": 2,
"children": []
}, {
"id": 24,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 5,
"name": "删除",
"url": null,
"perms": "sys:menu:delete",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "菜单管理",
"level": 2,
"children": []
}]
}, {
"id": 7,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 1,
"name": "字典管理",
"url": "/sys/dict",
"perms": null,
"type": 1,
"icon": "el-icon-edit-outline",
"orderNum": 7,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": [{
"id": 31,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 7,
"name": "查看",
"url": null,
"perms": "sys:dict:view",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "字典管理",
"level": 2,
"children": []
}, {
"id": 32,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 7,
"name": "新增",
"url": null,
"perms": "sys:dict:add",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "字典管理",
"level": 2,
"children": []
}, {
"id": 33,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 7,
"name": "修改",
"url": null,
"perms": "sys:dict:edit",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "字典管理",
"level": 2,
"children": []
}, {
"id": 34,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 7,
"name": "删除",
"url": null,
"perms": "sys:dict:delete",
"type": 2,
"icon": null,
"orderNum": 0,
"delFlag": 0,
"parentName": "字典管理",
"level": 2,
"children": []
}]
}, {
"id": 8,
"createBy": null,
"createTime": null,
"lastUpdateBy": "",
"lastUpdateTime": "2018-09-23T11:32:28.000+0000",
"parentId": 1,
"name": "系统日志",
"url": "/sys/log",
"perms": "sys:log:view",
"type": 1,
"icon": "el-icon-info",
"orderNum": 8,
"delFlag": 0,
"parentName": "系统管理",
"level": 1,
"children": []
}]
}, {
"id": 43,
"createBy": "admin",
"createTime": "2018-12-27T02:57:29.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-12-27T03:02:26.000+0000",
"parentId": 0,
"name": "系统监控",
"url": "",
"perms": "",
"type": 0,
"icon": "el-icon-info",
"orderNum": 1,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 6,
"createBy": null,
"createTime": null,
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-12-27T03:03:45.000+0000",
"parentId": 43,
"name": "数据监控",
"url": "http://139.196.87.48:8001/druid/login.html",
"perms": null,
"type": 1,
"icon": "el-icon-warning",
"orderNum": 0,
"delFlag": 0,
"parentName": "系统监控",
"level": 1,
"children": []
}, {
"id": 38,
"createBy": "admin",
"createTime": "2018-11-02T12:02:15.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-12-27T03:03:53.000+0000",
"parentId": 43,
"name": "服务监控",
"url": "http://139.196.87.48:8000/",
"perms": "",
"type": 1,
"icon": "el-icon-view",
"orderNum": 1,
"delFlag": 0,
"parentName": "系统监控",
"level": 1,
"children": []
}]
}, {
"id": 44,
"createBy": "admin",
"createTime": "2018-12-27T03:05:48.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-12-27T03:06:39.000+0000",
"parentId": 0,
"name": "服务治理",
"url": "",
"perms": "",
"type": 0,
"icon": "el-icon-service",
"orderNum": 2,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 41,
"createBy": "admin",
"createTime": "2018-11-03T03:06:48.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-12-27T03:08:11.000+0000",
"parentId": 44,
"name": "注册中心",
"url": "http://139.196.87.48:8500",
"perms": "",
"type": 1,
"icon": " el-icon-view",
"orderNum": 0,
"delFlag": 0,
"parentName": "服务治理",
"level": 1,
"children": []
}]
}, {
"id": 35,
"createBy": null,
"createTime": null,
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-12-27T03:04:18.000+0000",
"parentId": 0,
"name": "接口文档",
"url": "http://139.196.87.48:8001/swagger-ui.html",
"perms": null,
"type": 1,
"icon": "el-icon-document",
"orderNum": 3,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": []
}, {
"id": 42,
"createBy": "admin",
"createTime": "2018-11-15T06:39:30.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-11-15T06:56:18.000+0000",
"parentId": 0,
"name": "代码生成",
"url": "/generator/generator",
"perms": "",
"type": 1,
"icon": "el-icon-star-on",
"orderNum": 5,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": []
}, {
"id": 28,
"createBy": null,
"createTime": null,
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-11-15T06:39:43.000+0000",
"parentId": 0,
"name": "使用案例",
"url": null,
"perms": null,
"type": 0,
"icon": "el-icon-picture-outline",
"orderNum": 6,
"delFlag": 0,
"parentName": null,
"level": 0,
"children": [{
"id": 29,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 28,
"name": "国际化",
"url": "/demo/i18n",
"perms": null,
"type": 1,
"icon": "el-icon-edit",
"orderNum": 1,
"delFlag": 0,
"parentName": "使用案例",
"level": 1,
"children": []
}, {
"id": 30,
"createBy": null,
"createTime": null,
"lastUpdateBy": null,
"lastUpdateTime": null,
"parentId": 28,
"name": "换皮肤",
"url": "/demo/theme",
"perms": null,
"type": 1,
"icon": "el-icon-picture",
"orderNum": 2,
"delFlag": 0,
"parentName": "使用案例",
"level": 1,
"children": []
}]
}]
}
return {
url: 'menu/findMenuTree',
type: 'get',
data: menuTreeData
}
}
export function setParentName(data) {
if(data == null) {
return
}
let len = data.length
for(let i=0; i<len; i++) {
let menu = data[i]
menu.parentName = 'menu' + menu.parentId
if(menu.children != null) {
setParentName(menu.children)
}
}
}
/*
* 角色管理模块
*/
// 保存
export function save() {
return {
url: 'role/save',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 批量删除
export function batchDelete() {
return {
url: 'role/delete',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 查询全部
export function findAll() {
let findAllData = {
"code": 200,
"msg": null,
"data": [
{
"id": 1,
"createBy": "admin",
"createTime": "2018-08-14T03:11:11.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-08-14T03:11:11.000+0000",
"name": "admin",
"remark": "超级管理员",
"delFlag": 0
},
{
"id": 2,
"createBy": "admin",
"createTime": "2018-08-14T03:11:11.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-08-14T03:11:11.000+0000",
"name": "dev",
"remark": "开发人员",
"delFlag": 0
},
{
"id": 3,
"createBy": "admin",
"createTime": "2018-08-14T03:11:11.000+0000",
"lastUpdateBy": "admin",
"lastUpdateTime": "2018-08-14T03:11:11.000+0000",
"name": "test",
"remark": "测试人员",
"delFlag": 0
}
]
}
return {
url: 'role/findAll',
type: 'get',
data: findAllData
}
}
// 分页查询
export function findPage(params) {
let findPageData = {
"code": 200,
"msg": null,
"data": {}
}
let pageNum = 1
let pageSize = 8
if(params !== null) {
// pageNum = params.pageNum
}
if(params !== null) {
// pageSize = params.pageSize
}
let content = this.getContent(pageNum, pageSize)
findPageData.data.pageNum = pageNum
findPageData.data.pageSize = pageSize
findPageData.data.totalSize = 50
findPageData.data.content = content
return {
url: 'role/findPage',
type: 'post',
data: findPageData
}
}
export function getContent(pageNum, pageSize) {
let content = []
for(let i=0; i<pageSize; i++) {
let obj = {}
let index = ((pageNum - 1) * pageSize) + i + 1
obj.id = index
obj.name = 'role' + index
obj.remark = 'remark role' + index
if(i % 2 === 0) {
}
obj.createBy= 'admin'
obj.createTime= '2018-08-14 11:11:11'
obj.createBy= 'admin'
obj.createTime= '2018-09-14 12:12:12'
content.push(obj)
}
return content
}
// 查询角色菜单集合
export function findRoleMenus(params) {
let findRoleMenuData = {
"code": 200,
"msg": null,
"data": {}
}
return {
url: 'role/findRoleMenus',
type: 'get',
data: findRoleMenuData
}
}
\ No newline at end of file
/*
* 用户管理模块
*/
// 保存
export function save() {
return {
url: 'user/save',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 批量删除
export function batchDelete() {
return {
url: '/user/forbiddenUser',
type: 'post',
data: {
"code": 200,
"msg": null,
"data": 1
}
}
}
// 分页查询
export function findPage(params) {
let findPageData = {
"code": 200,
"msg": null,
"data": {}
}
let pageNum = 1
let pageSize = 8
if(params !== null) {
// pageNum = params.pageNum
}
if(params !== null) {
// pageSize = params.pageSize
}
let content = this.getContent(pageNum, pageSize)
findPageData.data.pageNum = pageNum
findPageData.data.pageSize = pageSize
findPageData.data.totalSize = 50
findPageData.data.content = content
return {
url: 'user/findPage',
type: 'post',
data: findPageData
}
}
export function getContent(pageNum, pageSize) {
let content = []
for(let i=0; i<pageSize; i++) {
let obj = {}
let index = ((pageNum - 1) * pageSize) + i + 1
obj.id = index
obj.name = 'kitty' + index
obj.password = '9ec9750e709431dad22365cabc5c625482e574c74adaebba7dd02f1129e4ce1d'
obj.salt = 'YzcmCZNvbXocrsz9dm8e'
obj.email = 'kitty' + index +'@qq.com'
obj.mobile = '18688982323'
obj.status = 1
obj.deptId = 12
obj.deptName = '技术部'
obj.status = 1
if(i % 2 === 0) {
obj.deptId = 13
obj.deptName = '市场部'
}
obj.createBy= ''
obj.createTime= '2018-08-14 11:11:11'
obj.createBy= ''
obj.createTime= '2018-09-14 12:12:12'
content.push(obj)
}
return content
}
// 查找用户的菜单权限标识集合
export function findPermissions() {
let permsData = {
"code": 200,
"msg": null,
"data": [
null,
"sys:user:view",
"sys:menu:delete",
"sys:dept:edit",
"sys:dict:edit",
"sys:dict:delete",
"sys:menu:add",
"sys:user:add",
"sys:log:view",
"sys:dept:delete",
"sys:role:edit",
"sys:role:view",
"sys:dict:view",
"sys:user:edit",
"sys:user:delete",
"sys:dept:view",
"sys:dept:add",
"sys:role:delete",
"sys:menu:view",
"sys:menu:edit",
"sys:dict:add",
"sys:role:add"
]
}
return {
url: 'user/findPermissions',
type: 'get',
data: permsData
}
}
\ No newline at end of file
import store from '@/store'
/**
* 判断用户是否拥有操作权限
* 根据传入的权限标识,查看是否存在用户权限标识集合
* @param perms
*/
export function hasPermission (perms) {
let hasPermission = false
let permissions = store.state.user.perms
for(let i=0, len=permissions.length; i<len; i++) {
if(permissions[i] === perms) {
hasPermission = true;
break
}
}
return hasPermission
}
\ No newline at end of file
import Vue from 'vue'
import Router from 'vue-router'
import Cookies from "js-cookie"
import Login from '@/views/Login'
import NotFound from '@/views/Error/404'
import Home from '@/views/Home'
import Intro from '@/views/Intro/Intro'
import Generator from '@/views/Generator/Generator'
import api from '@/http/api'
import store from '@/store'
import { getIFramePath, getIFrameUrl } from '@/utils/iframe'
import Table from '@/views/Myvue/table'
import Cbdj from '@/views/Myvue/Cbdj'
import Flow from '@/views/Myvue/flow'
import shrecord from '@/views/Myvue/shrecord'
import drcbdj from "@/views/Myvue/drcbdj"
import xxbg from "@/views/Myvue/xxbg"
import Record from "@/views/Myvue/rzrecord"
import Newsupdata from "@/views/Myvue/newsupdata"
Vue.use(Router)
const router = new Router({
routes: [
{
path: '/',
name: '首页',
component: Home,
children: [
{
path: '',
name: '系统介绍',
component: Intro,
meta: {
icon: 'fa fa-home fa-lg',
index: 0
}
},
{
path:"/table",
name:"信息审核",
component: Table
},
{
path:"/Cbdj",
name:"参保登记审核",
component: Cbdj
},
{
path:"/flow",
name:"流程管理",
component: Flow
},
{
path:"/record",
name:"审核记录",
component: shrecord
},
{
path:"/Output_1",
name:"参保登记",
component: drcbdj
},
{
path:"/xxbg",
name:"信息变更审核",
component: xxbg
},
{
path:"/rzrecord",
name:"认证记录",
component: Record
},
{
path:"/newsupdata",
name:"新闻发布",
component: Newsupdata
}
]
},
{
path: '/login',
name: '登录',
component: Login
},
{
path: '/404',
name: 'notFound',
component: NotFound
}
]
})
router.beforeEach((to, from, next) => {
// 登录界面登录成功之后,会把用户信息保存在会话
// 存在时间为会话生命周期,页面关闭即失效。
let token = Cookies.get('token')
let userName = sessionStorage.getItem('user')
if (to.path === '/login') {
// 如果是访问登录界面,如果用户会话信息存在,代表已登录过,跳转到主页
if(token) {
next({ path: '/' })
} else {
next()
}
} else {
if (!token) {
// 如果访问非登录界面,且户会话信息不存在,代表未登录,则跳转到登录界面
next({ path: '/login' })
} else {
// 加载动态菜单和路由
addDynamicMenuAndRoutes(userName, to, from)
next()
}
}
})
/**
* 加载动态菜单和路由
*/
function addDynamicMenuAndRoutes(userName, to, from) {
// 处理IFrame嵌套页面
handleIFrameUrl(to.path)
if(store.state.app.menuRouteLoaded) {
console.log('动态菜单和路由已经存在.')
return
}
api.menu.findNavTree({'userName':userName})
.then(res => {
// 添加动态路由
let dynamicRoutes = addDynamicRoutes(res.data)
// 处理静态组件绑定路由
handleStaticComponent(router, dynamicRoutes)
router.addRoutes(router.options.routes)
// 保存加载状态
store.commit('menuRouteLoaded', true)
// 保存菜单树
store.commit('setNavTree', res.data)
}).then(res => {
api.user.findPermissions({'name':userName}).then(res => {
// 保存用户权限标识集合
store.commit('setPerms', res.data)
})
})
.catch(function(res) {
})
}
/**
* 处理路由到本地直接指定页面组件的情况
* 比如'代码生成'是要求直接绑定到'Generator'页面组件
*/
function handleStaticComponent(router, dynamicRoutes) {
for(let j=0;j<dynamicRoutes.length; j++) {
if(dynamicRoutes[j].name == '代码生成') {
dynamicRoutes[j].component = Generator
break
}
}
router.options.routes[0].children = router.options.routes[0].children.concat(dynamicRoutes)
}
/**
* 处理IFrame嵌套页面
*/
function handleIFrameUrl(path) {
// 嵌套页面,保存iframeUrl到store,供IFrame组件读取展示
let url = path
let length = store.state.iframe.iframeUrls.length
for(let i=0; i<length; i++) {
let iframe = store.state.iframe.iframeUrls[i]
if(path != null && path.endsWith(iframe.path)) {
url = iframe.url
store.commit('setIFrameUrl', url)
break
}
}
}
/**
* 添加动态(菜单)路由
* @param {*} menuList 菜单列表
* @param {*} routes 递归创建的动态(菜单)路由
*/
function addDynamicRoutes (menuList = [], routes = []) {
var temp = []
for (var i = 0; i < menuList.length; i++) {
if (menuList[i].children && menuList[i].children.length >= 1) {
temp = temp.concat(menuList[i].children)
} else if (menuList[i].url && /\S/.test(menuList[i].url)) {
menuList[i].url = menuList[i].url.replace(/^\//, '')
// 创建路由配置
var route = {
path: menuList[i].url,
component: null,
name: menuList[i].name,
meta: {
icon: menuList[i].icon,
index: menuList[i].id
}
}
let path = getIFramePath(menuList[i].url)
if (path) {
// 如果是嵌套页面, 通过iframe展示
route['path'] = path
route['component'] = resolve => require([`@/views/IFrame/IFrame`], resolve)
// 存储嵌套页面路由路径和访问URL
let url = getIFrameUrl(menuList[i].url)
let iFrameUrl = {'path':path, 'url':url}
store.commit('addIFrameUrl', iFrameUrl)
} else {
try {
// 根据菜单URL动态加载vue组件,这里要求vue组件须按照url路径存储
// 如url="sys/user",则组件路径应是"@/views/sys/user.vue",否则组件加载不到
let array = menuList[i].url.split('/')
let url = ''
for(let i=0; i<array.length; i++) {
url += array[i].substring(0,1).toUpperCase() + array[i].substring(1) + '/'
}
url = url.substring(0, url.length - 1)
route['component'] = resolve => require([`@/views/${url}`], resolve)
} catch (e) {}
}
routes.push(route)
}
}
if (temp.length >= 1) {
addDynamicRoutes(temp, routes)
} else {
console.log('动态路由加载...')
console.log(routes)
console.log('动态路由加载完成.')
}
return routes
}
export default router
import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);
import app from './modules/app'
import tab from './modules/tab'
import iframe from './modules/iframe'
import user from './modules/user'
import menu from './modules/menu'
const store = new vuex.Store({
modules: {
app: app,
tab: tab,
iframe: iframe,
user: user,
menu: menu
}
})
export default store
\ No newline at end of file
export default {
state: {
appName: "西充居保管理平台", // 应用名称
themeColor: "#14889A", // 主题颜色
oldThemeColor: "#14889A", // 上一次主题颜色
collapse:false, // 导航栏收缩状态
menuRouteLoaded:false // 菜单和路由是否已经加载
},
getters: {
collapse(state){// 对应着上面state
return state.collapse
}
},
mutations: {
onCollapse(state){ // 改变收缩状态
state.collapse = !state.collapse
},
setThemeColor(state, themeColor){ // 改变主题颜色
state.oldThemeColor = state.themeColor
state.themeColor = themeColor
},
menuRouteLoaded(state, menuRouteLoaded){ // 改变菜单和路由的加载状态
state.menuRouteLoaded = menuRouteLoaded;
}
},
actions: {
}
}
\ No newline at end of file
export default {
state: {
iframeUrl: [], // 当前嵌套页面路由路径
iframeUrls: [] // 所有嵌套页面路由路径访问URL
},
getters: {
},
mutations: {
setIFrameUrl(state, iframeUrl){ // 设置iframeUrl
state.iframeUrl = iframeUrl
},
addIFrameUrl(state, iframeUrl){ // iframeUrls
state.iframeUrls.push(iframeUrl)
}
},
actions: {
}
}
\ No newline at end of file
export default {
state: {
navTree: [], // 导航菜单树
},
getters: {
},
mutations: {
setNavTree(state, navTree){ // 设置导航菜单树
state.navTree = navTree;
}
},
actions: {
}
}
\ No newline at end of file
export default {
state: {
// 主入口标签页
mainTabs: [],
// 当前标签页名
mainTabsActiveName: ''
},
mutations: {
updateMainTabs (state, tabs) {
state.mainTabs = tabs
},
updateMainTabsActiveName (state, name) {
state.mainTabsActiveName = name
}
}
}
export default {
state: {
perms: [], // 用户权限标识集合
},
getters: {
},
mutations: {
setPerms(state, perms){ // 用户权限标识集合
state.perms = perms;
}
},
actions: {
}
}
\ No newline at end of file
var listtown=[
{
"chirld":[{"id":559509,"village_id":511325100001,"village_name":"晋城大道一段社区"},{"id":559510,"village_id":511325100002,"village_name":"晋城大道二段社区"},{"id":559511,"village_id":511325100003,"village_name":"刘家嘴社区"},{"id":559512,"village_id":511325100004,"village_name":"鹤鸣路社区"},{"id":559513,"village_id":511325100005,"village_name":"南街社区"},{"id":559514,"village_id":511325100006,"village_name":"西街社区"},{"id":559515,"village_id":511325100007,"village_name":"天宝寺社区"},{"id":559516,"village_id":511325100008,"village_name":"库楼坝社区"},{"id":559517,"village_id":511325100009,"village_name":"建设路社区"},{"id":559518,"village_id":511325100010,"village_name":"府南社区"},{"id":559519,"village_id":511325100011,"village_name":"朱涯庵社区"},{"id":559520,"village_id":511325100012,"village_name":"鹤鸣庵社区"},{"id":559521,"village_id":511325100202,"village_name":"杨家桥村"},{"id":559522,"village_id":511325100203,"village_name":"龙门桥村"},{"id":559523,"village_id":511325100204,"village_name":"马家坟村"},{"id":559524,"village_id":511325100205,"village_name":"黄桷寺村"},{"id":559525,"village_id":511325100206,"village_name":"黄家湾村"},{"id":559526,"village_id":511325100207,"village_name":"滴水岩村"},{"id":559527,"village_id":511325100208,"village_name":"刘家垭村"},{"id":559528,"village_id":511325100210,"village_name":"鹿岩山村"},{"id":559529,"village_id":511325100211,"village_name":"程真宫村"},{"id":559530,"village_id":511325100212,"village_name":"白鹤观村"},{"id":559531,"village_id":511325100213,"village_name":"袁公桥村"},{"id":559532,"village_id":511325100214,"village_name":"燕子山村"},{"id":559533,"village_id":511325100215,"village_name":"观音庵村"},{"id":559534,"village_id":511325100216,"village_name":"大磉磴村"},{"id":559535,"village_id":511325100217,"village_name":"双庙子村"},{"id":559536,"village_id":511325100218,"village_name":"印天寺村"}],
"town_id":"1",
"town_name":"晋城镇"
},
{
"chirld":[{"id":559537,"village_id":511325101001,"village_name":"育英街社区"},{"id":559538,"village_id":511325101201,"village_name":"太平村"},{"id":559539,"village_id":511325101202,"village_name":"王家嘴村"},{"id":559540,"village_id":511325101203,"village_name":"大轮寺村"},{"id":559541,"village_id":511325101204,"village_name":"壁山垭村"},{"id":559542,"village_id":511325101205,"village_name":"谢侯庙村"},{"id":559543,"village_id":511325101206,"village_name":"东乐庙村"},{"id":559544,"village_id":511325101207,"village_name":"转山河村"},{"id":559545,"village_id":511325101208,"village_name":"麻树沟村"},{"id":559546,"village_id":511325101209,"village_name":"楠木庙村"},{"id":559547,"village_id":511325101210,"village_name":"张家坝村"},{"id":559548,"village_id":511325101211,"village_name":"李家嘴村"},{"id":559549,"village_id":511325101212,"village_name":"巴岩店村"},{"id":559550,"village_id":511325101213,"village_name":"草坝场村"},{"id":559551,"village_id":511325101214,"village_name":"麻柳垭村"},{"id":559552,"village_id":511325101215,"village_name":"龙门垭村"},{"id":559553,"village_id":511325101216,"village_name":"乐河寺村"}],
"town_id":"2",
"town_name":"太平镇"
},
{
"chirld":[{"id":559554,"village_id":511325102001,"village_name":"文化街"},{"id":559555,"village_id":511325102201,"village_name":"玉山沟村"},{"id":559556,"village_id":511325102202,"village_name":"福寿宫村"},{"id":559557,"village_id":511325102203,"village_name":"黄家坝村"},{"id":559558,"village_id":511325102204,"village_name":"庞家沟村"},{"id":559559,"village_id":511325102205,"village_name":"公子垭村"},{"id":559560,"village_id":511325102206,"village_name":"官争沟村"},{"id":559561,"village_id":511325102207,"village_name":"沙子岭村"},{"id":559562,"village_id":511325102208,"village_name":"何家堰村"},{"id":559563,"village_id":511325102209,"village_name":"罗家坝村"},{"id":559564,"village_id":511325102210,"village_name":"水旱坝村"},{"id":559565,"village_id":511325102211,"village_name":"青杠嘴村"},{"id":559566,"village_id":511325102212,"village_name":"童家湾村"}],
"town_id":"3",
"town_name":"大全镇"
},
{
"chirld":[{"id":559567,"village_id":511325103201,"village_name":"贾地庙村"},{"id":559568,"village_id":511325103202,"village_name":"马庸寺村"},{"id":559569,"village_id":511325103203,"village_name":"维莫湾村"},{"id":559570,"village_id":511325103204,"village_name":"石老嘴村"},{"id":559571,"village_id":511325103205,"village_name":"敬垭观村"},{"id":559572,"village_id":511325103206,"village_name":"跳礅子村"},{"id":559573,"village_id":511325103207,"village_name":"长龙观村"},{"id":559574,"village_id":511325103208,"village_name":"桥凤坝村"},{"id":559575,"village_id":511325103209,"village_name":"来龙山村"},{"id":559576,"village_id":511325103210,"village_name":"谯家沟村"},{"id":559577,"village_id":511325103211,"village_name":"黄棟坪村"},{"id":559578,"village_id":511325103212,"village_name":"三圣庵村"}],
"town_id":"4",
"town_name":"仙林镇"
},
{
"chirld":[{"id":559579,"village_id":511325104201,"village_name":"古楼村"},{"id":559580,"village_id":511325104202,"village_name":"书房坪村"},{"id":559581,"village_id":511325104203,"village_name":"赵家庙村"},{"id":559582,"village_id":511325104204,"village_name":"宝珠宫村"},{"id":559583,"village_id":511325104205,"village_name":"郑家庙村"},{"id":559584,"village_id":511325104206,"village_name":"刘家坪村"},{"id":559585,"village_id":511325104207,"village_name":"毛关山村"},{"id":559586,"village_id":511325104208,"village_name":"珍珠山村"},{"id":559587,"village_id":511325104209,"village_name":"何氏祠村"},{"id":559588,"village_id":511325104210,"village_name":"蒲家咀村"},{"id":559589,"village_id":511325104211,"village_name":"冯二垭村"},{"id":559590,"village_id":511325104212,"village_name":"杜宇寺村"},{"id":559591,"village_id":511325104213,"village_name":"唇牙山村"},{"id":559592,"village_id":511325104214,"village_name":"鲜家坝村"},{"id":559593,"village_id":511325104215,"village_name":"高家沟村"},{"id":559594,"village_id":511325104216,"village_name":"过江楼村"},{"id":559595,"village_id":511325104217,"village_name":"花庙子村"}],
"town_id":"5",
"town_name":"古楼镇"
},
{
"chirld":[{"id":559596,"village_id":511325105001,"village_name":"神垭宫社区"},{"id":559597,"village_id":511325105002,"village_name":"上河街社区"},{"id":559598,"village_id":511325105003,"village_name":"荣兴大道社区"},{"id":559599,"village_id":511325105201,"village_name":"曹家庙村"},{"id":559600,"village_id":511325105202,"village_name":"西山庙村"},{"id":559601,"village_id":511325105203,"village_name":"喻家垭村"},{"id":559602,"village_id":511325105204,"village_name":"花木山村"},{"id":559603,"village_id":511325105205,"village_name":"胥家垭村"},{"id":559604,"village_id":511325105206,"village_name":"天台院村"},{"id":559605,"village_id":511325105207,"village_name":"玉台场村"},{"id":559606,"village_id":511325105208,"village_name":"吉家店村"},{"id":559607,"village_id":511325105209,"village_name":"书房山村"},{"id":559608,"village_id":511325105210,"village_name":"白马村"},{"id":559609,"village_id":511325105211,"village_name":"殿子山村"},{"id":559610,"village_id":511325105212,"village_name":"王家岩村"},{"id":559611,"village_id":511325105213,"village_name":"新华村"},{"id":559612,"village_id":511325105214,"village_name":"黄岭垭村"},{"id":559613,"village_id":511325105215,"village_name":"阳家庙村"},{"id":559614,"village_id":511325105216,"village_name":"武显垭村"},{"id":559615,"village_id":511325105217,"village_name":"盐水垭村"},{"id":559616,"village_id":511325105218,"village_name":"黑柏山村"},{"id":559617,"village_id":511325105219,"village_name":"贾家店村"}],
"town_id":"6",
"town_name":"义兴镇"
},
{
"chirld":[{"id":559618,"village_id":511325106201,"village_name":"关文村"},{"id":559619,"village_id":511325106202,"village_name":"会元宫村"},{"id":559620,"village_id":511325106203,"village_name":"回龙宫村"},{"id":559621,"village_id":511325106204,"village_name":"燕子垭村"},{"id":559622,"village_id":511325106205,"village_name":"长路垭村"},{"id":559623,"village_id":511325106206,"village_name":"塔水桥村"},{"id":559624,"village_id":511325106207,"village_name":"太极宫村"},{"id":559625,"village_id":511325106208,"village_name":"祈嗣庵村"},{"id":559626,"village_id":511325106209,"village_name":"九联洞村"},{"id":559627,"village_id":511325106210,"village_name":"走马岭村"},{"id":559628,"village_id":511325106211,"village_name":"石坝子村"},{"id":559629,"village_id":511325106212,"village_name":"杜家桥村"},{"id":559630,"village_id":511325106213,"village_name":"金龙寺村"}],
"town_id":"7",
"town_name":"关文镇"
},
{
"chirld":[{"id":559631,"village_id":511325107001,"village_name":"凤阳"},{"id":559632,"village_id":511325107201,"village_name":"四圣庙村"},{"id":559633,"village_id":511325107202,"village_name":"佛归寺村"},{"id":559634,"village_id":511325107203,"village_name":"三元桥村"},{"id":559635,"village_id":511325107204,"village_name":"双龙桥村"},{"id":559636,"village_id":511325107205,"village_name":"北山寺村"},{"id":559637,"village_id":511325107206,"village_name":"历古寺村"},{"id":559638,"village_id":511325107207,"village_name":"五显庙村"},{"id":559639,"village_id":511325107208,"village_name":"清斋宫村"},{"id":559640,"village_id":511325107209,"village_name":"八角楼村"},{"id":559641,"village_id":511325107210,"village_name":"迦释院村"},{"id":559642,"village_id":511325107211,"village_name":"仁和寨村"},{"id":559643,"village_id":511325107212,"village_name":"土桥子村"},{"id":559644,"village_id":511325107213,"village_name":"新书房村"},{"id":559645,"village_id":511325107214,"village_name":"龙宝宫村"},{"id":694815,"village_id":511325107215,"village_name":"凤阳社区"}],
"town_id":"8",
"town_name":"凤鸣镇"
},
{
"chirld":[{"id":559646,"village_id":511325108201,"village_name":"青狮村"},{"id":559647,"village_id":511325108202,"village_name":"大寺垭村"},{"id":559648,"village_id":511325108203,"village_name":"红庙嘴村"},{"id":559649,"village_id":511325108204,"village_name":"大兴寺村"},{"id":559650,"village_id":511325108205,"village_name":"分水岭村"},{"id":559651,"village_id":511325108206,"village_name":"苦竹垭村"},{"id":559652,"village_id":511325108207,"village_name":"观音寺村"},{"id":559653,"village_id":511325108208,"village_name":"中观音村"},{"id":559654,"village_id":511325108209,"village_name":"垭门村"},{"id":559655,"village_id":511325108210,"village_name":"杨柳垭村"},{"id":559656,"village_id":511325108211,"village_name":"大石坎村"},{"id":559657,"village_id":511325108212,"village_name":"拱背桥村"},{"id":559658,"village_id":511325108213,"village_name":"皇庆沟村"},{"id":559659,"village_id":511325108214,"village_name":"观音桥村"},{"id":559660,"village_id":511325108215,"village_name":"程家坝村"},{"id":559661,"village_id":511325108216,"village_name":"杜家坝村"},{"id":559662,"village_id":511325108217,"village_name":"东岳庙村"},{"id":559663,"village_id":511325108218,"village_name":"老木垭村"},{"id":559664,"village_id":511325108219,"village_name":"石宝宫村"}],
"town_id":"9",
"town_name":"青狮镇"
},
{
"chirld":[{"id":559665,"village_id":511325109001,"village_name":"凤凰街"},{"id":559666,"village_id":511325109002,"village_name":"柳溪街"},{"id":559667,"village_id":511325109201,"village_name":"凤凰村"},{"id":559668,"village_id":511325109202,"village_name":"乱石垭村"},{"id":559669,"village_id":511325109203,"village_name":"窦禅寺村"},{"id":559670,"village_id":511325109204,"village_name":"谢家店村"},{"id":559671,"village_id":511325109205,"village_name":"合成寺村"},{"id":559672,"village_id":511325109206,"village_name":"狮子湾村"},{"id":559673,"village_id":511325109207,"village_name":"西禅寺村"},{"id":559674,"village_id":511325109208,"village_name":"云山院村"},{"id":559675,"village_id":511325109209,"village_name":"青龙观村"},{"id":559676,"village_id":511325109210,"village_name":"双柏树村"},{"id":559677,"village_id":511325109211,"village_name":"观音坝村"},{"id":559678,"village_id":511325109212,"village_name":"浅垭子村"},{"id":559679,"village_id":511325109213,"village_name":"黎家寺村"},{"id":559680,"village_id":511325109214,"village_name":"马氏祠村"}],
"town_id":"10",
"town_name":"槐树镇"
},
{
"chirld":[{"id":559681,"village_id":511325110201,"village_name":"尖山子村"},{"id":559682,"village_id":511325110202,"village_name":"河脉桥村"},{"id":559683,"village_id":511325110203,"village_name":"丝公山村"},{"id":559684,"village_id":511325110204,"village_name":"官斗山村"},{"id":559685,"village_id":511325110205,"village_name":"白鹤庵村"},{"id":559686,"village_id":511325110206,"village_name":"响水滩村"},{"id":559687,"village_id":511325110207,"village_name":"佛尔河村"},{"id":559688,"village_id":511325110208,"village_name":"宫子山村"},{"id":559689,"village_id":511325110209,"village_name":"回龙观村"},{"id":559690,"village_id":511325110210,"village_name":"回龙场村"},{"id":559691,"village_id":511325110211,"village_name":"龙井沟村"},{"id":559692,"village_id":511325110212,"village_name":"象岩寺村"},{"id":559693,"village_id":511325110213,"village_name":"凉快垭村"},{"id":559694,"village_id":511325110214,"village_name":"三合寨村"},{"id":559695,"village_id":511325110215,"village_name":"猫尔山村"}],
"town_id":"11",
"town_name":"鸣龙镇"
},
{
"chirld":[{"id":559696,"village_id":511325111001,"village_name":"凤头社区"},{"id":559697,"village_id":511325111002,"village_name":"芋头社区"},{"id":559698,"village_id":511325111003,"village_name":"楼底子社区"},{"id":559699,"village_id":511325111201,"village_name":"蟠龙村"},{"id":559700,"village_id":511325111202,"village_name":"严村沟村"},{"id":559701,"village_id":511325111203,"village_name":"曹家沟村"},{"id":559702,"village_id":511325111204,"village_name":"化泉院村"},{"id":559703,"village_id":511325111205,"village_name":"佛宝观村"},{"id":559704,"village_id":511325111206,"village_name":"麒麟村"},{"id":559705,"village_id":511325111207,"village_name":"龙台院村"},{"id":559706,"village_id":511325111208,"village_name":"乾元宫村"},{"id":559707,"village_id":511325111209,"village_name":"红栋子村"},{"id":559708,"village_id":511325111210,"village_name":"新店子村"},{"id":559709,"village_id":511325111211,"village_name":"龙家沟村"},{"id":559710,"village_id":511325111212,"village_name":"鹤鸣院村"},{"id":559711,"village_id":511325111213,"village_name":"跳蹬河村"},{"id":559712,"village_id":511325111214,"village_name":"圭心寺村"},{"id":559713,"village_id":511325111215,"village_name":"五栋碑村"}],
"town_id":"12",
"town_name":"双凤镇"
},
{
"chirld":[{"id":559714,"village_id":511325112201,"village_name":"关帝庙村"},{"id":559715,"village_id":511325112202,"village_name":"花子岭村"},{"id":559716,"village_id":511325112203,"village_name":"邹家堰村"},{"id":559717,"village_id":511325112204,"village_name":"蟠龙山村"},{"id":559718,"village_id":511325112205,"village_name":"梅垭沟村"},{"id":559719,"village_id":511325112206,"village_name":"秋垭庙村"},{"id":559720,"village_id":511325112207,"village_name":"敬家庙村"},{"id":559721,"village_id":511325112208,"village_name":"石牛庙村"},{"id":559722,"village_id":511325112209,"village_name":"桶门垭村"},{"id":559723,"village_id":511325112210,"village_name":"三溪口村"},{"id":559724,"village_id":511325112211,"village_name":"石梯坎村"},{"id":559725,"village_id":511325112212,"village_name":"梓桐庙村"},{"id":559726,"village_id":511325112213,"village_name":"东龙山村"},{"id":559727,"village_id":511325112214,"village_name":"龙凤溪村"},{"id":559728,"village_id":511325112215,"village_name":"老城子村"},{"id":559729,"village_id":511325112216,"village_name":"佛华山村"},{"id":559730,"village_id":511325112217,"village_name":"公字坝村"},{"id":559731,"village_id":511325112218,"village_name":"范家庙村"},{"id":694817,"village_id":511325112219,"village_name":"公子坎村"}],
"town_id":"13",
"town_name":"高院镇"
},
{
"chirld":[{"id":559732,"village_id":511325113001,"village_name":"大众街社区"},{"id":559733,"village_id":511325113201,"village_name":"白虎坪村"},{"id":559734,"village_id":511325113202,"village_name":"千佛寺村"},{"id":559735,"village_id":511325113203,"village_name":"圣泉山村"},{"id":559736,"village_id":511325113204,"village_name":"百福寺村"},{"id":559737,"village_id":511325113205,"village_name":"任家沟村"},{"id":559738,"village_id":511325113206,"village_name":"莲花台村"},{"id":559739,"village_id":511325113207,"village_name":"仁义桥村"},{"id":559740,"village_id":511325113208,"village_name":"小陵寺村"},{"id":559741,"village_id":511325113209,"village_name":"高楼架村"},{"id":559742,"village_id":511325113210,"village_name":"联合村"},{"id":559743,"village_id":511325113211,"village_name":"石塔岭村"},{"id":559744,"village_id":511325113212,"village_name":"何家沟村"},{"id":559745,"village_id":511325113213,"village_name":"金子山村"},{"id":559746,"village_id":511325113214,"village_name":"玉台山村"},{"id":559747,"village_id":511325113215,"village_name":"彭家寺村"},{"id":559748,"village_id":511325113216,"village_name":"大湾头村"},{"id":559749,"village_id":511325113217,"village_name":"燕子坝村"},{"id":559750,"village_id":511325113218,"village_name":"小燕村"},{"id":559751,"village_id":511325113219,"village_name":"金华山村"},{"id":559752,"village_id":511325113220,"village_name":"檬子垭村"},{"id":559753,"village_id":511325113221,"village_name":"马鞍山村"}],
"town_id":"14",
"town_name":"仁和镇"
},
{
"chirld":[{"id":559754,"village_id":511325114001,"village_name":"中心街社区"},{"id":559755,"village_id":511325114002,"village_name":"万伯堰社区"},{"id":559756,"village_id":511325114003,"village_name":"西南桥社区"},{"id":559757,"village_id":511325114201,"village_name":"金龟寺村"},{"id":559758,"village_id":511325114202,"village_name":"凤凰山村"},{"id":559759,"village_id":511325114203,"village_name":"西三井村"},{"id":559761,"village_id":511325114205,"village_name":"潮音寺村"},{"id":559762,"village_id":511325114206,"village_name":"燕子寺村"},{"id":559763,"village_id":511325114207,"village_name":"三节桥村"},{"id":559764,"village_id":511325114208,"village_name":"多宝观村"},{"id":559765,"village_id":511325114209,"village_name":"三面峰村"},{"id":559766,"village_id":511325114210,"village_name":"田坝子村"},{"id":559767,"village_id":511325114212,"village_name":"马槽沟村"},{"id":559768,"village_id":511325114213,"village_name":"兴隆湾村"},{"id":559769,"village_id":511325114214,"village_name":"黄竹坝村"},{"id":559770,"village_id":511325114215,"village_name":"老林沟村"},{"id":559771,"village_id":511325114216,"village_name":"破头山村"},{"id":694730,"village_id":511325114217,"village_name":"西南社区"},{"id":694731,"village_id":511325114218,"village_name":"鹭鸶沟村"}],
"town_id":"15",
"town_name":"多扶镇"
},
{
"chirld":[{"id":559772,"village_id":511325202001,"village_name":"将军碑社区"},{"id":559773,"village_id":511325202002,"village_name":"大田坝社区"},{"id":559774,"village_id":511325202003,"village_name":"灵芝桥社区"},{"id":559775,"village_id":511325202004,"village_name":"石板河社区"},{"id":559776,"village_id":511325202202,"village_name":"五里店村"},{"id":559777,"village_id":511325202203,"village_name":"蟠龙观村"},{"id":559778,"village_id":511325202204,"village_name":"张家店村"},{"id":559779,"village_id":511325202205,"village_name":"石狮子村"},{"id":559780,"village_id":511325202206,"village_name":"龙洞沟村"},{"id":559781,"village_id":511325202207,"village_name":"白庙子村"},{"id":559782,"village_id":511325202208,"village_name":"杨村沟村"},{"id":559783,"village_id":511325202209,"village_name":"木角庙村"},{"id":559784,"village_id":511325202211,"village_name":"亭子垭村"},{"id":559785,"village_id":511325202212,"village_name":"大石桥村"},{"id":559786,"village_id":511325202213,"village_name":"高石梯村"},{"id":559787,"village_id":511325202214,"village_name":"红豆沟村"},{"id":559788,"village_id":511325202216,"village_name":"锦屏山村"},{"id":559789,"village_id":511325202217,"village_name":"花盐河村"},{"id":559790,"village_id":511325202218,"village_name":"活佛山村"},{"id":559791,"village_id":511325202219,"village_name":"大垭村"},{"id":559792,"village_id":511325202220,"village_name":"柏江村"},{"id":559793,"village_id":511325202221,"village_name":"陈店沟村"},{"id":559794,"village_id":511325202222,"village_name":"桥上罗家村"},{"id":559795,"village_id":511325202223,"village_name":"罗村沟村"}],
"town_id":"16",
"town_name":"常林乡"
},
{
"chirld":[{"id":559796,"village_id":511325203201,"village_name":"马家户村"},{"id":559797,"village_id":511325203202,"village_name":"安宁院村"},{"id":559798,"village_id":511325203203,"village_name":"罗堰坎村"},{"id":559799,"village_id":511325203204,"village_name":"寨子沟村"},{"id":559800,"village_id":511325203205,"village_name":"巴岩寺村"},{"id":559801,"village_id":511325203206,"village_name":"龙归院村"},{"id":559802,"village_id":511325203207,"village_name":"堰家桥村"},{"id":559803,"village_id":511325203208,"village_name":"罗坝沟村"},{"id":559804,"village_id":511325203209,"village_name":"晓阳村"},{"id":559805,"village_id":511325203210,"village_name":"梨树沟村"},{"id":559806,"village_id":511325203211,"village_name":"荷花坪村"},{"id":559807,"village_id":511325203212,"village_name":"凤鸣院村"},{"id":559808,"village_id":511325203213,"village_name":"竹溪井村"},{"id":559809,"village_id":511325203214,"village_name":"莲花穴村"},{"id":559810,"village_id":511325203215,"village_name":"飞凤山村"},{"id":559811,"village_id":511325203216,"village_name":"新建村"},{"id":559812,"village_id":511325203217,"village_name":"杨柏村"},{"id":559813,"village_id":511325203218,"village_name":"白山坡村"},{"id":559814,"village_id":511325203219,"village_name":"大楼村"},{"id":559815,"village_id":511325203220,"village_name":"樊村沟村"},{"id":559816,"village_id":511325203221,"village_name":"瓦场沟村"}],
"town_id":"17",
"town_name":"占山乡"
},
{
"chirld":[{"id":559817,"village_id":511325204201,"village_name":"莲池村"},{"id":559818,"village_id":511325204202,"village_name":"苏家堰村"},{"id":559819,"village_id":511325204203,"village_name":"礁碑寺村"},{"id":559820,"village_id":511325204204,"village_name":"永通桥村"},{"id":559821,"village_id":511325204205,"village_name":"观音堂村"},{"id":559822,"village_id":511325204206,"village_name":"三码桥村"},{"id":559823,"village_id":511325204207,"village_name":"天星桥村"},{"id":559824,"village_id":511325204208,"village_name":"周武宫村"},{"id":559825,"village_id":511325204209,"village_name":"杨榨子村"},{"id":559826,"village_id":511325204210,"village_name":"田家坝村"},{"id":559827,"village_id":511325204211,"village_name":"凤鸣山村"},{"id":559828,"village_id":511325204212,"village_name":"灵宝宫村"},{"id":559829,"village_id":511325204213,"village_name":"范村沟村"}],
"town_id":"18",
"town_name":"莲池乡"
},
{
"chirld":[{"id":559830,"village_id":511325205201,"village_name":"宏桥村"},{"id":559831,"village_id":511325205202,"village_name":"谢家坡村"},{"id":559832,"village_id":511325205203,"village_name":"青龙嘴村"},{"id":559833,"village_id":511325205204,"village_name":"二郎庙村"},{"id":559834,"village_id":511325205205,"village_name":"李店垭村"},{"id":559835,"village_id":511325205206,"village_name":"杨家坝村"},{"id":559836,"village_id":511325205207,"village_name":"板桥子村"},{"id":559837,"village_id":511325205208,"village_name":"观乐山村"},{"id":559838,"village_id":511325205209,"village_name":"观音殿村"},{"id":559839,"village_id":511325205210,"village_name":"金祠寺村"},{"id":559840,"village_id":511325205211,"village_name":"小角沟村"},{"id":559841,"village_id":511325205212,"village_name":"范家堰村"}],
"town_id":"19",
"town_name":"宏桥乡"
},
{
"chirld":[{"id":559842,"village_id":511325207201,"village_name":"大神庙村"},{"id":559843,"village_id":511325207202,"village_name":"靛堂子村"},{"id":559844,"village_id":511325207203,"village_name":"源洪庙村"},{"id":559845,"village_id":511325207204,"village_name":"双桥子村"},{"id":559846,"village_id":511325207205,"village_name":"慈花寺村"},{"id":559847,"village_id":511325207206,"village_name":"黑山垭村"},{"id":559848,"village_id":511325207207,"village_name":"白鹤铺村"},{"id":559849,"village_id":511325207208,"village_name":"庞家庙村"},{"id":559850,"village_id":511325207209,"village_name":"斯家店村"},{"id":559851,"village_id":511325207210,"village_name":"柏林山村"},{"id":559852,"village_id":511325207211,"village_name":"石头垭村"},{"id":559853,"village_id":511325207212,"village_name":"板凳垭村"},{"id":559854,"village_id":511325207213,"village_name":"牛王庙村"}],
"town_id":"20",
"town_name":"金泉乡"
},
{
"chirld":[{"id":559855,"village_id":511325208201,"village_name":"孙家庙村"},{"id":559856,"village_id":511325208202,"village_name":"哨子山村"},{"id":559857,"village_id":511325208203,"village_name":"船嘴庙村"},{"id":559858,"village_id":511325208204,"village_name":"水磨庙村"},{"id":559859,"village_id":511325208205,"village_name":"喜凤山村"},{"id":559860,"village_id":511325208206,"village_name":"青龙院村"},{"id":559861,"village_id":511325208207,"village_name":"茅盖寺村"},{"id":559862,"village_id":511325208208,"village_name":"新场垭村"},{"id":559863,"village_id":511325208209,"village_name":"小垭寺村"},{"id":559864,"village_id":511325208210,"village_name":"红庙子村"},{"id":559865,"village_id":511325208211,"village_name":"方山庙村"},{"id":559866,"village_id":511325208212,"village_name":"黄家庙村"}],
"town_id":"21",
"town_name":"华光乡"
},
{
"chirld":[{"id":559867,"village_id":511325209201,"village_name":"新民村"},{"id":559868,"village_id":511325209202,"village_name":"天宫院村"},{"id":559869,"village_id":511325209203,"village_name":"玉成村"},{"id":559870,"village_id":511325209204,"village_name":"冉氏祠村"},{"id":559871,"village_id":511325209205,"village_name":"骑龙庵村"},{"id":559872,"village_id":511325209206,"village_name":"席家庙村"},{"id":559873,"village_id":511325209207,"village_name":"陈家沟村"},{"id":559874,"village_id":511325209208,"village_name":"帅家庙村"},{"id":559875,"village_id":511325209209,"village_name":"三清庙村"},{"id":559876,"village_id":511325209210,"village_name":"凤凰嘴村"},{"id":559877,"village_id":511325209211,"village_name":"刀尖河村"}],
"town_id":"22",
"town_name":"金源乡"
},
{
"chirld":[{"id":559878,"village_id":511325210201,"village_name":"岱林村"},{"id":559879,"village_id":511325210202,"village_name":"任家坝村"},{"id":559880,"village_id":511325210203,"village_name":"天桥村"},{"id":559881,"village_id":511325210204,"village_name":"石兰寺村"},{"id":559882,"village_id":511325210205,"village_name":"龙泉寺村"},{"id":559883,"village_id":511325210206,"village_name":"黄龙场村"},{"id":559884,"village_id":511325210207,"village_name":"大坝井村"},{"id":559885,"village_id":511325210208,"village_name":"燕子井村"},{"id":559886,"village_id":511325210209,"village_name":"李家沟村"},{"id":694686,"village_id":511325210210,"village_name":"五里店村"},{"id":694687,"village_id":511325210211,"village_name":"亭子垭村"},{"id":694688,"village_id":511325210212,"village_name":"大垭村"},{"id":694689,"village_id":511325210213,"village_name":"大田坝社区"},{"id":694690,"village_id":511325210214,"village_name":"大石桥村"},{"id":694691,"village_id":511325210215,"village_name":"将军碑社区"},{"id":694692,"village_id":511325210216,"village_name":"张家店村"},{"id":694693,"village_id":511325210217,"village_name":"木角庙村"},{"id":694694,"village_id":511325210218,"village_name":"杨村沟村"},{"id":694695,"village_id":511325210219,"village_name":"柏江村"},{"id":694696,"village_id":511325210220,"village_name":"桥上罗家"},{"id":694697,"village_id":511325210221,"village_name":"活佛山村"},{"id":694698,"village_id":511325210222,"village_name":"灵芝桥社区"},{"id":694699,"village_id":511325210223,"village_name":"白庙子村"},{"id":694700,"village_id":511325210224,"village_name":"石板河社区"},{"id":694701,"village_id":511325210225,"village_name":"石狮子村"},{"id":694702,"village_id":511325210226,"village_name":"红豆沟村"},{"id":694703,"village_id":511325210227,"village_name":"罗村沟村"},{"id":694704,"village_id":511325210228,"village_name":"花盐河村"},{"id":694705,"village_id":511325210229,"village_name":"锦屏山村"},{"id":694706,"village_id":511325210230,"village_name":"陈店沟村"},{"id":694707,"village_id":511325210231,"village_name":"高石梯村"},{"id":694708,"village_id":511325210232,"village_name":"龙洞沟村"}],
"town_id":"23",
"town_name":"岱林乡"
},
{
"chirld":[{"id":559887,"village_id":511325211201,"village_name":"马龙滩村"},{"id":559888,"village_id":511325211202,"village_name":"张家庵村"},{"id":559889,"village_id":511325211203,"village_name":"向家沟村"},{"id":559890,"village_id":511325211204,"village_name":"书房垭村"},{"id":559891,"village_id":511325211205,"village_name":"方山坪村"},{"id":559892,"village_id":511325211206,"village_name":"庙子滩村"},{"id":559893,"village_id":511325211207,"village_name":"贾家湾村"},{"id":559894,"village_id":511325211208,"village_name":"母家山村"},{"id":559895,"village_id":511325211209,"village_name":"槐树沟村"},{"id":559896,"village_id":511325211210,"village_name":"文家沟村"},{"id":559897,"village_id":511325211211,"village_name":"回龙庵村"},{"id":559898,"village_id":511325211212,"village_name":"新龙寺村"}],
"town_id":"24",
"town_name":"李桥乡"
},
{
"chirld":[{"id":559899,"village_id":511325212201,"village_name":"圭峰院村"},{"id":559900,"village_id":511325212202,"village_name":"观音岩村"},{"id":559901,"village_id":511325212203,"village_name":"楼子寺村"},{"id":559902,"village_id":511325212204,"village_name":"金铧寺村"},{"id":559903,"village_id":511325212205,"village_name":"双拱桥村"},{"id":559904,"village_id":511325212206,"village_name":"神通庵村"},{"id":559905,"village_id":511325212207,"village_name":"刘家沟村"},{"id":559906,"village_id":511325212208,"village_name":"会仙桥村"},{"id":559907,"village_id":511325212209,"village_name":"桂枝垭村"},{"id":559908,"village_id":511325212210,"village_name":"上坊寺村"},{"id":559909,"village_id":511325212211,"village_name":"明昌宫村"}],
"town_id":"25",
"town_name":"中岭乡"
},
{
"chirld":[{"id":559910,"village_id":511325213201,"village_name":"牌坊湾村"},{"id":559911,"village_id":511325213202,"village_name":"大悲寺村"},{"id":559912,"village_id":511325213203,"village_name":"庞家庵村"},{"id":559913,"village_id":511325213204,"village_name":"斯家庙村"},{"id":559914,"village_id":511325213205,"village_name":"桅杆坝村"},{"id":559915,"village_id":511325213206,"village_name":"石仁宫村"},{"id":559916,"village_id":511325213207,"village_name":"柏林嘴村"},{"id":559917,"village_id":511325213208,"village_name":"敬二垭村"},{"id":559918,"village_id":511325213209,"village_name":"黄家垭村"},{"id":559919,"village_id":511325213210,"village_name":"界牌湾村"}],
"town_id":"26",
"town_name":"西碾乡"
},
{
"chirld":[{"id":559920,"village_id":511325214201,"village_name":"堰塘沟村"},{"id":559921,"village_id":511325214202,"village_name":"洞宾山村"},{"id":559922,"village_id":511325214203,"village_name":"朱华沟村"},{"id":559923,"village_id":511325214204,"village_name":"纪公庙村"},{"id":559924,"village_id":511325214205,"village_name":"歇马桥村"},{"id":559925,"village_id":511325214206,"village_name":"太平寺村"},{"id":559926,"village_id":511325214207,"village_name":"观音庙村"},{"id":559927,"village_id":511325214208,"village_name":"胥家湾村"},{"id":559928,"village_id":511325214209,"village_name":"油井寺村"},{"id":559929,"village_id":511325214210,"village_name":"何家嘴村"},{"id":559930,"village_id":511325214211,"village_name":"龙洞山村"}],
"town_id":"27",
"town_name":"紫岩乡"
},
{
"chirld":[{"id":559931,"village_id":511325215201,"village_name":"双福井村"},{"id":559932,"village_id":511325215202,"village_name":"月儿湾村"},{"id":559933,"village_id":511325215203,"village_name":"楼房湾村"},{"id":559934,"village_id":511325215204,"village_name":"大小湾村"},{"id":559935,"village_id":511325215205,"village_name":"大山垭村"},{"id":559936,"village_id":511325215206,"village_name":"罗树沟村"},{"id":559937,"village_id":511325215207,"village_name":"马川井村"},{"id":559938,"village_id":511325215208,"village_name":"华林寺村"},{"id":559939,"village_id":511325215209,"village_name":"李子垭村"},{"id":559940,"village_id":511325215210,"village_name":"大青沟村"},{"id":559941,"village_id":511325215211,"village_name":"复兴村"}],
"town_id":"28",
"town_name":"复安乡"
},
{
"chirld":[{"id":559942,"village_id":511325216201,"village_name":"桥楼子村"},{"id":559943,"village_id":511325216202,"village_name":"亭子湾村"},{"id":559944,"village_id":511325216203,"village_name":"庞氏祠村"},{"id":559945,"village_id":511325216204,"village_name":"袁塘坝村"},{"id":559946,"village_id":511325216205,"village_name":"净土寺村"},{"id":559947,"village_id":511325216206,"village_name":"毛家桥村"},{"id":559948,"village_id":511325216207,"village_name":"金龟庵村"},{"id":559949,"village_id":511325216208,"village_name":"白象山村"},{"id":559950,"village_id":511325216209,"village_name":"杨家庙村"},{"id":559951,"village_id":511325216210,"village_name":"大玉皇宫村"},{"id":559952,"village_id":511325216211,"village_name":"小玉皇宫村"},{"id":559953,"village_id":511325216212,"village_name":"南北垭村"},{"id":559954,"village_id":511325216213,"village_name":"管家桥村"}],
"town_id":"29",
"town_name":"观凤乡"
},
{
"chirld":[{"id":559955,"village_id":511325217201,"village_name":"蚕华山村"},{"id":559956,"village_id":511325217202,"village_name":"雷公垭村"},{"id":559957,"village_id":511325217203,"village_name":"阳家垭村"},{"id":559958,"village_id":511325217204,"village_name":"元山坪村"},{"id":559959,"village_id":511325217205,"village_name":"石佛寺村"},{"id":559960,"village_id":511325217206,"village_name":"华雀寺村"},{"id":559961,"village_id":511325217207,"village_name":"庙子嘴村"},{"id":559962,"village_id":511325217208,"village_name":"皂桷垭村"},{"id":559963,"village_id":511325217209,"village_name":"南垭庙村"},{"id":559964,"village_id":511325217210,"village_name":"老祠堂村"}],
"town_id":"30",
"town_name":"青龙乡"
},
{
"chirld":[{"id":559965,"village_id":511325218201,"village_name":"羊鹿桥村"},{"id":559966,"village_id":511325218202,"village_name":"双石坪村"},{"id":559967,"village_id":511325218203,"village_name":"香炉桥村"},{"id":559968,"village_id":511325218204,"village_name":"杨家沟村"},{"id":559969,"village_id":511325218205,"village_name":"老家湾村"},{"id":559970,"village_id":511325218206,"village_name":"杜家井村"},{"id":559971,"village_id":511325218207,"village_name":"书垭子村"},{"id":559972,"village_id":511325218208,"village_name":"楼子坪村"},{"id":559973,"village_id":511325218209,"village_name":"谢家灶村"},{"id":559974,"village_id":511325218210,"village_name":"双庙垭村"},{"id":559975,"village_id":511325218211,"village_name":"龙凤山村"},{"id":559976,"village_id":511325218212,"village_name":"飞龙庙村"}],
"town_id":"31",
"town_name":"双洛乡"
},
{
"chirld":[{"id":559977,"village_id":511325219201,"village_name":"吴家坝村"},{"id":559978,"village_id":511325219202,"village_name":"黄桶岭村"},{"id":559979,"village_id":511325219203,"village_name":"陈氏祠村"},{"id":559980,"village_id":511325219204,"village_name":"冯家沟村"},{"id":559981,"village_id":511325219205,"village_name":"花果寺村"},{"id":559982,"village_id":511325219206,"village_name":"冉家庙村"},{"id":559983,"village_id":511325219207,"village_name":"阳家坝村"},{"id":559984,"village_id":511325219208,"village_name":"姚氏祠村"},{"id":559985,"village_id":511325219209,"village_name":"河泗坝村"}],
"town_id":"32",
"town_name":"义和乡"
},
{
"chirld":[{"id":559986,"village_id":511325221201,"village_name":"雨台山村"},{"id":559987,"village_id":511325221202,"village_name":"李家山村"},{"id":559988,"village_id":511325221203,"village_name":"邓家沟村"},{"id":559989,"village_id":511325221204,"village_name":"郭家嘴村"},{"id":559990,"village_id":511325221205,"village_name":"周家嘴村"},{"id":559991,"village_id":511325221206,"village_name":"中和井村"}],
"town_id":"33",
"town_name":"中南乡"
},
{
"chirld":[{"id":559992,"village_id":511325222201,"village_name":"临江村"},{"id":559993,"village_id":511325222202,"village_name":"南陵寺村"},{"id":559994,"village_id":511325222203,"village_name":"书房湾村"},{"id":559995,"village_id":511325222204,"village_name":"冯家桥村"},{"id":559996,"village_id":511325222205,"village_name":"福应宫村"},{"id":559997,"village_id":511325222206,"village_name":"弥勒寺村"},{"id":559998,"village_id":511325222207,"village_name":"白家井村"},{"id":559999,"village_id":511325222208,"village_name":"马龙村"},{"id":560000,"village_id":511325222209,"village_name":"米丹村"}],
"town_id":"34",
"town_name":"双江乡"
},
{
"chirld":[{"id":560001,"village_id":511325223201,"village_name":"太保山村"},{"id":560002,"village_id":511325223202,"village_name":"石框垭村"},{"id":560003,"village_id":511325223203,"village_name":"石门沟村"},{"id":560004,"village_id":511325223204,"village_name":"石桥坝村"},{"id":560005,"village_id":511325223205,"village_name":"蚕丝山村"},{"id":560006,"village_id":511325223206,"village_name":"三角沟村"},{"id":560007,"village_id":511325223207,"village_name":"荣坪村"},{"id":560008,"village_id":511325223208,"village_name":"罐子沟村"},{"id":560009,"village_id":511325223209,"village_name":"土地井村"},{"id":560010,"village_id":511325223210,"village_name":"鹅背山村"},{"id":560011,"village_id":511325223211,"village_name":"罗针地村"},{"id":560012,"village_id":511325223212,"village_name":"蜞蚂山村"},{"id":560013,"village_id":511325223213,"village_name":"花脊岭村"}],
"town_id":"35",
"town_name":"凤和乡"
},
{
"chirld":[{"id":560014,"village_id":511325224201,"village_name":"金龟山村"},{"id":560015,"village_id":511325224202,"village_name":"八角亭村"},{"id":560016,"village_id":511325224203,"village_name":"源水垭村"},{"id":560017,"village_id":511325224204,"village_name":"龙虎山村"},{"id":560018,"village_id":511325224205,"village_name":"东岱村"},{"id":560019,"village_id":511325224206,"village_name":"长明山村"},{"id":560020,"village_id":511325224207,"village_name":"龙角湾村"},{"id":560021,"village_id":511325224208,"village_name":"树金桥村"},{"id":560022,"village_id":511325224209,"village_name":"荣华山村"},{"id":560023,"village_id":511325224210,"village_name":"龙泉山村"}],
"town_id":"36",
"town_name":"东岱乡"
},
{
"chirld":[{"id":560024,"village_id":511325225201,"village_name":"同德村"},{"id":560025,"village_id":511325225202,"village_name":"董仲垭村"},{"id":560026,"village_id":511325225203,"village_name":"万泉村"},{"id":560027,"village_id":511325225204,"village_name":"龙台寺村"},{"id":560028,"village_id":511325225205,"village_name":"小神垭村"},{"id":560029,"village_id":511325225206,"village_name":"梅树湾村"},{"id":560030,"village_id":511325225207,"village_name":"凤头山村"},{"id":560031,"village_id":511325225208,"village_name":"广元湾村"},{"id":560032,"village_id":511325225209,"village_name":"玉清山村"},{"id":560033,"village_id":511325225210,"village_name":"香炉山村"},{"id":560034,"village_id":511325225211,"village_name":"大欠沟村"},{"id":560035,"village_id":511325225212,"village_name":"九头湾村"}],
"town_id":"37",
"town_name":"同德乡"
},
{
"chirld":[{"id":560036,"village_id":511325226201,"village_name":"张家沟村"},{"id":560037,"village_id":511325226202,"village_name":"太阳沟村"},{"id":560038,"village_id":511325226203,"village_name":"昭阁庙村"},{"id":560039,"village_id":511325226204,"village_name":"刘家庙村"},{"id":560040,"village_id":511325226205,"village_name":"佛宫山村"},{"id":560041,"village_id":511325226206,"village_name":"小珠坝村"},{"id":560042,"village_id":511325226207,"village_name":"卧龙山村"},{"id":560043,"village_id":511325226208,"village_name":"山王寨村"},{"id":560044,"village_id":511325226209,"village_name":"烈溪庙村"},{"id":560045,"village_id":511325226210,"village_name":"川祖庙村"},{"id":560046,"village_id":511325226211,"village_name":"杜家坪村"},{"id":560047,"village_id":511325226212,"village_name":"瓦店子村"},{"id":560048,"village_id":511325226213,"village_name":"拱石桥村"},{"id":560049,"village_id":511325226214,"village_name":"应井场村"},{"id":560050,"village_id":511325226215,"village_name":"大水科村"},{"id":560051,"village_id":511325226216,"village_name":"玉皇宫村"}],
"town_id":"38",
"town_name":"祥龙乡"
},
{
"chirld":[{"id":560052,"village_id":511325227201,"village_name":"龙滩子村"},{"id":560053,"village_id":511325227202,"village_name":"庄子上村"},{"id":560054,"village_id":511325227203,"village_name":"葛藤沟村"},{"id":560055,"village_id":511325227204,"village_name":"花园寺村"},{"id":560056,"village_id":511325227205,"village_name":"滩子溪村"},{"id":560057,"village_id":511325227206,"village_name":"石佛山村"},{"id":560058,"village_id":511325227207,"village_name":"黄垭榨村"},{"id":560059,"village_id":511325227208,"village_name":"双凤山村"},{"id":560060,"village_id":511325227209,"village_name":"杨池坝村"},{"id":560061,"village_id":511325227210,"village_name":"文滩桥村"},{"id":560062,"village_id":511325227211,"village_name":"三教庵村"},{"id":560063,"village_id":511325227212,"village_name":"尼姑寺村"},{"id":560064,"village_id":511325227213,"village_name":"建林宫村"},{"id":560065,"village_id":511325227214,"village_name":"白马庙村"},{"id":560066,"village_id":511325227215,"village_name":"郭山垭村"},{"id":560067,"village_id":511325227216,"village_name":"席家观村"},{"id":560068,"village_id":511325227217,"village_name":"观音阁村"},{"id":560069,"village_id":511325227218,"village_name":"枣树林村"},{"id":560070,"village_id":511325227219,"village_name":"灵宫庙村"},{"id":560071,"village_id":511325227220,"village_name":"席家沟村"},{"id":694709,"village_id":511325227221,"village_name":"灵官庙村"}],
"town_id":"39",
"town_name":"车龙乡"
},
{
"chirld":[{"id":560072,"village_id":511325228201,"village_name":"李村沟村"},{"id":560073,"village_id":511325228202,"village_name":"会龙关村"},{"id":560074,"village_id":511325228203,"village_name":"芦家坝村"},{"id":560075,"village_id":511325228204,"village_name":"赵家湾村"},{"id":560076,"village_id":511325228205,"village_name":"罐子坝村"},{"id":560077,"village_id":511325228206,"village_name":"长林坝村"},{"id":560078,"village_id":511325228207,"village_name":"泥巴寺村"},{"id":560079,"village_id":511325228208,"village_name":"雷家沟村"},{"id":560080,"village_id":511325228209,"village_name":"黄家沟村"},{"id":694816,"village_id":511325228210,"village_name":"会龙观村"}],
"town_id":"40",
"town_name":"扶君乡"
},
{
"chirld":[{"id":560081,"village_id":511325229201,"village_name":"东太村"},{"id":560082,"village_id":511325229202,"village_name":"东岗山村"},{"id":560083,"village_id":511325229203,"village_name":"金龙山村"},{"id":560084,"village_id":511325229204,"village_name":"天马山村"},{"id":560085,"village_id":511325229205,"village_name":"长坪沟村"},{"id":560086,"village_id":511325229206,"village_name":"土地垭村"},{"id":560087,"village_id":511325229207,"village_name":"三岔河村"},{"id":560088,"village_id":511325229208,"village_name":"响堂堡村"},{"id":560089,"village_id":511325229209,"village_name":"八宝山村"},{"id":560090,"village_id":511325229210,"village_name":"莲花寺村"},{"id":560091,"village_id":511325229211,"village_name":"鱼池寺村"},{"id":560092,"village_id":511325229212,"village_name":"团岭子村"},{"id":560093,"village_id":511325229213,"village_name":"空柏树村"},{"id":560094,"village_id":511325229214,"village_name":"太清宫村"},{"id":560095,"village_id":511325229215,"village_name":"红花坪村"},{"id":694710,"village_id":511325229216,"village_name":"三教庵村"},{"id":694711,"village_id":511325229217,"village_name":"双凤山村"},{"id":694712,"village_id":511325229218,"village_name":"尼姑寺村"},{"id":694713,"village_id":511325229219,"village_name":"席家沟村"},{"id":694714,"village_id":511325229220,"village_name":"席家观村"},{"id":694715,"village_id":511325229221,"village_name":"庄子上村"},{"id":694716,"village_id":511325229222,"village_name":"建林宫村"},{"id":694717,"village_id":511325229223,"village_name":"文滩桥村"},{"id":694718,"village_id":511325229224,"village_name":"杨池坝村"},{"id":694719,"village_id":511325229225,"village_name":"枣树林村"},{"id":694720,"village_id":511325229226,"village_name":"滩子溪村"},{"id":694721,"village_id":511325229227,"village_name":"灵官庙村"},{"id":694722,"village_id":511325229228,"village_name":"白马庙村"},{"id":694723,"village_id":511325229229,"village_name":"石佛山村"},{"id":694724,"village_id":511325229230,"village_name":"花园寺村"},{"id":694725,"village_id":511325229231,"village_name":"葛藤沟村"},{"id":694726,"village_id":511325229232,"village_name":"观音阁村"},{"id":694727,"village_id":511325229233,"village_name":"郭山垭村"},{"id":694728,"village_id":511325229234,"village_name":"黄垭榨村"},{"id":694729,"village_id":511325229235,"village_name":"龙滩子村"}],
"town_id":"41",
"town_name":"东太乡"
},
{
"chirld":[{"id":560096,"village_id":511325230201,"village_name":"公子坪村"},{"id":560097,"village_id":511325230202,"village_name":"傅家沟村"},{"id":560098,"village_id":511325230203,"village_name":"大毛坪村"},{"id":560099,"village_id":511325230204,"village_name":"小梨沟村"},{"id":560100,"village_id":511325230205,"village_name":"赵山沟村"},{"id":560101,"village_id":511325230206,"village_name":"分水岭村"},{"id":560102,"village_id":511325230207,"village_name":"盐井坝村"},{"id":560103,"village_id":511325230208,"village_name":"广川庙村"},{"id":560104,"village_id":511325230209,"village_name":"南岷山村"},{"id":560105,"village_id":511325230210,"village_name":"清河桥村"},{"id":560106,"village_id":511325230211,"village_name":"石牛山村"}],
"town_id":"42",
"town_name":"永清乡"
},
{
"chirld":[{"id":560107,"village_id":511325231201,"village_name":"桂花村"},{"id":560108,"village_id":511325231202,"village_name":"庙子坝村"},{"id":560109,"village_id":511325231203,"village_name":"金山村"},{"id":560110,"village_id":511325231204,"village_name":"河玉沟村"},{"id":560111,"village_id":511325231205,"village_name":"鼓楼沟村"},{"id":560112,"village_id":511325231206,"village_name":"打船坝村"},{"id":560113,"village_id":511325231207,"village_name":"维摩院村"},{"id":560114,"village_id":511325231208,"village_name":"穿洞沟村"},{"id":560115,"village_id":511325231209,"village_name":"佛子沟村"}],
"town_id":"43",
"town_name":"金山乡"
},
{
"chirld":[{"id":560116,"village_id":511325232001,"village_name":"桃源社区"},{"id":560117,"village_id":511325232201,"village_name":"金鱼桥村"},{"id":560118,"village_id":511325232202,"village_name":"峨童山村"},{"id":560119,"village_id":511325232203,"village_name":"川井坝村"},{"id":560120,"village_id":511325232204,"village_name":"杨山岭村"},{"id":560121,"village_id":511325232205,"village_name":"杜家沟村"},{"id":560122,"village_id":511325232206,"village_name":"文昌宫村"},{"id":560123,"village_id":511325232207,"village_name":"堰坎上村"},{"id":560124,"village_id":511325232208,"village_name":"陈家坪村"},{"id":560125,"village_id":511325232209,"village_name":"文昌岭村"},{"id":560126,"village_id":511325232210,"village_name":"何家岩村"},{"id":560127,"village_id":511325232211,"village_name":"羊角湾村"},{"id":560128,"village_id":511325232212,"village_name":"元山宫村"}],
"town_id":"44",
"town_name":"罐垭乡"
}
]
export {listtown}
\ No newline at end of file
/**
* 时间日期相关操作
*/
/**
* 时间格式化
* 将 2018-09-23T11:54:16.000+0000 格式化成 2018/09/23 11:54:16
* @param datetime 国际化日期格式
*/
export function format (datetime) {
return formatWithSeperator(datetime, "/", ":");
}
/**
* 时间格式化
* 将 2018-09-23T11:54:16.000+0000 格式化成类似 2018/09/23 11:54:16
* 可以指定日期和时间分隔符
* @param datetime 国际化日期格式
*/
export function formatWithSeperator (datetime, dateSeprator, timeSeprator) {
if (datetime != null) {
const dateMat = new Date(datetime);
const year = dateMat.getFullYear();
const month = dateMat.getMonth() + 1;
const day = dateMat.getDate();
const hh = dateMat.getHours();
const mm = dateMat.getMinutes();
const ss = dateMat.getSeconds();
const timeFormat = year + dateSeprator + month + dateSeprator + day + " " + hh + timeSeprator + mm + timeSeprator + ss;
return timeFormat;
}
}
/**
* 全局常量、方法封装模块
* 通过原型挂载到Vue属性
* 通过 this.Global 调用
*/
// 后台管理系统服务器地址
export const baseUrl = 'http://172.16.10.33:9002'
//export const baseUrl2 ="http://172.16.10.33:9002"
export const baseUrl2 = 'http://172.16.10.25:9999'
// 系统数据备份还原服务器地址
//export const backupBaseUrl = 'http://localhost:8002'
//export const baseUrl = 'http://faceauth.weface.com.cn:98'
//export const baseUrl = 'http://172.16.10.163:9002'
export default {
baseUrl,
baseUrl2
}
/**
* 嵌套页面IFrame模块
*/
import { baseUrl } from '@/utils/global'
/**
* 嵌套页面URL地址
* @param {*} url
*/
export function getIFramePath (url) {
let iframeUrl = ''
if(/^iframe:.*/.test(url)) {
iframeUrl = url.replace('iframe:', '')
} else if(/^http[s]?:\/\/.*/.test(url)) {
iframeUrl = url.replace('http://', '')
if(iframeUrl.indexOf(":") != -1) {
iframeUrl = iframeUrl.substring(iframeUrl.lastIndexOf(":") + 1)
}
}
return iframeUrl
}
/**
* 嵌套页面路由路径
* @param {*} url
*/
export function getIFrameUrl (url) {
let iframeUrl = ''
if(/^iframe:.*/.test(url)) {
iframeUrl = baseUrl + url.replace('iframe:', '')
} else if(/^http[s]?:\/\/.*/.test(url)) {
iframeUrl = url
}
return iframeUrl
}
/**
* 邮箱
* @param {*} s
*/
export function isEmail (s) {
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}
/**
* 手机号码
* @param {*} s
*/
export function isMobile (s) {
return /^1[0-9]{10}$/.test(s)
}
/**
* 电话号码
* @param {*} s
*/
export function isPhone (s) {
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}
/**
* URL地址
* @param {*} s
*/
export function isURL (s) {
return /^http[s]?:\/\/.*/.test(s)
}
<template>
<el-button :size="size" :type="type" :icon="icon"
:loading="loading" :disabled="!hasPerms(perms)" @click="handleClick">
{{label}}
</el-button>
</template>
<script>
import { hasPermission } from '@/permission/index.js'
export default {
name: 'KtButton',
props: {
label: { // 按钮显示文本
type: String,
default: 'Button'
},
icon: { // 按钮显示图标
type: String,
default: ''
},
size: { // 按钮尺寸
type: String,
default: 'mini'
},
type: { // 按钮类型
type: String,
default: null
},
loading: { // 按钮加载标识
type: Boolean,
default: false
},
disabled: { // 按钮是否禁用
type: Boolean,
default: false
},
perms: { // 按钮权限标识,外部使用者传入
type: String,
default: null
}
},
data() {
return {
}
},
methods: {
handleClick: function () {
// 按钮操作处理函数
this.$emit('click', {})
},
hasPerms: function (perms) {
// 根据权限标识和外部指示状态进行权限判断
return hasPermission(perms) & !this.disabled
}
},
mounted() {
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div>
<!--表格栏-->
<el-table :data="data.content" :highlight-current-row="highlightCurrentRow" @selection-change="selectionChange"
@current-change="handleCurrentChange" v-loading="loading" :element-loading-text="$t('action.loading')" :border="border" :stripe="stripe"
:show-overflow-tooltip="showOverflowTooltip" :max-height="maxHeight" :height="height" :size="size" :align="align" style="width:100%;" >
<el-table-column type="selection" width="40" v-if="showBatchDelete & showOperation"></el-table-column>
<el-table-column v-for="column in columns" header-align="center" align="center"
:prop="column.prop" :label="column.label" :width="column.width" :min-width="column.minWidth"
:fixed="column.fixed" :key="column.prop" :type="column.type" :formatter="column.formatter"
:sortable="column.sortable==null?true:column.sortable">
</el-table-column>
<el-table-column :label="$t('action.operation')" width="185" fixed="right" v-if="showOperation" header-align="center" align="center">
<template slot-scope="scope">
<kt-button icon="fa fa-edit" :label="$t('action.edit')" :perms="permsEdit" :size="size" @click="handleEdit(scope.$index, scope.row)" />
<kt-button icon="fa fa-trash" :label="$t('action.delete')" :perms="permsDelete" :size="size" type="danger" @click="handleDelete(scope.$index, scope.row)" />
</template>
</el-table-column>
</el-table>
<!--分页栏-->
<div class="toolbar" style="padding:10px;">
<kt-button :label="$t('action.batchDelete')" :perms="permsDelete" :size="size" type="danger" @click="handleBatchDelete()"
:disabled="this.selections.length===0" style="float:left;" v-if="showBatchDelete & showOperation"/>
<el-pagination layout="total, prev, pager, next, jumper" @current-change="refreshPageRequest"
:current-page="pageRequest.pageNum" :page-size="pageRequest.pageSize" :total="data.totalSize" style="float:right;">
</el-pagination>
</div>
</div>
</template>
<script>
import KtButton from "@/views/Core/KtButton"
export default {
name: 'KtTable',
components:{
KtButton
},
props: {
columns: Array, // 表格列配置
data: Object, // 表格分页数据
permsEdit: String, // 编辑权限标识
permsDelete: String, // 删除权限标识
size: { // 尺寸样式
type: String,
default: 'mini'
},
align: { // 文本对齐方式
type: String,
default: 'left'
},
maxHeight: { // 表格最大高度
type: Number,
default: 420
},
height: { // 表格最大高度
type: Number,
default: 250
},
showOperation: { // 是否显示操作组件
type: Boolean,
default: true
},
border: { // 是否显示边框
type: Boolean,
default: false
},
stripe: { // 是否显示斑马线
type: Boolean,
default: true
},
highlightCurrentRow: { // // 是否高亮当前行
type: Boolean,
default: true
},
showOverflowTooltip: { // 是否单行显示
type: Boolean,
default: true
},
showBatchDelete: { // 是否显示操作组件
type: Boolean,
default: true
}
},
data() {
return {
// 分页信息
pageRequest: {
pageNum: 1,
pageSize: 10
},
loading: false, // 加载标识
selections: [] // 列表选中列
}
},
methods: {
// 分页查询
findPage: function () {
this.loading = true
let callback = res => {
this.loading = false
}
this.$emit('findPage', {pageRequest:this.pageRequest, callback:callback})
},
// 选择切换
selectionChange: function (selections) {
this.selections = selections
this.$emit('selectionChange', {selections:selections})
},
// 选择切换
handleCurrentChange: function (val) {
this.$emit('handleCurrentChange', {val:val})
},
// 换页刷新
refreshPageRequest: function (pageNum) {
this.pageRequest.pageNum = pageNum
this.findPage()
},
// 编辑
handleEdit: function (index, row) {
this.$emit('handleEdit', {index:index, row:row})
},
// 删除
handleDelete: function (index, row) {
this.delete(row.id)
},
// 批量删除
handleBatchDelete: function () {
let ids = this.selections.map(item => item.id).toString()
this.delete(ids)
},
// 删除操作
delete: function (ids) {
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
let params = []
let idArray = (ids+'').split(',')
for(var i=0; i<idArray.length; i++) {
params.push({'id':idArray[i]})
}
this.loading = true
let callback = res => {
if(res.code == 200) {
this.$message({message: '删除成功', type: 'success'})
this.findPage()
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.loading = false
}
this.$emit('handleDelete', {params:params, callback:callback})
}).catch(() => {
})
}
},
mounted() {
this.refreshPageRequest(1)
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="message-panel">
<div class="message-header">您有 {{data.length}} 条消息</div>
<div class="message-content">
<div v-for="item in data" :key="item.key" class="message-item">
<div class="message-avatar">
<img class="avatar" :src="require('@/assets/user.png')" />
</div>
<span class="sender">
{{ item.sender }}
</span>
<span class="time">
<li class="fa fa-clock-o"></li> {{ item.time }}
</span>
<div class="message-cotent">
{{ item.content }}
</div>
</div>
</div>
<div class="message-footer">查看所有消息</div>
</div>
</template>
<script>
export default {
name: 'MessagePanel',
props: {
data: {
type: Array,
default: () => [
{
key: "1",
avatar:'@/assets/user.png',
content:'你添加了角色',
sender:'诸葛亮',
time:'5分钟前'
},
{
key: "2",
avatar:'@/assets/user.png',
content:'你新增了账户',
sender:'',
time:'2小时前'
},
{
key: "3",
avatar:'@/assets/user.png',
content:'',
sender:'',
time:''
},
{
key: "4",
avatar:'@/assets/user.png',
content:'',
sender:'',
time:'昨天'
},
{
key: "5",
avatar:'@/assets/user.png',
content:'',
sender:'',
time:'前天'
}]
}
},
data() {
return {
}
},
methods: {
handleClick: function () {
// 按钮操作处理函数
this.$emit('click', {})
}
},
mounted() {
}
}
</script>
<style scoped>
.message-panel {
font-size: 15px;
width: 300px;
margin: -12px;
}
.message-header {
padding-left: 10px;
font-size: 14px;
padding-top: 6px;
padding-bottom: 6px;
}
.message-content {
font-size: 15px;
}
.message-item {
border-color: rgba(180, 190, 190, 0.8);
border-top-width: 1px;
border-top-style: solid;
padding-top: 10px;
padding-bottom: 10px;
}
.message-item:hover {
cursor: pointer;
background: #b1a6a61e;
}
.message-avatar {
padding-left: 10px;
}
.avatar {
margin-right: 10px;
}
.sender {
font-size: 16px;
font-weight:bold;
}
.time {
font-size: 12px;
float: right;
padding-right: 10px;
}
.message-footer {
font-size: 14px;
text-align: center;
padding-top: 10px;
padding-bottom: 10px;
border-color: rgba(180, 190, 190, 0.8);
border-top-width: 1px;
border-top-style: solid;
}
.message-footer:hover {
cursor: pointer;
background: #b1a6a61e;
}
.avatar {
width: 40px;
height: 40px;
border-radius: 90px;
float: left;
}
</style>
\ No newline at end of file
<template>
<div class="notice-panel">
<div class="header">您有 {{data.length}} 条通知</div>
<div class="notice-content">
<div v-for="item in data" :key="item.key" class="notice-item">
<span class="notice-icon">
<li :class="item.icon"></li>
</span>
<span class="notice-cotent">
{{ item.content }}
</span>
</div>
</div>
<div class="notice-footer">查看所有通知</div>
</div>
</template>
<script>
export default {
name: 'NoticePanel',
props: {
data: {
type: Array,
default: () => [
{
key: "1",
icon:'fa fa-envelope-o',
content:'你添加了角色'
},
{
key: "2",
icon:'fa fa-music',
content:'你新增了账户'
},
{
key: "3",
icon:'fa fa-edit',
content:''
},
{
key: "4",
icon:'fa fa-edit',
content:''
}]
}
},
data() {
return {
}
},
methods: {
handleClick: function () {
// 按钮操作处理函数
this.$emit('click', {})
}
},
mounted() {
}
}
</script>
<style scoped>
.notice-panel {
font-size: 15px;
width: 250px;
margin: -12px;
}
.header {
padding-left: 10px;
font-size: 14px;
padding-top: 6px;
padding-bottom: 6px;
}
.notice-content {
font-size: 15px;
}
.notice-item {
border-color: rgba(180, 190, 190, 0.8);
border-top-width: 1px;
border-top-style: solid;
padding-top: 10px;
padding-bottom: 10px;
}
.notice-item:hover {
cursor: pointer;
background: #b1a6a61e;
}
.notice-icon {
padding-left: 10px;
padding-right: 5px;
}
.notice-footer {
font-size: 14px;
text-align: center;
padding-top: 10px;
padding-bottom: 10px;
border-color: rgba(180, 190, 190, 0.8);
border-top-width: 1px;
border-top-style: solid;
}
.notice-footer:hover {
cursor: pointer;
background: #b1a6a61e
}
</style>
\ No newline at end of file
<template>
<div class="personal-panel">
<div class="personal-desc" :style="{'background':this.$store.state.app.themeColor}">
<div class="avatar-container">
<img class="avatar" :src="require('@/assets/user.png')" />
</div>
<div class="name-role">
<span class="sender">{{ user.name }} - {{ user.role }}</span>
</div>
<div class="registe-info">
<span class="registe-info">
<li class="fa fa-clock-o"></li>
{{ user.registeInfo }}
</span>
</div>
</div>
<div class="main-operation">
<span class="main-operation-item">
<el-button size="small" icon="fa fa-male"> 个人中心</el-button>
</span>
<span class="main-operation-item">
<el-button size="small" icon="fa fa-key"> 修改密码</el-button>
</span>
</div>
<div class="personal-footer" @click="logout">
<li class="fa fa-sign-out"></li>
{{$t("common.logout")}}
</div>
<!--备份还原界面-->
<!-- <backup ref="backupDialog" @afterRestore="afterRestore"></backup> -->
</div>
</template>
<script>
import Cookies from "js-cookie"
//import Backup from "@/views/Backup/Backup"
export default {
name: 'PersonalPanel',
components:{
},
props: {
user: {
type: Object,
default: {
name: "admin",
avatar: "@/assets/user.png",
role: "超级管理员",
registeInfo: "注册时间:2018-12-25 "
}
}
},
data() {
return {
}
},
methods: {
// 退出登录
logout: function() {
this.$confirm("确认退出吗?", "提示", {
type: "warning"
})
.then(() => {
sessionStorage.removeItem("user")
this.deleteCookie("token")
this.$router.push("/login")
this.$api.login.logout().then((res) => {
}).catch(function(res) {
})
})
.catch(() => {})
},
// 删除cookie
deleteCookie: function(name) {
Cookies.remove(name)
},
// 打开备份还原界面
showBackupDialog: function() {
this.$refs.backupDialog.setBackupVisible(true)
},
// 成功还原之后,重新登录
afterRestore: function() {
this.$refs.backupDialog.setBackupVisible(false)
sessionStorage.removeItem("user")
this.deleteCookie("token")
this.$router.push("/login")
this.$api.login.logout().then((res) => {
}).catch(function(res) {
})
}
},
mounted() {
}
}
</script>
<style scoped>
.personal-panel {
font-size: 14px;
width: 280px;
text-align: center;
border-color: rgba(180, 190, 190, 0.2);
border-width: 1px;
border-style: solid;
background: rgba(182, 172, 172, 0.1);
margin: -14px;
}
.personal-desc {
padding: 15px;
color: #fff;
}
.avatar {
width: 80px;
height: 80px;
border-radius: 90px;
}
.name-role {
font-size: 16px;
padding: 5px;
}
.personal-relation {
font-size: 16px;
padding: 12px;
margin-right: 1px;
background: rgba(200, 209, 204, 0.3);
}
.relation-item {
padding: 12px;
}
.relation-item:hover {
cursor: pointer;
color: rgb(19, 138, 156);
}
.main-operation {
padding: 8px;
margin-right: 1px;
/* background: rgba(175, 182, 179, 0.3); */
border-color: rgba(201, 206, 206, 0.2);
border-top-width: 1px;
border-top-style: solid;
}
.main-operation-item {
margin: 15px;
}
.other-operation {
padding: 15px;
margin-right: 1px;
text-align: left;
border-color: rgba(180, 190, 190, 0.2);
border-top-width: 1px;
border-top-style: solid;
}
.other-operation-item {
padding: 12px;
}
.other-operation-item:hover {
cursor: pointer;
background: #9e94941e;
color: rgb(19, 138, 156);
}
.personal-footer {
margin-right: 1px;
font-size: 14px;
text-align: center;
padding-top: 10px;
padding-bottom: 10px;
border-color: rgba(180, 190, 190, 0.2);
border-top-width: 1px;
border-top-style: solid;
}
.personal-footer:hover {
cursor: pointer;
color: rgb(19, 138, 156);
background: #b1a6a61e;
}
</style>
\ No newline at end of file
<template>
<!--表格显示列界面-->
<el-dialog title="表格显示列" width="40%" :visible.sync="dialogVisible" :close-on-click-modal="false">
<el-table ref="fitlerTable" :data="columns" height="330px" tooltip-effect="dark" header-align="left" align="left"
:size="size" style="width: 100%" @selection-change="selectionChange">
<el-table-column type="selection" width="40">
</el-table-column>
<el-table-column label="属性">
<template slot-scope="scope">{{ scope.row.prop }}</template>
</el-table-column>
<el-table-column label="列名">
<template slot-scope="scope">
<el-input :size="size" v-model="scope.row.label"></el-input>
</template>
</el-table-column>
<el-table-column label="最小宽度">
<template slot-scope="scope">
<el-input :size="size" v-model="scope.row.minWidth"></el-input>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button :size="size" @click.native="dialogVisible = false">{{$t('action.cancel')}}</el-button>
<el-button :size="size" type="primary" @click.native="handleFilterColumns">{{$t('action.comfirm')}}</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'TableColumnFilterDialog',
components:{
},
props: {
columns: {
type: Array,
default: []
},
size: {
type: String,
default: 'mini'
}
},
data() {
return {
selections: [], // 列表选中列
dialogVisible: false
}
},
methods: {
// 选择切换
selectionChange: function (selections) {
this.selections = selections
},
// 设置可见性
setDialogVisible: function (visible) {
this.dialogVisible = visible
},
// 处理表格列过滤显示
    handleFilterColumns: function () {
let filterColumns = []
for(let i = 0; i <this.columns.length; i++) {
let column = this.columns[i]
if(this.hasColumn(column)) {
filterColumns.push(column)
}
}
this.$emit('handleFilterColumns', {filterColumns: JSON.parse(JSON.stringify(filterColumns))})
    },
hasColumn: function (column) {
for(let i = 0; i <this.selections.length; i++) {
let col = this.selections[i]
if(column.prop == col.prop) {
return true
}
}
return false
}
},
mounted() {
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<el-table-column :prop="prop" v-bind="$attrs">
<template slot-scope="scope">
<span @click.prevent="toggleHandle(scope.$index, scope.row)" :style="childStyles(scope.row)">
<i :class="iconClasses(scope.row)" :style="iconStyles(scope.row)"></i>
{{ scope.row[prop] }}
</span>
</template>
</el-table-column>
</template>
<script>
import isArray from 'lodash/isArray'
export default {
name: 'table-tree-column',
props: {
prop: {
type: String
},
treeKey: {
type: String,
default: 'id'
},
parentKey: {
type: String,
default: 'parentId'
},
levelKey: {
type: String,
default: 'level'
},
childKey: {
type: String,
default: 'children'
}
},
methods: {
childStyles (row) {
return { 'padding-left': (row[this.levelKey] * 25) + 'px' }
},
iconClasses (row) {
return [ !row._expanded ? 'el-icon-caret-right' : 'el-icon-caret-bottom' ]
},
iconStyles (row) {
return { 'visibility': this.hasChild(row) ? 'visible' : 'hidden' }
},
hasChild (row) {
return (isArray(row[this.childKey]) && row[this.childKey].length >= 1) || false
},
// 切换处理
toggleHandle (index, row) {
if (this.hasChild(row)) {
var data = this.$parent.store.states.data.slice(0)
data[index]._expanded = !data[index]._expanded
if (data[index]._expanded) {
data = data.splice(0, index + 1).concat(row[this.childKey]).concat(data)
} else {
data = this.removeChildNode(data, row[this.treeKey])
}
this.$parent.store.commit('setData', data)
this.$nextTick(() => {
this.$parent.doLayout()
})
}
},
// 移除子节点
removeChildNode (data, parentId) {
var parentIds = isArray(parentId) ? parentId : [parentId]
if (parentId.length <= 0) {
return data
}
var ids = []
for (var i = 0; i < data.length; i++) {
if (parentIds.indexOf(data[i][this.parentKey]) !== -1 && parentIds.indexOf(data[i][this.treeKey]) === -1) {
ids.push(data.splice(i, 1)[0][this.treeKey])
i--
}
}
return this.removeChildNode(data, ids)
}
}
}
</script>
<template>
<div class="site-wrapper site-page--not-found">
<div class="site-content__wrapper">
<div class="site-content">
<h2 class="not-found-title">404</h2>
<p class="not-found-desc">抱歉!您访问的页面<em>失联</em>啦 ...</p>
<el-button @click="$router.go(-1)">返回上一页</el-button>
<el-button type="primary" class="not-found-btn-gohome" @click="$router.push('/')">进入首页</el-button>
</div>
</div>
</div>
</template>
<script>
export default {
}
</script>
<style lang="scss">
.site-wrapper.site-page--not-found {
position: absolute;
top: 60px;
right: 0;
bottom: 0;
left: 0;
overflow: hidden;
.site-content__wrapper {
padding: 0;
margin: 0;
background-color: #fff;
}
.site-content {
position: fixed;
top: 15%;
left: 50%;
z-index: 2;
padding: 30px;
text-align: center;
transform: translate(-50%, 0);
}
.not-found-title {
margin: 20px 0 15px;
font-size: 8em;
font-weight: 500;
color: rgb(55, 71, 79);
}
.not-found-desc {
margin: 0 0 30px;
font-size: 26px;
text-transform: uppercase;
color: rgb(118, 131, 143);
> em {
font-style: normal;
color: #ee8145;
}
}
.not-found-btn-gohome {
margin-left: 30px;
}
}
</style>
<template>
<div class="page">
<h2 class="header">Kitty Generator</h2>
<div class="intro">
<p>Kitty代码生成器,可以通过界面配置快速生成包括 model,dao,service,controller 以及页面的相关代码。</p>
<p>项目地址:<a href="https://gitee.com/liuge1988/kitty-generator">https://gitee.com/liuge1988/kitty-generator</a>
, 项目使用指南如下图,具体环境搭建参考安装教程。
</p>
</div>
<div>
<div class="title">使用指南</div>
<div class="step">
<span>1.配置数据源</span>
</div>
<div class="image">
<img class="usageImage" src="https://images.gitee.com/uploads/images/2018/1114/180145_1b395632_645970.png" />
</div>
</div>
<div>
<div class="step">
<span>2.选择数据库表</span>
</div>
<div class="image">
<img class="usageImage" src="https://images.gitee.com/uploads/images/2018/1114/180317_ca91ceb2_645970.png" />
</div>
</div>
<div>
<div class="step">
<span>3.编辑信息,生成代码</span>
</div>
<div class="image">
<img class="usageImage" src="https://images.gitee.com/uploads/images/2018/1114/180642_2c4f986d_645970.png" />
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Intro'
}
</script>
<style>
.header {
font-size: 28px;
text-align: left;
padding: 10px;
}
.intro {
font-size: 18px;
text-align: left;
padding-left: 10px;
}
.title {
font-size: 30px;
text-align: left;
padding: 10px;
}
.step {
font-size: 18px;
text-align: left;
padding: 10px;
}
.image {
text-align: left;
padding: 10px;
}
.usageImage {
width: 1000px;
height: 500px;
}
</style>
<template>
<div class="headbar" :style="{'background':themeColor}"
:class="$store.state.app.collapse?'position-collapse-left':'position-left'">
<!-- 导航收缩 -->
<span class="hamburg">
<el-menu class="el-menu-demo" :background-color="themeColor" text-color="#fff" :active-text-color="themeColor" mode="horizontal">
<el-menu-item index="1" @click="onCollapse"><hamburger :isActive="collapse"></hamburger></el-menu-item>
</el-menu>
</span>
<!-- 导航菜单 -->
<span class="navbar">
<!-- <el-menu :default-active="activeIndex" class="el-menu-demo"
:background-color="themeColor" text-color="#fff" active-text-color="#ffd04b" mode="horizontal" @select="selectNavBar()">
<el-menu-item index="1" @click="$router.push('/')"><i class="fa fa-home fa-lg"></i> </el-menu-item>
<el-menu-item index="2" @click="openWindow('')">{{$t("common.projectRepo")}}</el-menu-item>
<el-menu-item index="3" @click="openWindow('')">{{$t("common.doc")}}</el-menu-item>
<el-menu-item index="4" @click="openWindow('')">{{$t("common.blog")}}</el-menu-item>
</el-menu> -->
</span>
<!-- 工具栏 -->
<span class="toolbar">
<el-menu class="el-menu-demo" :background-color="themeColor" :text-color="themeColor" :active-text-color="themeColor" mode="horizontal">
<el-menu-item index="1" style="margin-right:200px">
<!-- 主题切换 -->
<iframe name="weather_inc" src="http://i.tianqi.com/index.php?c=code&id=1&color=%23FFFFFF&icon=1&wind=1&num=2&site=12" width="330" height="35" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</el-menu-item>
<el-menu-item index="3" v-popover:popover-message>
<theme-picker class="theme-picker" :default="themeColor" @onThemeChange="onThemeChange"></theme-picker>
</el-menu-item>
<el-menu-item index="4" v-popover:popover-notice>
<!-- 系统通知 -->
<el-badge :value="4" :max="99" class="badge" type="success">
<li style="color:#fff;" class="fa fa-bell-o fa-lg"></li>
</el-badge>
<el-popover ref="popover-notice" placement="bottom-end" trigger="click">
<notice-panel></notice-panel>
</el-popover>
</el-menu-item>
<el-menu-item index="5" v-popover:popover-personal>
<!-- 用户信息 -->
<span class="user-info"><img :src="user.avatar" />{{user.name}}</span>
<el-popover ref="popover-personal" placement="bottom-end" trigger="click" :visible-arrow="false">
<personal-panel :user="user"></personal-panel>
</el-popover>
</el-menu-item>
</el-menu>
</span>
</div>
</template>
<script>
import { mapState } from 'vuex'
import mock from "@/mock/index"
import Hamburger from "@/components/Hamburger"
import ThemePicker from "@/components/ThemePicker"
import LangSelector from "@/components/LangSelector"
import Action from "@/components/Toolbar/Action"
import NoticePanel from "@/views/Core/NoticePanel"
import MessagePanel from "@/views/Core/MessagePanel"
import PersonalPanel from "@/views/Core/PersonalPanel"
export default {
components:{
Hamburger,
ThemePicker,
LangSelector,
Action,
NoticePanel,
MessagePanel,
PersonalPanel
},
data() {
return {
user: {
name: "",
avatar: "",
role: "",
registeInfo: " "
},
activeIndex: '1',
langVisible: false
}
},
methods: {
openWindow(url) {
window.open(url)
},
selectNavBar(key, keyPath) {
console.log(key, keyPath)
},
// 折叠导航栏
onCollapse: function() {
this.$store.commit('onCollapse')
},
// 切换主题
onThemeChange: function(themeColor) {
this.$store.commit('setThemeColor', themeColor)
},
// 语言切换
changeLanguage(lang) {
lang === '' ? 'zh_cn' : lang
this.$i18n.locale = lang
this.langVisible = false
}
},
mounted() {
this.sysName = ""
var user = sessionStorage.getItem("user")
if (user) {
this.user.name = user
this.user.avatar = require("@/assets/user.png")
}
},
computed:{
...mapState({
themeColor: state=>state.app.themeColor,
collapse: state=>state.app.collapse
})
}
}
</script>
<style scoped lang="scss">
.headbar {
position: fixed;
top: 0;
right: 0;
z-index: 1030;
height: 60px;
line-height: 60px;
border-color: rgba(180, 190, 190, 0.8);
border-left-width: 1px;
border-left-style: solid;
}
.hamburg, .navbar {
float: left;
}
.toolbar {
float: right;
}
.lang-item {
font-size: 16px;
padding-left: 8px;
padding-top: 8px;
padding-bottom: 8px;
cursor: pointer;
}
.lang-item:hover {
font-size: 18px;
background: #b0d6ce4d;
}
.user-info {
font-size: 20px;
color: #fff;
cursor: pointer;
img {
width: 40px;
height: 40px;
border-radius: 10px;
margin: 10px 0px 10px 10px;
float: right;
}
}
.badge {
line-height: 18px;
}
.position-left {
left: 200px;
}
.position-collapse-left {
left: 65px;
}
</style>
\ No newline at end of file
<template>
<div class="container">
<!-- 导航菜单栏 -->
<nav-bar></nav-bar>
<!-- 头部区域 -->
<head-bar></head-bar>
<!-- 主内容区域 -->
<main-content></main-content>
</div>
</template>
<script>
import HeadBar from "./HeadBar/HeadBar"
import NavBar from "./NavBar/NavBar"
import MainContent from "./MainContent/MainContent"
export default {
components:{
HeadBar,
NavBar,
MainContent
}
};
</script>
<style scoped lang="scss">
.container {
position:absolute;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
// background: rgba(224, 234, 235, 0.1);
}
</style>
\ No newline at end of file
<template>
<div class="iframe-container">
<iframe :src="src" scrolling="auto" frameborder="0" class="frame" :onload="onloaded()">
</iframe>
</div>
</template>
<script>
export default {
data() {
return {
src: "",
loading: null
};
},
methods: {
// 获取路径
resetSrc: function(url) {
this.src = url
this.load()
},
load: function() {
this.loading = this.$loading({
lock: true,
text: "loading...",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.5)",
// fullscreen: false,
target: document.querySelector("#main-container ")
})
},
onloaded: function() {
if(this.loading) {
this.loading.close()
}
}
},
mounted() {
this.resetSrc(this.$store.state.iframe.iframeUrl);
},
watch: {
$route: {
handler: function(val, oldVal) {
// 如果是跳转到嵌套页面,切换iframe的url
this.resetSrc(this.$store.state.iframe.iframeUrl);
}
}
}
};
</script>
<style lang="scss">
.iframe-container {
position: absolute;
top: 0px;
left: 0px;
right: 0px;;
bottom: 0px;
.frame {
width: 100%;
height: 100%;
}
}
</style>
<template>
<div class="page-container" style="width:99%;margin-top:150px;">
<el-carousel :interval="3000" type="card" height="450px" class="carousel">
<el-carousel-item class="carousel-item-intro">
</el-carousel-item>
<el-carousel-item class="carousel-item-func">
</el-carousel-item>
<el-carousel-item class="carousel-item-env">
</el-carousel-item>
</el-carousel>
</div>
</template>
<script>
export default {
components:{
},
methods :{
}
}
</script>
<style>
.carousel {
padding-left: 20px;
padding-right: 20px;
margin-right: 20px;
}
.carousel h2 {
color: #475669;
font-size: 22px;
opacity: 1.75;
line-height: 100px;
margin: 0;
}
.carousel ul {
color: #475669;
font-size: 15px;
opacity: 1.75;
line-height: 40px;
margin: 0;
}
.carousel-item-intro h2 {
color: #ffffff;
font-size: 22px;
opacity: 1.75;
line-height: 80px;
margin: 0;
}
.carousel-item-intro ul {
color: #ffffff;
font-size: 15px;
opacity: 1.75;
line-height: 65px;
padding: 5px;
margin: 0;
}
.carousel-item-func h2 {
color: #3f393b;
font-size: 22px;
opacity: 1.75;
line-height: 50px;
margin: 0;
}
.carousel-item-func ul {
color: #3f393b;
font-size: 15px;
opacity: 1.75;
line-height: 30px;
text-align: left;
padding-left: 90px;
margin: 0;
}
.carousel-item-env h2 {
color: #475669;
font-size: 22px;
opacity: 1.75;
line-height: 50px;
margin: 0;
}
.carousel-item-env ul {
color: #475669;
font-size: 15px;
opacity: 1.75;
line-height: 35px;
text-align: left;
padding-left: 110px;
margin: 0;
}
.carousel-item-intro {
background-color: #19aaaf73;
-webkit-border-radius: 25px;
border-radius: 25px;
-moz-border-radius: 15px;
background-clip: padding-box;
box-shadow: 0 0 25px #a3b3b965;
}
.carousel-item-func {
background-color: #19aaaf73;
-webkit-border-radius: 25px;
border-radius: 25px;
-moz-border-radius: 15px;
background-clip: padding-box;
box-shadow: 0 0 25px #a3b3b965;
}
.carousel-item-env {
background-color: #19aaaf73;
-webkit-border-radius: 25px;
border-radius: 25px;
-moz-border-radius: 15px;
background-clip: padding-box;
box-shadow: 0 0 25px #a3b3b965;
}
.carousel-item-intro {
background-color: #b95e5e;
}
.carousel-item-func {
background-color: #52c578;
}
.carousel-item-env {
background-color: #41a7b9;
}
</style>
\ No newline at end of file
<template>
<div class="wrap">
<el-form :model="loginForm" :rules="fieldRules" ref="loginForm" label-position="left" label-width="0px" class="demo-ruleForm login-container">
<span class="tool-bar">
<!-- 主题切换 -->
<!-- 语言切换 -->
<!-- <lang-selector class="lang-selector"></lang-selector> -->
</span>
<h1 class="title" style="padding-left:22px;" ><img src="../assets/selogo.png" alt=""> 中国社会保险</h1>
<p style="color:black;text-align:right;font-size:40px">西充居保全网经办平台</p>
<input type="text" v-model="loginForm.account" class="acc" auto-complete="off" placeholder="账号">
<input type="password" v-model="loginForm.password" class="pass" auto-complete="off" placeholder="密码">
<el-form-item style="margin-top:20px">
<el-col :span="12">
<el-form-item prop="captcha">
<el-input @keyup.enter.native="login" type="test" v-model="loginForm.captcha" auto-complete="off" placeholder="验证码, 单击图片刷新"
style="width: 100%;">
</el-input>
</el-form-item>
</el-col>
<el-col class="line" :span="1">&nbsp;</el-col>
<el-col :span="11">
<el-form-item>
<img style="width: 100%;" class="pointer" :src="loginForm.src" @click="refreshCaptcha">
</el-form-item>
</el-col>
</el-form-item>
<!-- <el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox> -->
<el-form-item style="width:100%;">
<el-button class="cz" type="primary" style="width:48%;" @click.native.prevent="reset">重 置</el-button>
<el-button class="dl" type="primary" style="width:48%;" @click.native.prevent="login" :loading="loading">登 录</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { mapState } from 'vuex'
import Cookies from "js-cookie"
import ThemePicker from "@/components/ThemePicker"
import LangSelector from "@/components/LangSelector"
export default {
name: 'Login',
components:{
ThemePicker,
LangSelector
},
data() {
return {
loading: false,
loginForm: {
account: '',
password:'',
captcha:'',
src: ''
},
fieldRules: {
account: [
{ required: true, message: '请输入账号', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' }
]
// ,
// captcha: [
// { required: true, message: '请输入验证码', trigger: 'blur' }
// ]
},
checked: true
}
},
methods: {
login() {
this.loading = true
let userInfo = {account:this.loginForm.account, password:this.loginForm.password, captcha:this.loginForm.captcha}
this.$api.login.login(userInfo).then((res) => {
if(res.code != 200) {
this.$message({
message: res.message,
type: 'error'
})
} else {
Cookies.set('token', res.data.token) // 放置token到Cookie
sessionStorage.setItem('user', userInfo.account) // 保存用户到本地会话
this.$store.commit('menuRouteLoaded', false) // 要求重新加载导航菜单
this.$router.push('/') // 登录成功,跳转到主页
}
this.loading = false
}).catch((res) => {
this.$message({
message: res.message,
type: 'error'
})
});
},
refreshCaptcha: function(){
this.loginForm.src = this.global.baseUrl + "/captcha.jpg?t=" + new Date().getTime();
},
reset() {
this.$refs.loginForm.resetFields()
},
// 切换主题
onThemeChange: function(themeColor) {
this.$store.commit('setThemeColor', themeColor)
}
},
mounted() {
this.refreshCaptcha()
},
computed:{
...mapState({
themeColor: state=>state.app.themeColor
})
}
}
</script>
<style lang="scss" scoped>
.wrap{
background: url(../assets/bg.jpg) no-repeat;
background-size: auto 100%;
height: 100%;
}
.iggf{
height: 100%;
position: relative;
}
.igg{
height: 100%
}
h1{
text-align: right;
font-size: 30px
}
.login-container {
z-index: 200;
left: 60vw;
position: absolute;
top:100px;
-webkit-border-radius: 5px;
border-radius: 5px;
-moz-border-radius: 5px;
background-clip: padding-box;
width: 450px;
padding: 35px 35px 15px 35px;
background: #fff;
// border: 1px solid #eaeaea;
// box-shadow: 0 0 25px #cac6c6;
.title {
height: 60px;
display: flex;
justify-content: flex-end;
align-items: center;
color: #505458;
}
.title img{
height: 100%;
margin-right: 40px;
}
.remember {
margin: 0px 0px 35px 0px;
}
}
input{
outline: none;
background: none
}
.acc{
width: 450px;
border: none ;
height: 50px;
border-bottom: 1px solid lightgray
}
.pass{
width: 450px;
border: none;
height: 50px;
border-bottom: 1px solid lightgray
}
.cz,.dl{
border-radius: 20px;
border: none;
height: 45px;
background: lightgray;
}
</style>
\ No newline at end of file
<template>
<div id="main-container" class="main-container" :class="$store.state.app.collapse?'position-collapse-left':'position-left'">
<!-- 标签页 -->
<div class="tab-container">
<el-tabs class="tabs" :class="$store.state.app.collapse?'position-collapse-left':'position-left'"
v-model="mainTabsActiveName" :closable="true" type="card"
@tab-click="selectedTabHandle" @tab-remove="removeTabHandle">
<el-dropdown class="tabs-tools" :show-timeout="0" trigger="hover">
<div style="font-size:20px;width:50px;"><i class="el-icon-arrow-down"></i></div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="tabsCloseCurrentHandle">关闭当前标签</el-dropdown-item>
<el-dropdown-item @click.native="tabsCloseOtherHandle">关闭其它标签</el-dropdown-item>
<el-dropdown-item @click.native="tabsCloseAllHandle">关闭全部标签</el-dropdown-item>
<el-dropdown-item @click.native="tabsRefreshCurrentHandle">刷新当前标签</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-tab-pane v-for="item in mainTabs"
:key="item.name" :label="item.title" :name="item.name">
<span slot="label"><i :class="item.icon"></i> {{item.title}} </span>
</el-tab-pane>
</el-tabs>
</div>
<!-- 主内容区域 -->
<div class="main-content">
<keep-alive>
<transition name="fade" mode="out-in">
<router-view></router-view>
</transition>
</keep-alive>
</div>
</div>
</template>
<script>
export default {
data () {
return {
}
},
computed: {
mainTabs: {
get () { return this.$store.state.tab.mainTabs },
set (val) { this.$store.commit('updateMainTabs', val) }
},
mainTabsActiveName: {
get () { return this.$store.state.tab.mainTabsActiveName },
set (val) { this.$store.commit('updateMainTabsActiveName', val) }
}
},
methods: {
// tabs, 选中tab
selectedTabHandle (tab) {
tab = this.mainTabs.filter(item => item.name === tab.name)
if (tab.length >= 1) {
this.$router.push({ name: tab[0].name })
}
},
// tabs, 删除tab
removeTabHandle (tabName) {
this.mainTabs = this.mainTabs.filter(item => item.name !== tabName)
if (this.mainTabs.length >= 1) {
// 当前选中tab被删除
if (tabName === this.mainTabsActiveName) {
this.$router.push({ name: this.mainTabs[this.mainTabs.length - 1].name }, () => {
this.mainTabsActiveName = this.$route.name
})
}
} else {
this.$router.push("/")
}
},
// tabs, 关闭当前
tabsCloseCurrentHandle () {
this.removeTabHandle(this.mainTabsActiveName)
},
// tabs, 关闭其它
tabsCloseOtherHandle () {
this.mainTabs = this.mainTabs.filter(item => item.name === this.mainTabsActiveName)
},
// tabs, 关闭全部
tabsCloseAllHandle () {
this.mainTabs = []
this.$router.push("/")
},
// tabs, 刷新当前
tabsRefreshCurrentHandle () {
var tempTabName = this.mainTabsActiveName
this.removeTabHandle(tempTabName)
this.$nextTick(() => {
this.$router.push({ name: tempTabName })
})
}
}
}
</script>
<style scoped lang="scss">
.main-container {
padding: 0 5px 5px;
position: absolute;
top: 60px;
left: 1px;
right: 1px;
bottom: 0px;
// background: rgba(56, 5, 114, 0.5);
.tabs {
position: fixed;
top: 60px;
right: 50px;
padding-left: 0px;
padding-right: 2px;
z-index: 1020;
height: 40px;
line-height: 40px;
font-size: 14px;
background: rgb(255, 253, 255);
border-color: rgba(200, 206, 206, 0.5);
// border-left-width: 1px;
// border-left-style: solid;
border-bottom-width: 1px;
border-bottom-style: solid;
}
.tabs-tools {
position: fixed;
top: 60px;
right: 0;
z-index: 1020;
height: 40px;
// padding: 0 10px;
font-size: 14px;
line-height: 40px;
cursor: pointer;
border-color: rgba(200, 206, 206, 0.5);
border-left-width: 1px;
border-left-style: solid;
border-bottom-width: 1px;
border-bottom-style: solid;
background: rgba(255, 255, 255, 1);
}
.tabs-tools:hover {
background: rgba(200, 206, 206, 1);
}
.main-content {
position: absolute;
top: 45px;
left: 5px;
right: 5px;
bottom: 5px;
padding: 5px;
// background: rgba(209, 212, 212, 0.5);
}
}
.position-left {
left: 200px;
}
.position-collapse-left {
left: 65px;
}
</style>
\ No newline at end of file
<template>
<div>
<h2 class="imtil">基础信息</h2>
<div class="wrap">
<div class="masks"></div>
<el-form ref="form" :model="form" class="formr" label-width="120px">
<el-form-item label="姓名">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-input v-model="form.sex"></el-input>
</el-form-item>
<el-form-item label="民族">
<el-input v-model="form.nation"></el-input>
</el-form-item>
<el-form-item label="缴费标准">
<el-input v-model="form.pay_type"></el-input>
</el-form-item>
<el-form-item label="特殊参保群体">
<el-input v-model="form.special_type"></el-input>
</el-form-item>
<el-form-item label="其他养老保险">
<el-input v-model="form.other_social"></el-input>
</el-form-item>
</el-form>
<el-form ref="form" :model="form" class="forml" label-width="90px">
<el-form-item label="身份证号">
<el-input v-model="form.identity_number"></el-input>
</el-form-item>
<el-form-item label="户籍性质">
<el-input v-model="form.nation_type"></el-input>
</el-form-item>
<el-form-item label="户籍所在地">
<el-input v-model="form.townName"></el-input>
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="form.telphoneValue"></el-input>
</el-form-item>
<el-form-item label="开户银行">
<el-input v-model="form.pay_bank"></el-input>
</el-form-item>
<el-form-item label="缴费账号">
<el-input v-model="form.pay_account"></el-input>
</el-form-item>
</el-form>
</div>
<h2 class="imtil">附件</h2>
<div class="imgcon">
<div class="demo-image__placeholder">
<div class="block">
<p class="demonstration">银行卡</p>
<el-image :src="urls[0]"></el-image>
</div>
<div class="block">
<p class="demonstration">签名</p>
<el-image :src="urls[1]">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
</div>
</el-image>
</div>
<div class="block">
<p class="demonstration">身份证正面</p>
<el-image :src="urls[2]">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
</div>
</el-image>
</div>
<div class="block">
<p class="demonstration">身份证反面</p>
<el-image :src="urls[3]">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
</div>
</el-image>
</div>
</div>
</div>
<div style="text-align:center;margin-bottom:40px" v-show="show">
<el-button type="success" @click="pass"><i class="el-icon-circle-check"></i> 审核通过</el-button>
<el-button type="danger" @click="nopass"><i class="el-icon-circle-close"></i> 审核不通过</el-button>
</div>
</div>
</template>
<script>
import CryptoJS from 'crypto-js'
import { Loading } from 'element-ui';
export default {
data(){
return{
form:{
"name":"",
"bank_photo":"",
"groupName":"",
"identity_number":"",
"nation":'',
"nation_type":"",
"other_social":"",
"pay_account":"",
"pay_bank":"",
"pay_type":'',
"recordType":'',
"sex":'',
"sign_photo":"",
"social_time":"",
"special_type":"",
"telphoneValue":"",
"townName":"",
"villageName":"",
"wuserId":''
},
urls: [
],
show:""
}
},
methods:{
//审核通过
pass(){
this.$confirm('是否审核通过?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
Loading.service();
var data={
recordId: sessionStorage.getItem("recordId"),
examineState:1,
remark:"",
userId:1
};
this.$api.getlist.shenhe(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.$message({
type: 'success',
message: res.data
});
this.$router.push({
name:"信息审核"
})
}else{
this.$message({
type: 'info',
message: res.message
});
}
}).catch((res) => {
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
this.$message({
type: 'info',
message: '操作失败!'+res
});
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
},
//审核不通过
nopass(){
var that=this
this.$prompt('请输入原因', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
if(value){
Loading.service();
var data={
recordId: sessionStorage.getItem("recordId"),
examineState:2,
remark:value,
userId:1
};
this.$api.getlist.shenhe(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.$message({
type: 'success',
message: res.data
});
// this.$router.push({
// name:"Xxsh"
// })
}else{
this.$message({
type: 'info',
message: res.message
});
}
}).catch((res) => {
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
this.$message({
type: 'info',
message: '操作失败!'+res
});
});
}else{
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
that.$message({
type: 'info',
message: '请输入原因'
});
}
}).catch(() => {
this.$message({
type: 'info',
message: '取消输入'
});
});
},
decrypt(word){
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse("KkweFace95271124");
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
},
created(){
this.show=this.$route.params.show
if(this.$route.params.info){
sessionStorage.setItem("info",this.$route.params.info)
}
if(this.$route.params.info){
var a=JSON.stringify(this.$route.params)
sessionStorage.setItem("items",a)
}
this.form =JSON.parse(sessionStorage.getItem("info"))
this.form.name=this.decrypt(this.form.name)
this.form.identity_number=this.decrypt(this.form.identity_number)
this.form.telphoneValue=this.decrypt(this.form.telphoneValue)
var obj=JSON.parse(sessionStorage.getItem("items"))
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.bankpic)
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.signpic)
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.idcardbackpic)
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.idcardfrontpic)
console.log(this.form)
this.form.sex= this.form.sex==1?"男":"女"
}
}
</script>
<style>
.wrap{
overflow: hidden;
position: relative;
}
.masks{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 200
}
.forml{
float: left;
width: 45%
}
.formr{
float: left;
width: 40%;
margin-left: 20px
}
.imgcon{
margin: 0 auto;
box-shadow: 0 0 15px lightgray;
overflow: hidden;
margin-bottom: 40px
}
.block{
float: left;
height: 100%;
margin-right: 20px
}
.block img{
width: auto;
height: 300px;
}
.imtil{
padding:0 0 20px 0
}
</style>
<template>
<div class=WordSection1 style='layout-grid:15.6pt;padding-bottom:40px'>
<p class=MsoNormal align=center ><b style='mso-bidi-font-weight:
normal'><span style='font-size:20.0pt;font-family:方正小标宋简体'>西充县城乡居民社会养老保险参保登记表<span
lang=EN-US><span></span></span></span></b></p>
<p style='text-align:center;margin:20px'>
档案号:<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;登记日期:<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
</p>
<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
style='margin:0 auto; border-collapse:collapse;border:none;mso-border-alt:solid windowtext 1.5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-border-insideh:.75pt solid windowtext;
mso-border-insidev:.75pt solid windowtext;margin-bottom:20px'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:1.0cm'>
<td width=112 style='width:83.8pt;border-top:solid 1.5pt;border-left:solid 1.5pt;
border-bottom:solid 1.0pt;border-right:solid 1.0pt;border-color:windowtext;border-style:
solid;mso-border-top-alt:1.5pt;mso-border-left-alt:1.5pt;mso-border-bottom-alt:
.75pt;mso-border-right-alt:.75pt;mso-border-color-alt:windowtext;mso-border-style-alt:
solid;padding:0cm 5.4pt 0cm 5.4pt;height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='font-size:11.0pt'><span style='mso-spacerun:yes'>&nbsp; </span></span><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=141 style='width:105.85pt;border-top:solid windowtext 1.5pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-left-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-top-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>{{decrypt(list.name)}}</span></span></p>
</td>
<td width=94 colspan=2 style='width:70.8pt;border-top:solid windowtext 1.5pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-left-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-top-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span style='font-size:11.0pt'>
</span><span style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'></span><span
lang=EN-US style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=76 style='width:56.8pt;border-top:solid windowtext 1.5pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-left-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-top-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span>{{list.sex==1?"男":"女"}}</span></span></p>
</td>
<td width=76 style='width:2.0cm;border-top:solid windowtext 1.5pt;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-left-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-top-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span style='font-size:11.0pt'>
</span><span style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'></span><span
lang=EN-US style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=142 style='width:106.35pt;border-top:solid windowtext 1.5pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-left-alt:solid windowtext .75pt;mso-border-top-alt:1.5pt;
mso-border-left-alt:.75pt;mso-border-bottom-alt:.75pt;mso-border-right-alt:
1.5pt;mso-border-color-alt:windowtext;mso-border-style-alt:solid;padding:
0cm 5.4pt 0cm 5.4pt;height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span>{{list.nation}}</span></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;height:1.0cm'>
<td width=112 style='width:83.8pt;border-top:none;border-left:solid windowtext 1.5pt;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-left-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center;text-indent:11.0pt;
mso-char-indent-count:1.0'><span style='font-size:11.0pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>身份证号码</span><span
lang=EN-US style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=311 colspan=4 style='width:233.45pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span>&nbsp;</span>{{decrypt(list.identity_number)}}</span></p>
</td>
<td width=76 style='width:2.0cm;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>联系电话</span><span lang=EN-US
style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=142 style='width:106.35pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span>{{decryptByDES(list.telphoneValue)}}</span></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:2;height:1.0cm'>
<td width=112 style='width:83.8pt;border-top:none;border-left:solid windowtext 1.5pt;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-left-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span style='mso-spacerun:yes'>&nbsp;</span></span><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>户籍所在地</span><span lang=EN-US
style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=311 colspan=4 style='width:233.45pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span>{{list.townName+list.villageName+list.groupName}}</span></span></p>
</td>
<td width=76 style='width:2.0cm;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>户籍性质</span><span lang=EN-US
style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=142 style='width:106.35pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
style='font-size:11.0pt'><span>{{list.nation_type}}</span></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:3;height:42.55pt'>
<td width=112 style='width:83.8pt;border-top:none;border-left:solid windowtext 1.5pt;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-left-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:42.55pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>缴费标准</span><span lang=EN-US
style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=529 colspan=6 style='width:396.5pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:42.55pt'>
{{list.pay_type}}
</td>
</tr>
<tr style='mso-yfti-irow:4;height:1.0cm'>
<td width=112 style='width:83.8pt;border-top:none;border-left:solid windowtext 1.5pt;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-left-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:1.0cm'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>特殊参保群体</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=529 colspan=6 style='width:396.5pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:1.0cm'>
{{list.special_type}}
</td>
</tr>
<tr style='mso-yfti-irow:5;height:25.75pt'>
<td width=112 rowspan=3 style='width:83.8pt;border-top:none;border-left:solid windowtext 1.5pt;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-left-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:25.75pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>参加其他养老保险情况</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=141 style='width:105.85pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
25.75pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>职工社会保险</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=94 colspan=2 style='width:70.8pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
25.75pt'>
{{list.other_social=="职工社会养老保险"?"是":"否"}}
</td>
<td width=76 style='width:56.8pt;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>起止时间</span><b><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></b></p>
</td>
<td width=217 colspan=2 style='width:163.05pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:25.75pt'>
<p class=MsoNormal align=center style='text-align:center'><b><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span>{{list.other_social=="职工社会养老保险"?list.social_time:''}}</span></span></b></p>
</td>
</tr>
<tr style='mso-yfti-irow:6;height:27.2pt'>
<td width=141 style='width:105.85pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
27.2pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>老农保、中农保</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=94 colspan=2 style='width:70.8pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
27.2pt'>
{{list.other_social=="老农保、中农保"?"是":"否"}}
</td>
<td width=76 style='width:56.8pt;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>起止时间</span><b><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></b></p>
</td>
<td width=217 colspan=2 style='width:163.05pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:27.2pt'>
<p class=MsoNormal align=center style='text-align:center'><b><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span>{{list.other_social=="老农保、中农保"?list.social_time:''}}</span></span></b></p>
</td>
</tr>
<tr style='mso-yfti-irow:7;height:27.2pt'>
<td width=141 style='width:105.85pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
27.2pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>其他社会保险</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=94 colspan=2 style='width:70.8pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
27.2pt'>
{{list.other_social=="其他社会保险"?"是":"否"}}
</td>
<td width=76 style='width:56.8pt;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>起止时间</span><b><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></b></p>
</td>
<td width=217 colspan=2 style='width:163.05pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:27.2pt'>
<p class=MsoNormal align=center style='text-align:center'><b><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span>{{list.other_social=="其他社会保险"?list.social_time:''}}</span></span></b></p>
</td>
</tr>
<tr style='mso-yfti-irow:8;height:27.2pt'>
<td width=112 style='width:83.8pt;border-top:none;border-left:solid windowtext 1.5pt;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;
mso-border-left-alt:solid windowtext 1.5pt;padding:0cm 5.4pt 0cm 5.4pt;
height:27.2pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:11.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>参保缴费账号</span><span lang=EN-US
style='font-size:11.0pt'><span></span></span></p>
</td>
<td width=311 colspan=4 style='width:233.45pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;padding:0cm 5.4pt 0cm 5.4pt;height:
27.2pt'>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>{{list.pay_account}}</span></span></p>
</td>
<td width=76 style='width:2.0cm;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal align=center style='text-align:center'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>开户银行</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=142 style='width:106.35pt;border-top:none;border-left:none;
border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:27.2pt'>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>{{list.pay_bank}}</span></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:9;height:45.8pt'>
<td width=640 colspan=7 style='width:480.3pt;border-right:solid windowtext 1.5pt;border-left:solid windowtext 1.5pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal style='text-indent:21.0pt;mso-char-indent-count:2.0'><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>城乡居民养老保险个人缴费实行<b>税务征收</b>,参保人每年及时按选定的保费标准办税缴费。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:10;height:141.2pt'>
<td width=329 colspan=3 style='width:246.4pt;border-left:solid windowtext 1.5pt;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1pt'>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>参保人声明:</span><b><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span></span></span></b></p>
<p class=MsoNormal align=left style='text-align:left;text-indent:21.1pt;
mso-char-indent-count:2.0'><b><span style='mso-bidi-font-size:10.5pt;
font-family:宋体'>本人未参加企业职工和机关事业单位养老保险,自愿参加城乡居民养老保险,以上填写内容正确无误。<span
lang=EN-US><span></span></span></span></b></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>参保人:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'></span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=312 colspan=4 style='width:233.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
mso-border-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext 1.5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:141.2pt'>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>村(社区)委会申报意见:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span></span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp; </span><span></span></span></p>
<p class=MsoNormal align=center style='text-align:center'><b><span
style='font-size:16.0pt;font-family:方正楷体简体'>情况属实,同意上报。<span lang=EN-US><span></span></span></span></b></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>协办员:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'></span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>日(签章)</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:11;mso-yfti-lastrow:yes;height:141.85pt'>
<td width=329 colspan=3 style='width:246.4pt;border-left:solid windowtext 1.5pt;border-right:solid windowtext 1pt;border-bottom:solid windowtext 1.5pt'>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>乡(镇)人力资源和社会保障服务中心意见:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span></span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal align=center style='text-align:center'><b><span
style='font-size:16.0pt;font-family:方正楷体简体'>符合参保条件,同意上报。<span lang=EN-US><span></span></span></span></b></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>经办人:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'></span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span style='mso-spacerun:yes'>&nbsp;&nbsp;
</span></span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>日(签章)</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
<td width=312 colspan=4 style='width:233.9pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.5pt;border-right:solid windowtext 1.5pt;
mso-border-top-alt:solid windowtext .75pt;mso-border-left-alt:solid windowtext .75pt;
padding:0cm 5.4pt 0cm 5.4pt;height:141.85pt'>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>县城乡居民社会养老保险局复核意见:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span></span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span>&nbsp;</span></span></p>
<p class=MsoNormal><span lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;</span><span></span></span></p>
<p class=MsoNormal><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>复核人:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'></span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'></span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span
style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span></span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>日(签章)</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'><span></span></span></p>
</td>
</tr>
<tr height=0>
<td width=112 style='border:none'></td>
<td width=141 style='border:none'></td>
<td width=76 style='border:none'></td>
<td width=19 style='border:none'></td>
<td width=76 style='border:none'></td>
<td width=76 style='border:none'></td>
<td width=142 style='border:none'></td>
</tr>
</table>
</div>
</template>
<script>
import CryptoJS from 'crypto-js'
import { Loading } from 'element-ui';
export default {
data(){
return{
list:{
"name":"",
"bank_photo":"",
"groupName":"",
"identity_number":"",
"nation":'',
"nation_type":"",
"other_social":"",
"pay_account":"",
"pay_bank":"",
"pay_type":'',
"recordType":'',
"sex":'',
"sign_photo":"",
"social_time":"",
"special_type":"",
"telphoneValue":"",
"townName":"",
"villageName":"",
"wuserId":''
}
}
},
methods:{
//审核通过
pass(){
this.$confirm('是否审核通过?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
Loading.service();
var data={
recordId: sessionStorage.getItem("recordId"),
examineState:1,
remark:"",
userId:1
};
this.$api.getlist.shenhe(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.$message({
type: 'success',
message: data.data
});
// this.$router.push({
// name:"Xxsh"
// })
}else{
this.$message({
type: 'info',
message: res.message
});
}
}).catch((res) => {
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
this.$message({
type: 'info',
message: '操作失败!'+res
});
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
},
//审核不通过
nopass(){
var that=this
this.$prompt('请输入原因', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
if(value){
Loading.service();
var data={
recordId: sessionStorage.getItem("recordId"),
examineState:2,
remark:value,
userId:1
};
this.$api.getlist.shenhe(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.$message({
type: 'success',
message: res.data
});
// this.$router.push({
// name:"Xxsh"
// })
}else{
this.$message({
type: 'info',
message: res.message
});
}
}).catch((res) => {
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
this.$message({
type: 'info',
message: '操作失败!'+res
});
});
}else{
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
that.$message({
type: 'info',
message: '请输入原因'
});
}
}).catch(() => {
this.$message({
type: 'info',
message: '取消输入'
});
});
},
decrypt(word){
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse("KkweFace95271124");
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
},
created(){
if(this.$route.params.info){
sessionStorage.setItem("info",this.$route.params.info)
}
this.list =JSON.parse(sessionStorage.getItem("info"))
console.log(this.list)
}
}
</script>
<template>
<div>
<el-table
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="documentsType"
label="证件类型"
width="180">
</el-table-column>
<el-table-column
prop="documentsNumber"
label="证件号码"
width="180">
</el-table-column>
<el-table-column
prop="idcard"
label="身份证号码">
</el-table-column>
<el-table-column
prop="nation"
label="民族">
</el-table-column>
<el-table-column
prop="name"
label="姓名">
</el-table-column>
<el-table-column
prop="grade"
label="缴费档次">
</el-table-column>
<el-table-column
prop="registerType"
label="户口性质">
</el-table-column>
<el-table-column
prop="villageId"
label="村社区id">
</el-table-column>
<el-table-column
prop="adress"
label="户籍所在地">
</el-table-column>
<el-table-column
prop="bank"
label="银行id">
</el-table-column>
<el-table-column
prop="bankAccount"
label="银行账号">
</el-table-column>
<el-table-column
prop="remark"
label="备注">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
@click="toPdf(scope.$index, scope.row)">导出pdf</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pone"
:page-size='10'
layout="total, prev, pager, next, jumper"
:total="totals"
:current-page.sync="Page"
@current-change="current_change"
>
</el-pagination>
<el-button type="success" @click="toexcel" style="margin:50px">导出</el-button>
</div>
</template>
<script>
import { Loading } from 'element-ui';
import {baseUrl} from "../../utils/global"
import axios from "axios"
import Cookies from "js-cookie";
export default {
data(){
return {
Page:1,
totals:0,
tableData: []
}
},
methods:{
toPdf(s,d){
console.log(d)
axios.get(baseUrl+'/exportPdf/insuredRegistration?id='+d.eventId,{
headers: {
"token":Cookies.get("token")
},
responseType:'blob' //告诉服务器我们需要的响应格式
})
.then(res => {
let a = document.createElement("a");
let blob = new Blob([res.data],{
type:'application/vnd.ms-excel' //将会被放入到blob中的数组内容的MIME类型
});
a.href = URL.createObjectURL(blob); //生成一个url
a.download = "西充县城乡居民社会养老保险参保登记表.pdf";
a.click();
// let objectUrl = URL.createObjectURL(blob); //生成一个url
// window.location.href = objectUrl; //浏览器打开这个url
})
.catch(err => {
console.log(err);
});
},
current_change(s){
var data={
"page": s,
"pageSize": 10
}
Loading.service();
this.$api.getlist.seledjdc(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.tableData=res.data.result
this.totals=res.data.total
}
}).catch((res) => {
});
},
toexcel(){
axios.get(baseUrl+'/exportExcel/insuredRegistration',{
headers: {
"token":Cookies.get("token")
},
responseType:'blob' //告诉服务器我们需要的响应格式
})
.then(res => {
let a = document.createElement("a");
let blob = new Blob([res.data],{
type:'application/vnd.ms-excel' //将会被放入到blob中的数组内容的MIME类型
});
a.href = URL.createObjectURL(blob); //生成一个url
a.download = "居民养老保险表.xlsx";
a.click();
// let objectUrl = URL.createObjectURL(blob); //生成一个url
// window.location.href = objectUrl; //浏览器打开这个url
})
.catch(err => {
console.log(err);
});
// this.$api.getlist.dccc().then((res) => {
// let loadingInstance = Loading.service();
// this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
// loadingInstance.close();
// });
// if(res.code==200){
// this.tableData=res.data.result
// this.totals=res.data.total
// }
// }).catch((res) => {
// });
}
},
created(){
var data={
"page": 1,
"pageSize": 10
}
Loading.service();
this.$api.getlist.seledjdc(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.tableData=res.data.result
this.totals=res.data.total
}
}).catch((res) => {
});
},
}
</script>
<template>
<div>
<div class="op">
<el-button type="primary" @click="dialogVisible = true" size="mini" style="background:#148A9B;margin-left:10px" icon="el-icon-circle-plus-outline">新增</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
>
<el-table-column
type="index"
:index="indexMethod">
</el-table-column>
<el-table-column
prop="flowname"
label="名称"
width="180">
</el-table-column>
<el-table-column
prop="createby"
label="创建人">
</el-table-column>
<el-table-column
prop="createtime"
label="创建时间">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-popover
placement="right"
width="200"
trigger="click">
<div class="step" style="height: 200px;">
<el-steps direction="vertical" :active="7">
<el-step v-for="index in step" :key="step[index]" :title="index.name"></el-step>
</el-steps>
</div>
<el-button
size="mini"
slot="reference"
@click="handle(scope.$index, scope.row)">详情</el-button>
</el-popover>
<el-button type="primary" size="mini" style="background:#148A9B" icon="el-icon-edit-outline">修改</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pone"
:page-size='10'
layout="total, prev, pager, next, jumper"
:total="totals"
:current-page.sync="Page"
>
</el-pagination>
<el-dialog
title="新增流程"
:visible.sync="dialogVisible"
width="30%"
>
<el-input
style="margin-bottom:20px"
placeholder="请输入流程标题"
v-model="flowname"
clearable>
</el-input>
<el-select
style="width:100%"
v-model="value"
multiple
filterable
default-first-option
placeholder="请编辑流程">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<span slot="footer" class="dialog-footer">
<el-button @click="del">取 消</el-button>
<el-button type="primary" @click="addflow">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<style>
.op{
display: flex;
align-items: center;
}
.idc{
width: 200px
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
.step{
margin: 0 auto;
width:100px
}
</style>
<script>
import CryptoJS from 'crypto-js'
// import baseUrl from "../../globe/globeUrl"
export default {
data() {
return {
flowname:"",
dialogVisible: false,
step:'',
Page:1,
totals:0,
input:"",
info:'',
tableData: [{
id:1,
name:"邹",
creattime:"2019-1-1",
person:'迪迪'
}],
options: [{
value: '初审',
label: '初审'
}, {
value: '复核',
label: '复核'
}, {
value: '稽查',
label: '稽查'
},
{
value: '领导审核',
label: '领导审核'
}],
value: []
}
},
methods:{
current_change(s){
},
del(){
this.dialogVisible = false
},
//新增流程
addflow() {
this.dialogVisible = true
console.log(this.value)
},
indexMethod(index) {
return index +1;
},
handle(s,d){
var par={
type:d.type
}
this.$api.getlist.selectRoleinfo(par).then((res) => {
this.step=res.data
console.log( this.step)
}).catch((res) => {
});
},
},
created(){
this.$api.getlist.selectflowlist().then((res) => {
this.tableData=res.data
}).catch((res) => {
});
}
}
</script>
<template>
<div>
<el-table
:data="tableData"
stripe
style="width: 100%">
<el-table-column
prop="newsName"
label="标题"
>
</el-table-column>
<el-table-column
prop="createTime"
label="时间"
>
</el-table-column>
<el-table-column
prop="createBy"
label="操作人"
>
</el-table-column>
<el-table-column
width="180"
label="操作">
<template slot-scope="scope">
<el-button
type="primary"
size="mini"
icon="el-icon-edit-outline"
@click="handle(scope.$index, scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pone"
:page-size='10'
layout="total, prev, pager, next, jumper"
:total="totals"
:current-page.sync="Page"
@current-change="current_change"
>
</el-pagination>
</div>
</template>
<script>
export default {
data() {
return {
totals:0,
Page:1,
tableData: []
}
},
methods:{
current_change(s){
var data={
pageNum:s,
pageSize:10
}
this.$api.getlist.newsList(data).then((res) => {
this.tableData=res.data.list
}).catch((res) => {
});
}
},
created(){
var data={
pageNum:1,
pageSize:10
}
this.$api.getlist.newsList(data).then((res) => {
this.tableData=res.data.list
}).catch((res) => {
});
}
}
</script>
\ No newline at end of file
<template>
<div>
<div class="op">
<div class="add" style="margin-left:0">
<el-select size="mini" @change="handleChange" v-model="town" placeholder="请选择乡/镇">
<el-option
v-for="item in list"
:key="item.town_id"
:label="item.town_name"
:value="item.town_id+','+item.town_name">
</el-option>
</el-select>
</div>
<div class="add">
<el-select size="mini" @change="torz" v-model="village" placeholder="请选择村">
<el-option
v-for="item2 in list2"
:key="item2.village_id"
:label="item2.village_name"
:value="item2.village_id+','+item2.village_name">
</el-option>
</el-select>
</div>
<div class="nam">
<el-input v-model="name" size="mini" placeholder="请输入姓名"></el-input>
</div>
<div class="idc">
<el-input v-model="idcard" size="mini" placeholder="请输入身份证号"></el-input>
</div>
<div class="add">
<el-select size="mini" @change="torz" clearable v-model="state" placeholder="认证状态">
<el-option
v-for="item3 in stateList"
:key="item3.value"
:label="item3.label"
:value="item3.value">
</el-option>
</el-select>
</div>
<div class="add">
<el-date-picker
v-model="time"
size='mini'
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
</div>
<div class="op" style="margin-top:10px">
<div class="add" style="margin-left:0">
<el-select size="mini" @change="torz" clearable v-model="cblx" placeholder="参保类型">
<el-option
v-for="item6 in cblxList"
:key="item6.value"
:label="item6.label"
:value="item6.value">
</el-option>
</el-select>
</div>
<div class="add">
<el-select size="mini" @change="torz" v-model="age" placeholder="选择年龄">
<el-option
v-for="item4 in ageList"
:key="item4.value"
:label="item4.label"
:value="item4.value">
</el-option>
</el-select>
</div>
<div class="add">
<el-select size="mini" @change="torz" v-model="agemeth" placeholder="年龄计算方式">
<el-option
v-for="item5 in agemethList"
:key="item5.value"
:label="item5.label"
:value="item5.value">
</el-option>
</el-select>
</div>
<el-button type="primary" size="mini" style="background:#148A9B;margin-left:10px" icon="el-icon-search" @click="serch">搜索</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName">
<el-table-column
prop="idcard"
label="身份证号"
width="180">
</el-table-column>
<el-table-column
prop="userName"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="telNumber"
label="手机号">
</el-table-column>
<el-table-column
prop="match_stateStr"
label="认证状态">
</el-table-column>
<el-table-column
prop="addressRelation"
label="地区关系">
</el-table-column>
<el-table-column
prop="nowAddress"
label="认证地区">
</el-table-column>
<el-table-column
prop="createTime"
label="认证时间">
</el-table-column>
<el-table-column
prop="createtime"
label="认证照片">
<template slot-scope="scope">
<img :src="scope.row.recordPhotoStr" width="40" height="40" class="head_pic"/>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pone"
:page-size='10'
layout="total, prev, pager, next, jumper"
:total="totals"
:current-page.sync="Page"
@current-change="current_change"
>
</el-pagination>
</div>
</template>
<style>
.op{
display: flex;
align-items: center;
}
.idc{
width: 200px
}
.nam{
margin-right: 20px
}
.ywtyoe{
width: 200px;
margin-left: 20px
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
.pone{
margin-top: 40px
}
.el-timeline{
padding-left: 20px
}
.add{
margin-left: 20px
}
</style>
<script>
import Axios from "axios"
import Cookies from "js-cookie";
import CryptoJS from 'crypto-js'
import { Loading } from 'element-ui';
import {listtown} from '../../utils/address'
import {baseUrl2} from "../../utils/global"
export default {
data() {
return {
list:[],
name:"",
town:"",
village:"",
cit:"",
Page:1,
totals:0,
idcard:"",
ywtype:"",
info:'',
ywtype:'',
tableData: [],
list2:[],
//认证状态
state:"",
stateList:[{
value:"",
label:"所有状态",
},{
value:"0",
label:"认证成功",
},{
value:"2",
label:"认证失败",
},{
value:"3",
label:"未认证",
}],
//时间
time:"",
//年龄
age:"",
ageList:[{
value:"0",
label:"所有年龄段",
},{
value:"1",
label:"55岁以下",
},{
value:"2",
label:"55-59岁",
},{
value:"3",
label:"60岁以上",
},{
value:"4",
label:"90岁以上",
},{
value:"5",
label:"100岁以上",
}],
//年龄计算方式
agemeth:"",
agemethList:[{
value:"1",
label:"按年计算",
},{
value:"2",
label:"按月计算",
}],
//参保类型
cblx:"",
cblxList:[{
value:"0",
label:"城镇居民",
},{
value:"1",
label:"机关事业",
},{
value:"2",
label:"企业员工",
}]
}
},
methods: {
//搜索
serch(){
var start=""
var end=""
if(this.time){
var d=this.time[0]
var s=this.time[1]
console.log(d)
var mon=(parseInt(d.getMonth()) + 1)
var emon=(parseInt(s.getMonth()) + 1)
start = d.getFullYear()+"-"+mon+"-"+d.getDate()
end=s.getFullYear()+"-"+emon+"-"+s.getDate()
}
var data={
province_name:"四川省",
city_name:"南充市",
county_name:"西充县",
pageSize:10,
page:1,
town_name:this.town.split(",")[1],
village_name:this.village.split(",")[1],
iDCard:this.idcard,
match_state:this.state,
begin_time:start,
end_time:end,
siType:this.cblx,
personName:this.name,
address:this.agemeth
}
Axios.get(baseUrl2+'/search/authentication.do',{
params:data
})
.then(res => {
console.log(res)
this.tableData=res.data.obj
})
.catch(err => {
});
},
//流程
progress(d,s){
},
tableRowClassName({row, rowIndex}) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
},
current_change(ss){
},
//
handleChange(){
Axios.get(baseUrl2+'/show/getVillageList.do?town_id='+this.town.split(",")[0],{
})
.then(res => {
this.list2=res.data
})
.catch(err => {
console.log(err);
});
},
torz(){
},
//查看
handle(s,d){
},
handleDelete(g,h){
console.log(g)
console.log(h)
},
Encrypt(word) { //aes加密
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
},
decrypt(word){
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse("KkweFace95271124");
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
},
created(){
// for(var i in listtown){
// this.list.push({
// value:listtown[i].town_name,
// label:listtown[i].town_name,
// children:[]
// })
// for(var j in listtown[i].chirld){
// this.list[i].children.push({
// value: listtown[i].chirld[j].village_name,
// label: listtown[i].chirld[j].village_name
// })
// }
// }
// console.log(this.list)
Axios.get(baseUrl2+'/show/getTownList.do?county_id=511325000000',{
})
.then(res => {
this.list=res.data
})
.catch(err => {
console.log(err);
});
}
}
</script>
<template>
<div>
<div class="op">
<div class="nam">
<el-input v-model="name" size="mini" placeholder="请输入姓名"></el-input>
</div>
<div class="idc">
<el-input v-model="idcard" size="mini" placeholder="请输入身份证号"></el-input>
</div>
<div class="ywtyoe">
<el-select v-model="ywtype" placeholder="请选择业务类型" size="mini">
<el-option
v-for="item in options1"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<div>
<!-- <el-cascader
size="mini"
:options="list"
:props="{ checkStrictly: true }"
clearable></el-cascader> -->
</div>
<el-button type="primary" size="mini" style="background:#148A9B;margin-left:10px" icon="el-icon-search" @click="serch">搜索</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
stripe
:row-class-name="tableRowClassName">
<el-table-column
prop="idcard"
label="身份证号"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="100">
</el-table-column>
<el-table-column
prop="recordtype"
width="150"
label="业务类型">
</el-table-column>
<el-table-column
prop="createtime"
width="200"
label="创建时间">
</el-table-column>
<el-table-column
prop="townname"
width="150"
label="镇">
</el-table-column>
<el-table-column
prop="villagename"
label="村">
</el-table-column>
<el-table-column
prop="nowExamine"
label="当前状态">
</el-table-column>
<el-table-column
width="180"
label="操作">
<template slot-scope="scope">
<el-button
type="primary"
size="mini"
icon="el-icon-s-check"
@click="handle(scope.$index, scope.row)">查看</el-button>
<el-popover
placement="right"
width="180"
trigger="click">
<el-timeline>
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
:icon="activity.icon"
:type="activity.type"
:color="activity.color"
:size="activity.size"
:timestamp="activity.timestamp"
:timestamp2="123">
{{activity.content}}
<p style="font-size:13px;color:#909399" v-show="activity.timestamp">审核人:{{activity.name}}</p>
<p style="font-size:13px;color:#909399" v-show="activity.examineRemark">原因:{{activity.examineRemark}}</p>
</el-timeline-item>
</el-timeline>
<el-button
@click="progress(scope.$index, scope.row)"
size="mini"
slot="reference"
type="success"
>流程</el-button>
</el-popover>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pone"
:page-size='10'
layout="total, prev, pager, next, jumper"
:total="totals"
:current-page.sync="Page"
@current-change="current_change"
>
</el-pagination>
</div>
</template>
<style>
.op{
display: flex;
align-items: center;
}
.idc{
width: 200px
}
.nam{
margin-right: 20px
}
.ywtyoe{
width: 200px;
margin-left: 20px
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
.pone{
margin-top: 40px
}
.el-timeline{
padding-left: 20px
}
</style>
<script>
import CryptoJS from 'crypto-js'
import { Loading } from 'element-ui';
import {listtown} from '../../utils/address'
// import baseUrl from "../../globe/globeUrl"
export default {
data() {
return {
list:[],
name:"",
activities: [],
options1: [{
value: '1',
label: '参保登记'
}, {
value: '2',
label: '信息变更'
}, {
value: '3',
label: '待遇申请'
}],
Page:1,
totals:0,
idcard:"",
ywtype:"",
info:'',
ywtype:'',
tableData: []
}
},
methods: {
//搜索
serch(){
var data={
idcard:this.idcard?this.Encrypt(this.idcard):"",
recordType:this.ywtype?parseInt(this.ywtype):"",
townName:'',
villageName:''
}
this.$api.getlist.record(data).then((res) => {
for(var i in res.data.list){
res.data.list[i].idcard=this.decrypt(res.data.list[i].idcard)
res.data.list[i].name=this.decrypt(res.data.list[i].name)
var d=new Date(res.data.list[i].createtime)
var mon=(parseInt(d.getMonth()) + 1)
res.data.list[i].createtime=d.getFullYear()+"-"+mon+"-"+d.getDate()+" "+d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":res.data.list[i].recordtype==2?"信息变更":''
}
this.tableData=res.data.list
this.totals=res.data.total
this.page=res.data.total.pageNum
}).catch((res) => {
});
},
//流程
progress(d,s){
console.log(s)
this.activities=[]
var data={
recordId:s.id,
type:s.recordtype=="参保登记"?1:s.recordtype=="信息变更"?2:''
}
this.$api.getlist.progress(data).then((res)=>{
for(var i in res.data){
if(res.data[i].examineState=="进行中"){
this.activities.push({
content:res.data[i].role,
//timestamp:res.data[i].examinePerson+"审核于"+res.data[i].examineTime,
color:'#0bbd87',
size: 'large'
})
}else{
if(res.data[i].examineState=="审核失败"){
this.activities.push({
content:res.data[i].role+":"+"审核失败",
timestamp:res.data[i].examinePerson?res.data[i].examineTime:"",
name:res.data[i].examinePerson?res.data[i].examinePerson:"",
examineRemark:res.data[i].examineRemark?res.data[i].examineRemark:'',
color:'black'
})
return
}else{
this.activities.push({
content:res.data[i].role,
timestamp:res.data[i].examinePerson?res.data[i].examineTime:"",
name:res.data[i].examinePerson?res.data[i].examinePerson:"",
examineRemark:res.data[i].examineRemark?res.data[i].examineRemark:'',
color:res.data[i].nowNode?"#97E5CE":"lightgray"
})
}
}
}
}).catch((res)=>{
})
},
tableRowClassName({row, rowIndex}) {
// console.log(row)
// if (row.recordtype ==="参保登记") {
// return 'warning-row';
// } else if (row.recordtype === "信息变更") {
// return 'success-row';
// }
// return '';
},
current_change(ss){
var data={
pageNum:ss,
pageSize:10,
idcard:this.idcard,
type:this.ywtype
}
Loading.service();
this.$api.getlist.record(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
for(var i in res.data.list){
res.data.list[i].idcard=this.decrypt(res.data.list[i].idcard)
res.data.list[i].name=this.decrypt(res.data.list[i].name)
var d=new Date(res.data.list[i].createtime)
var mon=(parseInt(d.getMonth()) + 1)
res.data.list[i].createtime=d.getFullYear()+"-"+mon+"-"+d.getDate()+" "+d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":res.data.list[i].recordtype==2?"信息变更":''
}
this.tableData=res.data.list
this.totals=res.data.total
this.page=res.data.total.pageNum
}).catch((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
});
},
//查看
handle(s,d){
if(d.recordtype=="参保登记"){
sessionStorage.setItem("recordId",this.tableData[s].recordId)
this.$router.push({
name:"参保登记审核",
params:{info:this.tableData[s].info,
bankpic:this.tableData[s].bankpic,
idcardbackpic:this.tableData[s].idcardbackpic,
idcardfrontpic:this.tableData[s].idcardfrontpic,
signpic:this.tableData[s].signpic,
show:false
}
})
}else if(d.recordtype=="信息变更"){
sessionStorage.setItem("recordId",this.tableData[s].recordId)
this.$router.push({
name:"信息变更审核",
params:{info:this.tableData[s].info,
bankpic:this.tableData[s].bankpic,
idcardbackpic:this.tableData[s].idcardbackpic,
idcardfrontpic:this.tableData[s].idcardfrontpic,
signpic:this.tableData[s].signpic,
specialPhotoPic:this.tableData[s].specialPhotoPic,
bookPic:this.tableData[s].bookPic,
show:false
}
})
}
},
handleDelete(g,h){
console.log(g)
console.log(h)
},
Encrypt(word) { //aes加密
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
},
decrypt(word){
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse("KkweFace95271124");
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
},
created(){
for(var i in listtown){
this.list.push({
value:listtown[i].town_name,
label:listtown[i].town_name,
children:[]
})
for(var j in listtown[i].chirld){
this.list[i].children.push({
value: listtown[i].chirld[j].village_name,
label: listtown[i].chirld[j].village_name
})
}
}
console.log(this.list)
Loading.service();
var data={
idcard:'',
recordType:''
}
this.$api.getlist.record(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
for(var i in res.data.list){
res.data.list[i].idcard=this.decrypt(res.data.list[i].idcard)
res.data.list[i].name=this.decrypt(res.data.list[i].name)
var d=new Date(res.data.list[i].createtime)
var mon=(parseInt(d.getMonth()) + 1)
res.data.list[i].createtime=d.getFullYear()+"-"+mon+"-"+d.getDate()+" "+d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":res.data.list[i].recordtype==2?"信息变更":''
}
this.tableData=res.data.list
this.totals=res.data.total
this.page=res.data.total.pageNum
}).catch((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
});
// var that=this
// baseUrl.setToken()
// $.ajax({
// url:baseUrl.baseUrl+"examine/listExamining",
// type:'post',
// data:{
// userId:1
// },
// success(res){
// for(var i in res.data.list){
// res.data.list[i].idcard=that.decrypt(res.data.list[i].idcard)
// res.data.list[i].name=that.decrypt(res.data.list[i].name)
// res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":""
// }
// that.tableData=res.data.list
// that.totals=res.data.total
// that.page=res.data.total.pageNum
// }
// })
}
}
</script>
<template>
<div>
<div class="op">
<div class="idc">
<el-input v-model="idcard" size="mini" placeholder="请输入身份证号"></el-input>
</div>
<div class="ywtyoe">
<el-select v-model="ywtype" placeholder="请选择业务类型" size="mini">
<el-option
v-for="item in options1"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<el-button type="primary" size="mini" style="background:#148A9B;margin-left:10px" icon="el-icon-search" @click="serch">搜索</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName">
<el-table-column
prop="idcard"
label="身份证号"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="recordtype"
label="业务类型">
</el-table-column>
<el-table-column
prop="createtime"
label="创建时间">
</el-table-column>
<el-table-column
prop="townname"
label="镇">
</el-table-column>
<el-table-column
prop="villagename"
label="村">
</el-table-column>
<el-table-column
prop="nowExamine"
label="当前状态">
</el-table-column>
<el-table-column
width="180"
label="操作">
<template slot-scope="scope">
<el-button
type="primary"
size="mini"
icon="el-icon-s-check"
@click="handle(scope.$index, scope.row)">审核</el-button>
<el-popover
placement="right"
width="180"
trigger="click">
<el-timeline>
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
:icon="activity.icon"
:type="activity.type"
:color="activity.color"
:size="activity.size"
:timestamp="activity.timestamp"
:timestamp2="123">
{{activity.content}}
<p style="font-size:13px;color:#909399" v-show="activity.timestamp">审核人:{{activity.name}}</p>
<p style="font-size:13px;color:#909399" v-show="activity.examineRemark">原因:{{activity.examineRemark}}</p>
</el-timeline-item>
</el-timeline>
<el-button
@click="progress(scope.$index, scope.row)"
size="mini"
slot="reference"
type="success"
>流程</el-button>
</el-popover>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pone"
:page-size='10'
layout="total, prev, pager, next, jumper"
:total="totals"
:current-page.sync="Page"
@current-change="current_change"
>
</el-pagination>
</div>
</template>
<style>
.op{
display: flex;
align-items: center;
}
.idc{
width: 200px
}
.ywtyoe{
width: 200px;
margin-left: 20px
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
.pone{
margin-top: 40px
}
</style>
<script>
import CryptoJS from 'crypto-js'
import { Loading } from 'element-ui';
// import baseUrl from "../../globe/globeUrl"
export default {
data() {
return {
activities: [],
options1: [{
value: '1',
label: '参保登记'
}, {
value: '2',
label: '信息变更'
}, {
value: '3',
label: '待遇申请'
}],
Page:1,
totals:0,
idcard:"",
ywtype:"",
info:'',
ywtype:'',
tableData: []
}
},
methods: {
//搜索
serch(){
var data={
idcard:this.idcard?this.Encrypt(this.idcard):"",
recordType:this.ywtype?parseInt(this.ywtype):""
}
this.$api.getlist.getlist(data).then((res) => {
for(var i in res.data.list){
res.data.list[i].idcard=this.decrypt(res.data.list[i].idcard)
res.data.list[i].name=this.decrypt(res.data.list[i].name)
var d=new Date(res.data.list[i].createtime)
var mon=(parseInt(d.getMonth()) + 1)
res.data.list[i].createtime=d.getFullYear()+"-"+mon+"-"+d.getDate()+" "+d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":res.data.list[i].recordtype==2?"信息变更":''
}
this.tableData=res.data.list
this.totals=res.data.total
this.page=res.data.total.pageNum
}).catch((res) => {
});
},
//流程
progress(d,s){
console.log(s)
this.activities=[]
var data={
recordId:s.id,
type:s.recordtype=="参保登记"?1:s.recordtype=="信息变更"?2:''
}
this.$api.getlist.progress(data).then((res)=>{
for(var i in res.data){
if(res.data[i].examineState=="进行中"){
this.activities.push({
content:res.data[i].role,
//timestamp:res.data[i].examinePerson+"审核于"+res.data[i].examineTime,
color:'#0bbd87',
size: 'large'
})
}else{
this.activities.push({
content:res.data[i].role,
timestamp:res.data[i].examinePerson?res.data[i].examineTime:"",
name:res.data[i].examinePerson?res.data[i].examinePerson:"",
examineRemark:res.data[i].examineRemark?res.data[i].examineRemark:'',
color:res.data[i].nowNode?"#97E5CE":"lightgray"
})
if(res.data[i].examineState=="审核失败"){
this.activities.push({
content:"审核失败",
timestamp:res.data[i].examinePerson?res.data[i].examineTime:"",
name:res.data[i].examinePerson?res.data[i].examinePerson:"",
examineRemark:res.data[i].examineRemark?res.data[i].examineRemark:'',
color:'black'
})
return
}
}
}
}).catch((res)=>{
})
},
tableRowClassName({row, rowIndex}) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
},
current_change(ss){
var data={
pageNum:ss,
pageSize:10,
idcard:this.idcard,
type:this.ywtype
}
Loading.service();
this.$api.getlist.getlist(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
for(var i in res.data.list){
res.data.list[i].idcard=this.decrypt(res.data.list[i].idcard)
res.data.list[i].name=this.decrypt(res.data.list[i].name)
var d=new Date(res.data.list[i].createtime)
res.data.list[i].createtime=d.getFullYear()+"-"+d.getMonth() + 1+"-"+d.getDate()+d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":res.data.list[i].recordtype==2?"信息变更":''
}
this.tableData=res.data.list
this.totals=res.data.total
this.page=res.data.total.pageNum
}).catch((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
});
},
//审核
handle(s,d){
if(d.recordtype=="参保登记"){
sessionStorage.setItem("recordId",this.tableData[s].recordId)
this.$router.push({
name:"参保登记审核",
params:{info:this.tableData[s].info,
bankpic:this.tableData[s].bankpic,
idcardbackpic:this.tableData[s].idcardbackpic,
idcardfrontpic:this.tableData[s].idcardfrontpic,
signpic:this.tableData[s].signpic,
show:true
}
})
}else if(d.recordtype=="信息变更"){
sessionStorage.setItem("recordId",this.tableData[s].recordId)
this.$router.push({
name:"信息变更审核",
params:{info:this.tableData[s].info,
bankpic:this.tableData[s].bankpic,
idcardbackpic:this.tableData[s].idcardbackpic,
idcardfrontpic:this.tableData[s].idcardfrontpic,
signpic:this.tableData[s].signpic,
specialPhotoPic:this.tableData[s].specialPhotoPic,
bookPic:this.tableData[s].bookPic,
show:true
}
})
}
},
handleDelete(g,h){
console.log(g)
console.log(h)
},
Encrypt(word) { //aes加密
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
},
decrypt(word){
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse("KkweFace95271124");
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
},
created(){
Loading.service();
var data={
idcard:'',
recordType:''
}
this.$api.getlist.getlist(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
for(var i in res.data.list){
res.data.list[i].idcard=this.decrypt(res.data.list[i].idcard)
res.data.list[i].name=this.decrypt(res.data.list[i].name)
var d=new Date(res.data.list[i].createtime)
var mon=(parseInt(d.getMonth()) + 1)
res.data.list[i].createtime=d.getFullYear()+"-"+mon+"-"+d.getDate()+" "+d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":res.data.list[i].recordtype==2?"信息变更":''
}
this.tableData=res.data.list
this.totals=res.data.total
this.page=res.data.total.pageNum
}).catch((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
});
// var that=this
// baseUrl.setToken()
// $.ajax({
// url:baseUrl.baseUrl+"examine/listExamining",
// type:'post',
// data:{
// userId:1
// },
// success(res){
// for(var i in res.data.list){
// res.data.list[i].idcard=that.decrypt(res.data.list[i].idcard)
// res.data.list[i].name=that.decrypt(res.data.list[i].name)
// res.data.list[i].recordtype=res.data.list[i].recordtype==1?"参保登记":""
// }
// that.tableData=res.data.list
// that.totals=res.data.total
// that.page=res.data.total.pageNum
// }
// })
}
}
</script>
<template>
<div>
<h2 class="imtil">基础信息</h2>
<div class="wrap">
<div class="masks"></div>
<el-form ref="form" :model="form" class="formr" label-width="120px">
<el-form-item label="姓名">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-input v-model="form.sex"></el-input>
</el-form-item>
<el-form-item label="民族">
<el-input v-model="form.nation"></el-input>
</el-form-item>
<el-form-item label="缴费标准">
<el-input v-model="form.pay_type"></el-input>
</el-form-item>
<el-form-item label="特殊参保群体">
<el-input v-model="form.special_type"></el-input>
</el-form-item>
<el-form-item label="险种类型">
<el-input v-model="form.other_social"></el-input>
</el-form-item>
</el-form>
<el-form ref="form" :model="form" class="forml" label-width="90px">
<el-form-item label="身份证号">
<el-input v-model="form.identity_number"></el-input>
</el-form-item>
<el-form-item label="户籍性质">
<el-input v-model="form.nation_type"></el-input>
</el-form-item>
<el-form-item label="户籍所在地">
<el-input v-model="form.townName"></el-input>
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="form.telphoneValue"></el-input>
</el-form-item>
<el-form-item label="开户银行">
<el-input v-model="form.pay_bank"></el-input>
</el-form-item>
<el-form-item label="缴费账号">
<el-input v-model="form.pay_account"></el-input>
</el-form-item>
</el-form>
</div>
<h2 class="imtil">变更信息</h2>
<div class="wrap">
<div class="masks"></div>
<el-form ref="form" :model="form" class="formr" label-width="150px">
<el-form-item :label="old">
<el-input v-model="form.old"></el-input>
</el-form-item>
</el-form>
<el-form ref="form" :model="form" class="forml" label-width="150px">
<el-form-item :label="now">
<el-input v-model="form.now"></el-input>
</el-form-item>
</el-form>
</div>
<h2 class="imtil">附件</h2>
<div class="imgcon">
<div class="demo-image__placeholder">
<div v-show="bb" class="block">
<p class="demonstration">{{itmebs}}</p>
<el-image :src="urls[0]"></el-image>
</div>
<div class="block">
<p class="demonstration">签名</p>
<el-image :src="urls[1]">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
</div>
</el-image>
</div>
<div class="block">
<p class="demonstration">身份证正面</p>
<el-image :src="urls[2]">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
</div>
</el-image>
</div>
<div class="block">
<p class="demonstration">身份证反面</p>
<el-image :src="urls[3]">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
</div>
</el-image>
</div>
</div>
</div>
<div style="text-align:center;margin-bottom:40px" v-show="show">
<el-button type="success" @click="pass"><i class="el-icon-circle-check"></i> 审核通过</el-button>
<el-button type="danger" @click="nopass"><i class="el-icon-circle-close"></i> 审核不通过</el-button>
</div>
</div>
</template>
<script>
import CryptoJS from 'crypto-js'
import { Loading } from 'element-ui';
export default {
data(){
return{
itmebs:"",
show:'',
old:"原姓名",
now:"变更后姓名",
bb:false,
form:{
"name":"",
"bank_photo":"",
"groupName":"",
"identity_number":"",
"nation":'',
"nation_type":"",
"other_social":"",
"pay_account":"",
"pay_bank":"",
"pay_type":'',
"recordType":'',
"sex":'',
"sign_photo":"",
"social_time":"",
"special_type":"",
"telphoneValue":"",
"townName":"",
"villageName":"",
"address":"",
"wuserId":'',
"old":"",
"now":""
},
urls: [
],
show:""
}
},
methods:{
//审核通过
pass(){
this.$confirm('是否审核通过?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
Loading.service();
var data={
recordId: sessionStorage.getItem("recordId"),
examineState:1,
remark:"",
userId:1
};
this.$api.getlist.shenhe(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.$message({
type: 'success',
message: res.data
});
this.$router.push({
name:"信息审核"
})
}else{
this.$message({
type: 'info',
message: res.message
});
}
}).catch((res) => {
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
this.$message({
type: 'info',
message: '操作失败!'+res
});
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
},
//审核不通过
nopass(){
var that=this
this.$prompt('请输入原因', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
if(value){
Loading.service();
var data={
recordId: sessionStorage.getItem("recordId"),
examineState:2,
remark:value,
userId:1
};
this.$api.getlist.shenhe(data).then((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
if(res.code==200){
this.$message({
type: 'success',
message: res.data
});
// this.$router.push({
// name:"Xxsh"
// })
}else{
this.$message({
type: 'info',
message: res.message
});
}
}).catch((res) => {
let loadingInstance = Loading.service();
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
this.$message({
type: 'info',
message: '操作失败!'+res
});
});
}else{
let loadingInstance = Loading.service();
that.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
loadingInstance.close();
});
that.$message({
type: 'info',
message: '请输入原因'
});
}
}).catch(() => {
this.$message({
type: 'info',
message: '取消输入'
});
});
},
decrypt(word){
var key = CryptoJS.enc.Utf8.parse("KkweInfo23255625");
var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
},
decryptByDES(ciphertext) {
var keyHex = CryptoJS.enc.Utf8.parse("KkweFace95271124");
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
},
created(){
this.show=this.$route.params.show
this.show=this.$route.params.show
if(this.$route.params.info){
sessionStorage.setItem("info",this.$route.params.info)
}
if(this.$route.params.info){
var a=JSON.stringify(this.$route.params)
sessionStorage.setItem("items",a)
}
this.form =JSON.parse(sessionStorage.getItem("info"))
this.form.special_type=this.form.org_name.org_insuranceType
this.form.name=this.decrypt(this.form.org_name)
this.form.identity_number=this.decrypt(this.form.org_idNum)
this.form.telphoneValue=this.decrypt(this.form.telphoneValue)
this.form.nation=this.form.nation
this.form.pay_bank=this.form.org_bankName
this.form.pay_type=this.form.org_pay
this.form.special_type=this.form.org_position
this.form.telphoneValue=this.form.org_telPhone
this.form.address=this.form.org_address
this.form.pay_account=this.form.org_bankNum
//根据type_son判断变更内容
if(this.form.type_son==1){
this.form.old=this.form.pay_type,
this.form.now=this.form.change_pay
this.now="变更后档次"
this.old="变更前档次"
}else if(this.form.type_son==2){
this.bb=true
this.form.old=this.form.org_bankNum,
this.form.now=this.form.change_bankNum
this.now="变更后银行卡号"
this.old="变更前银行卡号"
}else if(this.form.type_son==3){
this.form.old=this.form.telphoneValue,
this.form.now=this.form.change_tel
this.now="变更后手机号"
this.old="变更前手机号"
}else if(this.form.type_son==4){
this.form.old=this.form.special_type,
this.form.now=this.form.change_position,
this.now="变更后参保身份"
this.old="变更前参保身份"
}else if(this.form.type_son==5){
this.form.old=this.form.org_address,
this.form.now=this.form.change_adress,
this.now="变更后地址"
this.old="变更前地址"
}else if(this.form.type_son==6){
this.form.old=this.form.name,
this.form.now=this.form.change_name,
this.now="变更后姓名"
this.old="变更前姓名"
}else if(this.form.type_son==7){
this.form.old=this.form.identity_number,
this.form.now=this.form.change_idNum,
this.now="变更后身份证"
this.old="变更前身份证"
}
var obj=JSON.parse(sessionStorage.getItem("items"))
console.log(obj)
if(obj.bankpic){
this.itmebs="银行卡"
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.bankpic)
}else if(obj.bookPic){
this.itmebs="户口本"
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.bookPic)
}else if(obj.specialPhotoPic){
console.log(123132)
this.itmebs="特殊身份证明"
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.specialPhotoPic)
}else{
this.urls.push(" ")
}
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.signpic)
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.idcardfrontpic)
this.urls.push("http://socialsecurity.oss-cn-beijing.aliyuncs.com/"+obj.idcardbackpic)
this.form.sex= this.form.sex==1?"男":"女"
}
}
</script>
<style>
.wrap{
overflow: hidden;
position: relative;
}
.masks{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 200
}
.forml{
float: left;
width: 45%
}
.formr{
float: left;
width: 40%;
margin-left: 20px
}
.imgcon{
margin: 0 auto;
box-shadow: 0 0 15px lightgray;
overflow: hidden;
margin-bottom: 40px
}
.block{
float: left;
height: 100%;
margin-right: 20px
}
.block img{
width: auto;
height: 300px;
}
.imtil{
padding:0 0 20px 0
}
</style>
<template>
<div class="menu-bar-container">
<!-- logo -->
<div class="logo" :style="{'background-color':themeColor}" :class="collapse?'menu-bar-collapse-width':'menu-bar-width'"
@click="$router.push('/')">
<img v-if="collapse" src="@/assets/logo.png"/> <div >{{collapse?'':appName}}</div>
</div>
<!-- 导航菜单 -->
<el-menu ref="navmenu" default-active="1" :class="collapse?'menu-bar-collapse-width':'menu-bar-width'"
:collapse="collapse" :collapse-transition="false" :unique-opened="true "
@open="handleopen" @close="handleclose" @select="handleselect">
<!-- 导航菜单树组件,动态加载菜单 -->
<menu-tree v-for="item in navTree" :key="item.id" :menu="item"></menu-tree>
</el-menu>
</div>
</template>
<script>
import { mapState } from 'vuex'
import MenuTree from "@/components/MenuTree"
export default {
components:{
MenuTree
},
computed: {
...mapState({
appName: state=>state.app.appName,
themeColor: state=>state.app.themeColor,
collapse: state=>state.app.collapse,
navTree: state=>state.menu.navTree
}),
mainTabs: {
get () { return this.$store.state.tab.mainTabs },
set (val) { this.$store.commit('updateMainTabs', val) }
},
mainTabsActiveName: {
get () { return this.$store.state.tab.mainTabsActiveName },
set (val) { this.$store.commit('updateMainTabsActiveName', val) }
}
},
watch: {
$route: 'handleRoute'
},
created () {
this.handleRoute(this.$route)
console.log(this.navTree)
},
methods: {
handleopen() {
console.log('handleopen')
},
handleclose() {
console.log('handleclose')
},
handleselect(a, b) {
console.log('handleselect')
},
// 路由操作处理
handleRoute (route) {
// tab标签页选中, 如果不存在则先添加
var tab = this.mainTabs.filter(item => item.name === route.name)[0]
if (!tab) {
tab = {
name: route.name,
title: route.name,
icon: route.meta.icon
}
this.mainTabs = this.mainTabs.concat(tab)
}
this.mainTabsActiveName = tab.name
// 切换标签页时同步更新高亮菜单
if(this.$refs.navmenu != null) {
this.$refs.navmenu.activeIndex = '' + route.meta.index
this.$refs.navmenu.initOpenedMenu()
}
}
}
}
</script>
<style scoped lang="scss">
.menu-bar-container {
position: fixed;
top: 0px;
left: 0;
bottom: 0;
z-index: 1020;
.el-menu {
position:absolute;
top: 60px;
bottom: 0px;
text-align: left;
// background-color: #2968a30c;
}
.logo {
position:absolute;
top: 0px;
height: 60px;
line-height: 60px;
background: #545c64;
cursor:pointer;
img {
width: 40px;
height: 40px;
border-radius: 0px;
margin: 10px 10px 10px 10px;
float: left;
}
div {
font-size: 16px;
color: white;
text-align: left;
text-align: center
}
}
.menu-bar-width {
width: 200px;
}
.menu-bar-collapse-width {
width: 65px;
}
}
</style>
\ No newline at end of file
<template>
<div class="page-container">
<!--工具栏-->
<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
<el-form :inline="true" :model="filters" :size="size">
<el-form-item>
<el-input v-model="filters.name" placeholder="名称"></el-input>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-search" :label="$t('action.search')" perms="sys:dept:view" type="primary" @click="findTreeData(null)"/>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-plus" :label="$t('action.add')" perms="sys:dept:add" type="primary" @click="handleAdd"/>
</el-form-item>
</el-form>
</div>
<!--表格树内容栏-->
<el-table :data="tableTreeDdata" stripe size="mini" style="width: 100%;"
rowKey="id" v-loading="loading" :element-loading-text="$t('action.loading')">
<el-table-column
prop="id" header-align="center" align="center" width="80" label="ID">
</el-table-column>
<table-tree-column
prop="name" header-align="center" treeKey="id" width="150" label="名称">
</table-tree-column>
<el-table-column
prop="parentName" header-align="center" align="center" width="120" label="上级机构">
</el-table-column>
<el-table-column
prop="orderNum" header-align="center" align="center" label="排序">
</el-table-column>
<el-table-column
prop="createBy" header-align="center" align="center" label="创建人">
</el-table-column>
<el-table-column
prop="createTime" header-align="center" align="center" label="创建时间" :formatter="dateFormat">
</el-table-column>
<el-table-column
fixed="right" header-align="center" align="center" width="185" :label="$t('action.operation')">
<template slot-scope="scope">
<kt-button icon="fa fa-edit" :label="$t('action.edit')" perms="sys:dept:edit" @click="handleEdit(scope.row)"/>
<kt-button icon="fa fa-trash" :label="$t('action.delete')" perms="sys:dept:delete" type="danger" @click="handleDelete(scope.row)"/>
</template>
</el-table-column>
</el-table>
<!-- 新增修改界面 -->
<el-dialog :title="!dataForm.id ? '新增' : '修改'" width="40%" :visible.sync="dialogVisible" :close-on-click-modal="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="submitForm()"
label-width="80px" :size="size" style="text-align:left;">
<el-form-item label="名称" prop="name">
<el-input v-model="dataForm.name" placeholder="名称"></el-input>
</el-form-item>
<el-form-item label="上级机构" prop="parentName">
<popup-tree-input
:data="popupTreeData" :props="popupTreeProps" :prop="dataForm.parentName==null?'顶级菜单':dataForm.parentName"
:nodeKey="''+dataForm.parentId" :currentChangeHandle="handleTreeSelectChange">
</popup-tree-input>
</el-form-item>
<el-form-item v-if="dataForm.type !== 2" label="排序编号" prop="orderNum">
<el-input-number v-model="dataForm.orderNum" controls-position="right" :min="0" label="排序编号"></el-input-number>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button :size="size" @click="dialogVisible = false">{{$t('action.cancel')}}</el-button>
<el-button :size="size" type="primary" @click="submitForm()">{{$t('action.comfirm')}}</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import KtButton from "@/views/Core/KtButton"
import TableTreeColumn from '@/views/Core/TableTreeColumn'
import PopupTreeInput from "@/components/PopupTreeInput"
import FaIconTooltip from "@/components/FaIconTooltip"
import { format } from "@/utils/datetime"
export default {
components:{
PopupTreeInput,
KtButton,
TableTreeColumn,
FaIconTooltip
},
data() {
return {
size: 'small',
loading: false,
filters: {
name: ''
},
tableTreeDdata: [],
dialogVisible: false,
dataForm: {
id: 0,
name: '',
parentId: 0,
parentName: '',
orderNum: 0
},
dataRule: {
name: [
{ required: true, message: '机构名称不能为空', trigger: 'blur' }
],
parentName: [
{ required: true, message: '上级机构不能为空', trigger: 'change' }
]
},
popupTreeData: [],
popupTreeProps: {
label: 'name',
children: 'children'
}
}
},
methods: {
// 获取数据
findTreeData: function () {
this.loading = true
this.$api.dept.findDeptTree().then((res) => {
this.tableTreeDdata = res.data
this.popupTreeData = this.getParentMenuTree(res.data)
this.loading = false
})
},
// 获取上级机构树
getParentMenuTree: function (tableTreeDdata) {
let parent = {
parentId: 0,
name: '顶级菜单',
children: tableTreeDdata
}
return [parent]
},
// 显示新增界面
handleAdd: function () {
this.dialogVisible = true
this.dataForm = {
id: 0,
name: '',
parentId: 0,
parentName: '',
orderNum: 0
}
},
// 显示编辑界面
handleEdit: function (row) {
this.dialogVisible = true
Object.assign(this.dataForm, row);
},
// 删除
handleDelete (row) {
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
let params = this.getDeleteIds([], row)
this.$api.dept.batchDelete(params).then( res => {
this.findTreeData()
this.$message({message: '删除成功', type: 'success'})
})
})
},
// 获取删除的包含子机构的id列表
getDeleteIds (ids, row) {
ids.push({id:row.id})
if(row.children != null) {
for(let i=0, len=row.children.length; i<len; i++) {
this.getDeleteIds(ids, row.children[i])
}
}
return ids
},
// 机构树选中
handleTreeSelectChange (data, node) {
this.dataForm.parentId = data.id
this.dataForm.parentName = data.name
},
// 表单提交
submitForm () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.editLoading = true
let params = Object.assign({}, this.dataForm)
this.$api.dept.save(params).then((res) => {
this.editLoading = false
if(res.code == 200) {
this.$message({ message: '操作成功', type: 'success' })
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.findTreeData()
})
})
}
})
},
// 时间格式化
dateFormat: function (row, column, cellValue, index){
return format(row[column.property])
}
},
mounted() {
this.findTreeData()
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="page-container">
<!--工具栏-->
<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
<el-form :inline="true" :model="filters" :size="size">
<el-form-item>
<el-input v-model="filters.label" placeholder="名称"></el-input>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-search" :label="$t('action.search')" perms="sys:dict:view" type="primary" @click="findPage(null)"/>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-plus" :label="$t('action.add')" perms="sys:dict:add" type="primary" @click="handleAdd" />
</el-form-item>
</el-form>
</div>
<!--表格内容栏-->
<kt-table :height="350" permsEdit="sys:dict:edit" permsDelete="sys:dict:delete"
:data="pageResult" :columns="columns"
@findPage="findPage" @handleEdit="handleEdit" @handleDelete="handleDelete">
</kt-table>
<!--新增编辑界面-->
<el-dialog :title="operation?'新增':'编辑'" width="40%" :visible.sync="editDialogVisible" :close-on-click-modal="false">
<el-form :model="dataForm" label-width="80px" :rules="dataFormRules" ref="dataForm" :size="size">
<el-form-item label="ID" prop="id" v-if="false">
<el-input v-model="dataForm.id" :disabled="true" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="名称" prop="label">
<el-input v-model="dataForm.label" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="值" prop="value">
<el-input v-model="dataForm.value" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-input v-model="dataForm.type" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="dataForm.sort" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="描述 " prop="description">
<el-input v-model="dataForm.description" auto-complete="off" type="textarea"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model="dataForm.remarks" auto-complete="off" type="textarea"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :size="size" @click.native="editDialogVisible = false">{{$t('action.cancel')}}</el-button>
<el-button :size="size" type="primary" @click.native="submitForm" :loading="editLoading">{{$t('action.submit')}}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import KtTable from "@/views/Core/KtTable"
import KtButton from "@/views/Core/KtButton"
import { format } from "@/utils/datetime"
export default {
components:{
KtTable,
KtButton
},
data() {
return {
size: 'small',
filters: {
label: ''
},
columns: [
{prop:"id", label:"ID", minWidth:50},
{prop:"label", label:"名称", minWidth:100},
{prop:"value", label:"值", minWidth:100},
{prop:"type", label:"类型", minWidth:80},
{prop:"sort", label:"排序", minWidth:80},
{prop:"description", label:"描述", minWidth:120},
{prop:"remarks", label:"备注", minWidth:120},
{prop:"createBy", label:"创建人", minWidth:100},
{prop:"createTime", label:"创建时间", minWidth:120, formatter:this.dateFormat}
// {prop:"lastUpdateBy", label:"更新人", minWidth:100},
// {prop:"lastUpdateTime", label:"更新时间", minWidth:120, formatter:this.dateFormat}
],
pageRequest: { pageNum: 1, pageSize: 10 },
pageResult: {},
operation: false, // true:新增, false:编辑
editDialogVisible: false, // 新增编辑界面是否显示
editLoading: false,
dataFormRules: {
label: [
{ required: true, message: '请输入名称', trigger: 'blur' }
]
},
// 新增编辑界面数据
dataForm: {
id: 0,
label: '',
value: '',
type: '',
sort: 0,
description: '',
remarks: ''
}
}
},
methods: {
// 获取分页数据
findPage: function (data) {
if(data !== null) {
this.pageRequest = data.pageRequest
}
this.pageRequest.columnFilters = {label: {name:'label', value:this.filters.label}}
this.$api.dict.findPage(this.pageRequest).then((res) => {
this.pageResult = res.data
}).then(data!=null?data.callback:'')
},
// 批量删除
handleDelete: function (data) {
this.$api.dict.batchDelete(data.params).then(data!=null?data.callback:'')
},
// 显示新增界面
handleAdd: function () {
this.editDialogVisible = true
this.operation = true
this.dataForm = {
id: 0,
label: '',
value: '',
type: '',
sort: 0,
description: 'desc',
remarks: 'remark'
}
},
// 显示编辑界面
handleEdit: function (params) {
this.editDialogVisible = true
this.operation = false
this.dataForm = Object.assign({}, params.row)
},
// 编辑
submitForm: function () {
this.$refs.dataForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.editLoading = true
let params = Object.assign({}, this.dataForm)
this.$api.dict.save(params).then((res) => {
if(res.code == 200) {
this.$message({ message: '操作成功', type: 'success' })
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.editLoading = false
this.$refs['dataForm'].resetFields()
this.editDialogVisible = false
this.findPage(null)
})
})
}
})
},
// 时间格式化
       dateFormat: function (row, column, cellValue, index){
           return format(row[column.property])
       }
},
mounted() {
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="page-container">
<!--工具栏-->
<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
<el-form :inline="true" :model="filters" :size="size">
<el-form-item>
<el-input v-model="filters.name" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-search" :label="$t('action.search')" perms="sys:log:view" type="primary" @click="findPage(null)"/>
</el-form-item>
</el-form>
</div>
<!--表格内容栏-->
<kt-table :height="350"
:data="pageResult" :columns="columns" :showOperation="showOperation" @findPage="findPage">
</kt-table>
</div>
</template>
<script>
import KtTable from "@/views/Core/KtTable"
import KtButton from "@/views/Core/KtButton"
import { format } from "@/utils/datetime"
export default {
components: {
KtTable,
KtButton
},
data() {
return {
size: 'small',
filters: {
name: ''
},
columns: [
{prop:"id", label:"ID", minWidth:60},
{prop:"userName", label:"用户名", minWidth:100},
// {prop:"operation", label:"操作", minWidth:120},
{prop:"method", label:"方法", minWidth:180},
{prop:"params", label:"参数", minWidth:220},
{prop:"ip", label:"IP", minWidth:120},
{prop:"time", label:"耗时", minWidth:80},
{prop:"createBy", label:"创建人", minWidth:100},
{prop:"createTime", label:"创建时间", minWidth:120, formatter:this.dateFormat}
// {prop:"lastUpdateBy", label:"更新人", minWidth:100},
// {prop:"lastUpdateTime", label:"更新时间", minWidth:120, formatter:this.dateFormat}
],
pageRequest: { pageNum: 1, pageSize: 10 },
pageResult: {},
showOperation:false
}
},
methods: {
// 获取分页数据
findPage: function (data) {
if(data !== null) {
this.pageRequest = data.pageRequest
}
this.pageRequest.columnFilters = {userName: {name:'userName', value:this.filters.name}}
this.$api.log.findPage(this.pageRequest).then((res) => {
this.pageResult = res.data
}).then(data!=null?data.callback:'')
},
// 时间格式化
       dateFormat: function (row, column, cellValue, index){
           return format(row[column.property])
       }
},
mounted() {
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="page-container">
<!--工具栏-->
<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
<el-form :inline="true" :model="filters" :size="size">
<el-form-item>
<el-input v-model="filters.name" placeholder="名称"></el-input>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-search" :label="$t('action.search')" perms="sys:menu:view" type="primary" @click="findTreeData(null)"/>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-plus" :label="$t('action.add')" perms="sys:menu:add" type="primary" @click="handleAdd"/>
</el-form-item>
</el-form>
</div>
<!--表格树内容栏-->
<el-table :data="tableTreeDdata" stripe size="mini" style="width: 100%;"
rowKey="id" v-loading="loading" element-loading-text="$t('action.loading')">
<el-table-column
prop="id" header-align="center" align="center" width="80" label="ID">
</el-table-column>
<table-tree-column
prop="name" header-align="center" treeKey="id" width="150" label="名称">
</table-tree-column>
<el-table-column header-align="center" align="center" label="图标">
<template slot-scope="scope">
<i :class="scope.row.icon || ''"></i>
</template>
</el-table-column>
<el-table-column prop="type" header-align="center" align="center" label="类型">
<template slot-scope="scope">
<el-tag v-if="scope.row.type === 0" size="small">目录</el-tag>
<el-tag v-else-if="scope.row.type === 1" size="small" type="success">菜单</el-tag>
<el-tag v-else-if="scope.row.type === 2" size="small" type="info">按钮</el-tag>
</template>
</el-table-column>
<el-table-column
prop="parentName" header-align="center" align="center" width="120" label="上级菜单">
</el-table-column>
<el-table-column
prop="url" header-align="center" align="center" width="150"
:show-overflow-tooltip="true" label="菜单URL">
</el-table-column>
<el-table-column
prop="perms" header-align="center" align="center" width="150"
:show-overflow-tooltip="true" label="授权标识">
</el-table-column>
<el-table-column
prop="orderNum" header-align="center" align="center" label="排序">
</el-table-column>
<el-table-column
fixed="right" header-align="center" align="center" width="185" :label="$t('action.operation')">
<template slot-scope="scope">
<kt-button icon="fa fa-edit" :label="$t('action.edit')" perms="sys:menu:edit" @click="handleEdit(scope.row)"/>
<kt-button icon="fa fa-trash" :label="$t('action.delete')" perms="sys:menu:delete" type="danger" @click="handleDelete(scope.row)"/>
</template>
</el-table-column>
</el-table>
<!-- 新增修改界面 -->
<el-dialog :title="!dataForm.id ? '新增' : '修改'" width="40%" :visible.sync="dialogVisible" :close-on-click-modal="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="submitForm()"
label-width="80px" :size="size" style="text-align:left;">
<el-form-item label="菜单类型" prop="type">
<el-radio-group v-model="dataForm.type">
<el-radio v-for="(type, index) in menuTypeList" :label="index" :key="index">{{ type }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="menuTypeList[dataForm.type] + '名称'" prop="name">
<el-input v-model="dataForm.name" :placeholder="menuTypeList[dataForm.type] + '名称'"></el-input>
</el-form-item>
<el-form-item label="上级菜单" prop="parentName">
<popup-tree-input
:data="popupTreeData" :props="popupTreeProps" :prop="dataForm.parentName==null||dataForm.parentName==''?'顶级菜单':dataForm.parentName"
:nodeKey="''+dataForm.parentId" :currentChangeHandle="handleTreeSelectChange">
</popup-tree-input>
</el-form-item>
<el-form-item v-if="dataForm.type !== 0" label="授权标识" prop="perms">
<el-input v-model="dataForm.perms" placeholder="如: sys:user:add, sys:user:edit, sys:user:delete"></el-input>
</el-form-item>
<el-form-item v-if="dataForm.type === 1" label="菜单路由" prop="url">
<el-row>
<el-col :span="22">
<el-input v-model="dataForm.url" placeholder="菜单路由"></el-input>
</el-col>
<el-col :span="2" class="icon-list__tips">
<el-tooltip placement="top" effect="light" style="padding: 10px;">
<div slot="content">
<p>URL格式:</p>
<p>1.常规业务开发的功能URL,如用户管理,Views目录下页面路径为 /Sys/User, 此处填写 /sys/user。</p>
<p>2.嵌套外部网页,如通过菜单打开百度网页,此处填写 http://www.baidu.com,http:// 不可省略。</p>
<p>示例:用户管理:/sys/user 嵌套百度:http://www.baidu.com 嵌套网页:http://127.0.0.1:8000</p></div>
<i class="el-icon-warning"></i>
</el-tooltip>
</el-col>
</el-row>
</el-form-item>
<el-form-item v-if="dataForm.type !== 2" label="排序编号" prop="orderNum">
<el-input-number v-model="dataForm.orderNum" controls-position="right" :min="0" label="排序编号"></el-input-number>
</el-form-item>
<el-form-item v-if="dataForm.type !== 2" label="菜单图标" prop="icon">
<el-row>
<el-col :span="22">
<!-- <el-popover
ref="iconListPopover"
placement="bottom-start"
trigger="click"
popper-class="mod-menu__icon-popover">
<div class="mod-menu__icon-list">
<el-button
v-for="(item, index) in dataForm.iconList"
:key="index"
@click="iconActiveHandle(item)"
:class="{ 'is-active': item === dataForm.icon }">
<icon-svg :name="item"></icon-svg>
</el-button>
</div>
</el-popover> -->
<el-input v-model="dataForm.icon" v-popover:iconListPopover :readonly="false" placeholder="菜单图标名称(如:fa fa-home fa-lg)" class="icon-list__input"></el-input>
</el-col>
<el-col :span="2" class="icon-list__tips">
<fa-icon-tooltip />
</el-col>
</el-row>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button :size="size" @click="dialogVisible = false">{{$t('action.cancel')}}</el-button>
<el-button :size="size" type="primary" @click="submitForm()">{{$t('action.comfirm')}}</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import KtButton from "@/views/Core/KtButton";
import TableTreeColumn from "@/views/Core/TableTreeColumn";
import PopupTreeInput from "@/components/PopupTreeInput";
import FaIconTooltip from "@/components/FaIconTooltip";
export default {
components: {
PopupTreeInput,
KtButton,
TableTreeColumn,
FaIconTooltip
},
data() {
return {
size: "small",
loading: false,
filters: {
name: ""
},
tableTreeDdata: [],
dialogVisible: false,
menuTypeList: ["目录", "菜单", "按钮"],
dataForm: {
id: 0,
type: 1,
name: "",
parentId: 0,
parentName: "",
url: "",
perms: "",
orderNum: 0,
icon: "",
iconList: []
},
dataRule: {
name: [{ required: true, message: "菜单名称不能为空", trigger: "blur" }]
},
popupTreeData: [],
popupTreeProps: {
label: "name",
children: "children"
}
};
},
methods: {
// 获取数据
findTreeData: function() {
this.loading = true;
this.$api.menu.findMenuTree().then(res => {
this.tableTreeDdata = res.data;
this.popupTreeData = this.getParentMenuTree(res.data);
this.loading = false;
});
},
// 获取上级菜单树
getParentMenuTree: function(tableTreeDdata) {
let parent = {
parentId: 0,
name: "顶级菜单",
children: tableTreeDdata
};
return [parent];
},
// 显示新增界面
handleAdd: function() {
this.dialogVisible = true;
this.dataForm = {
id: 0,
type: 1,
typeList: ["目录", "菜单", "按钮"],
name: "",
parentId: 0,
parentName: "",
url: "",
perms: "",
orderNum: 0,
icon: "",
iconList: []
};
},
// 显示编辑界面
handleEdit: function(row) {
this.dialogVisible = true;
Object.assign(this.dataForm, row);
},
// 删除
handleDelete(row) {
this.$confirm("确认删除选中记录吗?", "提示", {
type: "warning"
}).then(() => {
let params = this.getDeleteIds([], row);
this.$api.menu.batchDelete(params).then(res => {
this.findTreeData();
this.$message({ message: "删除成功", type: "success" });
});
});
},
// 获取删除的包含子菜单的id列表
getDeleteIds(ids, row) {
ids.push({ id: row.id });
if (row.children != null) {
for (let i = 0, len = row.children.length; i < len; i++) {
this.getDeleteIds(ids, row.children[i]);
}
}
return ids;
},
// 菜单树选中
handleTreeSelectChange(data, node) {
this.dataForm.parentId = data.id;
this.dataForm.parentName = data.name;
},
// 图标选中
iconActiveHandle(iconName) {
this.dataForm.icon = iconName;
},
// 表单提交
submitForm() {
this.$refs["dataForm"].validate(valid => {
if (valid) {
this.$confirm("确认提交吗?", "提示", {}).then(() => {
this.editLoading = true;
let params = Object.assign({}, this.dataForm);
this.$api.menu.save(params).then(res => {
this.editLoading = false;
if (res.code == 200) {
this.$message({ message: "操作成功", type: "success" });
this.$refs["dataForm"].resetFields();
this.dialogVisible = false;
} else {
this.$message({
message: "操作失败, " + res.msg,
type: "error"
});
}
this.findTreeData();
});
});
}
});
}
},
mounted() {
this.findTreeData();
}
};
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="page-container">
<!--工具栏-->
<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
<el-form :inline="true" :model="filters" :size="size">
<el-form-item>
<el-input v-model="filters.name" placeholder="角色名"></el-input>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-search" :label="$t('action.search')" perms="sys:role:view" type="primary" @click="findPage(null)"/>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-plus" :label="$t('action.add')" perms="sys:role:add" type="primary" @click="handleAdd" />
</el-form-item>
</el-form>
</div>
<!--表格内容栏-->
<kt-table :height="220" permsEdit="sys:role:edit" permsDelete="sys:role:delete" :highlightCurrentRow="true" :stripe="false"
:data="pageResult" :columns="columns" :showBatchDelete="false" @handleCurrentChange="handleRoleSelectChange"
@findPage="findPage" @handleEdit="handleEdit" @handleDelete="handleDelete">
</kt-table>
<!-- </el-col> -->
<!--新增编辑界面-->
<el-dialog :title="operation?'新增':'编辑'" width="40%" :visible.sync="dialogVisible" :close-on-click-modal="false">
<el-form :model="dataForm" label-width="80px" :rules="dataFormRules" ref="dataForm" :size="size">
<el-form-item label="ID" prop="id" v-if="false">
<el-input v-model="dataForm.id" :disabled="true" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="角色名" prop="name">
<el-input v-model="dataForm.name" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="备注 " prop="remark">
<el-input v-model="dataForm.remark" auto-complete="off" type="textarea"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :size="size" @click.native="dialogVisible = false">{{$t('action.cancel')}}</el-button>
<el-button :size="size" type="primary" @click.native="submitForm" :loading="editLoading">{{$t('action.submit')}}</el-button>
</div>
</el-dialog>
<!--角色菜单,表格树内容栏-->
<div class="menu-container" :v-if="true">
<div class="menu-header">
<span><B>角色菜单授权</B></span>
</div>
<el-tree :data="menuData" size="mini" show-checkbox node-key="id" :props="defaultProps"
style="width: 100%;pading-top:20px;" ref="menuTree" :render-content="renderContent"
v-loading="menuLoading" element-loading-text="拼命加载中" :check-strictly="true"
@check-change="handleMenuCheckChange">
</el-tree>
<div style="float:left;padding-left:24px;padding-top:12px;padding-bottom:4px;">
<el-checkbox v-model="checkAll" @change="handleCheckAll" :disabled="this.selectRole.id == null"><b>全选</b></el-checkbox>
</div>
<div style="float:right;padding-right:15px;padding-top:4px;padding-bottom:4px;">
<kt-button :label="$t('action.reset')" perms="sys:role:edit" type="primary" @click="resetSelection"
:disabled="this.selectRole.id == null"/>
<kt-button :label="$t('action.submit')" perms="sys:role:edit" type="primary" @click="submitAuthForm"
:disabled="this.selectRole.id == null" :loading="authLoading"/>
</div>
</div>
</div>
</template>
<script>
import KtTable from "@/views/Core/KtTable"
import KtButton from "@/views/Core/KtButton"
import TableTreeColumn from '@/views/Core/TableTreeColumn'
import { format } from "@/utils/datetime"
export default {
components:{
KtTable,
KtButton,
TableTreeColumn
},
data() {
return {
size: 'small',
filters: {
name: ''
},
columns: [
{prop:"id", label:"ID", minWidth:50},
{prop:"name", label:"角色名", minWidth:120},
{prop:"remark", label:"备注", minWidth:120},
{prop:"createBy", label:"创建人", minWidth:120},
{prop:"createTime", label:"创建时间", minWidth:120, formatter:this.dateFormat}
// {prop:"lastUpdateBy", label:"更新人", minWidth:100},
// {prop:"lastUpdateTime", label:"更新时间", minWidth:120, formatter:this.dateFormat}
],
pageRequest: { pageNum: 1, pageSize: 10 },
pageResult: {},
operation: false, // true:新增, false:编辑
dialogVisible: false, // 新增编辑界面是否显示
editLoading: false,
dataFormRules: {
name: [
{ required: true, message: '请输入角色名', trigger: 'blur' }
]
},
// 新增编辑界面数据
dataForm: {
id: 0,
name: '',
remark: ''
},
selectRole: {},
menuData: [],
menuSelections: [],
menuLoading: false,
authLoading: false,
checkAll: false,
currentRoleMenus: [],
defaultProps: {
children: 'children',
label: 'name'
}
}
},
methods: {
// 获取分页数据
findPage: function (data) {
if(data !== null) {
this.pageRequest = data.pageRequest
}
this.pageRequest.columnFilters = {name: {name:'name', value:this.filters.name}}
this.$api.role.findPage(this.pageRequest).then((res) => {
this.pageResult = res.data
this.findTreeData()
}).then(data!=null?data.callback:'')
},
// 批量删除
handleDelete: function (data) {
this.$api.role.batchDelete(data.params).then(data.callback)
},
// 显示新增界面
handleAdd: function () {
this.dialogVisible = true
this.operation = true
this.dataForm = {
id: 0,
name: '',
remark: ''
}
},
// 显示编辑界面
handleEdit: function (params) {
this.dialogVisible = true
this.operation = false
this.dataForm = Object.assign({}, params.row)
},
// 编辑
submitForm: function () {
this.$refs.dataForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.editLoading = true
let params = Object.assign({}, this.dataForm)
this.$api.role.save(params).then((res) => {
this.editLoading = false
if(res.code == 200) {
this.$message({ message: '操作成功', type: 'success' })
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.findPage(null)
})
})
}
})
},
// 获取数据
findTreeData: function () {
this.menuLoading = true
this.$api.menu.findMenuTree().then((res) => {
this.menuData = res.data
this.menuLoading = false
})
},
// 角色选择改变监听
handleRoleSelectChange(val) {
if(val == null || val.val == null) {
return
}
this.selectRole = val.val
this.$api.role.findRoleMenus({'roleId':val.val.id}).then((res) => {
this.currentRoleMenus = res.data
this.$refs.menuTree.setCheckedNodes(res.data)
})
},
// 树节点选择监听
handleMenuCheckChange(data, check, subCheck) {
if(check) {
// 节点选中时同步选中父节点
let parentId = data.parentId
this.$refs.menuTree.setChecked(parentId, true, false)
} else {
// 节点取消选中时同步取消选中子节点
if(data.children != null) {
data.children.forEach(element => {
this.$refs.menuTree.setChecked(element.id, false, false)
});
}
}
},
// 重置选择
resetSelection() {
this.checkAll = false
this.$refs.menuTree.setCheckedNodes(this.currentRoleMenus)
},
// 全选操作
handleCheckAll() {
if(this.checkAll) {
let allMenus = []
this.checkAllMenu(this.menuData, allMenus)
this.$refs.menuTree.setCheckedNodes(allMenus)
} else {
this.$refs.menuTree.setCheckedNodes([])
}
},
// 递归全选
checkAllMenu(menuData, allMenus) {
menuData.forEach(menu => {
allMenus.push(menu)
if(menu.children) {
this.checkAllMenu(menu.children, allMenus)
}
});
},
// 角色菜单授权提交
submitAuthForm() {
let roleId = this.selectRole.id
if('admin' == this.selectRole.name) {
this.$message({message: '超级管理员拥有所有菜单权限,不允许修改!', type: 'error'})
return
}
this.authLoading = true
let checkedNodes = this.$refs.menuTree.getCheckedNodes(false, true)
let roleMenus = []
for(let i=0, len=checkedNodes.length; i<len; i++) {
let roleMenu = { roleId:roleId, menuId:checkedNodes[i].id }
roleMenus.push(roleMenu)
}
this.$api.role.saveRoleMenus(roleMenus).then((res) => {
if(res.code == 200) {
this.$message({ message: '操作成功', type: 'success' })
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.authLoading = false
})
},
renderContent(h, { node, data, store }) {
return (
<div class="column-container">
<span style="text-algin:center;margin-right:80px;">{data.name}</span>
<span style="text-algin:center;margin-right:80px;">
<el-tag type={data.type === 0?'':data.type === 1?'success':'info'} size="small">
{data.type === 0?'目录':data.type === 1?'菜单':'按钮'}
</el-tag>
</span>
<span style="text-algin:center;margin-right:80px;"> <i class={data.icon}></i></span>
<span style="text-algin:center;margin-right:80px;">{data.parentName?data.parentName:'顶级菜单'}</span>
<span style="text-algin:center;margin-right:80px;">{data.url?data.url:'\t'}</span>
</div>);
},
// 时间格式化
       dateFormat: function (row, column, cellValue, index){
           return format(row[column.property])
       }
},
mounted() {
}
}
</script>
<style scoped>
.menu-container {
margin-top: 10px;
}
.menu-header {
padding-left: 8px;
padding-bottom: 5px;
text-align: left;
font-size: 16px;
color: rgb(20, 89, 121);
}
</style>
\ No newline at end of file
<template>
<div class="page-container">
<!--工具栏-->
<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
<el-form :inline="true" :model="filters" :size="size">
<el-form-item>
<el-input v-model="filters.name" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-search" :label="$t('action.search')" perms="sys:role:view" type="primary" @click="findPage(null)"/>
</el-form-item>
<el-form-item>
<kt-button icon="fa fa-plus" :label="$t('action.add')" perms="sys:user:add" type="primary" @click="handleAdd" />
</el-form-item>
</el-form>
</div>
<div class="toolbar" style="float:right;padding-top:10px;padding-right:15px;">
<el-form :inline="true" :size="size">
<el-form-item>
<el-button-group>
<el-tooltip content="刷新" placement="top">
<el-button icon="fa fa-refresh" @click="findPage(null)"></el-button>
</el-tooltip>
<el-tooltip content="列显示" placement="top">
<el-button icon="fa fa-filter" @click="displayFilterColumnsDialog"></el-button>
</el-tooltip>
<el-tooltip content="导出" placement="top">
<el-button icon="fa fa-file-excel-o"></el-button>
</el-tooltip>
</el-button-group>
</el-form-item>
</el-form>
<!--表格显示列界面-->
<table-column-filter-dialog ref="tableColumnFilterDialog" :columns="columns"
@handleFilterColumns="handleFilterColumns">
</table-column-filter-dialog>
</div>
<!--表格内容栏-->
<kt-table :height="350" permsEdit="sys:user:edit" permsDelete="sys:user:delete"
:data="pageResult" :columns="filterColumns"
@findPage="findPage" @handleEdit="handleEdit" @handleDelete="handleDelete">
</kt-table>
<!--新增编辑界面-->
<el-dialog :title="operation?'新增':'编辑'" width="40%" :visible.sync="dialogVisible" :close-on-click-modal="false">
<el-form :model="dataForm" label-width="80px" :rules="dataFormRules" ref="dataForm" :size="size"
label-position="right">
<el-form-item label="ID" prop="id" v-if="false">
<el-input v-model="dataForm.id" :disabled="true" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="用户名" prop="name">
<el-input v-model="dataForm.name" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="真实姓名" prop="truename">
<el-input v-model="dataForm.truename" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="dataForm.password" type="password" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="机构" prop="deptName">
<el-cascader
v-model="dataForm.deptName"
size="medium"
:options="list"
:props="{ checkStrictly: true }"
style="width:100%"
clearable></el-cascader>
<!-- <popup-tree-input
:data="deptData"
:props="deptTreeProps"
:prop="dataForm.deptName"
:nodeKey="''+dataForm.deptId"
:currentChangeHandle="deptTreeCurrentChangeHandle">
</popup-tree-input> -->
</el-form-item>
<!-- <el-form-item label="邮箱" prop="email">
<el-input v-model="dataForm.email" auto-complete="off"></el-input>
</el-form-item> -->
<el-form-item label="手机" prop="mobile">
<el-input v-model="dataForm.mobile" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="角色" prop="userRoles" v-if="!operation">
<el-select v-model="dataForm.userRoles" multiple placeholder="请选择"
style="width: 100%;">
<el-option v-for="item in roles" :key="item.id"
:label="item.remark" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :size="size" @click.native="dialogVisible = false">{{$t('action.cancel')}}</el-button>
<el-button :size="size" type="primary" @click.native="submitForm" :loading="editLoading">{{$t('action.submit')}}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import PopupTreeInput from "@/components/PopupTreeInput"
import KtTable from "@/views/Core/KtTable"
import KtButton from "@/views/Core/KtButton"
import TableColumnFilterDialog from "@/views/Core/TableColumnFilterDialog"
import { format } from "@/utils/datetime"
export default {
components:{
PopupTreeInput,
KtTable,
KtButton,
TableColumnFilterDialog
},
data() {
return {
list:[],
address:"",
size: 'small',
filters: {
name: ''
},
columns: [],
filterColumns: [],
pageRequest: { pageNum: 1, pageSize: 10 },
pageResult: {},
operation: false, // true:新增, false:编辑
dialogVisible: false, // 新增编辑界面是否显示
editLoading: false,
dataFormRules: {
name: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
]
},
// 新增编辑界面数据
dataForm: {
id: 0,
name: '',
truename:'',
password: '',
deptId: 1,
deptName: '',
//email: 'test@qq.com',
mobile: '13889700023',
status: 1,
userRoles: []
},
deptData: [],
deptTreeProps: {
label: 'name',
children: 'children'
},
roles: []
}
},
methods: {
// 获取分页数据
findPage: function (data) {
if(data !== null) {
this.pageRequest = data.pageRequest
}
this.pageRequest.columnFilters = {name: {name:'name', value:this.filters.name}}
this.$api.user.findPage(this.pageRequest).then((res) => {
console.log(res.data)
this.pageResult = res.data
this.findUserRoles()
}).then(data!=null?data.callback:'')
},
// 加载用户角色信息
findUserRoles: function () {
this.$api.role.findAll().then((res) => {
// 加载角色集合
this.roles = res.data
})
},
// 批量删除
handleDelete: function (data) {
this.$api.user.batchDelete(data.params).then(data!=null?data.callback:'')
},
// 显示新增界面
handleAdd: function () {
this.dialogVisible = true
this.operation = true
this.dataForm = {
id: 0,
name: '',
password: '',
deptId: 1,
deptName: '',
email: 'test@qq.com',
mobile: '13889700023',
status: 1,
userRoles: []
}
},
// 显示编辑界面
handleEdit: function (params) {
this.dialogVisible = true
this.operation = false
this.dataForm = Object.assign({}, params.row)
let userRoles = []
for(let i=0,len=params.row.userRoles.length; i<len; i++) {
userRoles.push(params.row.userRoles[i].roleId)
}
this.dataForm.userRoles = userRoles
},
// 编辑
submitForm: function () {
this.$refs.dataForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.dataForm.deptName=this.dataForm.deptName[this.dataForm.deptName.length-1]
this.editLoading = true
let params = Object.assign({}, this.dataForm)
let userRoles = []
for(let i=0,len=params.userRoles.length; i<len; i++) {
let userRole = {
userId: params.id,
roleId: params.userRoles[i]
}
userRoles.push(userRole)
}
params.userRoles = userRoles
this.$api.user.save(params).then((res) => {
this.editLoading = false
if(res.code == 200) {
this.$message({ message: '操作成功', type: 'success' })
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
} else {
this.$message({message: '操作失败, ' + res.msg, type: 'error'})
}
this.findPage(null)
})
})
}
})
},
// 获取部门列表
findDeptTree: function () {
this.$api.dept.findDeptTree().then((res) => {
for(var i in res.data){
res.data[i].value=res.data[i].name
res.data[i].label=res.data[i].name
for(var j in res.data[i].children){
res.data[i].children[j].value=res.data[i].children[j].name
res.data[i].children[j].label=res.data[i].children[j].name
for(var n in res.data[i].children[j].children){
res.data[i].children[j].children[n].value=res.data[i].children[j].children[n].name
res.data[i].children[j].children[n].label=res.data[i].children[j].children[n].name
}
}
}
this.list=res.data
//this.deptData = res.data
})
},
// 菜单树选中
deptTreeCurrentChangeHandle (data, node) {
this.dataForm.deptId = data.id
//this.dataForm.deptName = data.name
this.dataForm.deptName = data.name
},
// 时间格式化
       dateFormat: function (row, column, cellValue, index){
           return format(row[column.property])
       },
// 处理表格列过滤显示
       displayFilterColumnsDialog: function () {
this.$refs.tableColumnFilterDialog.setDialogVisible(true)
       },
// 处理表格列过滤显示
       handleFilterColumns: function (data) {
this.filterColumns = data.filterColumns
this.$refs.tableColumnFilterDialog.setDialogVisible(false)
       },
// 处理表格列过滤显示
       initColumns: function () {
this.columns = [
{prop:"id", label:"ID", minWidth:50},
{prop:"name", label:"用户名", minWidth:120},
{prop:"deptName", label:"机构", minWidth:120},
{prop:"roleNames", label:"角色", minWidth:100},
{prop:"email", label:"邮箱", minWidth:120},
{prop:"mobile", label:"手机", minWidth:100},
{prop:"status", label:"状态", minWidth:70},
{prop:"truename", label:"真实姓名", minWidth:100},
// {prop:"createBy", label:"创建人", minWidth:120},
// {prop:"createTime", label:"创建时间", minWidth:120, formatter:this.dateFormat}
// {prop:"lastUpdateBy", label:"更新人", minWidth:100},
// {prop:"lastUpdateTime", label:"更新时间", minWidth:120, formatter:this.dateFormat}
]
this.filterColumns = JSON.parse(JSON.stringify(this.columns));
       }
},
mounted() {
this.findDeptTree()
this.initColumns()
}
}
</script>
<style scoped>
.el-tree-node__children{
overflow: scroll
}
</style>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment