Compare commits

...

11 Commits

  1. 4
      .eslintrc.js
  2. 33
      babel.config.js
  3. 15785
      package-lock.json
  4. 16
      package.json
  5. 4
      src/App.vue
  6. BIN
      src/assets/table_empty.png
  7. 3
      src/components/GuipTable.vue
  8. 4
      src/components/HoverButton.vue
  9. 11
      src/components/SliderMenu.vue
  10. 20
      src/components/Tooltip.vue
  11. 28
      src/main.js
  12. 4
      src/router/index.js
  13. 4
      src/store/index.js
  14. 4
      src/style/theme/index.css
  15. 4
      src/views/agent/siteList.vue
  16. 71
      src/views/elementGroups.vue
  17. 57
      vue.config.js

4
.eslintrc.js

@ -8,7 +8,9 @@ module.exports = {
'eslint:recommended'
],
parserOptions: {
parser: '@babel/eslint-parser'
parser: '@babel/eslint-parser',
ecmaVersion: 2020, // 支持 ES2020(可选链)
sourceType: 'module'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',

33
babel.config.js

@ -1,25 +1,20 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset',
[
'@babel/preset-env',
{
useBuiltIns: 'usage', // 按需引入polyfill
corejs: 3, // 指定core-js版本
targets: {
// 指定需要兼容的浏览器版本
ie: '10',
chrome: '58',
firefox: '60',
safari: '11',
edge: '16',
},
},
],
['@vue/cli-plugin-babel/preset', {
useBuiltIns: 'usage',
corejs: 3,
targets: {
ie: '10',
chrome: '58',
firefox: '60',
safari: '11',
edge: '16'
}
}]
],
plugins: [
// 可以添加其他Babel插件
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-transform-runtime'
],
};
]
}

15785
package-lock.json

File diff suppressed because it is too large

16
package.json

@ -8,13 +8,15 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@zhicheng1012/zhicheng-components": "^1.0.18",
"axios": "^1.8.3",
"core-js": "^3.40.0",
"element-ui": "^2.15.14",
"core-js": "3.40.0",
"element-ui": "2.15.14",
"lottie-web": "^5.12.2",
"qrcode": "^1.5.4",
"regenerator-runtime": "^0.14.1",
"vue": "^2.6.14",
"vue": "2.6.14",
"vue-clickaway": "^2.2.2",
"vue-router": "^3.5.1",
"vuedraggable": "^2.24.3",
@ -37,6 +39,12 @@
"eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"vue-template-compiler": "^2.6.14"
"vue-loader": "15.9.8",
"vue-template-compiler": "2.6.14"
},
"resolutions": {
"core-js": "3.40.0",
"vue": "2.6.14",
"vue-template-compiler": "2.6.14"
}
}

4
src/App.vue

@ -31,7 +31,7 @@
import SliderMenu from '@/components/SliderMenu.vue';
import { mapState } from 'vuex';
import Header from './components/Header.vue';
import Breadcrumb from './components/Breadcrumb.vue';
// import Breadcrumb from './components/Breadcrumb.vue';
// import loadingAnimation from '@/assets/loadingAni.json' // JSON
import GlobalLoading from '@/components/GlobalLoading1.vue'
import SliderScond from '@/components/SliderScond.vue'
@ -49,7 +49,7 @@ export default {
SliderMenu,
// Footer,
Header,
Breadcrumb
// Breadcrumb
},
computed: {
...mapState(['showSidebar','showSecondSide','secondMenu','showHeader','showHeaderRight','slidermenu','customize']) // VuexshowSidebar

BIN
src/assets/table_empty.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 14 KiB

3
src/components/GuipTable.vue

@ -56,7 +56,6 @@ export default {
data() {
return {
emptyImg:require('@/assets/table_empty.png')
// loading:false
}
},
components: {
@ -138,7 +137,7 @@ export default {
.el-empty{
padding: 0;
}
::v-deep .el-empty__description{
.guip-table ::v-deep .el-empty__description{
line-height: 20px;
margin-top: 0;
}

4
src/components/HoverButton.vue

@ -40,7 +40,7 @@
</template>
<script>
import SvgIcon1 from './SvgIcon1.vue';
// import SvgIcon1 from './SvgIcon1.vue';
export default {
name: 'HoverButton',
@ -113,7 +113,7 @@ export default {
}
},
components:{
SvgIcon1
// SvgIcon1
},
data() {
return {

11
src/components/SliderMenu.vue

@ -46,13 +46,13 @@
</template>
<script>
import SetLeftMenu from '@/components/SetLeftMenu.vue'
import SvgIcon1 from '@/components/SvgIcon1.vue';
import GuipToolTip from '@/components/GuipToolTip.vue';
// import SvgIcon1 from '@/components/SvgIcon1.vue';
// import GuipToolTip from '@/components/GuipToolTip.vue';
export default {
name: 'SliderMenu',
components: {
SvgIcon1,
GuipToolTip,
// SvgIcon1,
// GuipToolTip,
SetLeftMenu
},
props: {
@ -154,7 +154,6 @@ export default {
// // menu path
// const allItems = this.menuData.flatMap(menu => menu.children);
// const targetItem = allItems.find(item => item.index === index);
// if (targetItem && this.$route.path !== targetItem.path) {
// this.$router.push(targetItem.path);
// }
@ -349,7 +348,6 @@ export default {
// .el-submenu .el-menu {
// transition: all 0.3s ease;
// }
// .el-menu--collapse .el-submenu > .el-menu {
// display: block !important;
// overflow: hidden;
@ -358,7 +356,6 @@ export default {
// height: 0;
// transform: translateY(-10px);
// }
// .el-menu--collapse .el-submenu.is-opened > .el-menu {
// opacity: 0;
// height: 0;

20
src/components/Tooltip.vue

@ -76,12 +76,20 @@ export default {
} else if (left + messageWidth > viewportWidth) {
left = viewportWidth - messageWidth - (viewportWidth -targetRect.right); //
}
this.positionStyle = {
top: `${targetRect.bottom + window.scrollY + this.offset}px`,
left: `${left}px`,
right: 'auto', // right
};
if(this.position == 'top'){
this.positionStyle = {
// top: `${targetRect.bottom + window.scrollY + this.offset}px`,
left: `${left}px`,
right: 'auto', // right
top: `${targetRect.top + window.scrollY - this.offset - this.$el.offsetHeight}px`,
};
}else{
this.positionStyle = {
top: `${targetRect.top + window.scrollY + this.offset + this.$el.offsetHeight}px`,
left: `${left}px`,
right: 'auto', // right
};
}
},
},
}

28
src/main.js

@ -3,10 +3,13 @@ import router from './router'
import store from './store'
import App from './App.vue'
import ElementUI from 'element-ui';
import ZhichengUI from '@zhicheng1012/zhicheng-components'
// import {GuipMessage} from '@zhicheng1012/zhicheng-components'
import request from "./utils/request";
import 'element-ui/lib/theme-chalk/index.css';
import './style/theme/index.css'
import './style/theme/common.scss'
// import 'element-ui/lib/theme-chalk/index.css';
// import './style/theme/index.css'
// import './style/theme/common.scss'
import '@zhicheng1012/zhicheng-components/dist/css/zhicheng-components.css';
import 'core-js/stable';
import 'regenerator-runtime/runtime';
import '@/assets/css/fonts.css';
@ -15,8 +18,12 @@ import { directive as clickaway } from 'vue-clickaway';
import GuipMessage from '@/components/GuipMessage/index';
import HeaderIcon from './utils/headerIcon'
// 复制到粘贴板
import clipboard from '@/utils/dirClipBoard';
import { modernCopyToClipboard } from '@/utils/clipboard';
// import clipboard from '@/utils/dirClipBoard';
// import { modernCopyToClipboard } from '@/utils/clipboard';
// 复制
// Vue.prototype.$copy = modernCopyToClipboard;
// import clipboard from '@/utils/dirClipBoard';
// import { modernCopyToClipboard } from '@/utils/clipboard';
//登陆
import { autoLoginByToken } from '@/utils/login'
import PositionMessage from './utils/tooltip'
@ -48,7 +55,7 @@ function filterByPermission(data, targetPermission) {
}
// 复制
Vue.prototype.$copy = modernCopyToClipboard;
// Vue.prototype.$copy = modernCopyToClipboard;
Vue.prototype.$filterByPermission = filterByPermission;
Vue.prototype.$loadingFn = LoadingService;
Vue.config.productionTip = false;
@ -56,12 +63,17 @@ Vue.config.productionTip = false;
Vue.prototype.$http = request;
Vue.prototype.$token = ''
Vue.use(ElementUI);
Vue.use(ZhichengUI)
// Vue.use(GuipMessage)
// Vue.use(clipboard);
Vue.use(PositionMessage)
Vue.prototype.$Message = GuipMessage
// Vue.prototype.$Message = GuipMessage
Vue.use(GuipMessage)
Vue.use(clipboard);
// Vue.use(clipboard);
Vue.directive('clickaway', clickaway);
Vue.mixin(HeaderIcon)

4
src/router/index.js

@ -8,7 +8,7 @@ const whiteSecondSider = [
'/agent/siteAddFinally','/agent/siteServiceAdd'
];
const blackSliderList = [
'/franchise', '/agreement', '/customizeDoc', '/agent/siteAdd', '/agent/siteServiceList', '/agent/siteTemplate','/agent/siteAddFinally','/agent/siteServiceAdd', '/agent/supplyList',
'/franchise', '/agreement', '/customizeDoc', '/ui','/agent/siteAdd', '/agent/siteServiceList', '/agent/siteTemplate','/agent/siteAddFinally','/agent/siteServiceAdd', '/agent/supplyList',
'/agent/domainList'
, '/agent/noticeList'
];
@ -96,7 +96,7 @@ const routes = [{
component: () => import( /* webpackChunkName: "ui" */ '../views/elementGroups.vue'),
meta: {
title: '公共组件示例',
hideBreadcrumb: true, // 一级页面不显示面包屑
// hideBreadcrumb: true, // 一级页面不显示面包屑
// breadcrumbParent:'首页'
}
},

4
src/store/index.js

@ -714,4 +714,6 @@ export default new Vuex.Store({
},
modules: {}
})
})

4
src/style/theme/index.css

@ -25860,7 +25860,9 @@ border-color:#006AFF !important;
}
.el-empty__description {
margin-top: 20px
/* margin-top: 20px */
line-height: 20px;
margin-top: 0;
}
.el-empty__description p {

4
src/views/agent/siteList.vue

@ -109,7 +109,7 @@
<script>
import GuipTable from '@/components/GuipTable.vue';
// import GuipTable from '@/components/GuipTable.vue';
import SvgIcon from '@/components/SvgIcon.vue';
import GuipSelect from '@/components/GuipSelect.vue';
import GuipButton from '@/components/GuipButton.vue';
@ -120,7 +120,7 @@ import HoverButton from '@/components/HoverButton.vue'
export default {
name: 'siteList',
components: {
GuipTable,
// GuipTable,
SvgIcon,
GuipSelect,
GuipButton,

71
src/views/elementGroups.vue

@ -27,7 +27,6 @@
</template>
</PromptText>
<div class="ele-item">
<label for="">实时预览外层嵌套</label>
@ -126,6 +125,8 @@
'0' ? '单元格局中' : '单元格局中' }}</span>
<svg-icon :size="16" :path="require('@/assets/register/tableEdit.svg')"
:color="'#8A9099'" :hoverColor="'#006AFF'" />
<!-- <SvgIcon1 :iconPath="require(`@/assets/register/tableEdit.svg`)" defaultColor="#8A9099" :size="16"
activeColor="#006AFF" /> -->
</div>
</GuipToolTip>
@ -214,6 +215,7 @@
<label for="">输入框</label>
<GuipInput ref="GuipInput" v-model="form.input1" width="200px" height="30px"
placeholder="这是自定义默认提示语" />
<GuipInput ref="GuipInput" width="200px" label="售价" placeholder="请输入售价" unit="元"></GuipInput>
<div style="width: 20px;height: 10px;"></div>
@ -493,6 +495,7 @@
</template>
</CustomDropdown>
</div>
<SvgIcon1 :iconPath="require(`@/assets/menu/home-bread.svg`)" defaultColor="#8A9099" :size="16" activeColor="#006AFF"/>
<el-button type="primary" @click="submitForm">Submit</el-button>
@ -556,8 +559,8 @@
</template>
</GuipToolTip>
<GuipToolTip placement="bottom" effect="light" content="点击进入编辑">
<svg-icon :path="require('@/assets/register/tableEdit.svg')" :color="'#8A9099'"
:hoverColor="'#006AFF'" />
<SvgIcon1 :iconPath="require(`@/assets/register/tableEdit.svg`)" defaultColor="#8A9099" :size="16"
activeColor="#006AFF" />
</GuipToolTip>
</div>
@ -600,41 +603,43 @@
import { rules } from "../assets/vabForm";
import CustomDropdown from '@/components/CustomDropdown.vue';
import GuipSwitch from '@/components/GuipSwitch.vue';
import GuipDialog from '@/components/GuipDialog.vue';
import GuipRadio from '@/components/GuipRadio.vue';
import GuipButton from '@/components/GuipButton.vue';
import GuipInput from '@/components/GuipInput.vue';
import GuipSelect from '@/components/GuipSelect.vue';
import GuipTable from '@/components/GuipTable.vue';
import GuipTextarea from '@/components/GuipTextarea.vue'
import GuipToolTip from '@/components/GuipToolTip.vue'
// import GuipSwitch from '@/components/GuipSwitch.vue';
// import GuipDialog from '@/components/GuipDialog.vue';
// import GuipRadio from '@/components/GuipRadio.vue';
// import GuipButton from '@/components/GuipButton.vue';
// import { GuipButton } from '@zhicheng1012/zhicheng-components'
// import GuipInput from '@/components/GuipInput.vue';
// import GuipSelect from '@/components/GuipSelect.vue';
// import GuipTable from '@/components/GuipTable.vue';
// import GuipTextarea from '@/components/GuipTextarea.vue'
// import GuipToolTip from '@/components/GuipToolTip.vue'
import HoverButton from '@/components/HoverButton.vue'
import GuipFormItem from '@/components/GuipFormItem.vue'
import SvgIcon from '@/components/SvgIcon.vue';
import PromptText from "@/components/PromptText.vue";
import DevicePreview from "@/components/PreviewTab.vue";
// import GuipFormItem from '@/components/GuipFormItem.vue'
// import SvgIcon from '@/components/SvgIcon.vue';
// import PromptText from "@/components/PromptText.vue";
// import DevicePreview from "@/components/PreviewTab.vue";
import domainBind from "@/components/domainBind.vue";
// import SvgIcon1 from "@/components/SvgIcon1.vue";
export default {
name: 'HomeView',
components: {
// PromptText,
domainBind,
PromptText,
GuipTextarea,
GuipTable,
GuipSwitch,
GuipDialog,
GuipRadio,
GuipButton,
GuipInput,
GuipSelect,
GuipToolTip,
// GuipTextarea,
// GuipTable,
// GuipSwitch,
// GuipDialog,
// GuipRadio,
// GuipButton,
// GuipInput,
// GuipSelect,
// GuipToolTip,
HoverButton,
SvgIcon,
GuipFormItem,
DevicePreview,
// SvgIcon,
// GuipFormItem,
// DevicePreview,
CustomDropdown
},
data() {
@ -977,6 +982,13 @@ export default {
mounted() {
this.getList();
this.getStagePurchase()
// console.log(this.$Message,'=$Message----');
// this.$Message.success('')
this.$Message({
message: '这是一条普通消息',
type: 'info',
duration: 3000
})
// this.$loadingFn.show()
// setInterval(()=>{
// this.$loadingFn.hide()
@ -1306,6 +1318,7 @@ export default {
}
</script>
<style lang="scss" scoped>
.elementWrap {
/* width: 100%; */
padding: 30px 40px;

57
vue.config.js

@ -1,7 +1,7 @@
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
// publicPath: '/new/',
devServer: {
proxy: {
'/supernew': {
@ -18,23 +18,32 @@ module.exports = {
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
},
},
],
options: {
plugins: [
'@babel/plugin-proposal-optional-chaining', // 支持 ?.
// '@babel/plugin-proposal-nullish-coalescing-operator' // 支持 ??
]
}
}
}
]
},
optimization: {
minimizer: [
new TerserPlugin({
terserOptions: {
format: {
comments: /^\**!|@preserve|@license|@cc_on/i // 保留特定注释
comments: /^\**!|@preserve|@license|@cc_on/i
},
compress: {
drop_console: process.env.NODE_ENV === 'production' // 生产环境移除 console
}
},
extractComments: false // 不提取注释到单独文件
extractComments: false
})
]
},
@ -42,10 +51,36 @@ module.exports = {
filename: '[name].[contenthash:8].js',
chunkFilename: '[name].[contenthash:8].js'
},
resolve:{
alias:{
'@':path.resolve(__dirname, 'src/')
resolve: {
alias: {
'@': path.resolve(__dirname, 'src/')
}
}
},
chainWebpack: config => {
// 关键配置:让 Babel 处理 Vue 模板中的现代语法
config.module
.rule('vue')
.use('vue-loader')
.tap(options => {
options.compilerOptions = {
...(options.compilerOptions || {}),
whitespace: 'condense',
preserveWhitespace: false,
// 允许模板中使用现代 JS 语法(如 ?.)
transpileOptions: {
transforms: {
dangerousTaggedTemplateString: true,
modules: false
}
}
};
return options;
});
// 生产环境配置
if (process.env.NODE_ENV === 'production') {
config.optimization.minimize(true);
}
}
};
Loading…
Cancel
Save