Commit 4adfa9e2 by liuyunfeng

报送修改

parent 73931ea0
{1:F01null0001000001}{2:I103null193620072120072119369999N}{3:{111:001}{121:b10f3129-a9a0-4c00-8d96-357124fb9768}} {4:
:20:OR000020000096
:23B:CRED
:50K:HEBEIJIANSHE JITUAN TIANCHENJIANZHU
GONGCHENG YOUXIANGONGSI
-}
\ No newline at end of file
{1:F01null0001000001}{2:I103null090420072220072209049999N}{3:{111:001}{121:b10f3129-a9a0-4c00-8d96-357124fb9768}} {4:
:20:OR000020000098
:23B:CRED
:50K:TIANJIN ZHONGYISHENGSHI TECHNOLOGY
DEVELOPMENT CO. LTD FLOOR 42TH
:52K:ZHANGJIAKOUCANGZHOUYINGYEBU
:53K:ZHANGJIAKOUCANGZHOUYINGYEBU
:54K:/6228
ZHANGJIAKOUCONGTAIZHIHANG
:56K:/6228
ZHONGGUOGUANGDAYINHANG
:57K:/6228
ZHANGJIAKOUCANGZHOUFENHANG
:59K:/6228
SANHE HOPE FULL GRAIN OIL GROUP
FEED AND PROTEIN CO., LTD.
WEST SIDE OF HOPEFULL ROAD, YANJIAO
DIST, SANHE, HEBEI, CHINA
:70:5
:71A:SHA
:71F:CNY70000,
:72:5
:33B:CNY70000,
-}
\ No newline at end of file
{1:F01null0001000001}{2:I103null094420072220072209449999N}{3:{111:001}{121:b10f3129-a9a0-4c00-8d96-357124fb9768}} {4:
:20:OR000020000099
:23B:CRED
:50K:HEBEIJIANSHE JITUAN TIANCHENJIANZHU
GONGCHENG YOUXIANGONGSI
:54K:/2121
ZHANGJIAKOUCANGZHOUFENHANG
:56K:ZHONGGUOGUANGDAYINHANG
:59K:/2121
HEBEIJIANSHE JITUAN TIANCHENJIANZHU
GONGCHENG YOUXIANGONGSI
:70:2121dfadsad
:71A:SHA
:71F:USD12,
:72:dadaadada
:33B:USD12,
-}
\ No newline at end of file
{1:F01null0001000001}{2:I103null090320072220072209039999N}{3:{111:001}{121:b10f3129-a9a0-4c00-8d96-357124fb9768}} {4:
:20:OR000020000098
:23B:CRED
:50K:TIANJIN ZHONGYISHENGSHI TECHNOLOGY
DEVELOPMENT CO. LTD FLOOR 42TH
:52K:ZHANGJIAKOUCANGZHOUYINGYEBU
:53K:ZHANGJIAKOUCANGZHOUYINGYEBU
:54K:/6228
ZHANGJIAKOUCONGTAIZHIHANG
:56K:/6228
ZHONGGUOGUANGDAYINHANG
:57K:/6228
ZHANGJIAKOUCANGZHOUFENHANG
:59K:/6228
SANHE HOPE FULL GRAIN OIL GROUP
FEED AND PROTEIN CO., LTD.
WEST SIDE OF HOPEFULL ROAD, YANJIAO
DIST, SANHE, HEBEI, CHINA
:70:5
:71A:SHA
:71F:CNY70000,
:72:5
:33B:CNY70000,
-}
\ No newline at end of file
{1:F01null0001000001}{2:I103null094320072220072209439999N}{3:{111:001}{121:b10f3129-a9a0-4c00-8d96-357124fb9768}} {4:
:20:OR000020000099
:23B:CRED
:50K:HEBEIJIANSHE JITUAN TIANCHENJIANZHU
GONGCHENG YOUXIANGONGSI
:54K:/2121
ZHANGJIAKOUCANGZHOUFENHANG
:56K:ZHONGGUOGUANGDAYINHANG
:59K:/2121
HEBEIJIANSHE JITUAN TIANCHENJIANZHU
GONGCHENG YOUXIANGONGSI
:70:2121dfadsad
:71A:SHA
:71F:USD12,
:72:dadaadada
:33B:USD12,
-}
\ No newline at end of file
{1:F01null0001000001}{2:I202null203620072120072120369999N}{3:{119:COV}{111:001}{121:b10f3129-a9a0-4c00-8d96-357124fb9768}} {4:
:20:OR000020000097
:52K:ZHANGJIAKOUCANGZHOUFENHANG
:57K:/62289
ZHANGJIAKOUCANGZHOUYINGYEBU
:58K:/622888
ZHANGJIAKOUCANGZHOUYINGYEBU
:72:5
:50K:/6228
HEBEIJIANSHE JITUAN TIANCHENJIANZHU
GONGCHENG YOUXIANGONGSI
:56K:/62288
ZHONGGUOGUANGDAYINHANG
:57K:/62289
ZHANGJIAKOUCANGZHOUYINGYEBU
:59K:/62288
SANHE HOPE FULL GRAIN OIL GROUP
FEED AND PROTEIN CO., LTD.
WEST SIDE OF HOPEFULL ROAD, YANJIAO
DIST, SANHE, HEBEI, CHINA
:70:5
:71A:OUR
:72:5
:33B:CNY700000,
-}
\ No newline at end of file
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.
<template>
<span>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="onDialogOpen"></el-button>
<el-dialog title="交易编码" :visible.sync="dialogOpen">
<!-- <el-form size="mini" :inline="true">
<el-form-item>
<el-input v-model="model.ptyname" placeholder="请输入机构名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchPty">查询</el-button>
</el-form-item>
</el-form> -->
<el-table :data="model.ptyData" size="mini" height="270"
@row-dblclick="selectRow"
v-loading="loading"
>
<el-table-column property="cod" label="交易编码" width="100"></el-table-column>
<el-table-column property="dir" label="类型" width="100"></el-table-column>
<el-table-column property="txt" label="描述" width="350"></el-table-column>
</el-table>
<el-pagination
layout="prev, pager, next"
:total="1">
</el-pagination>
</el-dialog>
</span>
</template>
<script>
import Api from "~/service/Api"
import Utils from "~/utils"
export default {
props:['service','flag','extkey','ctx'],
data(){
return {
dialogOpen:false,
loading:true,
model:{
// ptyname:"",
// ptyData:[]
}
}
},
methods:{
onDialogOpen(){
this.dialogOpen = true
this.searchPty() //默认查询
},
async searchPty(){
let rtnmsg = await Api.post(this.service,{params: {flg:this.flag,extkey:this.extkey},data: {}})
if(rtnmsg.code == SUCCESS)
{
this.model.ptyData = rtnmsg.data
}
this.loading = false
},
selectRow(row){
//model[`${prefix}_extkey`] = row.extkey || ""
let adrblk=''
let nam =row.nam
let adr=row.adr
let nam1=row.nam1|| ""
let nam2=row.nam2|| ""
let str1=row.str1|| ""
let str2=row.str2|| ""
let ptyinr=row.ptyinr|| ""
if (nam1)
adrblk=nam1
if (nam2)
adrblk=adrblk+"\r\n"+nam2
if (str1)
adrblk=adrblk+"\r\n"+str1
if (str2)
adrblk=adrblk+"\r\n"+str2
// model[`${prefix}_adrblk`] = adrblk;
this.ctx.extkey = row.extkey || ""
this.ctx.adrblk = adrblk
this.ctx.namcn = nam
this.ctx.adrcn = adr
this.ctx.ptyinr = ptyinr
this.dialogOpen = false
// model[`${prefix}_namcn`] = nam;
// model[`${prefix}_adrcn`] = adr;
// model[`${prefix}_ptyinr`] = ptyinr;
}
}
}
</script>
\ No newline at end of file
import c_page from "./c-page.vue"
import PtyPicker from "./PtyPicker"
import UnicodePicker from "./UnicodePicker"
import DocShow from "./DocShow"
export default {
......@@ -7,5 +8,6 @@ export default {
Vue.component("c-page",c_page)
Vue.component("c-ptypicker",PtyPicker)
Vue.component("c-docshow",DocShow)
Vue.component("c-UnicodePicker",UnicodePicker)
}
}
\ No newline at end of file
......@@ -717,7 +717,7 @@ export default {
const rtnmsg = await Api.post('/cptopn/regmod_getref', { data: Utils.flatObject(this.model) })
if (rtnmsg.code == SUCCESS) {
// this.model.bas2_levyno = rtnmsg.data.bas2_levyno
this.model.rmbmod.tdbgrp.bas.levyno=rtnmsg.data.bas2_levyno
this.model.rmbmod.tdbgrp.bas.levyno=rtnmsg.data.rmbmod_tdbgrp_bas_levyno
}
else {
this.$notify.error({title: '错误',message: '服务请求失败!'});
......@@ -725,6 +725,14 @@ export default {
},
handleSearch () {
console.log('搜索')
const rtnmsg = await Api.post('/cptopn/codsel_ctyinfsub', { data: Utils.flatObject(this.model) })
if (rtnmsg.code == SUCCESS) {
// this.model.bas2_levyno = rtnmsg.data.bas2_levyno
this.model.rmbmod.tdbgrp.bas.payeecountrycode=rtnmsg.data.rmbmod_tdbgrp_bas_payeecountrycode
}
else {
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
}
}
......
......@@ -296,7 +296,7 @@
<el-input
v-model="model.bopmod.dbbmod.dbbgrp.dcl.txcode"
maxlength="32" placeholder="请输入交易编码1" disabled></el-input>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="handleSearch"></el-button>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="handleSearch1"></el-button>
</el-col>
</el-col>
</el-form-item>
......@@ -557,26 +557,9 @@ export default {
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
// Validator.validate(this.model,this.model.descriptor,async(errors,values)=>{
// if(errors)
// return
// const rtnmsg = await Api.post('cptopn/baspp_getref',{data:this.model})
// if(rtnmsg.retcod == SUCCESS)
// {
// // Notification.success({message:'数据提交成功!'})
// this.model.bas_rptno = rtnmsg.data['bas_rptno'];
// }
// else
// {
// Notification.error({message:'服务端请求失败!'})
// }
// //余下逻辑处理
// })
},
async handleSearch () {
console.log('搜索交易编码')
async handleSearch1 () {
console.log('搜索交易编码1')
let rtnmsg = await Api.post("cptopn/codsel1_selbut",{data:Utils.flatObject(this.model)})
if(rtnmsg.code == SUCCESS)
{
......
<template>
<div>
<!-- 汇申报 -->
<!-- 汇申报 -->
<el-col :span="12">
<el-col :span="22">
<el-form-item label="收付汇日期(生成申报号码时填写)">
......
......@@ -6,9 +6,10 @@
<el-form-item label="收报行(我行账户行)">
<el-col :span="24" class="m-inputbtn">
<el-col class="m-inputbtn-input">
<el-input maxlength="32" placeholder="请输入"></el-input>
<el-input v-model="model.setmod.msgmod.ori.pts.extkey" maxlength="32" placeholder="请输入"></el-input>
</el-col>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_orip_ptysel"></el-button>
<c-ptypicker service="cptopn/orip_ptysel" flag="B" :ctx="model.setmod.msgmod.ori.pts" :extkey="model.setmod.msgmod.ori.pts.extkey" />
<!-- <el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_orip_ptysel"></el-button> -->
</el-col>
</el-form-item>
</el-col>
......@@ -19,9 +20,10 @@
<el-form-item label="收款行(58A)">
<el-col :span="24" class="m-inputbtn">
<el-col class="m-inputbtn-input">
<el-input maxlength="32" placeholder="请输入"></el-input>
<el-input v-model="model.setmod.msgmod.med.pts.extkey" maxlength="32" placeholder="请输入"></el-input>
</el-col>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_medp_ptysel"></el-button>
<c-ptypicker service="cptopn/medp_ptysel" flag="B" :ctx="model.setmod.msgmod.med.pts" :extkey="model.setmod.msgmod.med.pts.extkey" />
<!-- <el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_medp_ptysel"></el-button> -->
</el-col>
</el-form-item>
</el-col>
......@@ -32,6 +34,7 @@
<el-col :span="12">
<el-col :span="22" class="form-item">
<el-input
v-model="model.setmod.msgmod.ori.pts.adrblk"
type="textarea"
:rows="3"
placeholder="">
......@@ -41,6 +44,7 @@
<el-col :span="12">
<el-col :span="22" class="form-item">
<el-input
v-model="model.setmod.msgmod.med.pts.adrblk"
type="textarea"
:rows="3"
placeholder="">
......@@ -55,9 +59,10 @@
<el-form-item label="中间行(56A)">
<el-col :span="24" class="m-inputbtn">
<el-col class="m-inputbtn-input">
<el-input maxlength="32" placeholder="请输入"></el-input>
<el-input v-model="model.setmod.msgmod.rmt.pts.extkey" maxlength="32" placeholder="请输入"></el-input>
</el-col>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_rmtp_ptysel"></el-button>
<c-ptypicker service="cptopn/rmtp_ptysel" flag="B" :ctx="model.setmod.msgmod.rmt.pts" :extkey="model.setmod.msgmod.rmt.pts.extkey" />
<!-- <el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_rmtp_ptysel"></el-button> -->
</el-col>
</el-form-item>
</el-col>
......@@ -67,9 +72,10 @@
<el-form-item label="收款行账户行(57A)">
<el-col :span="24" class="m-inputbtn">
<el-col class="m-inputbtn-input">
<el-input maxlength="32" placeholder="请输入"></el-input>
<el-input v-model="model.setmod.msgmod.pyb.pts.extkey" maxlength="32" placeholder="请输入"></el-input>
</el-col>
<el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_pybp_ptysel"></el-button>
<c-ptypicker service="cptopn/pybp_ptysel" flag="B" :ctx="model.setmod.msgmod.pyb.pts" :extkey="model.setmod.msgmod.pyb.pts.extkey" />
<!-- <el-button type="primary" icon="el-icon-search" class="m-inputbtn-btn" @click="search_pybp_ptysel"></el-button> -->
</el-col>
</el-form-item>
</el-col>
......@@ -80,6 +86,7 @@
<el-col :span="12">
<el-col :span="22" class="form-item">
<el-input
v-model="model.setmod.msgmod.rmt.pts.adrblk"
type="textarea"
:rows="3"
placeholder="">
......@@ -89,6 +96,7 @@
<el-col :span="12">
<el-col :span="22" class="form-item">
<el-input
v-model="model.setmod.msgmod.pyb.pts.adrblk"
type="textarea"
:rows="3"
placeholder="">
......
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]
}
}
}
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
/build/
/config/
/dist/
/*.js
/test/unit/coverage/
// https://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
'standard'
],
// required to lint *.vue files
plugins: [
'vue'
],
// add your custom rules here
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
}
}
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/test/unit/coverage/
/test/e2e/reports/
selenium-debug.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": {}
}
}
# vue-gjjs
> A Vue.js project
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
# run unit tests
npm run unit
# run e2e tests
npm run e2e
# run all tests
npm test
```
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
'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)
}
const createLintingRule = () => ({
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter'),
emitWarning: !config.dev.showEslintErrorsInOverlay
}
})
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: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
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]')
}
}
]
},
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 = process.env.NODE_ENV === 'testing'
? require('../config/test.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: process.env.NODE_ENV === 'testing'
? 'index.html'
: 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: 'localhost', // can be overwritten by process.env.HOST
port: 8080, // 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-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: true,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* 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"'
}
'use strict'
const merge = require('webpack-merge')
const devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>vue-gjjs</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "vue-gjjs",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "yunfeng62 <804135765@qq.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
"build": "node build/build.js"
},
"dependencies": {
"vue": "^2.5.2",
"vue-router": "^3.0.1"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-jest": "^21.0.2",
"babel-loader": "^7.1.1",
"babel-plugin-dynamic-import-node": "^1.2.0",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.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",
"babel-register": "^6.22.0",
"chalk": "^2.0.1",
"chromedriver": "^2.27.2",
"copy-webpack-plugin": "^4.0.1",
"cross-spawn": "^5.0.1",
"css-loader": "^0.28.0",
"eslint": "^4.15.0",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-node": "^5.2.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"eslint-plugin-vue": "^4.0.0",
"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",
"jest": "^22.0.4",
"jest-serializer-vue": "^0.3.0",
"nightwatch": "^0.9.12",
"node-notifier": "^5.1.2",
"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",
"selenium-server": "^3.0.1",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-jest": "^1.0.2",
"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">
<img src="./assets/logo.png">
<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: #2c3e50;
margin-top: 60px;
}
</style>
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li>
<a
href="https://vuejs.org"
target="_blank"
>
Core Docs
</a>
</li>
<li>
<a
href="https://forum.vuejs.org"
target="_blank"
>
Forum
</a>
</li>
<li>
<a
href="https://chat.vuejs.org"
target="_blank"
>
Community Chat
</a>
</li>
<li>
<a
href="https://twitter.com/vuejs"
target="_blank"
>
Twitter
</a>
</li>
<br>
<li>
<a
href="http://vuejs-templates.github.io/webpack/"
target="_blank"
>
Docs for This Template
</a>
</li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li>
<a
href="http://router.vuejs.org/"
target="_blank"
>
vue-router
</a>
</li>
<li>
<a
href="http://vuex.vuejs.org/"
target="_blank"
>
vuex
</a>
</li>
<li>
<a
href="http://vue-loader.vuejs.org/"
target="_blank"
>
vue-loader
</a>
</li>
<li>
<a
href="https://github.com/vuejs/awesome-vue"
target="_blank"
>
awesome-vue
</a>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
}
]
})
// A custom Nightwatch assertion.
// The assertion name is the filename.
// Example usage:
//
// browser.assert.elementCount(selector, count)
//
// For more information on custom assertions see:
// http://nightwatchjs.org/guide#writing-custom-assertions
exports.assertion = function (selector, count) {
this.message = 'Testing if element <' + selector + '> has count: ' + count
this.expected = count
this.pass = function (val) {
return val === this.expected
}
this.value = function (res) {
return res.value
}
this.command = function (cb) {
var self = this
return this.api.execute(function (selector) {
return document.querySelectorAll(selector).length
}, [selector], function (res) {
cb.call(self, res)
})
}
}
require('babel-register')
var config = require('../../config')
// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
src_folders: ['test/e2e/specs'],
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
// 1. start the dev server using production config
process.env.NODE_ENV = 'testing'
const webpack = require('webpack')
const DevServer = require('webpack-dev-server')
const webpackConfig = require('../../build/webpack.prod.conf')
const devConfigPromise = require('../../build/webpack.dev.conf')
let server
devConfigPromise.then(devConfig => {
const devServerOptions = devConfig.devServer
const compiler = webpack(webpackConfig)
server = new DevServer(compiler, devServerOptions)
const port = devServerOptions.port
const host = devServerOptions.host
return server.listen(port, host)
})
.then(() => {
// 2. run the nightwatch test suite against it
// to run in additional browsers:
// 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings"
// 2. add it to the --env flag below
// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
// For more information on Nightwatch's config file, see
// http://nightwatchjs.org/guide#settings-file
let opts = process.argv.slice(2)
if (opts.indexOf('--config') === -1) {
opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
}
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
}
const spawn = require('cross-spawn')
const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
runner.on('exit', function (code) {
server.close()
process.exit(code)
})
runner.on('error', function (err) {
server.close()
throw err
})
})
// For authoring Nightwatch tests, see
// http://nightwatchjs.org/guide#usage
module.exports = {
'default e2e tests': function (browser) {
// automatically uses dev Server port from /config.index.js
// default: http://localhost:8080
// see nightwatch.conf.js
const devServer = browser.globals.devServerURL
browser
.url(devServer)
.waitForElementVisible('#app', 5000)
.assert.elementPresent('.hello')
.assert.containsText('h1', 'Welcome to Your Vue.js App')
.assert.elementCount('img', 1)
.end()
}
}
{
"env": {
"jest": true
},
"globals": {
}
}
const path = require('path')
module.exports = {
rootDir: path.resolve(__dirname, '../../'),
moduleFileExtensions: [
'js',
'json',
'vue'
],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
transform: {
'^.+\\.js$': '<rootDir>/node_modules/babel-jest',
'.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
},
testPathIgnorePatterns: [
'<rootDir>/test/e2e'
],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
setupFiles: ['<rootDir>/test/unit/setup'],
mapCoverage: true,
coverageDirectory: '<rootDir>/test/unit/coverage',
collectCoverageFrom: [
'src/**/*.{js,vue}',
'!src/main.js',
'!src/router/index.js',
'!**/node_modules/**'
]
}
import Vue from 'vue'
Vue.config.productionTip = false
import Vue from 'vue'
import HelloWorld from '@/components/HelloWorld'
describe('HelloWorld.vue', () => {
it('should render correct contents', () => {
const Constructor = Vue.extend(HelloWorld)
const vm = new Constructor().$mount()
expect(vm.$el.querySelector('.hello h1').textContent)
.toEqual('Welcome to Your Vue.js App')
})
})
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