Compare commits

...

11 Commits

  1. 4
      .eslintrc.js
  2. 23
      babel.config.js
  3. 14051
      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. 12
      src/components/Tooltip.vue
  11. 28
      src/main.js
  12. 4
      src/router/index.js
  13. 2
      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. 51
      vue.config.js

4
.eslintrc.js

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

23
babel.config.js

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

14051
package-lock.json

File diff suppressed because it is too large

16
package.json

@ -8,13 +8,15 @@
"lint": "vue-cli-service lint" "lint": "vue-cli-service lint"
}, },
"dependencies": { "dependencies": {
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@zhicheng1012/zhicheng-components": "^1.0.18",
"axios": "^1.8.3", "axios": "^1.8.3",
"core-js": "^3.40.0", "core-js": "3.40.0",
"element-ui": "^2.15.14", "element-ui": "2.15.14",
"lottie-web": "^5.12.2", "lottie-web": "^5.12.2",
"qrcode": "^1.5.4", "qrcode": "^1.5.4",
"regenerator-runtime": "^0.14.1", "regenerator-runtime": "^0.14.1",
"vue": "^2.6.14", "vue": "2.6.14",
"vue-clickaway": "^2.2.2", "vue-clickaway": "^2.2.2",
"vue-router": "^3.5.1", "vue-router": "^3.5.1",
"vuedraggable": "^2.24.3", "vuedraggable": "^2.24.3",
@ -37,6 +39,12 @@
"eslint-plugin-vue": "^8.0.3", "eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7", "sass": "^1.32.7",
"sass-loader": "^12.0.0", "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 SliderMenu from '@/components/SliderMenu.vue';
import { mapState } from 'vuex'; import { mapState } from 'vuex';
import Header from './components/Header.vue'; 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 loadingAnimation from '@/assets/loadingAni.json' // JSON
import GlobalLoading from '@/components/GlobalLoading1.vue' import GlobalLoading from '@/components/GlobalLoading1.vue'
import SliderScond from '@/components/SliderScond.vue' import SliderScond from '@/components/SliderScond.vue'
@ -49,7 +49,7 @@ export default {
SliderMenu, SliderMenu,
// Footer, // Footer,
Header, Header,
Breadcrumb // Breadcrumb
}, },
computed: { computed: {
...mapState(['showSidebar','showSecondSide','secondMenu','showHeader','showHeaderRight','slidermenu','customize']) // VuexshowSidebar ...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() { data() {
return { return {
emptyImg:require('@/assets/table_empty.png') emptyImg:require('@/assets/table_empty.png')
// loading:false
} }
}, },
components: { components: {
@ -138,7 +137,7 @@ export default {
.el-empty{ .el-empty{
padding: 0; padding: 0;
} }
::v-deep .el-empty__description{ .guip-table ::v-deep .el-empty__description{
line-height: 20px; line-height: 20px;
margin-top: 0; margin-top: 0;
} }

4
src/components/HoverButton.vue

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

11
src/components/SliderMenu.vue

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

12
src/components/Tooltip.vue

@ -76,12 +76,20 @@ export default {
} else if (left + messageWidth > viewportWidth) { } else if (left + messageWidth > viewportWidth) {
left = viewportWidth - messageWidth - (viewportWidth -targetRect.right); // left = viewportWidth - messageWidth - (viewportWidth -targetRect.right); //
} }
if(this.position == 'top'){
this.positionStyle = { this.positionStyle = {
top: `${targetRect.bottom + window.scrollY + this.offset}px`, // top: `${targetRect.bottom + window.scrollY + this.offset}px`,
left: `${left}px`, left: `${left}px`,
right: 'auto', // right 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 store from './store'
import App from './App.vue' import App from './App.vue'
import ElementUI from 'element-ui'; import ElementUI from 'element-ui';
import ZhichengUI from '@zhicheng1012/zhicheng-components'
// import {GuipMessage} from '@zhicheng1012/zhicheng-components'
import request from "./utils/request"; import request from "./utils/request";
import 'element-ui/lib/theme-chalk/index.css'; // import 'element-ui/lib/theme-chalk/index.css';
import './style/theme/index.css' // import './style/theme/index.css'
import './style/theme/common.scss' // import './style/theme/common.scss'
import '@zhicheng1012/zhicheng-components/dist/css/zhicheng-components.css';
import 'core-js/stable'; import 'core-js/stable';
import 'regenerator-runtime/runtime'; import 'regenerator-runtime/runtime';
import '@/assets/css/fonts.css'; import '@/assets/css/fonts.css';
@ -15,8 +18,12 @@ import { directive as clickaway } from 'vue-clickaway';
import GuipMessage from '@/components/GuipMessage/index'; import GuipMessage from '@/components/GuipMessage/index';
import HeaderIcon from './utils/headerIcon' import HeaderIcon from './utils/headerIcon'
// 复制到粘贴板 // 复制到粘贴板
import clipboard from '@/utils/dirClipBoard'; // import clipboard from '@/utils/dirClipBoard';
import { modernCopyToClipboard } from '@/utils/clipboard'; // 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 { autoLoginByToken } from '@/utils/login'
import PositionMessage from './utils/tooltip' 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.$filterByPermission = filterByPermission;
Vue.prototype.$loadingFn = LoadingService; Vue.prototype.$loadingFn = LoadingService;
Vue.config.productionTip = false; Vue.config.productionTip = false;
@ -56,12 +63,17 @@ Vue.config.productionTip = false;
Vue.prototype.$http = request; Vue.prototype.$http = request;
Vue.prototype.$token = '' Vue.prototype.$token = ''
Vue.use(ElementUI); Vue.use(ElementUI);
Vue.use(ZhichengUI)
// Vue.use(GuipMessage)
// Vue.use(clipboard);
Vue.use(PositionMessage) Vue.use(PositionMessage)
Vue.prototype.$Message = GuipMessage // Vue.prototype.$Message = GuipMessage
Vue.use(GuipMessage) Vue.use(GuipMessage)
Vue.use(clipboard); // Vue.use(clipboard);
Vue.directive('clickaway', clickaway); Vue.directive('clickaway', clickaway);
Vue.mixin(HeaderIcon) Vue.mixin(HeaderIcon)

4
src/router/index.js

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

2
src/store/index.js

@ -715,3 +715,5 @@ export default new Vuex.Store({
modules: {} modules: {}
}) })

4
src/style/theme/index.css

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

4
src/views/agent/siteList.vue

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

71
src/views/elementGroups.vue

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

51
vue.config.js

@ -1,7 +1,7 @@
const path = require('path'); const path = require('path');
const TerserPlugin = require('terser-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin');
module.exports = { module.exports = {
// publicPath: '/new/',
devServer: { devServer: {
proxy: { proxy: {
'/supernew': { '/supernew': {
@ -18,23 +18,32 @@ module.exports = {
module: { module: {
rules: [ rules: [
{ {
test: /\.js$/, test: /\.m?js$/,
exclude: /node_modules/, exclude: /(node_modules|bower_components)/,
use: { use: {
loader: 'babel-loader', loader: 'babel-loader',
}, options: {
}, plugins: [
], '@babel/plugin-proposal-optional-chaining', // 支持 ?.
// '@babel/plugin-proposal-nullish-coalescing-operator' // 支持 ??
]
}
}
}
]
}, },
optimization: { optimization: {
minimizer: [ minimizer: [
new TerserPlugin({ new TerserPlugin({
terserOptions: { terserOptions: {
format: { 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
}) })
] ]
}, },
@ -48,4 +57,30 @@ module.exports = {
} }
} }
}, },
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