Browse Source

Merge branch 'zq-routerShort-06-15' of gitea.intra.yunpaper.com:zhangqi/kuailelunwen_new_houtai into zq-routerShort-06-15

zq-routerShort-06-15
zq 2 months ago
parent
commit
c2760b308e
  1. 2
      .env.admin
  2. 2
      .env.client
  3. 16714
      package-lock.json
  4. 16
      package.json
  5. 3
      src/App.vue
  6. 200
      src/router/admin-routes.json
  7. 242
      src/router/client-routes.json
  8. 536
      src/router/index.js
  9. 14
      src/utils/loadRoutes.js
  10. 974
      src/views/DemoTable1.vue
  11. 12
      src/views/demoPage.vue
  12. 252
      vue.config.js

2
.env.admin

@ -0,0 +1,2 @@
NODE_ENV=development
VUE_APP_TYPE=admin

2
.env.client

@ -0,0 +1,2 @@
NODE_ENV=development
VUE_APP_TYPE=client

16714
package-lock.json

File diff suppressed because it is too large

16
package.json

@ -4,13 +4,17 @@
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
"serve:client": "VUE_APP_TYPE=client vue-cli-service serve",
"serve:admin": "VUE_APP_TYPE=admin vue-cli-service serve",
"build:client": "VUE_APP_TYPE=client vue-cli-service build",
"build:admin": "VUE_APP_TYPE=admin vue-cli-service build",
"build:analyze": "VUE_APP_TYPE=admin vue-cli-service build --report"
},
"dependencies": {
"axios": "^1.8.3",
"core-js": "^3.40.0",
"element-ui": "^2.15.14",
"file-loader": "^6.2.0",
"lottie-web": "^5.12.2",
"qrcode": "^1.5.4",
"regenerator-runtime": "^0.14.1",
@ -35,8 +39,10 @@
"babel-plugin-transform-remove-console": "^6.9.4",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"vue-template-compiler": "^2.6.14"
"json-loader": "^0.5.7",
"sass": "^1.32.13",
"sass-loader": "^10.2.1",
"vue-template-compiler": "^2.6.14",
"webpack-bundle-analyzer": "^4.10.2"
}
}

3
src/App.vue

@ -37,6 +37,8 @@ import Breadcrumb from './components/Breadcrumb.vue';
import GlobalLoading from '@/components/GlobalLoading1.vue'
import SliderScondThree from '@/components/SliderScondThree.vue'
// import ContentWithLoading from '@/components/ContentWithLoading'
const APP_TYPE = process.env.VUE_APP_TYPE
export default {
data() {
return {
@ -56,6 +58,7 @@ export default {
...mapState(['showSidebar','showSecondSide','secondMenu','showHeader','showHeaderRight','slidermenu','customize']) // VuexshowSidebar
},
mounted() {
console.log(APP_TYPE,'APP_TYPE===888');
window.addEventListener('beforeunload', this.clearStorage);
console.log(this.secondMenu,'secondMenu====');
},

200
src/router/admin-routes.json

@ -0,0 +1,200 @@
[
{
"path": "/super/ranking/yearProfit",
"name": "年排行",
"component": "views/super/Ranking/RankDetail.vue",
"isFirst": true,
"props": {
"pageTitle": "总利润 - 年排行",
"rank_type": 1,
"type": "year",
"showDateSelect": false
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/monthProfit",
"name": "月排行",
"component": "views/super/Ranking/RankDetail.vue",
"isFirst": true,
"props": {
"pageTitle": "总利润 - 月排行",
"rank_type": 1,
"type": "month",
"showDateSelect": true
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/checkProfit",
"name": "产品毛利润排行",
"component": "views/super/Ranking/RankBatchList.vue",
"isFirst": true,
"props": {
"pageTitle": "产品 - 毛利润排行",
"rank_type": 1,
"type": "check_type"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/checkOrdernum",
"name": "产品订单数排行",
"component": "views/super/Ranking/RankBatchList.vue",
"isFirst": true,
"props": {
"pageTitle": "产品 - 订单数排行",
"rank_type": 2,
"type": "check_type"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/checkRefund",
"name": "产品退单数排行",
"component": "views/super/Ranking/RankList.vue",
"isFirst": true,
"props": {
"pageTitle": "产品 - 退单数排行",
"rank_type": 3,
"type": "check_type"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/loss",
"name": "产品负毛利排行",
"component": "views/super/Ranking/RankList.vue",
"isFirst": true,
"props": {
"pageTitle": "产品 - 负毛利排行",
"rank_type": 5,
"type": "loss"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/agentProfit",
"name": "代理商毛利润排行",
"component": "views/super/Ranking/RankBatchList.vue",
"isFirst": true,
"props": {
"pageTitle": "代理商 - 毛利润排行",
"rank_type": 1,
"type": "agent"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/agentRecharge",
"name": "代理商充值排行",
"component": "views/super/Ranking/RankBatchList.vue",
"isFirst": true,
"props": {
"pageTitle": "代理商 - 充值排行",
"rank_type": 1,
"type": "agent"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/agentNew",
"name": "代理商新加盟",
"component": "views/super/Ranking/RankDetail.vue",
"isFirst": true,
"props": {
"pageTitle": "代理商 - 新加盟",
"type": "agentnew",
"showDateSelect": false
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/purchase",
"name": "采购价",
"component": "views/super/Ranking/Purchase.vue",
"isFirst": true,
"props": {
"pageTitle": "设置 - 采购价",
"type": "purchase"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/stagePurchase",
"name": "阶段采购价",
"component": "views/super/Ranking/Purchase.vue",
"isFirst": true,
"props": {
"pageTitle": "设置 - 阶段采购",
"type": "stagePurchase"
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/detail",
"name": "详情",
"component": "views/super/Ranking/RankDetail.vue",
"isFirst": true,
"props": {
"pageTitle": "详情",
"type": "day",
"showDateSelect": false,
"lookMore": false
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/list",
"name": "列表",
"component": "views/super/Ranking/RankList.vue",
"isFirst": true,
"props": {
"pageTitle": "详情",
"showDateSelect": false,
"lookMore": false
},
"meta": {
"hideBreadcrumb": true
}
},
{
"path": "/super/ranking/order",
"name": "订单统计",
"component": "views/super/Ranking/RankDetail.vue",
"isFirst": true,
"props": {
"pageTitle": "订单统计",
"showDateSelect": false,
"type": "order"
},
"meta": {
"hideBreadcrumb": true
}
}
]

242
src/router/client-routes.json

@ -0,0 +1,242 @@
[
{
"path": "/",
"name": "首页",
"component": "views/agent/home.vue",
"isFirst": true,
"meta": {
"title": "首页",
"hideBreadcrumb": true
}
},
{
"path": "/agent/supplyList",
"name": "供货价格",
"isFirst": true,
"component": "views/agent/supplyList.vue",
"webpackChunkName": "supplyList",
"meta": {
"title": "首页",
"hideBreadcrumb": true
}
},
{
"path": "/agent/domainList",
"name": "域名列表",
"isFirst": true,
"component": "views/agent/domainList.vue",
"webpackChunkName": "domainList",
"meta": {
"title": "首页",
"hideBreadcrumb": true
}
},
{
"path": "/agent/noticeList",
"name": "系统通知",
"isFirst": true,
"component": "views/agent/noticeList.vue",
"webpackChunkName": "noticeList",
"meta": {
"title": "系统通知",
"breadcrumbParent": "首页"
}
},
{
"path": "/ui",
"name": "ui组件",
"isFirst": true,
"component": "views/elementGroups.vue",
"webpackChunkName": "ui",
"meta": {
"title": "公共组件示例",
"hideBreadcrumb": true
}
},
{
"path": "/agent/checkOrderList",
"name": "查重订单",
"isFirst": true,
"component": "views/agent/checkOrderList.vue",
"webpackChunkName": "checkOrderList",
"meta": {
"title": "查重订单",
"breadcrumbParent": "首页",
"hideBreadcrumb": true
},
"props": {
"list_type": "check"
}
},
{
"path": "/agent/aiOrderList",
"name": "查重订单",
"isFirst": true,
"component": "views/agent/checkOrderList.vue",
"webpackChunkName": "aiOrderList",
"meta": {
"title": "AI写作订单",
"breadcrumbParent": "首页",
"hideBreadcrumb": true
},
"props": {
"list_type": "ai"
}
},
{
"path": "/agent/siteList",
"name": "站点列表",
"isFirst": true,
"component": "views/agent/siteList.vue",
"webpackChunkName": "siteList",
"meta": {
"title": "站点列表",
"breadcrumbParent": "首页",
"hideBreadcrumb": true
}
},
{
"path": "/agent/siteServiceList",
"name": "服务列表",
"isFirst": true,
"component": "views/agent/siteServiceList.vue",
"webpackChunkName": "siteServiceList",
"meta": {
"title": "服务列表",
"breadcrumbParent": "站点列表"
}
},
{
"path": "/agent/siteServiceAdd",
"name": "服务列表-添加",
"component": "views/agent/siteServiceAdd.vue",
"webpackChunkName": "siteServiceAdd",
"meta": {
"title": "添加服务",
"breadcrumbParent": "服务列表"
}
},
{
"path": "/agent/siteAdd",
"name": "添加站点",
"isFirst": true,
"component": "views/agent/siteAdd.vue",
"webpackChunkName": "siteAdd",
"meta": {
"title": "添加站点",
"hideBreadcrumb": true
}
},
{
"path": "/agent/siteAddFinally",
"name": "添加站点-添加服务",
"component": "views/agent/siteServiceAdd.vue",
"webpackChunkName": "siteServiceAdd",
"meta": {
"title": "添加服务",
"breadcrumbParent": "添加站点"
}
},
{
"path": "/agent/siteBaseSetting",
"name": "站点基本设置",
"component": "views/agent/siteBaseSetting.vue",
"webpackChunkName": "siteBaseSetting",
"meta": {
"title": "站点设置",
"breadcrumbParent": "站点列表"
}
},
{
"path": "/agent/siteMobileSetting",
"name": "移动端设置",
"component": "views/agent/siteMobileSetting.vue",
"webpackChunkName": "siteMobileSetting",
"meta": {
"title": "站点设置",
"breadcrumbParent": "站点列表"
}
},
{
"path": "/agent/siteSemSetting",
"name": "营销推广",
"component": "views/agent/siteSemSetting.vue",
"webpackChunkName": "siteSemSetting",
"meta": {
"title": "站点设置",
"breadcrumbParent": "站点列表"
}
},
{
"path": "/agent/sitePersonalization",
"name": "个性化设置",
"component": "views/agent/sitePersonalization.vue",
"webpackChunkName": "sitePersonalization",
"meta": {
"title": "站点设置",
"breadcrumbParent": "站点列表"
}
},
{
"path": "/agent/siteTemplate",
"name": "模板设置",
"component": "views/agent/siteTemplate.vue",
"webpackChunkName": "siteTemplate",
"meta": {
"title": "站点设置",
"breadcrumbParent": "站点列表"
}
},
{
"path": "/agent/payList",
"name": "收款方式",
"isFirst": true,
"component": "views/agent/payList.vue",
"webpackChunkName": "payList",
"meta": {
"title": "收款方式",
"breadcrumbParent": "首页",
"hideBreadcrumb": true
}
},
{
"path": "/agent/payInfoSetting",
"name": "收款方式设置",
"component": "views/agent/payInfoSetting.vue",
"webpackChunkName": "payInfoSetting",
"meta": {
"title": "收款方式设置",
"breadcrumbParent": "收款方式"
}
},
{
"path": "/agent/paySetting",
"name": "收款方式设置",
"component": "views/agent/paySetting.vue",
"webpackChunkName": "paySetting",
"meta": {
"title": "收款方式设置",
"breadcrumbParent": "收款方式"
}
},
{
"path": "/agent/payCertSetting",
"name": "钱款交易设置",
"component": "views/agent/payCertSetting.vue",
"webpackChunkName": "payCertSetting",
"meta": {
"title": "钱款交易设置",
"breadcrumbParent": "收款方式"
}
},
{
"path": "/configureServicePrices",
"name": "配置服务价格",
"component": "views/ConfigureServicePrices.vue",
"webpackChunkName": "configureServicePrices",
"meta": {
"hideBreadcrumb": true
}
}
]

536
src/router/index.js

@ -1,7 +1,9 @@
import Vue from 'vue';
import VueRouter from 'vue-router';
import store from '../store';
import clientRoutes from './client-routes.json';
import adminRoutes from './admin-routes.json';
import { loadRoutesFromJSON } from '../utils/loadRoutes'
Vue.use(VueRouter)
// 第三种侧边栏展示白名单
const whiteSecondSider = [
@ -26,519 +28,39 @@ const blackFooterList = [
'/', '/franchise','/agreement', '/customizeDoc','/agent/siteAdd', '/agent/payInfoSetting','/agent/siteServiceEdit','/agent/siteAddFinally','/agent/siteServiceAdd',
'/agent/siteTemplate','/agent/siteAddChooseService'
];
// const whiteSlideList = ['/', '/ui',
// '/agent/siteList',
// '/agent/siteBaseSetting',
// '/agent/siteSemSetting',
// '/siteBaseSetting',
// '/sitePersonalization'
// ]; //侧边导航白名单
// const whiteHeaderList = ['/', '/ui', '/agent/siteList', '/siteList','/siteSetting/siteBaseSetting','/siteSetting/sitePersonalization'
// ,'/siteSetting/siteH5','/siteSetting/siteSem','/pageTemplete','/demo',
// '/super/ranking/yearProfit', '/super/ranking/monthProfit', '/super/ranking/checkProfit', '/super/ranking/checkOrdernum',
// '/super/ranking/checkRefund', '/super/ranking/agentProfit', '/super/ranking/agentRecharge', '/super/ranking/agentNew',
// '/super/ranking/purchase','/super/ranking/stagePurchase','/super/ranking/loss'
// ]; //头部导航白名单
//底部白名单 暂时废弃,在页面独立添加组件
// const whiteFooterList = ['/', '/ui', '/agent/siteList',
// '/super/ranking/yearProfit', '/super/ranking/monthProfit', '/super/ranking/checkProfit', '/super/ranking/checkOrdernum',
// '/super/ranking/checkRefund', '/super/ranking/agentProfit', '/super/ranking/agentRecharge', '/super/ranking/agentNew',
// '/super/ranking/purchase','/super/ranking/stagePurchase','/super/ranking/loss'
// ];
const routes = [{
path: '/',
name: '首页',
component: () => import( /* webpackChunkName: "home" */ '../views/agent/home.vue'),
isFirst: true, //是否属于一级路由
meta: {
title: '首页', //面包屑名称(此页面确认不需要放置在面包屑可以不添加此属性;如果获取不到title 会自动 获取 name 作为面包屑名称)
hideBreadcrumb: true // 是否隐藏面包屑
}
},
{
path: '/agent/supplyList',
name: '供货价格',
component: () => import( /* webpackChunkName: "supplyList" */ '../views/agent/supplyList.vue'),
isFirst: true, //是否属于一级路由
meta: {
title: '供货价格', //面包屑名称(此页面确认不需要放置在面包屑可以不添加此属性;如果获取不到title 会自动 获取 name 作为面包屑名称)
hideBreadcrumb: false, // 是否隐藏面包屑
breadcrumbParent: '首页',
}
},
{
path: '/agent/domainList',
name: '域名列表',
component: () => import( /* webpackChunkName: "domainList" */ '../views/agent/domainList.vue'),
isFirst: true, //是否属于一级路由
meta: {
title: '首页', //面包屑名称(此页面确认不需要放置在面包屑可以不添加此属性;如果获取不到title 会自动 获取 name 作为面包屑名称)
hideBreadcrumb: true // 是否隐藏面包屑
}
},
{
path: '/agent/noticeList',
name: '首页',
component: () => import( /* webpackChunkName: "noticeList" */ '../views/agent/noticeList.vue'),
isFirst: true, //是否属于一级路由
meta: {
title: '系统通知', //面包屑名称(此页面确认不需要放置在面包屑可以不添加此属性;如果获取不到title 会自动 获取 name 作为面包屑名称)
breadcrumbParent: '首页',
// hideBreadcrumb: true // 是否隐藏面包屑
}
},
{
path: '/ui',
name: 'ui组件',
isFirst: true,
component: () => import( /* webpackChunkName: "ui" */ '../views/elementGroups.vue'),
meta: {
title: '公共组件示例',
hideBreadcrumb: true, // 一级页面不显示面包屑
// breadcrumbParent:'首页'
}
},
{
path: '/agent/checkOrderList',
name: '查重订单',
isFirst: true,
component: () => import( /* webpackChunkName: "checkOrderList" */ '../views/agent/checkOrderList.vue'),
props: {
list_type: 'check',
},
meta: {
title: '查重订单',
breadcrumbParent: '首页',
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/aiOrderList',
name: 'AI写作订单',
isFirst: true,
component: () => import( /* webpackChunkName: "aiOrderList" */ '../views/agent/checkOrderList.vue'),
props: {
list_type: 'ai',
},
meta: {
title: 'AI写作订单',
breadcrumbParent: '首页',
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/ocpcList',
name: 'OCPC订单',
isFirst: true,
component: () => import( /* webpackChunkName: "ocpcList" */ '../views/agent/ocpcList.vue'),
meta: {
title: 'OCPC订单',
breadcrumbParent: '首页',
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteList',
name: '站点列表',
isFirst: true,
component: () => import( /* webpackChunkName: "siteList" */ '../views/agent/siteList.vue'),
meta: {
title: '站点列表',
breadcrumbParent: '首页',
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteAdd',
name: '添加站点',
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import( /* webpackChunkName: "siteAdd" */ '../views/agent/siteAdd.vue'),
meta: {
title: '添加站点',
hideBreadcrumb: true, // 一级页面不显示面包屑
}
},
{
path: '/agent/siteAddFinally',
name: '添加站点-添加服务',
isFirst: true,
component: () => import( /* webpackChunkName: "siteAddFinally" */ '../views/agent/siteServiceAdd.vue'),
meta: {
title: '添加服务',
breadcrumbParent: '添加站点',
// hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteServiceList',
name: '服务列表',
isFirst: true,
component: () => import( /* webpackChunkName: "siteServiceList" */ '../views/agent/siteServiceList.vue'),
meta: {
title: '服务列表',
breadcrumbParent: '站点列表',
// hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteAddChooseService',
name: '服务列表-添加',
isFirst: true,
component: () => import( /* webpackChunkName: "siteServiceAdd" */ '../views/agent/siteAddChooseService.vue'),
meta: {
title: '添加服务',
breadcrumbParent: '服务列表',
// hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteServiceAdd',
name: '服务列表-添加',
isFirst: true,
component: () => import( /* webpackChunkName: "siteServiceAdd" */ '../views/agent/siteServiceAdd.vue'),
meta: {
title: '设置价格',
breadcrumbParent: '服务列表',
// hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteServiceEdit',
name: '服务列表-修改',
isFirst: true,
component: () => import( /* webpackChunkName: "siteServiceEdit" */ '../views/agent/siteServiceEdit.vue'),
meta: {
title: '修改服务',
breadcrumbParent: '服务列表',
// hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/siteBaseSetting',
name: '站点基本设置',
component: () => import( /* webpackChunkName: "siteBaseSetting" */ '../views/agent/siteBaseSetting.vue'),
meta: {
title: '站点设置',
breadcrumbParent: '站点列表' // 手动指定父级
// 如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/agent/siteMobileSetting',
name: '移动端设置',
component: () => import( /* webpackChunkName: "siteMobileSetting" */ '../views/agent/siteMobileSetting.vue'),
meta: {
title: '站点设置',
breadcrumbParent: '站点列表' // 手动指定父级
// 如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/agent/siteSemSetting',
name: '营销推广',
component: () => import( /* webpackChunkName: "siteSemSetting" */ '../views/agent/siteSemSetting.vue'),
meta: {
title: '站点设置',
breadcrumbParent: '站点列表' // 手动指定父级
}
},
{
path: '/agent/sitePersonalization',
name: '个性化设置',
component: () => import( /* webpackChunkName: "sitePersonalization" */ '../views/agent/sitePersonalization.vue'),
meta: {
title: '站点设置',
breadcrumbParent: '站点列表' // 手动指定父级
}
},
{
path: '/agent/siteTemplate',
name: '个性化设置',
component: () => import( /* webpackChunkName: "siteTemplate" */ '../views/agent/siteTemplate.vue'),
// meta: {
// title: '站点设置',
// breadcrumbParent: '站点列表' // 手动指定父级
// }
},
{
path: '/agent/payList',
isFirst: true,
name: '收款方式',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import( /* webpackChunkName: "payList" */ '../views/agent/payList.vue'),
meta: {
title: '收款方式',
breadcrumbParent: '首页',
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agent/payInfoSetting',
name: '收款方式设置',
component: () => import( /* webpackChunkName: "payInfoSetting" */ '../views/agent/payInfoSetting.vue'),
meta: {
title: '收款方式设置',
breadcrumbParent: '收款方式' // 手动指定父级
// 如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/agent/paySetting',
name: '收款方式设置',
component: () => import( /* webpackChunkName: "paySetting" */ '../views/agent/paySetting.vue'),
meta: {
title: '收款方式设置',
breadcrumbParent: '收款方式' // 手动指定父级
// 如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/agent/payCertSetting',
name: '钱款交易设置',
component: () => import( /* webpackChunkName: "payCertSetting" */ '../views/agent/payCertSetting.vue'),
meta: {
title: '钱款交易设置',
breadcrumbParent: '收款方式' // 手动指定父级
// 如果想隐藏中间层级
// breadcrumbParent: '首页', // 跳过医生信息
// hideInBreadcrumb: true // 可选:隐藏当前项
}
},
{
path: '/franchise',
name: '加盟',
component: () => import( /* webpackChunkName: "franchise" */ '../views/agent/Franchise.vue'),
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/agreement',
name: '网站协议',
component: () => import( /* webpackChunkName: "agreement" */ '../views/agent/agreement.vue'),
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/customizeDoc',
name: '开发文档',
component: () => import( /* webpackChunkName: "customizeDoc" */ '../views/agent/customizeDoc.vue'),
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
const APP_TYPE = process.env.VUE_APP_TYPE || 'client';
// -----------------分隔符-----------
// 管理员start
{
path: '/super/ranking/yearProfit',
name: '年排行',
component: () => import( /* webpackChunkName: "Rankåing" */ '../views/super/Ranking/RankDetail.vue'),
props: {
pageTitle: '总利润 - 年排行',
rank_type: 1,
type: 'year',
showDateSelect: false
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
const routes = APP_TYPE === 'admin'
? [...loadRoutesFromJSON(adminRoutes)]
: [...loadRoutesFromJSON(clientRoutes)];
},
{
path: '/super/ranking/monthProfit',
name: '月排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'),
props: {
pageTitle: '总利润 - 月排行',
rank_type: 1,
type: 'month',
showDateSelect: true
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/checkProfit',
name: '产品毛利润排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {
pageTitle: '产品 - 毛利润排行',
rank_type: 1,
type: 'check_type'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/checkOrdernum',
name: '产品订单数排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {
pageTitle: '产品 - 订单数排行',
rank_type: 2,
type: 'check_type'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/checkRefund',
name: '产品退单数排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankList.vue'),
props: {
pageTitle: '产品 - 退单数排行',
rank_type: 3,
type: 'check_type'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/loss',
name: '产品负毛利排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankList.vue'),
props: {
pageTitle: '产品 - 负毛利排行',
rank_type: 5,
type: 'loss'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/agentProfit',
name: '代理商毛利润排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {
pageTitle: '代理商 - 毛利润排行',
rank_type: 1,
type: 'agent'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/agentRecharge',
name: '代理商充值排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {
pageTitle: '代理商 - 充值排行',
rank_type: 4,
type: 'agent'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/agentNew',
name: '代理商新加盟',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'),
props: {
pageTitle: '代理商 - 新加盟',
type: 'agentnew',
showDateSelect: false
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/purchase',
name: '采购价',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/Purchase.vue'),
props: {
pageTitle: '设置 - 采购价',
type: 'purchase'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/stagePurchase',
name: '阶段采购价',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/Purchase.vue'),
props: {
pageTitle: '设置 - 阶段采购',
type: 'stagePurchase'
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/detail',
name: '详情',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'),
props: {
pageTitle: '详情',
type: 'day',
showDateSelect: false,
lookMore: false
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/list',
name: '列表',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankList.vue'),
props: {
pageTitle: '详情',
showDateSelect: false,
lookMore: false
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
{
path: '/super/ranking/order',
name: '订单统计',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'),
props: {
pageTitle: '订单统计',
type: 'order',
showDateSelect: false
},
meta: {
hideBreadcrumb: true // 一级页面不显示面包屑
}
},
// 管理员end
console.log(routes,'routes---000');
first_child_router = routes.filter(item => item.isFirst);
]
first_child_router = routes.filter(item => item.isFirst);
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
});
router.beforeEach((to, from, next) => {
// 根据启动 进行首页 重定向
// 只有在client模式下才重定向到首页
// 防止在client模式下访问admin路由
if (APP_TYPE === 'client' && to.path.startsWith('/super/')) {
// 如果是client模式但访问admin路由,重定向到首页
next('/');
// return;
}
if (APP_TYPE === 'admin' && (to.path.startsWith('/agent/') || to.path == '/')) {
// 如果是admin模式但访问client路由,重定向到首页
next('/super/ranking/yearProfit');
}
// 如果已经是在目标页面,不需要重定向
if (from.path === to.path) {
next();
}
// 有关路由跳转时,部分状态重置
// store.commit('SET_SECOND_MENU', []);
if(store.state.componentsName){
@ -569,7 +91,7 @@ router.beforeEach((to, from, next) => {
}
})
}
if (to.path.includes('/super/ranking/')) { //匹配包含此路径的 侧边栏数据
if (to.path.includes('/super/ranking/') && process.env.VUE_APP_TYPE === 'admin') { //匹配包含此路径的 侧边栏数据
store.commit('SET_CARRY_PARAM', false);
store.commit('SET_CUSTOMIZE', true);
store.commit('SET_SLIDER_MENU', 'rankMenuData');

14
src/utils/loadRoutes.js

@ -0,0 +1,14 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
export const loadRoutesFromJSON = (routesConfig) => {
return routesConfig.map(route => ({
...route,
component: () => import(/* webpackChunkName: route.webpackChunkName */ `@/${route.component}`),
...(route.redirect ? {
redirect: () => import(/* webpackChunkName: route.webpackChunkName */ `@/${route.redirect}`)
} : {}),
children: route.children ? loadRoutesFromJSON(route.children) : []
}))
}

974
src/views/DemoTable1.vue

@ -1,974 +0,0 @@
<template>
<div class="site-setting-wrap pagePadding min-flex-right">
<p class="pageTitle bold mt24 mb24">基础信息</p>
<div class="siteMessage flex-common" id="siteMessage1">
<p class="littleTitle mb32">基础信息</p>
<el-form :model="form" :rules="siteFormrules" ref="siteForm">
<div class="flex-wrap">
<div class="flex-left">
<GuipFormItem column="column" class="mb24" label="出诊医院省市" :required="true">
<div class="flex-between" slot="formDom">
<div class="short-width">
<GuipSelect width="100%" v-model="form.province" multiple :options="options_payword"
placeholder="选择省份">
</GuipSelect>
</div>
<div class="short-width">
<GuipSelect width="100%" v-model="form.city" multiple :options="options_payword"
placeholder="选择城市">
</GuipSelect>
</div>
</div>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="出诊医院名称" :required="true">
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.company_name"
prop="company_name" placeholder="请输入">
<img src="@/assets/input_search_ic.svg" slot="suffix" @click="handleClear" />
</GuipInput>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="医院简称">
<span slot="formRight" class="desc">方便患者记忆非必填</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.h_name"
prop="h_name" placeholder="请输入" />
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="所在科室" :required="true">
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.depart_name"
prop="depart_name" placeholder="请输入" />
</GuipFormItem>
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipFormItem column="column" class="mb24">
<div slot="formLeft" class="form-top-icon">医保定点</div>
<div class="flex" slot="formDom" style="padding: 9px 0px;">
<GuipSwitch :modelValue="Boolean(form.is_fixed)" @change="onSwitchChange" activeText="非医保定点"
inactiveText="非医保定点">
</GuipSwitch>
</div>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="使用功能">
<el-checkbox-group slot="formDom" v-model="form.type" @change="validateSelection" class="checkboxGroup">
<div class="flex">
<el-checkbox :label="2" >医生名片基础功能不可取消</el-checkbox>
<el-checkbox :label="0">患者预约</el-checkbox>
</div>
<el-checkbox :label="1">项目计数</el-checkbox>
</el-checkbox-group>
</GuipFormItem>
<GuipFormItem column="column" class="" label="就诊提醒">
<div slot="formRight" class="desc">就诊前的注意事项非必填</div>
<GuipTextarea slot="formDom" v-model="form.notice" prop="notice" width="100%"
height="84px" autosize placeholder="输入" />
</GuipFormItem>
</div>
</div>
</el-form>
<GroupFormBtns @cancel="cancelClick" @confirm="submitForm('siteForm')" />
</div>
<div class="siteMessage flex-common mt12" id="siteMessage2">
<p class="littleTitle mb32">出诊时间</p>
<el-form :model="form" :rules="siteFormrules1" ref="siteForm1">
<div class="flex-wrap">
<div class="flex-left">
<GuipFormItem column="column" class="mb24" label="工作时间( 上午 )" :required="true">
<el-time-picker slot="formDom" style="width:100%" is-range v-model="form.morning_worktime"
range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围"
@change="ChangeTime('time1')" format="HH:mm"
value-format="HH:mm">
</el-time-picker>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="工作时间( 下午 )" :required="true">
<el-time-picker slot="formDom" style="width:100%" is-range v-model="form.afternoon_worktime"
range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围"
@change="ChangeTime('time1')" format="HH:mm"
value-format="HH:mm">
</el-time-picker>
</GuipFormItem>
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipFormItem column="column" label="每周出诊安排" :required="true">
<div class="flex weekPlan" slot="formDom">
<GuipSelect v-for="day in weekDays" :key="day.id" v-model="form.worktimes[day.id].plan"
:options="options_weekPlan" @change="weekChange()" :label="day.name" placeholder="休息">
</GuipSelect>
</div>
</GuipFormItem>
</div>
</div>
</el-form>
<GroupFormBtns @cancel="cancelClick" @confirm="submitForm('siteForm1')" />
</div>
<div class="siteMessage flex-common mt12" id="siteMessage3">
<p class="littleTitle mb32">放号设置</p>
<el-form :model="form" :rules="numSettingFormRule" ref="numSettingForm">
<div class="flex-wrap">
<div class="flex-left">
<GuipFormItem column="column" class="mb24" label="号源单位时段" :required="true">
<span class="desc" slot="formRight">如30分钟放号时9:00-9:309:30-10:00来划分</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.time_unit"
prop="time_unit" placeholder="请输入" unit="分钟/时段" />
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="放号量" :required="true">
<span class="desc" slot="formRight">放号量可少于实际数量以便为现场约号患者预留</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.time_unit_num"
prop="time_unit_num" placeholder="请输入" unit="个号/时段" />
</GuipFormItem>
</div>
<div class="flex-line"></div>
<div class="flex-right">
<GuipFormItem column="column" class="mb24" label="开放预约" :required="true">
<span class="desc" slot="formRight">患者可提前多久约号</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.visit_day"
prop="visit_day" placeholder="请输入" unit="小时">
<span slot="prependshow">提前</span>
</GuipInput>
</GuipFormItem>
<GuipFormItem column="column" class="mb24" label="超时未就诊提醒">
<span class="desc" slot="formRight">不输入即无期限</span>
<GuipInput slot="formDom" ref="GuipInput" column="column" v-model="form.treat_expire"
prop="treat_expire" placeholder="请输入" unit="天" />
</GuipFormItem>
</div>
</div>
</el-form>
<GroupFormBtns @cancel="cancelClick" @confirm="submitForm('numSettingForm')" />
</div>
<!-- <p class="pageTitle bold">项目管理</p> -->
<div class="siteMessage flex-common mt12" id="siteMessage4">
<el-form>
<div class=" mb32 flex-between">
<span class="littleTitle">项目列表</span>
<div class="flex-between" style="gap:10px">
<GuipButton size="table" type="ignore">新增分组</GuipButton>
<GuipButton size="table" type="primary">新增项目</GuipButton>
</div>
</div>
<div class="selectAllTable-wrap flex-between mt32">
<div class="left flex">
<div class="checkboxAll">
<el-checkbox @change="handleSelectAllChange" v-model="selectAll"
:indeterminate="isIndeterminate">全选</el-checkbox>
</div>
<span class="totalCount">{{ projectList.length }}已选{{ selectedCount }}</span>
<GuipButton type="ignore" :btnstyle="{ width: '99px', height: '32px', margin: '0 26px' }"
@click="batchOperate('1')">批量禁用</GuipButton>
<GuipButton type="ignore" :btnstyle="{ width: '99px', height: '32px' }"
@click="batchOperate('2')">
批量启用</GuipButton>
</div>
</div>
<div class="flex-between mb32 mt32">
<div class="tabProject flex">
<div :class="['tab-item ', projectSearchId == item.id ? 'active' : '']" @click="selectTag(item)"
v-for="item in projectTagData" :key="item.name">{{ item.name }}</div>
</div>
<div class="right flex">
<span style="margin-right: 16px;">搜索项目</span>
<GuipInput ref="GuipInput" column="column" width="280px" v-model="projectSearchName"
prop="company_name" placeholder="请输入">
<img src="@/assets/input_search_ic.svg" slot="suffix" @click="handleClear" />
</GuipInput>
</div>
</div>
<GuipTable :tableData="projectList" style="width: 100%" ref="multipleTable"
@selection-change="handleSelectionChange" :loading="loading">
<el-table-column type="selection" label="选择" width="80"></el-table-column>
<el-table-column prop="name" label="项目名称" min-width="225"></el-table-column>
<el-table-column prop="price" label="项目价格" min-width="125"></el-table-column>
<el-table-column prop="group" label="分组" min-width="125"></el-table-column>
<el-table-column prop="time" label="添加时间" min-width="225"></el-table-column>
<el-table-column prop="status" label="状态" min-width="125">
<template slot-scope="scope">
<GuipSwitch :modelValue="scope.row.status" @change="onSwitchChange1(scope.row)">
</GuipSwitch>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" min-width="100px">
<template slot-scope="scope">
<div class="flex">
<el-button type="text" @click="handleClick(scope.row)">编辑</el-button>
</div>
</template>
</el-table-column>
</GuipTable>
<el-pagination background @size-change='handleSizeChange' @current-change='handleCurrentChange'
:current-page="currentPage" :page-size=pageSize layout="prev, pager, next,jumper"
:total="projectList.length">
</el-pagination>
</el-form>
</div>
<div class="siteMessage flex-common mt12" id="siteMessage5">
<el-form>
<div class=" mb32 flex-between">
<span class="littleTitle">疗程套餐</span>
<div class="flex-between" style="gap:10px">
<GuipButton size="table" type="primary" @click="addNewSetMenu">新增套餐</GuipButton>
</div>
</div>
<div class="selectAllTable-wrap flex-between mt32 mb32">
<div class="left flex">
<div class="checkboxAll">
<el-checkbox @change="handleSelectAllChange1" v-model="selectAll1"
:indeterminate="isIndeterminate1">全选</el-checkbox>
</div>
<span class="totalCount">{{ courseList.length }}已选{{ selectedCount }}</span>
<GuipButton type="ignore" :btnstyle="{ width: '99px', height: '32px', margin: '0 26px' }"
@click="batchOperate('1')">批量禁用</GuipButton>
<GuipButton type="ignore" :btnstyle="{ width: '99px', height: '32px' }"
@click="batchOperate('2')">
批量启用</GuipButton>
</div>
</div>
<GuipTable :tableData="courseList" style="width: 100%" ref="multipleTable1"
@selection-change="handleSelectionChange1" :loading="loading1">
<el-table-column type="selection" label="选择" width="80"></el-table-column>
<el-table-column prop="name" label="项目名称" min-width="225"></el-table-column>
<el-table-column prop="price" label="项目价格" min-width="125"></el-table-column>
<el-table-column prop="group" label="分组" min-width="125"></el-table-column>
<el-table-column prop="time" label="添加时间" min-width="225"></el-table-column>
<el-table-column prop="status" label="状态" min-width="125">
<template slot-scope="scope">
<GuipSwitch :modelValue="scope.row.status" @change="onSwitchChange2(scope.row)">
</GuipSwitch>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" min-width="100px">
<template slot-scope="scope">
<div class="flex">
<el-button type="text" @click="handleClick(scope.row)">编辑</el-button>
</div>
</template>
</el-table-column>
</GuipTable>
<el-pagination background @size-change='handleSizeChange' @current-change='handleCurrentChange'
:current-page="currentPage" :page-size=pageSize layout="prev, pager, next,jumper"
:total="courseList.length">
</el-pagination>
</el-form>
</div>
<GuipDialog :dialogVisible="dialogVisible" :title="dialogTitle" :show-close-button="true" width="762"
type="center" :show-cancel-button="true" @confirm="handleConfirm" @cancel="handleCancel"
@close="handleClose" @dialogVisibleChange="dialogVisibleChange">
<!-- <BatchProject v-if="dialogType == '1'" :projectTagData="projectTagData" @getproTag="getProTagData" /> -->
</GuipDialog>
<GuipDialog :dialogVisible="dialogVisible1" :title="'新增项目分组'" :show-close-button="true" width="599px"
type="center" :show-cancel-button="true" @confirm="handleConfirm" @cancel="handleCancel"
@close="handleClose" confirmText="确定新增" @dialogVisibleChange="dialogVisibleChange">
<el-form :model="form1" @submit.native.prevent ref="projectNameForm">
<GuipFormItem column="column" class="" label="分组名称">
<GuipInput slot="formDom" ref="GuipInput" v-model="form1.projectName" :rules="nameRules"
prop="projectName" placeholder="请填写新增分组名称" />
</GuipFormItem>
</el-form>
</GuipDialog>
</div>
</template>
<script>
import GuipFormItem from '@/components/GuipFormItem.vue';
import BatchProject from '@/components/BatchProject.vue';
import store from '@/store';
import GuipButton from '@/components/GuipButton.vue';
import GuipInput from '@/components/GuipInput.vue';
import GuipTextarea from '@/components/GuipTextarea.vue';
import GroupFormBtns from '@/components/GroupFormBtns.vue';
import GuipSelect from '@/components/GuipSelect.vue';
import GuipSwitch from '@/components/GuipSwitch.vue';
import GuipTable from '@/components/GuipTable.vue';
import GuipDialog from '@/components/GuipDialog.vue';
// import GuipRadio from '@/components/GuipRadio.vue';
// import HoverButton from '@/components/HoverButton.vue';
import { mapState } from 'vuex';
export default {
//
name: '',
props: [''],
components: {
GuipFormItem,
BatchProject,
GuipButton,
GuipDialog,
// GuipRadio,
GuipInput,
GuipTable,
GuipSwitch,
GuipSelect,
GuipTextarea,
GroupFormBtns,
// HoverButton
},
data() {
return {
doctorId: '',
dialogType: '1',
dialogVisible: false,
dialogVisible1: false,
form1: {
projectName: ''
},
nameRules: [{ required: true, message: '分组名称不得为空', trigger: 'blur' }],
dialogTitle: '批量录入项目',
currentPage: 1,
pageSize: 10,
currentPage1: 1,
pageSize1: 10,
loading: false,
loading1: false,
selectedRows: [],//
selectedRows1: [],//
isIndeterminate: false,
isIndeterminate1: false,
projectSearchId: '',
projectSearchName: '',
projectList: [
{
name: '针灸',
price: '88',
group: '针灸1',
time: '2077 - 12 - 20',
status: true,
id: '1'
},
{
name: '拔罐',
price: '188',
group: '针灸2',
time: '2077 - 12 - 20',
status: true,
id: '2'
},
{
name: '火刺',
price: '55',
group: '针灸1',
time: '2077 - 12 - 20',
status: true,
id: '3'
},
],
projectTagData: [
{
name: '全部分类',
id: '0'
},
{
name: '针灸1',
id: '1'
},
{
name: '针灸2',
id: '11'
},
{
name: '针灸3',
id: '12'
},
{
name: '针灸4',
id: '13'
},
{
name: '针灸1',
id: '21'
},
{
name: '针灸2',
id: '211'
},
{
name: '针灸3',
id: '212'
},
{
name: '针灸4',
id: '213'
},
],
courseList: [
{
name: '针灸',
price: '88',
group: '针灸1',
time: '2077 - 12 - 20',
status: true,
id: '1'
},
{
name: '拔罐',
price: '188',
group: '针灸2',
time: '2077 - 12 - 20',
status: true,
id: '2'
},
{
name: '火刺',
price: '55',
group: '针灸1',
time: '2077 - 12 - 20',
status: true,
id: '3'
},
],
selectAll: false,
selectAll1: false,
numSettingForm: {
times: '',
hours: '',
nums: '',
days: ''
},
numSettingFormRule: {
times: [
{ required: true, message: '请输入', trigger: 'blur' }
],
hours: [
{ required: true, message: '请输入', trigger: 'blur' }
],
nums: [
{ required: true, message: '请输入', trigger: 'blur' }
],
days: [
{ required: true, message: '请输入', trigger: 'blur' }
],
},
options_payword: [{
value: '选项1',
label: '黄金糕'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项4',
label: '龙须面'
}, {
value: '选项5',
label: '北京烤鸭'
}],
weekPlan: {
'周一': '',
'周二': '',
'周三': '',
'周四': '',
'周五': '',
'周六': '',
'周日': '',
},
weekDays: [
{ id: 1, name: '周一' },
{ id: 2, name: '周二' },
{ id: 3, name: '周三' },
{ id: 4, name: '周四' },
{ id: 5, name: '周五' },
{ id: 6, name: '周六' },
{ id: 7, name: '周日' }
],
time1: '',
time2: '',
checkList: ['医生名片(基础功能不可取消)'],
fileList: [
{ name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100' }
],
yibao: '',
options_weekPlan: [{
value: '1',
label: '上午班'
}, {
value: '2',
label: '下午班'
}, {
value: '3',
label: '全天'
}, {
value: '0',
label: '休息'
},],
siteForm: {
company_name: '',
company_address: '',
company_phone: '',
site_alias: '',
},
oldForm: {
description: '',
detailDesc: '',
tags: ''
},
form: {
province: '',
city: '',
depart_name: '',
address:"万柏林区 晋祠路一段56号凯旋门小区2幢4005",
afternoon_worktime:"14:00-22:00",
depart_id:"1",
h_name:"武丽娜中医针灸",
h_pos:"37.850249,112.53111",
hid:"1",
is_fixed:"1",
morning_worktime:"8:00-11:00",
notice:"周六上午门诊最后一轮扎针到10点50分,11点后到患者的,只开药,不扎针。\r\n初诊患者请先将挂号条交给医助、在门外静坐等待叫号\r\n为了节约大家排号时间,请全部挂号,按挂号顺序治疗\r\n针灸治疗单缴费完毕后请交还医助\r\n药费缴费完毕后交方给药房等待拿药(可办理快递)\r\n请准备一次性医用床单(可现场购买)和户外保温毯(推荐),户外保温毯购买链接:<a href=\"https://m.tb.cn/h.UJglv3C?tk=5KMnd9XFr3D\" target=\"_blank\">https://m.tb.cn/h.UJglv3C?tk=5KMnd9XFr3D</a>",
time_unit:"15",
time_unit_num:"10",
treat_expire:"365",
visit_day:"7"
},
siteFormrules: {
depart_name: [
{ required: true, message: '请输入科室信息', trigger: 'blur' }
],
h_name: [
{ required: true, message: '请输入出诊医院信息', trigger: 'blur' }
],
},
siteForm1: {
domain_set: '',
domain_source: '平台免费域名',
},
siteForm2: {
isApprove: '',
phone: ''
},
siteFormrules1: {
domain_source: [
{ required: true, message: '请输入站点简称', trigger: 'blur' }
]
},
}
},
created(){
store.commit('SET_CUSTOMIZE', true);
store.commit('SET_SLIDER_MENU','hosMenuData');
},
mounted() {
const { depart_id, doctor_id } = this.$route.query; // doctorId
if (doctor_id && depart_id) {
//
this.depart_id = depart_id;
this.doctor_id = doctor_id;
// this.fetchDoctorData()
}
},
computed: {
selectedCount() {
return this.selectedRows.length;
},
...mapState(['hosMenuData']) // VuexshowSidebar
},
methods: {
fetchDoctorData() {
this.$http('POST', '/api/admin/get_depart_info', {
depart_id: this.depart_id,
doctor_id: this.doctor_id
}).then(response => {
this.form = { ...this.form, ...response.data,
type:response.type ? [Number(response.type)] : [2],
'morning_worktime':response.data.morning_worktime.split('-'),
'afternoon_worktime':response.data.afternoon_worktime.split('-')
}
}).catch(error => {
console.error(error, 'error')
})
},
validateSelection(val) {
//
if (!val.includes(2)) {
this.$nextTick(() => {
this.form.type = [...val, 2];
this.$message.warning('基础功能不可取消');
});
}
},
selectTag(item) {
this.projectSearchId = item.id
},
getProTagData() {
this.$http('POST', '/supernew/ajax_get_type_batch_list', {
}).then(response => {
this.projectTagData = response.data
}).catch(error => {
console.error(error, 'error')
})
},
addNewSetMenu() {
this.$router.push('/addNewTreatment')
},
handleClose() {
this.$Message.info('弹框已关闭');
this.dialogVisible = false;
},
handleSizeChange(val) {
this.pageSize = val
this.getData()
},
handleCurrentChange(val) {
this.currentPage = val
this.getData()
},
//
handleConfirm() {
if (this.dialogVisible1) {
this.$refs['projectNameForm'].validate((valid) => {
if (valid) {
alert('submit!');
this.dialogVisible1 = false;
} else {
console.log('error submit!!');
return false;
}
});
} else if (this.dialogVisible) {
this.$Message.success('点击了确认按钮');
this.dialogVisible = false;
}
},
//
handleCancel() {
this.$Message.warning('点击了取消按钮');
this.dialogVisible = false;
this.dialogVisible1 = false;
},
dialogVisibleChange(data) {
console.log(data, 'data098908090');
},
onSwitchChange1(row) {
row.status = !row.status;
this.$set(this.projectList, row)
},
onSwitchChange2(row) {
row.status = !row.status;
this.$set(this.courseList, row)
},
handleClick1(row) {
console.log(row);
this.$router.push(`/addNewTreatment?id=${row.id}`)
//
},
handleClick(row) {
console.log(row);
//
},
//
handleSelectAllChange(val) {
console.log(this.$refs.multipleTable, 'multipleTable-');
if (val) {
//
const unselectedRows = this.projectList.filter(
row => !this.selectedRows.includes(row)
);
unselectedRows.forEach(row => {
this.$refs.multipleTable.$refs.guiptable.toggleRowSelection(row, true);
});
} else {
//
this.selectedRows.forEach(row => {
this.$refs.multipleTable.$refs.guiptable.toggleRowSelection(row, false);
});
}
},
//
handleSelectionChange(rows) {
this.selectedRows = rows;
//
const allSelected = rows.length === this.projectList.length;
const noneSelected = rows.length === 0;
this.selectAll = allSelected;
this.isIndeterminate = !noneSelected && !allSelected;
},
handleSelectAllChange1(val) {
console.log(this.$refs.multipleTable, 'multipleTable-');
if (val) {
//
const unselectedRows = this.courseList.filter(
row => !this.selectedRows1.includes(row)
);
unselectedRows.forEach(row => {
this.$refs.multipleTable1.$refs.guiptable.toggleRowSelection(row, true);
});
} else {
//
this.selectedRows.forEach(row => {
this.$refs.multipleTable1.$refs.guiptable.toggleRowSelection(row, false);
});
}
},
//
handleSelectionChange1(rows) {
this.selectedRows = rows;
//
const allSelected = rows.length === this.courseList.length;
const noneSelected = rows.length === 0;
this.selectAll1 = allSelected;
this.isIndeterminate1 = !noneSelected && !allSelected;
},
//
batchOperate(type) {
if (type == '1') {
//
} else {
//
}
},
ChangeTime(type) {
console.log(this.form.morning_worktime, type,'===');
},
btnClick() {
},
handleClear(value) {
// this.handleInput('')
console.log(value, 'value===qinghcu');
},
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
},
//
handleAvatarSuccess(res, file) {
this.imageUrl1 = URL.createObjectURL(file.raw);
},
beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 或 PNG 格式!');
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isJPG && isLt2M;
},
changeNormalWeixin() {
},
changeSelectWeixin(item, flag) {
if (flag) {
this.select_placeholder_weixin = this.options_weixin_null.desc;
return
}
this.selectedItem = { ...item };
console.log(this.selectedItem, 'this.selectedItem====');
},
//
domain_radioChange(type) {
console.log(type, '--');
},
onSwitchChange(data) {
console.log(data, '---');
},
updateHosInfo(props){
this.$http('POST', '/api/admin/set_hospital_depart', {
...props
}).then(response => {
if(response.code == 0){
this.$Message.success('更新成功')
}
}).catch(error => {
console.error(error, 'error')
})
},
submitForm(form) {
console.log(this.$refs[form], '-----');
this.$refs[form].validate((valid) => {
console.log(this[form], '======formxinxi');
if (valid) {
alert('提交成功!');
let props = {}
switch(form){
case 'siteForm1':
props={
morning_worktime:form.morning_worktime.join('-'),
afternoon_worktime:form.afternoon_worktime.join('-')
}
break;
case 'siteForm':
props={
is_fixed:this.form.is_fixed,
type:form.type,
notice:form.notice
}
break;
case 'numSettingForm':
props={
time_unit:form.time_unit,
time_unit_num:form.time_unit_num,
visit_day:form.visit_day,
treat_expire:form.treat_expire,
}
break;
}
this.updateHosInfo(props)
} else {
return false;
}
});
},
cancelClick() {
console.log('quxiao');
},
confirmClick(type) {
console.log(type, '确认');
}
}
}
</script>
<style lang="scss">
.weekPlan {
display: grid;
grid-gap: 12px 44px;
grid-template-columns: repeat(2, 1fr);
}
.pageTitle{
// padding: 12px 0;
}
.totalCount {
font-size: 12px;
font-weight: normal;
line-height: 13px;
letter-spacing: 0.08em;
color: #8A9099;
margin-left: 12px;
}
.tabProject {
gap: 12px;
.tab-item {
/* 自动布局子元素 */
height: 28px;
min-width: 74px;
/* 自动布局 */
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
padding: 4px 12px;
gap: 4px;
align-self: stretch;
z-index: 2;
border-radius: 14px;
background: #FFFFFF;
box-sizing: border-box;
/* middle/middle_line_1 */
border: 1px solid #DFE2E6;
/* body/body 2_regular */
font-family: Microsoft YaHei UI;
font-size: 14px;
text-align: justify;
/* 浏览器可能不支持 */
letter-spacing: 0.08em;
/* text/text_4 */
color: #8A9099;
}
.active {
color: #006AFF;
border: none;
background: #F2F3F5;
}
}
.el-form-item {
margin-bottom: 0;
}
.siteMessage {
border-radius: 4px;
transition: all .5s;
border: 1px solid transparent;
}
.checkboxGroup {
display: flex;
align-items: flex-start;
flex-direction: column;
gap: 24px;
height: 72px;
padding: 10px 0;
}
.addStore {
margin-top: 12px;
}
.qqCode-wrap {
margin-bottom: 14px;
.labelImg {
opacity: .7;
margin-left: 8px;
}
.avatar-uploader {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
margin: 12px 0 8px;
}
.avatar-desc {
text-align: left;
}
}
.site-setting-wrap {
width: 100%;
}
#siteMessage2 {
margin: 12px 0;
}
.domain-wrap {
.domain-item {
margin-bottom: 10px;
}
.domain-item p:last-child {
padding-left: 23px;
color: #8A9099;
}
p {
text-align: left;
line-height: 18px;
margin-bottom: 8px;
}
.domain-box {
display: flex;
flex-direction: column;
justify-content: flex-start;
}
}
</style>

12
src/views/demoPage.vue

@ -14,9 +14,9 @@ import { mapState } from 'vuex';
import GuipSwitch from '@/components/GuipSwitch.vue';
import GuipButton from '@/components/GuipButton.vue';
import HoverButton from '@/components/HoverButton.vue'
import Franchise from '@/views/agent/Franchise.vue'
import Franchise1 from '@/views/agent/Franchise.vue'
import Register from '@/views/Register.vue'
// import Franchise from '@/views/agent/Franchise.vue'
// import Franchise1 from '@/views/agent/Franchise.vue'
// import Register from '@/views/Register.vue'
export default {
//
name: '',
@ -25,9 +25,9 @@ export default {
GuipSwitch,
GuipButton,
HoverButton,
Franchise,
Franchise1,
Register,
// Franchise,
// Franchise1,
// Register,
},
data() {

252
vue.config.js

@ -1,7 +1,133 @@
// const path = require('path');
// const TerserPlugin = require('terser-webpack-plugin');
// const webpack = require('webpack')
// module.exports = {
// // publicPath: '/new/',
// devServer: {
// proxy: {
// '/supernew': {
// target: 'http://adminnew.pengda.checkcopy.com/',
// changeOrigin: true,
// },
// '/agentnew': {
// target: 'http://adminnew.pengda.checkcopy.com/',
// changeOrigin: true,
// }
// }
// },
// configureWebpack: {
// plugins: [
// new webpack.DefinePlugin({
// 'process.env.VUE_APP_TYPE': JSON.stringify(process.env.VUE_APP_TYPE || 'client'),
// }),
// ],
// module: {
// rules: [
// {
// test: /\.js$/,
// exclude: /node_modules/,
// use: {
// loader: 'babel-loader',
// },
// },
// {
// test: /(client|admin)-routes\.json$/, // 匹配路由文件
// use: [
// {
// loader: 'file-loader',
// options: {
// name: '[name].[ext]',
// outputPath: 'router/', // 输出到 dist/router/
// },
// },
// ],
// },
// ]
// },
// // chainWebpack:config => {
// // 根据模式排除不需要的视图组件
// // const mode = process.env.VUE_APP_TYPE
// // config.plugin('ignore')
// // .use(require('webpack').IgnorePlugin, [
// // new RegExp(`src/views/${mode === 'client' ? 'mode2' : 'mode1'}`)
// // ])
// // },
// // chainWebpack: config => {
// // // 根据环境变量解析路由文件
// // config.resolve.alias.set(
// // '@active-router',
// // path.resolve(__dirname, `src/router/${process.env.VUE_APP_TYPE || 'admin'}-routes.json`)
// // )
// // // 确保只打包当前模式需要的路由文件
// // config.plugin('define').tap(definitions => {
// // definitions[0]['process.env'].VUE_APP_TYPE =
// // JSON.stringify(process.env.VUE_APP_TYPE)
// // return definitions
// // })
// // },
// // plugins: [
// // new webpack.DefinePlugin({
// // 'process.env.ROUTES_FILE': JSON.stringify(
// // process.env.VUE_APP_TYPE === 'client'
// // ? 'client-routes.json'
// // : 'admin-routes.json'
// // )
// // })
// // ],
// optimization: {
// minimizer: [
// new TerserPlugin({
// terserOptions: {
// format: {
// comments: /^\**!|@preserve|@license|@cc_on/i // 保留特定注释
// }
// },
// extractComments: false // 不提取注释到单独文件
// })
// ],
// splitChunks: {
// cacheGroups: {
// // 为每套路由创建单独的chunk
// mode1Routes: {
// test: /[\\/]router[\\/]mode1[\\/]/,
// name: 'mode1-routes',
// chunks: 'all',
// enforce: true
// },
// mode2Routes: {
// test: /[\\/]router[\\/]mode2[\\/]/,
// name: 'mode2-routes',
// chunks: 'all',
// enforce: true
// }
// }
// }
// },
// output: {
// filename: '[name].[contenthash:8].js',
// chunkFilename: '[name].[contenthash:8].js'
// },
// resolve:{
// alias:{
// '@':path.resolve(__dirname, 'src/')
// }
// }
// },
// };
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
const webpack = require('webpack');
// 获取当前构建类型(admin或client),默认为admin
const currentType = process.env.VUE_APP_TYPE || 'admin';
module.exports = {
// publicPath: '/new/',
// 基本路径
publicPath: process.env.NODE_ENV === 'production' ? '/' : '/',
// 开发服务器配置
devServer: {
proxy: {
'/supernew': {
@ -9,12 +135,51 @@ module.exports = {
changeOrigin: true,
},
'/agentnew': {
target: 'http://kuaile.checkcopy.com',
target: 'http://adminnew.pengda.checkcopy.com/',
changeOrigin: true,
}
}
},
// 页面配置 - 关键修改点
// pages: {
// admin: {
// entry: 'src/admin-main.js',
// template: 'public/index.html',
// filename: 'index.html',
// // 根据环境排除不需要的chunks
// chunks: ['chunk-vendors', 'chunk-common', 'admin']
// }
// },
// 配置Webpack
configureWebpack: {
plugins: [
new webpack.DefinePlugin({
'process.env.VUE_APP_TYPE': JSON.stringify(currentType),
}),
// 使用IgnorePlugin排除不需要的页面
new webpack.IgnorePlugin({
checkResource(resource) {
const isAdminBuild = currentType === 'admin';
const isClientBuild = currentType === 'client';
// 构建admin时排除client页面
if (isAdminBuild && resource.includes('/src/views/agent/')) {
console.log('Excluding client resource:', resource);
return true;
}
// 构建client时排除admin页面
if (isClientBuild && resource.includes('/src/views/super/')) {
console.log('Excluding admin resource:', resource);
return true;
}
return false;
}
})
],
module: {
rules: [
{
@ -24,7 +189,22 @@ module.exports = {
loader: 'babel-loader',
},
},
],
// 添加SCSS规则
{
test: /\.scss$/,
use: [
{
loader: 'sass-loader',
options: {
implementation: require('sass'),
sassOptions: {
indentedSyntax: false
}
}
}
]
}
]
},
optimization: {
minimizer: [
@ -36,7 +216,25 @@ module.exports = {
},
extractComments: false // 不提取注释到单独文件
})
]
],
splitChunks: {
cacheGroups: {
// 公共代码提取
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'chunk-vendors',
chunks: 'all',
priority: 10
},
common: {
name: 'chunk-common',
minChunks: 2,
chunks: 'initial',
priority: 5,
reuseExistingChunk: true
}
}
}
},
output: {
filename: '[name].[contenthash:8].js',
@ -48,4 +246,50 @@ module.exports = {
}
}
},
// 链式操作 - 更精确地控制打包内容
// chainWebpack: config => {
// // 根据构建类型排除不需要的页面
// if (currentType === 'admin') {
// // 排除client页面
// config.plugin('ignore')
// .use(webpack.IgnorePlugin, [{
// resourceRegExp: /^\.\/client-pages$/,
// contextRegExp: /src[\\/]views/
// }]);
// } else if (currentType === 'client') {
// // 排除admin页面
// config.plugin('ignore')
// .use(webpack.IgnorePlugin, [{
// resourceRegExp: /^\.\/admin-pages$/,
// contextRegExp: /src[\\/]views/
// }]);
// }
// // 确保只打包当前模式需要的路由文件
// config.resolve.alias.set(
// '@active-router',
// path.resolve(__dirname, `src/router/${currentType}-routes.json`)
// );
// config.plugin('webpack-bundle-analyzer')
// .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin);
// }
// 链式操作
chainWebpack: config => {
// 根据构建类型设置路由文件别名
config.resolve.alias.set(
'@active-router',
path.resolve(__dirname, `src/router/${currentType}-routes.json`)
);
// config.resolve.alias.delete('@active-router');
// 生产环境下添加打包分析
if (process.env.NODE_ENV === 'production') {
config.plugin('webpack-bundle-analyzer')
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [{
analyzerMode: 'disabled', // 默认禁用,可通过--report参数启用
generateStatsFile: true
}]);
}
}
};
Loading…
Cancel
Save