diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..8bd8530
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/index.js b/src/plugins/index.js
new file mode 100644
index 0000000..f1ac9b1
--- /dev/null
+++ b/src/plugins/index.js
@@ -0,0 +1,78 @@
+import Vue from 'vue'
+
+import XDateFormatPlugin from './dayjs/x-date-format'
+import XLodashPlugin from './lodash/x-lodash'
+import XBomeventPlugin from './bomevent/x-bomevent'
+import XRequestPlugin from './request/x-request'
+
+import { SET_TOKEN } from '../store/auth.store'
+import store from '../store'
+
+const plugins = [XDateFormatPlugin, XLodashPlugin, XBomeventPlugin]
+
+plugins.forEach((plugin) => {
+ Vue.use(plugin)
+})
+
+// 开发环境不设置 baseURL(使用相对路径),生产环境使用 .env 中的域名
+const baseURL = process.env.NODE_ENV === 'development' ? '' : process.env.VUE_APP_BASE_DOMAIN
+
+Vue.use(XRequestPlugin, {
+ baseURL,
+ headers: {
+ 'Accept-Language': 'zh-CN'
+ },
+ needShowMessage: true,
+ businessErrorCatch: function(failRes, response, needShowMessage) {
+ // 通用业务错误处理
+ // console.log(failRes, response, needShowMessage)
+ if (failRes.code === 'error' && needShowMessage) {
+ Vue.prototype.$message({
+ message: failRes.message,
+ type: 'error'
+ })
+ }
+ },
+ errorCatch: function(err, needShowMessage) {
+ console.error(err)
+ }
+})
+
+// 添加request拦截器
+Vue.addInterceptorsRequest('REQUEST_PARAMS_INTERCEPTOR', (e) => {
+ e.headers['xdaptimestamp'] = new Date().getTime()
+
+ const authStore = store.state.authModule
+ if (authStore.token) {
+ e.headers['xdaptoken'] = authStore.token
+ }
+ e.headers['xdaptenantid'] = process.env.VUE_APP_TENANT_ID
+
+ return e
+})
+
+// 添加response拦截器
+Vue.addInterceptorsResponse('RESPONSE_SUCCESS_MSG_INTERCEPTOR', (e) => {
+ const token = e && e.headers && e.headers.xdaptoken
+ if (token) {
+ store.commit(`authModule/${SET_TOKEN}`, token)
+ }
+ if (e.data.code) {
+ if (e && e.status === 200 && e.data.code === 'ok' && !e.config.disableSuccessMsg) {
+ if (e.data.interval) {
+ Vue.prototype.$message({
+ message: e.data.message,
+ type: 'success',
+ durationTime: e.data.interval
+ })
+ } else {
+ Vue.prototype.$message({
+ message: e.data.message,
+ type: 'success'
+ })
+ }
+ }
+ }
+
+ return e
+})
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..8e1b21a
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,121 @@
+/*
+ * @Author: your name
+ * @Date: 2020-05-27 09:29:16
+ * @LastEditTime: 2020-05-27 11:00:29
+ * @LastEditors: your name
+ * @Description: In User Settings Edit
+ * @FilePath: /x-product-workspace/packages/x-project-app/vue.config.js
+ */
+'use strict'
+'use strict'
+const path = require('path')
+
+const resolve = (dir) => {
+ return path.join(__dirname, './', dir)
+}
+
+const isProd = () => {
+ return process.env.NODE_ENV === 'production'
+}
+module.exports = {
+ publicPath: process.env.VUE_APP_PUBLIC_PATH,
+ assetsDir: 'public',
+ lintOnSave: isProd(),
+ productionSourceMap: false,
+ transpileDependencies: [
+ '@x-ui/x-dcloud-ui',
+ '@x-apaas/x-lib-rule-engine',
+ '@x-apaas/x-dcloud-page-web',
+ 'x-extension'
+ ],
+ runtimeCompiler: true,
+ // webpack-dev-server 相关配置
+ devServer: {
+ open: process.platform === 'darwin',
+ host: '0.0.0.0',
+ port: '8081',
+ disableHostCheck: false,
+ https: false,
+ hotOnly: false,
+ overlay: {
+ warnings: false,
+ errors: true
+ },
+ proxy: {
+ '/custom': {
+ target: 'https://apaas-meim.app.yuchai.com/apaas/backend/a5e8e08/ycgf-yf-rddata',
+ changeOrigin: true,
+ pathRewrite: {}
+ }
+ }
+ },
+ css: {
+ loaderOptions: {
+ sass: {
+ prependData: `
+ @import "@/assets/scss/variable.scss";
+ `
+ }
+ }
+ },
+ pwa: {
+ iconPaths: {
+ favicon32: './favicon.ico',
+ favicon16: './favicon.ico',
+ appleTouchIcon: './favicon.ico',
+ maskIcon: './favicon.ico',
+ msTileImage: './favicon.ico'
+ }
+ },
+ configureWebpack: () => ({
+ name: 'vue-cli3-template',
+ resolve: {
+ alias: {
+ // vue动态值
+ vue$: 'vue/dist/vue.esm.js',
+
+ // vue快速路径
+ '@': resolve('src')
+ }
+ },
+ plugins: []
+ }),
+ chainWebpack: (config) => {
+ // webpack-html-plugin
+ // config.plugin('html').tap((options) => {
+ // options[0].title = '得帆云 MDM平台'
+ // options[0].minify = {
+ // removeComments: true,
+ // collapseWhitespace: true,
+ // removeAttributeQuotes: true,
+ // useShortDoctype: true,
+ // removeEmptyAttributes: true,
+ // removeStyleLinkTypeAttributes: true,
+ // keepClosingSlash: true,
+ // minifyJS: true,
+ // minifyCSS: true,
+ // minifyURLs: true
+ // }
+ // return options
+ // })
+
+ //
+ const svgRule = config.module.rule('svg')
+ svgRule.uses.clear()
+
+ // svgRule.use("vue-svg-loader").loader("vue-svg-loader");
+ // svgRule.exclude.add(/node_modules/);
+ svgRule
+ .test(/\.svg$/)
+ .include.add(resolve('./src/assets/icon'))
+ .add(resolve('./node_modules/@x-ui/x-dcloud-ui/lib/assets/icon'))
+ .add(resolve('./node_modules/@x-apaas/x-dcloud-page-web/lib/assets/icon'))
+ .end()
+ .use('svg-sprite-loader')
+ .loader('svg-sprite-loader')
+ .options({
+ symbolId: 'svg-[name]'
+ })
+ config.resolve.symlinks(true)
+ }
+}