提交 5a141514 编写于 作者: X xiangxi99

Sat Oct 7 11:36:00 CST 2023 inscode

上级 7315d1d8
'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'
})
} 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: './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
...@@ -7,8 +7,10 @@ ...@@ -7,8 +7,10 @@
"preview": "vite preview --port 4173" "preview": "vite preview --port 4173"
}, },
"dependencies": { "dependencies": {
"element-ui": "^2.15.14",
"guess": "^1.0.2", "guess": "^1.0.2",
"vue": "^3.2.37" "vue": "^3.2.37",
"vue-router": "^4.2.5"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^3.0.1", "@vitejs/plugin-vue": "^3.0.1",
......
<script setup> <!-- <script setup>
import HelloWorld from './components/HelloWorld.vue' import HelloWorld from './components/HelloWorld.vue'
import TheWelcome from './components/TheWelcome.vue' import TheWelcome from './components/TheWelcome.vue'
</script> </script>
...@@ -44,4 +44,45 @@ header { ...@@ -44,4 +44,45 @@ header {
flex-wrap: wrap; flex-wrap: wrap;
} }
} }
</style> -->
<template>
<div id="app">
<router-view />
</div>
</template>
<script>
export default {
name: "App",
};
</script>
<style>
html,
body {
height: 100%;
overflow: auto;
margin: 0;
}
html {
overflow-y: auto;
}
#app {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}
html,
body {
height: 100%;
}
/* ::-webkit-scrollbar {
width: 0 !important;
}
::-webkit-scrollbar {
width: 0 !important;
height: 0;
} */
</style> </style>
此差异已折叠。
<template>
<div>
<el-table
:data="tableData1"
border
:header-cell-style="{'text-align':'center'}"
:cell-style="{'text-align':'center'}"
>
<el-table-column
label="序号"
prop="id"
width="50"
></el-table-column>
<el-table-column
label="机构代码"
prop="jgdm"
></el-table-column>
<el-table-column
label="机构名称"
prop="jgmc"
>
</el-table-column>
<el-table-column
label="机构类型"
prop="jglx"
></el-table-column>
<el-table-column
label="上级机构代码"
prop="sjjgdm"
></el-table-column>
<el-table-column
label="上级机构名称"
prop="sjjgmc"
></el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: "FHCJGXPZB",
data() {
return {
tableData1: [
{
id: 1,
jgdm: "1100",
jgmc: "北京分行",
jglx: "一级分行",
sjjgdm: "1000",
sjjgmc: "国家开发银行",
},
{
id: 2,
jgdm: "1200",
jgmc: "天津分行",
jglx: "一级分行",
sjjgdm: "1000",
sjjgmc: "国家开发银行",
},
{
id: 3,
jgdm: "1310",
jgmc: "河北分行",
jglx: "一级分行",
sjjgdm: "1000",
sjjgmc: "国家开发银行",
},
{
id: 4,
jgdm: "1320",
jgmc: "河北雄安分行",
jglx: "二级分行",
sjjgdm: "1310",
sjjgmc: "河北分行",
},
{
id: 5,
jgdm: "1410",
jgmc: "山西分行",
jglx: "一级分行",
sjjgdm: "1000",
sjjgmc: "国家开发银行",
},
{
id: 6,
jgdm: "1510",
jgmc: "内蒙古自治区分行",
jglx: "一级分行",
sjjgdm: "1000",
sjjgmc: "国家开发银行",
},
{
id: 7,
jgdm: "2110",
jgmc: "辽宁分行",
jglx: "一级分行",
sjjgdm: "1000",
sjjgmc: "国家开发银行",
},
{
id: 8,
jgdm: "2120",
jgmc: "大连分行",
jglx: "二级分行",
sjjgdm: "2110",
sjjgmc: "辽宁",
},
],
};
},
//监听属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
//如果页面有keep-alive缓存功能,这个函数会触发
activated() {},
//方法集合
methods: {
},
};
</script>
<style lang='scss' scoped>
/deep/.el-input {
.el-input__inner {
height: 30px;
width: 180px;
}
}
/deep/.el-select {
.el-input {
.el-input__inner {
height: 30px;
width: 180px;
}
}
}
/deep/.el-form {
.el-form-item {
margin-bottom: 5px;
}
.el-checkbox {
margin-right: 10px;
}
}
.tips {
font-size: 14px;
color: #606266;
margin: 10px 0;
display: flex;
}
</style>
<template>
<div>
<el-form
:model="form1"
:inline="true"
>
<el-form-item label="视图英文名">
<el-select
v-model="value1"
filterable
multiple
placeholder="请选择"
>
<el-option
v-for="(v,i) in options1"
:key="i"
:label="v.label"
:value="v .value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="试图中文名">
<el-select
v-model="value2"
filterable
multiple
placeholder="请选择"
>
<el-option
v-for="(v,i) in options2"
:key="i"
:label="v.label"
:value="v.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="来源表">
<el-select
v-model="value3"
filterable
multiple
placeholder="请选择"
>
<el-option
v-for="(v,i) in options3"
:key="i"
:label="v.label"
:value="v.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="创建日期">
<el-date-picker
v-model="value4"
type="date"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
</el-form>
<div style="text-align:right;margin-bottom:10px">
<el-button
size="mini"
type="primary"
>查询</el-button>
<el-button
size="mini"
type="primary"
>重置</el-button>
<el-button
size="mini"
type="primary"
@click="addView"
>新建</el-button>
</div>
<el-table
:data="tableData1"
border
:header-cell-style="{'text-align':'center'}"
:cell-style="{'text-align':'center'}"
>
<el-table-column
label="序号"
prop="id"
width="50"
></el-table-column>
<el-table-column
label="视图英文名"
prop="stywm"
></el-table-column>
<el-table-column
label="视图中文名"
prop="stzwm"
>
</el-table-column>
<el-table-column
label="来源表"
prop="lyb"
></el-table-column>
<el-table-column
label="创建日期"
prop="cjrq"
></el-table-column>
<el-table-column
label="更新日期"
prop="gxrq"
></el-table-column>
<el-table-column
label="操作人"
prop="czr"
></el-table-column>
<el-table-column
label="操作"
width="300"
>
<template slot-scope="scope">
<el-button type="text">修改</el-button>
<el-button type="text">删除</el-button>
<el-button
type="text"
@click="beginConf(scope.row)"
>参数配置</el-button>
<el-button
type="text"
@click="viewData"
>查看明细数据</el-button>
</template>
</el-table-column>
</el-table>
<div class="tips">
<span style="margin-right:5px">菜单说明:</span>
<div>
<div>1、查询条件:提供"视图英文名"、"视图英文名"、"来源表"、"创建日期等查询条件,可多选、支持模糊查询,""创建日期"范围模糊至创建月份</div>
<div>2、提供"基础数据视图配置"维护功能,可查询、创建、修改、删除视图</div>
<div>3、功能说明:</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;(1)[参数配置]:可为"基础数据视图"设置参数,及参数默认值</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;(2)[查看明细数据]:根据"参数配置"提供视图数据</div>
</div>
</div>
<el-dialog
title="新建/修改基础数据视图"
:visible.sync='addDialog'
width="80%"
>
<div style="font-size:16px;color:black;font-weight:bold;margin-bottom:10px">视图信息</div>
<el-form
:model="addForm"
:inline="true"
label-width="100px"
>
<el-form-item label="来源表">
<el-select
v-model="addForm.value1"
multiple
filterable
placeholder="请选择"
>
<el-option
v-for="(v,i) in addForm.options1"
:key="i"
:label="v.label"
:value="v .value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="视图英文名">
<el-input
v-model="addForm.value2"
placeholder="自动生成,可修改"
></el-input>
</el-form-item>
<el-form-item label="视图中文名">
<el-input
v-model="addForm.value3"
placeholder="文本,手工输入"
></el-input>
</el-form-item>
</el-form>
<div style="display:flex;justify-content:space-between">
<div style="font-size:16px;color:black;font-weight:bold;margin-bottom:10px">字段信息</div>
<el-button type="text">删除</el-button>
</div>
<div
v-for="(v,i) in formList"
:key="i"
>
<el-form
:model="v.form"
label-width="100px"
:inline="true"
>
<el-form-item>{{i+1}}</el-form-item>
<el-form-item
label="字段英文名"
:required="true"
>
<el-input
v-model="v.form.value1"
placeholder="自动回显,可修改"
></el-input>
</el-form-item>
<el-form-item
label="字段中文名"
:required="true"
>
<el-input
v-model="v.form.value2"
placeholder="自动回显,可修改"
></el-input>
</el-form-item>
</el-form>
</div>
<i
class="el-icon-circle-plus-outline"
style="font-weight:650;font-size:16px;cursor: pointer;"
@click="addField"
></i>
<div style="text-align:right;margin:10px 0">
<el-button
type="primary"
size="mini"
>提交</el-button>
<el-button
type="primary"
size="mini"
>重置</el-button>
<el-button
type="primary"
size="mini"
>返回</el-button>
</div>
<div class="tips">
<span style="margin-right:5px">页面说明:</span>
<div>
<div>1、提供基础数据视图的新建与修改功能</div>
<div>2、视图生成规则:</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;(1)视图英文名:"V_"+来源表英文名,若来源表为多个,自动使用第一个,且英文名可修改</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;(2)字段信息:可批量添加视图字段,即点击"+"新增字段时,弹出来源表中英文字段列表,可多选、支持模糊查询.字段名称根据来源表字段自动回西安、并可修改</div>
</div>
</div>
</el-dialog>
<el-dialog
title="基础数据视图参数配置"
:visible.sync='confDialog'
width="80%"
>
<div style="font-size:16px;color:black;font-weight:bold;margin-bottom:10px">视图信息</div>
<el-form
:model="confForm"
:inline="true"
label-width="100px"
>
<el-form-item label="视图英文名">
<el-input
v-model="confForm.value1"
placeholder="自动回显"
></el-input>
</el-form-item>
<el-form-item label="视图中文名">
<el-input
v-model="confForm.value2"
placeholder="自动回显"
></el-input>
</el-form-item>
</el-form>
<div style="display:flex;justify-content:space-between">
<div style="font-size:16px;color:black;font-weight:bold;margin-bottom:10px">字段信息</div>
<el-button type="text">删除</el-button>
</div>
<el-form
:model="form3"
label-width="100px"
>
<el-form-item label="数据日期">
<el-date-picker
v-model="form3.value1"
type="date"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="机构名称">
<el-select
v-model="form3.value2"
multiple
filterable
placeholder="请选择"
>
<el-option
v-for="(v,i) in form3.options1"
:key="i"
:label="v.label"
:value="v .value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="行业类型">
<el-select
v-model="form3.value3"
multiple
filterable
placeholder="请选择"
>
<el-option
v-for="(v,i) in form3.options2"
:key="i"
:label="v.label"
:value="v .value"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div style="text-align:right;margin:10px 0">
<el-button
type="primary"
size="mini"
>提交</el-button>
<el-button
type="primary"
size="mini"
>重置</el-button>
<el-button
type="primary"
size="mini"
>返回</el-button>
</div>
<div class="tips">
<span style="margin-right:5px">页面说明:</span>
<div>
<div>1、提供基础数据视图默认参数的配置功能,明细数据按照参数配置生成</div>
<div>2、提供参数配置项的新增、修改、删除功能,配置项来源于视图字段</div>
</div>
</div>
</el-dialog>
<el-dialog
title="明细数据"
:visible.sync='dataDialog'
width="80%"
>
<el-table
:data="dataDetail"
border
:header-cell-style="{'text-align':'center'}"
:cell-style="{'text-align':'center'}"
>
<el-table-column
label="序号"
prop="id"
width="50px"
></el-table-column>
<el-table-column
label="数据日期"
prop="sjrq"
></el-table-column>
<el-table-column
label="客户编号"
prop="khbh"
></el-table-column>
<el-table-column
label="CRM客户编号"
prop="crmkhbh"
></el-table-column>
<el-table-column
label="客户名称"
prop="khmc"
></el-table-column>
<el-table-column
label="客户类型"
prop="khlx"
width="80px"
></el-table-column>
<el-table-column
label="生命周期"
prop="smzq"
width="80px"
></el-table-column>
<el-table-column
label="表内贷款余额"
prop="bndkye"
></el-table-column>
<el-table-column
label="合同笔数"
prop="htbs"
width="50px"
></el-table-column>
<el-table-column
label="是否涉密客户"
prop="sfsmkh"
width="50px"
></el-table-column>
</el-table>
<div class="tips">
<span style="margin-right:5px">页面说明:</span>
<div>
<div>根据视图参数配置展示明细数据,若视图未配置参数,则默认为全部</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "JCSJSTGL",
data() {
return {
form1: {},
options1: [
{
value: "选项1",
label: "V_PDM_CUST_INFO",
},
{
value: "选项2",
label: "V_PDM_CONTRACT_INFO",
},
{
value: "选项3",
label: "V_PDM_LOAN_INFO",
},
{
value: "选项4",
label: "V_PDM_PROJECT_INFO",
},
],
value1: [],
options2: [
{
value: "选项1",
label: "对公客户信息",
},
{
value: "选项2",
label: "信贷合同信息",
},
{
value: "选项3",
label: "贷款合约信息",
},
{
value: "选项4",
label: "贷款项目信息",
},
],
value2: [],
options3: [
{
value: "选项1",
label: "PDM_CUST_INFO",
},
{
value: "选项2",
label: "PDM_CONTRACT_INFO",
},
{
value: "选项3",
label: "PDM_LOAN_INFO",
},
{
value: "选项4",
label: "PDM_PROJECT_INFO",
},
],
value3: [],
value4: "",
tableData1: [
{
id: 1,
stywm: "V_PDM_CUST_INFO",
stzwm: "对公客户信息",
lyb: "PDM_CUST_INFO",
cjrq: "2023/3/3",
gxrq: "2023/5/3",
czr: "张三",
},
{
id: 2,
stywm: "V_PDM_CONTRACT_INFO",
stzwm: "信贷合同信息",
lyb: "PDM_CONTRACT_INFO",
cjrq: "2023/3/3",
gxrq: "2023/5/3",
czr: "张三",
},
{
id: 3,
stywm: "V_PDM_LOAN_INFO",
stzwm: "贷款合约信息",
lyb: "PDM_LOAN_INFO",
cjrq: "2023/3/3",
gxrq: "2023/5/3",
czr: "张三",
},
{
id: 4,
stywm: "V_PDM_PROJECT_INFO",
stzwm: "贷款项目信息",
lyb: "PDM_PROJECT_INFO",
cjrq: "2023/3/3",
gxrq: "2023/5/3",
czr: "张三",
},
],
addDialog: false,
addForm: {
value1: [],
options1: [
{
value: "选项1",
label: "PDM_CUST_INFO",
},
{
value: "选项2",
label: "PDM_CONTRACT_INFO",
},
{
value: "选项3",
label: "PDM_LOAN_INFO",
},
{
value: "选项4",
label: "PDM_PROJECT_INFO",
},
],
value2: "",
value3: "",
},
formList: [
{
form: {
value1: "",
value2: "",
},
},
{
form: {
value1: "",
value2: "",
},
},
{
form: {
value1: "",
value2: "",
},
},
],
confDialog: false,
confForm: {
value1: "",
value2: "",
},
form3: {
value1: "",
value2: [],
value3: [],
options1: [
{
value: "选项1",
label: "机构1",
},
{
value: "选项2",
label: "机构2",
},
{
value: "选项3",
label: "机构3",
},
{
value: "选项4",
label: "机构4",
},
],
options2: [
{
value: "选项1",
label: "行业1",
},
{
value: "选项2",
label: "行业2",
},
{
value: "选项3",
label: "行业3",
},
{
value: "选项4",
label: "行业4",
},
],
},
dataDialog: false,
dataDetail: [
{
id: 1,
sjrq: "20230702",
khbh: "553820210020832482",
crmkhbh: "33949",
khmc: "鞍山钢铁集团有限公司",
khlx: "企业",
smzq: "成熟期",
bndkye: "7299500000",
htbs: "8",
sfsmkh: "",
},
{
id: 2,
sjrq: "20230702",
khbh: "201820210020837120",
crmkhbh: "35473",
khmc: "乌鲁木齐城市建设投资(集团)有限公司",
khlx: "企业",
smzq: "成熟期",
bndkye: "600000000",
htbs: "4",
sfsmkh: "",
},
{
id: 3,
sjrq: "20230702",
khbh: "877820210020832064",
crmkhbh: "33519",
khmc: "浏阳市城市建设集团有限公司",
khlx: "企业",
smzq: "成熟期",
bndkye: "829000000",
htbs: "10",
sfsmkh: "",
},
{
id: 4,
sjrq: "20230702",
khbh: "517820210020916327",
crmkhbh: "33949",
khmc: "启东城投集团有限公司",
khlx: "企业",
smzq: "成熟期",
bndkye: "69000000",
htbs: "1",
sfsmkh: "",
},
{
id: 5,
sjrq: "20230702",
khbh: "617820210020860670",
crmkhbh: "54743",
khmc: "海口市水务集团有限公司",
khlx: "企业",
smzq: "成熟期",
bndkye: "0",
htbs: "0",
sfsmkh: "",
},
],
};
},
//监听属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
//如果页面有keep-alive缓存功能,这个函数会触发
activated() {},
//方法集合
methods: {
addView() {
this.addDialog = true;
},
addField() {
this.formList.push({
form: {
value1: "",
value2: "",
},
});
},
beginConf() {
this.confDialog = true;
},
viewData() {
this.dataDialog = true;
},
},
};
</script>
<style lang='scss' scoped>
/deep/.el-input {
.el-input__inner {
height: 30px;
width: 180px;
}
}
/deep/.el-select {
.el-input {
.el-input__inner {
height: 30px;
width: 180px;
}
}
}
/deep/.el-form {
.el-form-item {
margin-bottom: 5px;
.el-date-editor {
width: 140px;
}
}
.el-checkbox {
margin-right: 10px;
}
}
.tips {
font-size: 14px;
color: #606266;
margin: 10px 0;
display: flex;
}
</style>
此差异已折叠。
<template>
<div>
<el-form
:model="form"
:inline="true"
class="form1"
label-width="90px"
>
<el-form-item label="统计时间段">
<el-date-picker
v-model="startDate"
type="date"
placeholder="开始日期"
>
</el-date-picker>
<el-date-picker
v-model="endDate"
type="date"
placeholder="结束日期"
>
</el-date-picker>
<el-button
type="primary"
size="mini"
>生成报告</el-button>
</el-form-item>
</el-form>
<div style="text-align:right;margin-bottom:10px">
<el-button
type="primary"
size="mini"
>生成报告(全量)</el-button>
<el-button
type="primary"
size="mini"
>生成上年报告</el-button>
<el-button
type="primary"
size="mini"
>生成上月报告</el-button>
<el-button
type="primary"
size="mini"
>生成近一年报告</el-button>
<el-button
type="primary"
size="mini"
>删除</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
border
:header-cell-style="{'text-align':'center'}"
:cell-style="{'text-align':'center'}"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
>
</el-table-column>
<el-table-column
prop="id"
label="序号"
width="50"
>
</el-table-column>
<el-table-column
prop="bgmc"
label="报告名称"
width="200"
>
<template slot-scope="scope">
<el-button type="text">{{scope.row.bgmc}}</el-button>
</template>
</el-table-column>
<el-table-column
prop="tjksrq"
label="统计开始日期"
>
</el-table-column><el-table-column
prop="tjjsrq"
label="统计结束日期"
>
</el-table-column><el-table-column
prop="bgbdsl"
label="变更补丁数量"
>
</el-table-column><el-table-column
prop="sjxtsl"
label="涉及系统数量"
>
</el-table-column><el-table-column
prop="sjfhsl"
label="涉及分行数量"
>
</el-table-column><el-table-column
prop="sjbmsl"
label="涉及部门数量"
>
</el-table-column><el-table-column
prop="bgpd"
label="报告频度"
>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
type="text"
size="small"
>
下载
</el-button>
<el-button
type="text"
size="small"
>
上传
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: "SJBGBG",
data() {
return {
startDate: "",
endDate: "",
form: {},
tableData: [
{
id: 1,
bgmc: "2022年03月度数据变更报告",
tjksrq: "2022/3/1",
tjjsrq: "2022/3/31",
bgbdsl: "60",
sjxtsl: "21",
sjfhsl: "6",
sjbmsl: "9",
bgpd: "月报",
},
{
id: 2,
bgmc: "2021年度数据变更报告",
tjksrq: "2021//1",
tjjsrq: "2022/3/31",
bgbdsl: "60",
sjxtsl: "21",
sjfhsl: "6",
sjbmsl: "9",
bgpd: "月报",
},
],
multipleSelection:[]
};
},
//监听属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {
},
//生命周期 - 创建完成(可以访问当前this实例)
created() {
},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
//如果页面有keep-alive缓存功能,这个函数会触发
activated() {},
//方法集合
methods: {
handleSelectionChange(val) {
this.multipleSelection = val;
},
},
};
</script>
<style lang='scss' scoped>
.d-header {
margin-bottom: 10px;
}
/deep/.el-input {
.el-input__inner {
height: 30px;
width: 150px;
}
}
/deep/.el-select {
.el-input {
.el-input__inner {
height: 30px;
width: 180px;
}
}
}
/deep/.el-form {
.el-form-item {
margin-bottom: 5px;
}
.el-checkbox {
margin-right: 10px;
}
}
/deep/.form1 {
.el-form-item {
.el-form-item__content {
.el-input__inner {
width: 170px;
}
}
}
}
/deep/.el-input {
.el-input__inner {
width: 180px;
}
}
// /deep/.el-checkbox-group {
// display: flex;
// flex-direction: column;
// }
.top-bor {
display: flex;
border: 1px solid #ebeef5;
border-bottom: none;
height: 30px;
color: #606266;
background-color: whitesmoke;
.top-left {
padding-left: 5px;
width: 635px;
border-right: 1px solid #ebeef5;
// margin-right: 2px;
}
.top-right {
padding-left: 5px;
font-size: 14px;
line-height: 30px;
width: 648px;
display: flex;
justify-content: space-between;
}
}
.d-container {
display: flex;
.left {
margin-right: -1px;
flex: 1;
.title-mid {
background-color: whitesmoke;
color: #606266;
border: 1px solid #ebeef5;
border-top: none;
border-bottom: none;
height: 30px;
line-height: 30px;
font-size: 14px;
padding-left: 5px;
}
}
.right {
flex: 1;
border: 1px solid #ebeef5;
// border-left: none;
padding-left: 10px;
.form-reason {
/deep/.el-form-item__label {
margin-top: 30px;
}
}
}
/deep/.d-container {
.el-select {
.el-input__inner {
width: 140px;
}
}
}
}
</style>
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册