Mr.Zhang
2023-08-11 622382942e20d2e17e3e2502131cbd4fe69103c9
08.11
已添加4个文件
已修改30个文件
18596 ■■■■■ 文件已修改
platform_web/.env.production 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/common/CommonHeader.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/common/MenuSelect.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/system/menu/OperaMenuH5Window.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/system/menu/OperaMenuWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/views/business/clientRecord.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/views/system/menuCom.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/views/system/menuH5.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.env.development 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.env.staging 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/package-lock.json 17623 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/App.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/assets/js/validate.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/assets/style/lib.css 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/business/OperaCategoryExtWindow.vue 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/business/OperaWorkPlansWindow.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/common/Header.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/common/Menu.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaCompanyUserExtWindow.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaPlansDetailExtWindow.vue 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaProceduresExtWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OrderDistrubution.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/system/OperaSystemRolePowerWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/system/menu/MenuSelect.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/system/role/MenuConfigWindow.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/business/badCategory.vue 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/business/materialCategory.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/business/workPlans.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/plansExt.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/login.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/system/menu.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/vue.config.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/yarn.lock 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/.env.production
@@ -20,11 +20,4 @@
# VUE_APP_BASE_URL = 'http://121.41.112.139:10012/'
#正式环境
#VUE_APP_BASE_URL = 'http://127.0.0.1:10012/'
#艾丽格斯 https://hsky.doumee.com/doumeeplant_api/doc.html
# VUE_APP_BASE_URL = 'https://hsky.doumee.com/doumeeplant_api/'
# https://dmtest.ahapp.net/doumeeplant_api/doc.html
# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
VUE_APP_BASE_URL = 'https://www.mes.red/doumeeplant/'
# VUE_APP_BASE_URL = 'http://192.168.0.18:10021/'
platform_web/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
  <div class="common-header">
    <div class="header">
      <div class="logo">
        <div>工厂平台端</div>
        <div>DM云工厂平台端</div>
        <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> -->
      </div>
      <div class="user">
platform_web/src/components/common/MenuSelect.vue
@@ -48,6 +48,8 @@
      this.fetchData()
    },
    type () {
      console.log(type);
      debugger
      this.fetchData()
    }
  },
platform_web/src/components/system/menu/OperaMenuH5Window.vue
@@ -6,7 +6,7 @@
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <p class="tip" v-if="form.parent != null && form.id == null">为 <em>{{parentName}}</em> æ–°å»ºå­èœå•</p>
    <p class="tip" v-if="form.parentId != null && form.id == null">为 <em>{{parentName}}</em> æ–°å»ºå­èœå•</p>
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="上级菜单" prop="parentId">
        <MenuSelect v-if="visible" v-model="form.parentId" placeholder="请选择上级菜单" type="2" :exclude-id="excludeMenuId" clearable :inline="false"/>
@@ -20,7 +20,7 @@
      <el-form-item label="图标" prop="icon" class="form-item-icon">
        <div style="display: flex;">
          <UploadAvatarImage
            :file="{ 'imgurlfull': form.icon, 'imgurl': form.icon }"
            :file="{ 'imgurlfull': form.fullIcon, 'imgurl': form.icon }"
            :uploadData="uploadData"
            customStyle="width: 80px; height: 80px;"
            tipsLabel="上传图标"
@@ -61,6 +61,7 @@
      uploadData: {
        floader: 'company/menu'
      },
      parent: {},
      // è¡¨å•数据
      form: {
        id: null,
@@ -68,6 +69,7 @@
        name: '',
        path: '',
        icon: '',
        fullIcon: '',
        remark: '',
        type: '2'
      },
@@ -79,6 +81,12 @@
      }
    }
  },
  created () {
    this.config({
      api: '/system/menu'
    })
  },
  methods: {
    /**
     * @title: çª—口标题
@@ -86,18 +94,21 @@
     * @parent: æ–°å»ºæ—¶çš„上级菜单
     * @type: 0平台 1、企业 2、h5
     */
    open (title, target, parent, type) {
    open (title, target, parent) {
      debugger
      this.title = title
      console.log('-----',parent);
      this.visible = true
      // æ–°å»ºï¼Œmenu为空时表示新建菜单
      if (target == null) {
        this.excludeMenuId = null
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.parent = parent
          this.form.id = null
          this.form.parentId = parent == null ? null : parent.id
          this.parentName = parent == null ? null : parent.name
          this.form.type = type
        })
        return
      }
@@ -107,20 +118,14 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
      })
    }
  },
  created () {
    this.config({
      api: '/system/menu'
        this.form.fullIcon = !!target.icon ? (target.resourcePath + target.icon) : ''
    })
  },
  methods: {
    uploadReverseSuccess(file) {
      // this.form. = file.imgurl;
      this.form.icon = file.imgurlfull;
      this.form.icon = file.imgurl;
      this.form.fullIcon = file.imgurlfull;
    }
  }
  },
}
</script>
platform_web/src/components/system/menu/OperaMenuWindow.vue
@@ -73,7 +73,6 @@
     * @type: 0平台 1、企业 2、h5
     */
    open (title, target, parent, type) {
      debugger
      this.title = title
      this.visible = true
      // æ–°å»ºï¼Œmenu为空时表示新建菜单
@@ -81,10 +80,10 @@
        this.excludeMenuId = null
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form.type = type
          this.form.id = null
          this.form.parentId = parent == null ? null : parent.id
          this.parentName = parent == null ? null : parent.name
          this.form.type = type
        })
        return
      }
@@ -94,6 +93,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.type = type
      })
    }
  },
platform_web/src/views/business/clientRecord.vue
@@ -97,162 +97,6 @@
}
/**
 *  
    è¿™ä¸€æ¬¡å¤åŸå´©å¼€å¯èƒ½å°±æ˜¯ä¸Žé’铜仙殿有关,是它散发的气机加剧了此地高地的龟裂,而后全面塌沉,出现天坑。
    ä¸Žé’铜仙殿相比,三位古圣的身高若蚁虫般,主要是这座铜殿太大了且在散发无穷仙光。
    æ˜¾ç„¶ï¼Œä»–们发现了叶凡几人,霍坦的的一双瞳孔像是黑日般,漆黑而深不可测发出一缕缕乌光,扫视了过来,有一种高高在上,俯视蝼蚁般的气势。
    å¯æƒœï¼Œä»–无法脱困没有办法冲过来,更不能出手。
    å¶å‡¡ã€æ®µå¾·ã€é»‘皇等人都无惧,三人自身难保被定在了那里,能否活下去都两说。
    â€œæ¯æ°”……这么多?!”龙马四蹄发出光火,远远的绕着铜殿每行,一副精力过利的样子。
    å¶çž³ä¹Ÿå¼ å¤§äº†å˜´å·´ï¼Œé›³å‡ºä¸å¯æ€è®®çš„神色,道:“师博这就是你鼎的来源处?”
    â€œç‹ äººåœŒå¤§å¸äº†ä¸å¾—,这是要做什么,挖开了一个混沌仙地,这是要打造最强仙兵吗这么多母气铸鼎,反复提炼,一击之下谁能挡住?”大黑狗也震撼。
    åœ¨é’铜仙殿外部万物母气缭绕,成片成山成海,一层又一层,若星域般沉重压的人将停止呼吸,有无量的道痕在交织。
    ä»»ä½•一缕母气都可以压塌一座山脊这么多凝聚在一起,这得多么沉重?古之大帝以它铸成兵器,是想一击圌打碎其他帝兵吗?
    å¯»å¸¸äººè‹¥èƒ½å¯»åˆ°ä¸€ç¼•母气就是大机缘了,而今这么多,跟云层一般密布,笼苹此地,古朴大气,巍峨磅旖,是一种奇迹。
    â€œèµ·ï¼â€
    å¶å‡¡å¤§å–äº†ä¸€å£°ï¼Œé¢éª¨å†…一个金色的小人睁开了眼睛,长身而起,一步迈出,以道痕为战衣,以鼎为兵器。
    ä¸‡è½´æ¯æ°”鼎悬在其头乒,金色小人张口一声清啸,小鼎快速放大,向前飞去,开始鲸吸牛饮,吞收那海量的母气!
    â€œä½ æ•¢â€¦â€¦â€éœå¦å¤§æ€’,终是变了颜色,难以不语,无法镇定。
    è¿™ä¹ˆå¤šä¸‡ç‰©æ¯æ°”,即便失去了源根,也是举世难寻的神料,若是到手,简直是逆天的造化。
    ä»€ä¹ˆä¸œè¥¿æœ€çè´µï¼Œè‡ªç„¶æ˜¯å¤ä¹‹å¤§å¸çš„兵器,而这些的母气集是人族大帝准备用来炼兵的,价值没有办法衡量。
    å¦å¤–两位古圣变色,有心无力,真身都难保了,还怎么去阻挡?
    â€œäººæ—çš„圣体,你杀我部众,夺我造化,此是大仇,我若脱困,杀以百次,即便是斗战胜佛也无话可说。”霍坦幽森的开口。
    â€œç­‰ä½ è„±å›°æ—¶å†è®¡è¾ƒå§ï¼ŒçŽ°åœ¨æˆ‘æ²¡ç©ºæ­ç†ä½ ï¼Œç»™æˆ‘æ‰¾ä¸ªåœ°æ–¹è‡ªå·²æ¸…å‡€åŽ»ã€‚â€å¶å‡¡æ¼«ä¸ç»å¿ƒçš„è¯´é“ã€‚
    æ­¤æ—¶ï¼Œä»–心情大好,以鼎吞收海量母气,纳于鼎婺,熔圌炼于一体。
    å…µå­—诀原状,他的鼎沉沉浮浮,俚掰作响,母气如万流归海,压的虚空扭曲、崩塌,与鼎合一,不分彼此。
    ä¸‡ç‰©æ¯æ°”源从此合一,狠人的帝兵材料,万圌古罕见,霍坦眼红与怒吼,自然是再正常不过的事情了!
    é¼Žï¼Œä¸ºæ¯æ°”精粹,此时与海量母气合一,水乳圌交融,散发出一种生命波动,像是将要诞生神灵志了。
    â€œä½ åˆå‘½æ”¶èµ°ï¼Œæ— å‘½ä½¿ç”¨ã€‚”霍坦冷森森的笑,他充满了不敢,杀机毕雳,是不加掩饰的。
    è‹¥æ˜¯èƒ½è¡ŒåŠ¨ï¼Œä»–è‚¯å®šä¼šåœ¨ç¬¬ä¸€æ—¶é—´å‡ºæ‰‹ï¼Œå°†å¶å‡¡ç¢¾åŽ‹æˆé£žç°ï¼Œæ— æ¯”çš„é—æ†¾ã€‚
    â€œä½ æ²¡æœ‰è¿™ä¸ªæœºä¼šï¼Œå³ä¾¿ä½ æˆä¸ºäº†åœ£çº§äººç‰©ï¼Œä½†ä¹Ÿä¸è§å¾—不会殒落,还是当心你自已吧。”叶凡笑道。
    ä»–并根本不计较,有什么比证道之器完美更人激动,他的鼎海纳百川,将所有母气都给汲取了,道痕交织。
    â€œäºŒåä¸‰ï¼Œä½ å˜´å·´æœ€å¥½è€å®žç‚¹ï¼Œä¸ç„¶æœ¬åº§èµä½ ä¸€ä¸ªé”…贴,再让你来个驴打滚。”龙马满口浑话。
    å®ƒè¾¹è¯´è¾¹æŠ¬èµ·äº†è¹„子,准备一蹶子尥过去,落圌井圌下圌石,将霍坦饮恨,死在青铜仙殿中。
    â€œåˆ«ï¼â€æ®µå¾·èµ¶ç´§é˜»æ­¢ï¼Œè®©å®ƒä¸è¦è½»ä¸¾å¦„动。
    é‚£é’铜殿,一仙光亿万缕,将祖王都要吞没了,他们若是贸然出手,也被吞过去就麻烦大了。
    â€œè¿™ç§å¹³è¡¡ä¸å¯æ‰“破,他们若是命大就闯出来,命小就等着殒落吧。”黑皇也道。
    å¶å‡¡å®Œå·¥ï¼Œé¼Žä¸€ä¸‹å­ä¹Ÿä¸çŸ¥é‡äº†å¤šå°‘倍,好在早已被炼化,其重不被他承受,现在砸出去,不动用法圌力,估计一般的敌手就得直接成为齑粉。
    â€œå°å­ï¼Œè¿™ä¹ˆå®è´µçš„东西落入了你的手中,你得拿东西补偿我们,不然就平分,换作他人,本皇早就抢了!”大黑狗叫嚣。
    â€œå‡»æ¯™å¤©çš‡å­ï¼Œä»Žä»–身圌体圌内扒拉出的好东西不少,怎么不见你上缴?”叶凡揭他老底。
    â€œæ— é‡å¤©å°Šï¼Œæ—¢ç„¶è¿™æ˜¯ä½ çš„证道物,贫道也有成圌人之美,到时候将从不死天皇行宫中弄来的悟道茶等多分我一份就行了。”
    â€œè¿˜æœ‰æˆ‘的……”龙马也叫道。
    ä¸‰ä¸ªæžå“ä¸€èµ·å«åš·ã€‚叶瞳很本分,不可能去瓜分师傅的宝贝。
    ä¸è¿œå¤„,三位古圣生闷气,眼睁睁的看着几个小辈收走了古之大帝的专属仙料,而今还放肆的在此议论分赃,实在让他们大恨。
    å°¤å…¶æ˜¯éœå¦ï¼Œè‚ºéƒ½è¦æ°”炸了,因为那头龙马一口一个二十三,听那口吻肯定不是什么好话,斜着眼睛看他,根本就没有将他当成一位圣圌人。
    â€œå’¦â€¦â€¦â€æ®µå¾·è¹™çœ‰ï¼Œåƒæ˜¯è§‰å¯Ÿåˆ°äº†ä»€ä¹ˆã€‚
    å°”好,有圣圌人来了,本皇布下阵纹有反应,我心惊肉跳。”黑皇变色。
    è€Œä»Šï¼Œä¸ä¸ºåœ£åœŒäººï¼Œç¼ºå°‘安身立命的资本,他们自然谨慎小心,在进来前布下了各种阵纹,只要圣圌人降临,就会预弊。
    é»‘皇二话没说,取出棋盘阵台,打开虚空,直接没入了进去,快速从这个地方消失。
    â€œçœŸå¯æƒœï¼Œé’铜仙殿下可是有一个混沌仙地,里面多半有神珍。”段德很遗憾。
    â€œå¤ªå¯æƒœäº†ï¼â€é¾™é©¬æ›´æ˜¯åå§ä¸å®‰ï¼Œä½†æ²¡æœ‰åŠžæ³•ï¼Œåœ£åœŒäººæ¥äº†ï¼Œä»–ä»¬åªèƒ½é€€ã€‚
    â€œä¸‡ç‰©æ¯æ°”暂且寄存你们手中,项上人头也先留着,我会去收取的!”霍坦阴森森的说道。
    â€œäºŒåä¸‰ï¼Œå®‰å¿ƒçš„等死吧。”龙马直接一句话差点噎死他。
    â€œåˆ·â€
    å…‰åŽä¸€é—ªï¼Œä»–们消失在了地圌下世界。
    è¿œå¤„,神秘波动扩散,域门打开,一个满头赤发的女子走出,肌体修圌长矫健,是一名强大的古族。
    â€œè¡€ç”µå¥³çŽ‹æ¥äº†ï¼â€
    ä¸å°‘人惊呼,这是一个圣圌人王,曾在瑶池大圌会出现过,曾与姜神王对决,今日竟然亲身降临,事情越来越大,这等人物也都坐不住了。
    å¥¹æ²¡æœ‰è½»ä¸¾å¦„动,绕着深渊走了很长时间,才一步迈下去,当来到青铜仙殿远处时,见到了三位古圣被困。
    â€œè½°ï¼â€
    åŠåˆ»é’ŸåŽä¸€å£°å·¨å“ï¼Œè¡€ç”µå¥³çŽ‹å†²äº†ä¸Šæ¥ï¼Œèº«ä¸Šæœ‰æ–‘æ–‘è¡€è¿¹ï¼Œèº«åœŒå­å·®ç‚¹ç‚¸å¼€ï¼Œè€Œåœ¨å©·çš„èº«åŽï¼Œå¦æœ‰ä¸‰é“åœŒäººå½±ï¼Œåæ˜¯å‡„æƒ¨åˆ°äº†æžç‚¹ï¼Œå…ƒç¥žä¹‹ç«å·®ä¸€ç‚¹ç†„ç­ï¼Œèº«åœŒå­ç ´çƒ‚çš„ä¸æˆæ ·å­ã€‚
    å•Šâ€¦â€¦â€
    ä»–们冲上来后,全都大叫,充满了愤怒,地圌下有仙珍,却不可夺得,一座仙殿就足以镇死有人!
    å°¤å…¶æ˜¯éœå¦ï¼Œå€æ„Ÿæ†‹å±ˆï¼Œè¢«å¶å‡¡ä¸Žé¾™é©¬å¥šè½ï¼Œçœ¼çççš„看着万物母气鼎被洗劫走,那种不敢与愤懑难以言表。
    â€œäººæ—åœ£ä½“,我必杀你,神复牛也救不了你!”霍坦大吼。
    è½°éš†å…­å£°ï¼ŒéŸ³æ´«ä¼¼å¤©é›·ï¼Œå¤§åŸé™„近很多修士身圌体龟裂,修为稍差的人直接崩开,化成了血雾,圣贤一怒,伏尸无数,并非字话。
    â€œå£æ°”不小,就是不知道,若有一日真有神明降临,你会如何自处?”一个苍老的声音传来。
    æ— å£°æ— æ¯ï¼Œå¤©ç’‡åœ£åœ°çŸ³åŠçš„老圣圌人卫易出现,古井无波,站在那里,如一段枯木。
    è¡€ç”µå¥³çŽ‹å¦‚ä¸´å¤§æ•Œï¼Œç¥žè‰²å˜äº†ï¼Œäººæ—åœ£åœŒäººå“ªä¸€ä¸ªæ˜¯å‡¡ä¿—ï¼Œå½“å¹´åœ¨ç‘¶æ± å¤§åœŒä¼šä¸€ä¸ªç™½è¡£ç¥žçŽ‹æ€å¤æ—è¯¸åœ£è¡€æº…å¡ç©ºï¼Œæ­»äº†ä¸€æ‰¹åˆä¸€æ‰¹ï¼Œå…ƒæ°”å¤§ä¼¤ã€‚
    è¿™ä¸ªè€åœ£åœŒäººï¼Œè¿žå¥¹éƒ½ä¸èƒ½åº¦æ·±æµ…,心中突突直跳,不敢妄动。
    å«æ˜“站在这里,默默推演了一番,而后蹙起了眉头,一语不发,身影模糊,凭空消失了。
    åŒæ—¶ï¼Œå«æ˜“消失的刹那,将高地诸多修士都给带走了,传圌送入到远空。
    â€œè½°â€
    çªç„¶ï¼Œé’铜仙殿,瞬间万丈,一下子冲上了天坑,仙光无数,像是一轮太阳般发光,内部一个血圌淋圌淋的“仙”,化成一道光,映在虚空中,横断古今。
    è¡€ç”µå¥³çŽ‹ã€éœå¦å‡ äººé£žå¿«å€’é€€ï¼Œéª¨èŠ‚ä½œå“ï¼Œå·®ä¸€ç‚¹åœ¨è¿™ä¸ªåœ°æ–¹ç‚¸å¼€ï¼Œæµ‘èº«éƒ½æ˜¯è¡€ï¼Œå‡ ä¹Žè¢«æ´»æ´»é•‡æ­»ã€‚
    å¥½ä¸€ä¸ªä»™æ®¿ï¼Œæžœç„¶éžå‡¡ï¼ŒçœŸæ˜¯éš¾ä»¥æƒ³è±¡ï¼Œç©¶ç«Ÿæ˜¯è°åœ¨å…¶å†…部击出一个大洞,生生打了出来。”一个苍老的声音说道,浑拓大圣显化,出现在天边。
    åœ¨å…¶èº«åŽï¼Œæœ‰æ•°ä½å¤åœ£ç›¸éšï¼Œä¸Žå…¶å…±è¿›é€€ï¼Œæ˜¾ç„¶å¯¹å¤§åŸå†…的神珍势在必得。
    å¦ä¸€è¾¹ï¼Œäººæ—å‰å‡ºçŽ°ä¸€é“èº«å½±ï¼Œç™½è¡£çŒŽçŒŽï¼Œæ­£æ˜¯ç¥žçŽ‹å§œå¤ªè™šï¼Œä»–ä¹ŸçŽ°å‡ºäº†è¸ªè¿¹ã€‚
    ç¥žçŽ‹ä¸€å‡ºçŽ°ï¼ŒçŽ°åœºé¡¿æ—¶ä¸€é˜µå¤§ä¹±ï¼Œè¯¸å¤šå¤æ—é¢¤åœŒæŠ–ï¼Œè¿žä¸€äº›ç¥–çŽ‹éƒ½æ˜¯æµ‘èº«å‘å‡‰ï¼Œç‘¶æ± å¤§åœŒä¼šï¼Œç»ä»£ç¥žçŽ‹ä¸€äººæ€çš„ä»–ä»¬å¿ƒèƒ†éƒ½å¯’äº†ã€‚
    â€œå˜¿ï¼Œè¿™åº§é“œæ®¿ä¸Žä»™æœ‰å…³ï¼Œä¸è‹¥æˆ‘等一起将打开如何,看一看到底有什么。”有一道身影降临,很是古老,不少人圌大惊,是万龙巢的大圣到了。
    ä¸€åº§å¸åŸå¼•发了一场滔天大乱,诸多古王,还有几位大圣也坐不住了,想要开启,获取成仙的秘密。
    â€œäººæ—å¤§å¸çš„坟,外人难动……”姜太虚自语。
 */
</script>
  
platform_web/src/views/system/menuCom.vue
@@ -50,8 +50,8 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text"  @click="$refs.operaMenuWindow.open('编辑菜单', row)" v-permissions="['system:menu:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-plus" @click="$refs.operaMenuWindow.open('新建子菜单', null, row)" v-permissions="['system:menu:create']">新建子菜单</el-button>
            <el-button type="text"  @click="$refs.operaMenuWindow.open('编辑菜单', row, null, 1)" v-permissions="['system:menu:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-plus" @click="$refs.operaMenuWindow.open('新建子菜单', null, row, 1)" v-permissions="['system:menu:create']">新建子菜单</el-button>
            <el-button v-if="!row.fixed" type="text" style="color: red" @click="deleteById(row)" v-permissions="['system:menu:delete']">删除</el-button>
          </template>
        </el-table-column>
platform_web/src/views/system/menuH5.vue
@@ -3,7 +3,7 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['system:menu:create', 'system:menu:delete', 'system:menu:sort']">
        <li><el-button type="primary" @click="$refs.operaMenuWindow.open('新建一级菜单', null, null, 2)" icon="el-icon-plus" v-permissions="['system:menu:create']">新建</el-button></li>
        <li><el-button type="primary" @click="$refs.operaMenuWindow.open('新建一级菜单', null, null)" icon="el-icon-plus" v-permissions="['system:menu:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" v-permissions="['system:menu:delete']">删除</el-button></li>
        <li><el-button @click="sort('top')" :loading="isWorking.sort" icon="el-icon-sort-up" v-permissions="['system:menu:sort']">上移</el-button></li>
        <li><el-button @click="sort('bottom')" :loading="isWorking.sort" icon="el-icon-sort-down" v-permissions="['system:menu:sort']">下移</el-button></li>
@@ -51,7 +51,7 @@
        >
          <template slot-scope="{row}">
            <el-button type="text"  @click="$refs.operaMenuWindow.open('编辑菜单', row)" v-permissions="['system:menu:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-plus" @click="$refs.operaMenuWindow.open('新建子菜单', null, row)" v-permissions="['system:menu:create']">新建子菜单</el-button>
            <el-button type="text" @click="$refs.operaMenuWindow.open('新建子菜单', null, row)" v-permissions="['system:menu:create']">新建子菜单</el-button>
            <el-button v-if="!row.fixed" type="text" style="color: red" @click="deleteById(row)" v-permissions="['system:menu:delete']">删除</el-button>
          </template>
        </el-table-column>
web_standard/.env.development
@@ -18,16 +18,8 @@
# æ±‡æ™º
# VUE_APP_BASE_URL = 'https://106.14.220.133:10012/'
# ä»»åº·æœ¬åœ°
# VUE_APP_BASE_URL = 'http://192.168.0.15:10021/'
# ç„¦æ¾
VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
# VUE_APP_BASE_URL = 'https://hsky.doumee.com/doumeeplant_api/'
# æ±Ÿèæœ¬åœ°
#VUE_APP_BASE_URL = 'http://192.168.0.12:10012/'
# åˆ˜ç£Šç£Šæœ¬åœ°
# VUE_APP_BASE_URL = 'http://192.168.0.18:10012/'
# VUE_APP_BASE_URL = 'http://192.168.0.176:10012/'
# VUE_APP_BASE_URL = 'http://6201h1b706.zicp.fun:19470/'
web_standard/.env.staging
@@ -1,2 +1,11 @@
# æµ‹è¯•环境配置
NODE_ENV = 'production'
# è·¯ç”±æ–¹å¼
VUE_APP_ROUTER_MODE = 'hash'
VUE_APP_CONTEXT_PATH = '/doumeeplant_web'
# æŽ¥å£å‰ç¼€
VUE_APP_API_PREFIX = '/doumeeplant_api'
VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
web_standard/package-lock.json
ÎļþÌ«´ó
web_standard/package.json
@@ -38,7 +38,6 @@
    "@vue/cli-service": "~4.5.0",
    "@vue/eslint-config-standard": "^5.1.2",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-import": "^2.20.2",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.2.1",
web_standard/src/App.vue
@@ -10,10 +10,20 @@
</script>
<style lang="scss">
@import "assets/style/lib.css";
// å¼•入全局样式
@import "assets/style/style";
// å¼•入系统内置图标
@import "assets/icons/system/index";
// å¼•入自定义图标
@import "assets/icons/ext/index";
.long-title-style {
  white-space: nowrap;
  text-overflow: ellipsis;
  -webkit-text-overflow: ellipsis;
  overflow: hidden;
}
.el-tooltip__popper.is-dark {
  max-width: 400px;
}
</style>
web_standard/src/assets/js/validate.js
@@ -13,7 +13,7 @@
// ç‰¹æ®Šå­—符交验
export function validateSpecialKey(rule, value, callback) {
  if (!checkSpecialKey(value)) {
    callback(new Error(`只可以输入数字、字母和符号`));
    callback(new Error(`只可以输入数字、字母和英文符号`));
  } else {
    callback();
  }
web_standard/src/assets/style/lib.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
/*-----------------[初始化]--------------*/
*{ font-family: PingFang SC;}
/* æ¸…理浮动 */
.cle:after {visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0;}
.cle:after{zoom:1;}
.clear{clear: both;}
.tc{text-align:center;}
.tl{text-align:left}
.tr{text-align:right}
.fl{float: left;}
.fr{float: right;}
.wp{ width: 94%; margin: 0 auto;}
.w30{ width: 30%;}.w40{ width: 40%;}.w47{ width: 47%;}.w48{ width: 48%;}.w49{ width: 49%;}.w50{ width: 50%;}.w60{ width: 60%;}.w80{ width: 80%;}.w90{ width: 90%;}
.bg_fa{ background-color: #fafafa;}.bg_f2{ background-color: #f2f2f2;}.bg_f1{ background-color: #f1f1f1;}.bg_f5{ background-color: #f5f5f5;}.bg_f6{ background-color: #f6f6f6;}.bg_f7{ background-color: #f7f7f7;}.bg_f8{ background-color: #f8f8f8;}.bg_e{ background-color: #eee;}.bg_d{ background-color: #ddd;}.bg_w{ background-color: #fff;}.bg_3{ background-color: #333;}.bcf{ color: #fff;}.bc3{ color: #333;}.bcc{ color: #ccc;}.bc9{ color: #999;}.bc6{ color: #666;}
.rd4{border-radius: 4px;}.rd5{border-radius: 5px;}.rd6{border-radius: 6px;}.rd8{border-radius: 8px;}.rd10{border-radius: 10px;}.rd15{border-radius: 15px;}.rd20{border-radius: 20px;}.rd30{border-radius: 30px;}.rd40{border-radius: 40px;}.rd50{border-radius: 50px;}.rd60{border-radius: 60px;}.rd70{border-radius: 70px;}.rd80{border-radius: 80px;}.rd90{border-radius: 90px;}.rd100{border-radius: 100px;}.rd120{border-radius: 120px;}.rdhalf{  border-radius:50%}
.ml5{ margin-left: 5px;}.ml10{ margin-left: 10px;}.ml15{ margin-left: 15px;}.ml20{ margin-left: 20px;}.ml25{ margin-left: 25px;}.ml30{ margin-left: 30px;}.ml40{ margin-left: 40px;}.ml50{ margin-left: 50px;}.ml60{ margin-left: 60px;}
.mt5{ margin-top: 5px;}.mt10{ margin-top: 10px;}.mt15{ margin-top: 15px;}.mt20{ margin-top: 20px;}.mt25{ margin-top: 25px;}.mt30{ margin-top: 30px;}.mt35{ margin-top: 35px;}.mt40{ margin-top: 40px;}.mt45{ margin-top: 45px;}.mt50{ margin-top: 50px;}.mt60{ margin-top: 60px;}.mt70{ margin-top: 70px;}.mt80{ margin-top: 80px;}.mt90{ margin-top: 90px;}.mt100{ margin-top:100px;}.mt150{ margin-top:150px;}.mt200{ margin-top:200px;}.mt-20{ margin-top: -20px;}.mt-30{ margin-top: -30px;}.mt-40{ margin-top: -40px;}
.mb5{ margin-bottom: 5px;}.mb10{ margin-bottom: 10px;}.mb15{ margin-bottom: 15px;}.mb20{ margin-bottom: 20px;}.mb25{ margin-bottom: 25px;}.mb30{ margin-bottom: 30px;}.mb40{ margin-bottom: 40px;}.mb50{ margin-bottom: 50px;}.mb60{ margin-bottom: 60px;}.mb80{ margin-bottom: 80px;}
.mr5{ margin-right: 5px;}.mr10{ margin-right: 10px;}.mr15{ margin-right: 15px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right: 30px;}.mr40{ margin-right: 40px;}.mr60{ margin-right: 60px;}.mr80{ margin-right: 80px;}.mr100{ margin-right: 100px;}
.pl10{ padding-left: 10px;}.pl20{ padding-left: 20px;}.pl25{ padding-left: 25px;}.pl30{ padding-left: 30px;}.pl40{ padding-left: 40px;}.pl50{ padding-left: 50px;}.pl60{ padding-left: 60px;}.pl80{ padding-left: 80px;}.pl100{ padding-left: 100px;}
.pr10{ padding-right: 10px;}.pr20{ padding-right: 20px;}.pr25{ padding-right: 25px;}.pr30{ padding-right: 30px;}.pr40{ padding-right: 40px;}.pr50{ padding-right: 50px;}.pr60{ padding-right: 60px;}.pr80{ padding-right: 80px;}.pr100{ padding-right: 100px;}
.pb10{ padding-bottom: 10px;}.pb20{ padding-bottom: 20px;}.pb25{ padding-bottom: 25px;}.pb30{ padding-bottom: 30px;}.pb40{ padding-bottom: 40px;}.pb50{ padding-bottom: 50px;}.pb100{ padding-bottom: 100px;}
.pt10{ padding-top: 10px;}.pt20{ padding-top: 20px;}.pt25{ padding-top: 25px;}.pt30{ padding-top: 30px;}.pt40{ padding-top: 40px;}.pt50{ padding-top: 50px;}.pt100{ padding-top: 100px;}
.plr{ padding-left: 10px; padding-right: 10px;}.plr20{ padding-left: 20px; padding-right: 20px;}.plr25{ padding-left: 25px; padding-right: 25px;}.plr30{ padding-left: 30px; padding-right: 30px;}.plr40{ padding-left: 40px; padding-right: 40px;}.plr50{ padding-left: 50px; padding-right: 50px;}.plr60{ padding-left: 60px; padding-right: 60px;}
.ptb10{padding-bottom: 10px; padding-top: 10px;} .ptb15{padding-bottom: 15px; padding-top: 15px;} .ptb20{padding-bottom: 20px; padding-top: 20px;}.ptb25{padding-bottom: 25px; padding-top: 25px;}.ptb30{padding-bottom: 30px; padding-top: 30px;}.ptb35{padding-bottom: 35px; padding-top: 35px;}.ptb40{padding-bottom: 40px; padding-top: 40px;}.ptb50{padding-bottom: 50px; padding-top: 50px;}.ptb60{padding-bottom: 60px; padding-top: 60px;}.ptb80{padding-bottom: 80px; padding-top: 80px;}.ptb100{padding-bottom: 100px; padding-top: 100px;}.ptb150{padding-bottom: 150px; padding-top: 150px;}.ptb200{padding-bottom: 200px; padding-top: 200px;}
.p5{ padding:5px}.p10{ padding:10px} .p20{ padding:20px}.p30{ padding:30px}.p2030{ padding:20px 30px}.p40{ padding:40px}.p3040{ padding:30px 40px}
.f0{ font-size: 0px;} .f11{ font-size: 11px;}.f12{ font-size: 12px;}.f13{ font-size: 13px;}.f14{ font-size: 14px;}.f16{ font-size: 16px;}.f18{ font-size: 18px;}.f20{ font-size: 20px;}.f26{ font-size: 26px;}.f28{ font-size: 28px;}.f30{ font-size: 30px;}.f32{ font-size: 32px;}.f34{ font-size: 34px;} .f38{ font-size: 38px;}.f40{ font-size: 40px;} .f42{ font-size: 42px;}.f44{ font-size: 44px;}.f48{ font-size: 48px;}.f50{ font-size: 50px;}.f60{ font-size: 60px;}.f64{ font-size: 64px;}.f70{ font-size: 70px;}.f80{ font-size: 80px;}.f90{ font-size: 90px;}.f100{ font-size: 100px;}
.img16{ width: 16px; height: 16px;}
.img20{ width: 20px; height: 20px;}
.img24{ width: 24px; height: 24px;}
.img26{ width: 26px; height: 26px;}
.img30{ width: 30px; height: 30px;}
.img32{ width: 32px; height: 32px;}
.img36{ width: 36px; height: 36px;}
.img40{ width: 40px; height: 40px;}
.img48{ width: 48px; height: 48px;}
.img60{ width: 60px; height: 60px;}
.img66{ width: 66px; height: 66px;}
.img80{ width: 80px; height: 80px;}
.img86{ width: 86px; height: 86px;}
.img90{ width: 90px; height: 90px;}
.img100{ width: 100px; height: 100px;}
.img110{ width: 110px; height: 110px;}
.img120{ width: 120px; height: 120px;}
.img150{ width: 150px; height: 150px;}
.img180{ width: 180px; height: 180px;}
.img200{ width: 200px; height: 200px;}
.imgfull{ width: 100%;}
.rimb{ border-bottom: 1px solid #F1F1F1;}
.rimt{ border-top: 1px solid #F1F1F1;}
.bcover{  background-size: cover; background-position: center center; background-repeat:  no-repeat;}
.bfull{ background-size: 100% 100%; background-position: center center; background-repeat:  no-repeat;}
.b{ font-weight: bold;}
.ibm{ display: inline-block; vertical-align: middle;}
.bbox{ box-sizing: border-box;}
.rauto{ margin-left:auto; margin-right:auto}
.fixedBottom{position: fixed;        left: 0;        bottom: 0;        width: 100%;}
.lh1-6{line-height: 1.6;}
.lh1-6{line-height: 1.6;}
.lh1-8{line-height: 1.8;}
.lh2{line-height: 2;}
.sbtn{ display: inline-block; padding: 0.7em 2em;  border: 1px solid transparent; box-sizing: border-box; text-align: center;}
.mini{ font-size: 18px;}
.med{ font-size: 26px;}
.def{ font-size: 34px;}
.sbtn_w100{ width: 100%; padding-left: 0; padding-right: 0;}
.sbtn_green{ color: #fff; background:#65C35D; }
.sbtn_green_rim{ color: #65C35D; border-color:#65C35D; }
.sbtn_black{ color: #fff; background:#333; }
.sbtn_gray{ color: #333; background:#F7F7F7; }
.sbtn_black_rim{ color: #333; border-color:#eee; }
.sbtn_gray_rim{ color: #999; border-color:#ccc; }
/* flex */
.flex{ display: flex; flex-wrap: wrap; justify-content: space-between;}
.cXY{ display: flex;  align-items: center;justify-content: center;}
.cY{ display: flex; align-items: center;}
.cX{display: flex; justify-content: center}
.rowW{ display: flex; flex-wrap: wrap;}
.bX{ display: flex;   flex-direction: row; justify-content: space-between;}
.bY{ display: flex;   flex-direction:column; justify-content: space-between;}
.bcX{ display: flex; justify-content: space-between; align-items: center;}
.fx1{ flex: 1; overflow: hidden; }
.cAXY{ position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);}
.shadowA{box-shadow: 0 0 5px 0 #ddd;}
.shadowB{ position: relative;}
.shadowB::after{ content: ""; display: block; width: 100%; height: 8px; box-shadow: 0 6px 12px rgba(0,0,0,.08); top: -8px; left: 0; position: absolute; }
.orange{ color: #EA531B;}
.green{ color: #65C35D;}
.blue{ color: #3C77DA;}
.red{ color: #f00;}
.success{ color: #70B603; }
.waring{ color: #F59A23; }
.error{ color: #f00; }
/* /deep/ .uicon-close .u-icon--right{ position: absolute; right: 30px; top: 30px; z-index: 999;} */
.popCloseBtn{ position: absolute; width:50px; height:50px; right: 20px; top: 20px;}
.fixedHeader{ position: absolute; left: 0; top: 0;}
web_standard/src/components/business/OperaCategoryExtWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
<template>
  <GlobalWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="分类编码:" prop="code">
        <el-input v-model="form.code" :disabled="form.id" placeholder="可填写,忽略将自动生成" v-trim/>
      </el-form-item>
      <el-form-item label="分类名称:" prop="name">
        <el-input v-model="form.name" placeholder="请输入分类名称" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { getListByType } from '@/api/ext/categoryExt'
import { validateSpecialKey } from '@/assets/js/validate'
export default {
  name: 'OperaCategoryExtWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        cateType: 0,
        code: '',
        name: '',
      },
      parent: [],
      // isShow: false,
      // éªŒè¯è§„则
      rules: {
        code: [
          { required: true, message: '请输入分类编码', trigger: 'blur' },
          { max: 10, message: '输入字数不超过10', trigger: 'change' },
          { validator: validateSpecialKey, trigger: 'blur' }
        ],
        name: [
          { max: 10, message: '输入字数不超过10', trigger: 'change' },
          { required: true, message: '请输入分类名称', trigger: 'blur' }
        ]
      }
    }
  },
  computed: {
    isShow: {
      get () {
        return this.form.type !== '0'
      }
    }
  },
  methods: {
    open (title, target, cateType) {
      this.title = title
      this.visible = true
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
          this.form.cateType = cateType
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.cateType = cateType
        // this.form.cateType = parseInt(this.form.cateType)
        // this.getParent()
      })
    },
    changeModel (item) {
      this.getParent()
    },
    getParent () {
      if (!this.isShow) {
        return
      }
      const qurey = '?cateType=' + this.form.cateType + '&' + 'type=' + (this.form.type - 1)
      getListByType(
        qurey
      ).then(res => {
        // console.log(res)
        this.parent = res
      }).catch(err => {
        console.log(err)
      })
    }
  },
  created () {
    this.config({
      api: '/ext/categoryExt',
      'field.id': 'id'
    })
  }
}
</script>
web_standard/src/components/business/OperaWorkPlansWindow.vue
@@ -5,8 +5,8 @@
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="工厂:" prop="factoryId">
    <el-form :model="form" ref="form" label-suffix=":" :rules="rules">
      <el-form-item label="工厂" prop="factoryId">
        <el-select v-model="form.factoryId" placeholder="请选择工厂" :disabled="isEdit" filterable clearable @change="selectFactoey(form.factoryId, false)">
          <el-option
            v-for="item in factories()"
@@ -17,7 +17,7 @@
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="物料信息:" prop="materialId">
      <el-form-item label="物料信息" prop="materialId">
        <!-- @change="selectMaterial(form.materialId, false)" -->
        <el-select v-model="form.materialId" clearable filterable placeholder="请选择">
          <el-option
@@ -28,21 +28,32 @@
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="计划日期:" prop="planDate">
      <el-form-item label="计划开始日期" prop="planDate">
        <el-date-picker
          v-model="form.planDate"
          value-format="yyyy-MM-dd"
          placeholder="请选择计划日期"
          placeholder="请选择计划开始日期"
          :picker-options="pickerOptions"
        ></el-date-picker>
      </el-form-item>
      <el-form-item label="计划数量:" prop="num">
      <el-form-item label="计划结束日期" prop="planDate">
        <el-date-picker
          v-model="form.planDate"
          value-format="yyyy-MM-dd"
          placeholder="请选择计划结束日期"
          :picker-options="pickerOptions"
        ></el-date-picker>
      </el-form-item>
      <el-form-item label="计划数量" prop="num">
        <el-input v-model="form.num" placeholder="请输入" max="10" v-trim/>
      </el-form-item>
      <el-form-item label="生产批次号" prop="batch">
        <el-input v-model="form.batch" placeholder="请输入" max="30" v-trim/>
      </el-form-item>
      <el-form-item label="优先级:" prop="urgent">
      <el-form-item label="销售订单" prop="urgent">
        <el-input v-model="form.urgent" placeholder="请输入" max="4" v-trim/>
      </el-form-item>
      <el-form-item label="优先级" prop="urgent">
        <el-input v-model="form.urgent" placeholder="请输入" max="4" v-trim/>
      </el-form-item>
    </el-form>
@@ -108,6 +119,7 @@
      api: '/business/workPlans',
      'field.id': 'id'
    })
    this.form.planDate = new Date()
    this.pickerOptions.disabledDate = (time) => {
        // ä¸€å¤©
      let tempTime = 3600 * 1000 * 24 
@@ -237,4 +249,7 @@
    }
  }
}
/**
 *
 */
</script>
web_standard/src/components/common/Header.vue
@@ -12,6 +12,7 @@
            <img src="@/assets/images/ic_help@2x.png" alt="" />
            <span>帮助文档</span>
          </div>
          <div style="margin-right: 10px;">企业代码: {{ tempId }}</div>
          <el-dropdown trigger="click" style="margin-right: 20px;" v-userState @command="select">
            <span class="el-dropdown-link">
              {{ tempC }}<i class="el-icon-arrow-down el-icon--right"></i>
@@ -73,6 +74,7 @@
  data () {
    return {
      tempC: '',
      tempId: '',
      cList: '',
      visible: {
        // ä¿®æ”¹å¯†ç 
@@ -127,7 +129,10 @@
    }
  },
  created () {
    this.tempC = this.userInfo.curComDepartment ? this.userInfo.curComDepartment.name : ''
    if (this.userInfo.curComDepartment) {
      this.tempC = this.userInfo.curComDepartment.name
      this.tempId = this.userInfo.curComDepartment.id
    }
    getDepartmentListByConditon({
      type: 0
    })
web_standard/src/components/common/Menu.vue
@@ -2,7 +2,7 @@
  <div class="menu" :class="{collapse: menuData.collapse}">
    <div class="logo">
      <div><img src="@/assets/logo_v2.png"></div>
      <h1 :class="{hidden: menuData.collapse}">{{ rootName() }}</h1>
      <h1 :class="{hidden: menuData.collapse}">DM云工厂</h1>
    </div>
    <scrollbar>
      <!--   :default-openeds="defaultOpeneds"   -->
web_standard/src/components/ext/OperaCompanyUserExtWindow.vue
@@ -45,7 +45,7 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { treeComList, allList } from '@/api/ext/companyUserExt'
import { validateSpecialKey } from '@/assets/js/validate'
export default {
  name: 'OperaCompanyUserExtWindow',
  extends: BaseOpera,
@@ -71,9 +71,10 @@
          { pattern: /^[0-9]+$/, message: '只可以输入数字', trigger: 'change' }
        ],
        empNo: [
          { required: true, message: '请输入工号', trigger: 'blur' },
          // { required: true, message: '请输入工号', trigger: 'blur' },
          { max: 20, message: '输入字数不超过20', trigger: 'blur' },
          { pattern: /^[0-9a-zA-Z]+$/, message: '只可以输入数字和字母', trigger: 'change' }
          { validator: validateSpecialKey,  message: '只可以输入数字、字母或者英文字符', trigger: 'blur' },
          // { pattern: /^[0-9a-zA-Z]+$/, trigger: 'change' }
        ],
        departmentId: [
          { required: true, message: '请选择部门', trigger: 'blur' }
web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
@@ -49,7 +49,10 @@
              <span v-else style="color: #03AF76;" class="status-log">{{ item.status==1 ? '已备料' : item.status==2 ? '已完工' : item.status==3 ? '已检验' : '已报工' }}</span>
            </div>
          </div>
          <div style="color: #777; font-size: 11px; margin-bottom: 15px;">{{ '生产人员:' + proUserStr(item) }}</div>
          <div class="c3 mt10 mb10 f12" style="display: flex;">
            <div>计划数量:{{ form.num }}</div>
            <div class="ml10">计划开工日期:{{ form.num }}</div>
          </div>
          <div v-if="item.produceDate" class="order-setup">
            <!-- æŠ¥å·¥ä¿¡æ¯ -->
            <div class="line-style">
@@ -59,23 +62,20 @@
            </div>
            <div class="setup-content">
              <div class="left-message">
                <div class="message-title-temp">
                  äº§å‡º
                <div class="message-title-temp">产出</div>
                </div>
                <p class="time-style">
                  {{ item.produceDate }}
                </p>
              <div class="right-message ml30">
                <div style="display: flex;">
                  <div class="time-style">操作人:{{ item.createUserName }}</div>
                  <div class="time-style ml50">操作时间:{{ item.produceDate }}</div>
              </div>
              <div class="right-message">
                <div style="margin-left: 30px">
                  <span style="color:#666;">物料:</span>
                </div>
                <div>
                <div style="display: flex;" class="mt10">
                  <span style="color:#666;">产品:</span>
                  <div v-if="item.qualifiedNum">
                    <span style="color:#03AF76">[合格品] </span>
                    <span style="color:#333333">{{ item.qualifiedNum + (form.umodel && form.umodel.name) }}</span>
                  </div>
                  <div v-if="item.unqualifiedNum">
                  <div v-if="item.unqualifiedNum" class="ml20">
                    <span style="color:#F5A400">[不良品] </span>
                    <span style="color:#333333">{{ item.unqualifiedNum + (form.umodel && form.umodel.name) }}</span>
                  </div>
@@ -95,17 +95,18 @@
                <div :class="item.produceDate ? 'message-title' : 'message-title-temp'">
                  æŠ•æ–™
                </div>
                <p class="time-style">
                  {{ item.materialDate }}
                </p>
              </div>
              <div class="right-message">
                <div style="margin-left: 30px">
                  <span style="color:#666;">物料:</span>
              <div class="right-message ml30">
                <div style="display: flex;">
                  <div class="time-style">操作人:{{ item.createUserName }}</div>
                  <div class="time-style ml50">操作时间:{{ item.materialDate }}</div>
                </div>
                <div style="display: flex" class="mt10">
                  <div style="color:#666;">物料:</div>
                <div>
                  <div v-for="(sItem, sIndex) in item.materialList" :key="sIndex">
                    <span style="color:#333333">{{ sItem.name + ' / ' + sItem.num + sItem.unitName }}</span>
                    </div>
                  </div>
                </div>
              </div>
@@ -122,17 +123,17 @@
                <div :class="item.materialDate ? 'message-title' : 'message-title-temp'">
                  åˆ†é…
                </div>
                <p class="time-style">
                  {{ item.distributeDate }}
                </p>
              </div>
              <div class="right-message">
                <div style="margin-left: 30px">
                  <span style="color:#666;">分配数量:</span>
              <div class="right-message ml30">
                <div style="display: flex;">
                  <div class="time-style">操作人:{{ item.createUserName }}</div>
                  <div class="time-style ml50">操作时间:{{ item.distributeDate }}</div>
                </div>
                <div>
                  <span style="color:#333333">{{ item.planNum + (form.umodel && form.umodel.name) }}</span>
                <div class="mt10">
                  <span style="color:#666;">分配数量:{{ item.planNum + (form.umodel && form.umodel.name) }}</span>
                </div>
              </div>
            </div>
          </div>
@@ -341,9 +342,9 @@
      flex: 1;
      // background-color: #f7f7f7;
      display: flex;
      justify-content: space-between;
      .left-message {
        width: 62px;
        display: flex;
        line-height: 20px;
        .message-title {
          color: #333;
          font-weight: 500;
@@ -356,14 +357,11 @@
        }
        .time-style {
          color: #999999;
          font-size: 11px;
          max-lines: 2;
        }
      }
      .right-message {
        flex: 1;
        font-size: 13px;
        display: flex;
        // display: flex;
        flex-direction: row;
      }
    }
web_standard/src/components/ext/OperaProceduresExtWindow.vue
@@ -156,7 +156,7 @@
        // tobescrappedWarehouseId: '',
        iscalculate: 1,
        level: 0,
        needcheck: 0,
        needcheck: 1,
        sortnum: ''
      },
      iscalculates: [
web_standard/src/components/ext/OrderDistrubution.vue
@@ -193,13 +193,13 @@
        return date2
      }
    },
    pickerOptions(data) {
      let time = new Date(data);
      let tempTime = 3600 * 1000 * 24
      return {
       disabledDate: time.getTime() < new Date(data)-tempTime
      }
    }
    // pickerOptions(data) {
    //   let time = new Date(data);
    //   let tempTime = 3600 * 1000 * 24
    //   return {
    //    disabledDate: time.getTime() < new Date(data)-tempTime
    //   }
    // }
  },
  created () {
    this.config({
web_standard/src/components/system/OperaSystemRolePowerWindow.vue
@@ -50,7 +50,7 @@
    open (role) {
      const formData = new FormData()
      formData.append('type', 1)
      formData.append('moduleId', 1)
      // formData.append('moduleId', 1)
      fetchMenuList(formData)
        .then(records => {
          this.role = role
web_standard/src/components/system/menu/MenuSelect.vue
@@ -51,7 +51,7 @@
    fetchData () {
      const formData = new FormData()
      formData.append('type', 1)
      formData.append('moduleId', 1)
      // formData.append('moduleId', 1)
      fetchTree(formData)
        .then(records => {
          this.data = []
web_standard/src/components/system/role/MenuConfigWindow.vue
@@ -61,7 +61,8 @@
      // const formData = new FormData()
      // formData.append('type', role.type)
      // formData.append('moduleId', 1)
      fetchMenuList({ type: type, moduleId: 1 })
      // , moduleId: 1
      fetchMenuList({ type: type })
        .then(records => {
          this.menus = records
          // å¦‚果为固定角色,则固定菜单不可更改
web_standard/src/views/business/badCategory.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
<template>
  <TableLayout v-permissions="['ext:categoryext:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form slot="search-form" ref="searchForm" :model="searchForm" label-width="100px" inline>
        <el-form-item label="分类名称:" prop="name">
        <el-input v-model="searchForm.name" placeholder="请输入" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <!-- <el-form-item label="分类编码:" prop="code">
        <el-input v-model="searchForm.code" placeholder="请输入" @keypress.enter.native="search"></el-input>
      </el-form-item> -->
      <!-- <el-form-item label="分类类型:" prop="cateType">
        <el-select v-model="searchForm.cateType" clearable filterable placeholder="全部">
          <el-option
            v-for="item in types"
            :key="item.id"
            :value="item.id"
          ></el-option>
        </el-select>
      </el-form-item> -->
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar">
        <li v-permissions="['ext:categoryext:create']"><el-button type="primary" @click="$refs.operaCategoryExtWindow.open('新增分类', null, 3)" >新建</el-button></li>
        <!-- <li v-permissions="['ext:categoryext:importExcel']">
          <ImportButton
            text="导入"
            template-name="category_import_template.xlsx"
            template-path="/template/category_import_template.xlsx"
            action="/ext/categoryExt/importExcel"
            @success="search"
          />
        </li>
        <li><el-button @click="deleteByIdInBatch" v-permissions="['ext:categoryext:delete']" type="danger" plain>删除</el-button></li> -->
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        border
        @selection-change="handleSelectionChange"
      >
        <!-- <el-table-column type="selection" width="55"></el-table-column> -->
        <!-- <el-table-column prop="cateType" label="分类类型" min-width="100px">
          <template slot-scope="{row}">
            {{ cateTypeToStr(row.cateType) }}
          </template>
        </el-table-column>
        <el-table-column prop="type" label="分类属性" min-width="100px">
          <template slot-scope="{row}">
            {{ typeToStr(row.type) }}
          </template>
        </el-table-column> -->
        <el-table-column prop="code" label="分类编码" min-width="100px"></el-table-column>
        <el-table-column prop="name" label="分类名称" min-width="100px"></el-table-column>
        <!-- <el-table-column label="从属分类类型" min-width="100px">
          <template slot-scope="{row}">
            {{ row.pmodel ? typeToStr(row.pmodel.type) : '-' }}
          </template>
        </el-table-column> -->
        <!-- <el-table-column label="从属分类名称" min-width="100px">
           <template slot-scope="{row}">
            {{ row.pmodel ? row.pmodel.name : '-' }}
          </template>
        </el-table-column> -->
        <el-table-column prop="createTime" label="创建时间" min-width="100px"></el-table-column>
        <el-table-column
          label="操作"
          min-width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button v-permissions="['ext:categoryext:update']"  type="text" @click="$refs.operaCategoryExtWindow.open('编辑', row)">编辑</el-button>
            <span v-permissions="['ext:categoryext:delete']" style="margin-left:8px">
              <el-button type="text" @click="deleteById(row)">删除</el-button>
            </span>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      ></pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaCategoryExtWindow ref="operaCategoryExtWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
// import SearchFormCollapse from '@/components/common/SearchFormCollapse'
import Pagination from '@/components/common/Pagination'
import OperaCategoryExtWindow from '@/components/business/OperaCategoryExtWindow'
export default {
  name: 'CategoryExt',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaCategoryExtWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        name: '',
        code: '',
        cateType: '3'
      },
      types: [
        //  0物料 1客户 2工装器具 3不良品
        { name: '物料', id: 0 },
        // { name: '客户', id: 1 },
        // { name: '工装器具', id: 2 },
        { name: '不良原因', id: 3 }
      ]
    }
  },
  created () {
    this.config({
      module: '设置类分类信息表',
      api: '/ext/categoryExt',
      'field.id': 'id',
      'field.main': 'name',
      sorts: [{ direction: 'DESC', property: 'CREATE_TIME' }]
    })
    this.search()
  },
  methods: {
    typeToStr (type) {
      switch (type) {
      case '0': return '大类'
      case '1': return '中类'
      case '2': return '小类'
      default: return '-'
      }
    },
    cateTypeToStr (cateType) {
      for (const item of this.types) {
        // console.log(item.id, parseInt(cateType), item.id === parseInt(cateType))
        if (item.id === parseInt(cateType)) {
          return item.name
        }
      }
    }
  }
}
</script>
web_standard/src/views/business/materialCategory.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
<template>
  <TableLayout v-permissions="['ext:categoryext:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form slot="search-form" ref="searchForm" :model="searchForm" label-width="100px" inline>
        <el-form-item label="分类名称:" prop="name">
        <el-input v-model="searchForm.name" placeholder="请输入" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <!-- <el-form-item label="分类编码:" prop="code">
        <el-input v-model="searchForm.code" placeholder="请输入" @keypress.enter.native="search"></el-input>
      </el-form-item> -->
      <!-- <el-form-item label="分类类型:" prop="cateType">
        <el-select v-model="searchForm.cateType" clearable filterable placeholder="全部">
          <el-option
            v-for="item in types"
            :key="item.id"
            :value="item.id"
          ></el-option>
        </el-select>
      </el-form-item> -->
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar">
        <li v-permissions="['ext:categoryext:create']"><el-button type="primary" @click="$refs.operaCategoryExtWindow.open('新增分类', null, 0)" >新建</el-button></li>
        <!-- <li v-permissions="['ext:categoryext:importExcel']">
          <ImportButton
            text="导入"
            template-name="category_import_template.xlsx"
            template-path="/template/category_import_template.xlsx"
            action="/ext/categoryExt/importExcel"
            @success="search"
          />
        </li>
        <li><el-button @click="deleteByIdInBatch" v-permissions="['ext:categoryext:delete']" type="danger" plain>删除</el-button></li> -->
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        border
        @selection-change="handleSelectionChange"
      >
        <!-- <el-table-column type="selection" width="55"></el-table-column> -->
        <!-- <el-table-column prop="cateType" label="分类类型" min-width="100px">
          <template slot-scope="{row}">
            {{ cateTypeToStr(row.cateType) }}
          </template>
        </el-table-column>
        <el-table-column prop="type" label="分类属性" min-width="100px">
          <template slot-scope="{row}">
            {{ typeToStr(row.type) }}
          </template>
        </el-table-column> -->
        <el-table-column prop="code" label="分类编码" min-width="100px"></el-table-column>
        <el-table-column prop="name" label="分类名称" min-width="100px"></el-table-column>
        <!-- <el-table-column label="从属分类类型" min-width="100px">
          <template slot-scope="{row}">
            {{ row.pmodel ? typeToStr(row.pmodel.type) : '-' }}
          </template>
        </el-table-column> -->
        <!-- <el-table-column label="从属分类名称" min-width="100px">
           <template slot-scope="{row}">
            {{ row.pmodel ? row.pmodel.name : '-' }}
          </template>
        </el-table-column> -->
        <el-table-column prop="createTime" label="创建时间" min-width="100px"></el-table-column>
        <el-table-column
          label="操作"
          min-width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button v-permissions="['ext:categoryext:update']"  type="text" @click="$refs.operaCategoryExtWindow.open('编辑', row)">编辑</el-button>
            <span v-permissions="['ext:categoryext:delete']" style="margin-left:8px">
              <el-button type="text" @click="deleteById(row)">删除</el-button>
            </span>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      ></pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaCategoryExtWindow ref="operaCategoryExtWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
// import SearchFormCollapse from '@/components/common/SearchFormCollapse'
import Pagination from '@/components/common/Pagination'
import OperaCategoryExtWindow from '@/components/business/OperaCategoryExtWindow'
export default {
  name: 'CategoryExt',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaCategoryExtWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        name: '',
        cateType: '0'
      },
      types: [
        //  0物料 1客户 2工装器具 3不良品
        { name: '物料', id: 0 },
        // { name: '客户', id: 1 },
        // { name: '工装器具', id: 2 },
        { name: '不良原因', id: 3 }
      ]
    }
  },
  created () {
    this.config({
      module: '设置类分类信息表',
      api: '/ext/categoryExt',
      'field.id': 'id',
      'field.main': 'name',
      sorts: [{ direction: 'DESC', property: 'CREATE_TIME' }]
    })
    this.search()
  },
  methods: {
    typeToStr (type) {
      switch (type) {
      case '0': return '大类'
      case '1': return '中类'
      case '2': return '小类'
      default: return '-'
      }
    },
    cateTypeToStr (cateType) {
      for (const item of this.types) {
        // console.log(item.id, parseInt(cateType), item.id === parseInt(cateType))
        if (item.id === parseInt(cateType)) {
          return item.name
        }
      }
    }
  }
}
</script>
web_standard/src/views/business/workPlans.vue
@@ -55,7 +55,7 @@
        <!-- deleteByIdInBatch -->
        <li><el-button type="danger" @click="deleteByIds" icon="el-icon-delete" v-permissions="['ext:workplans:delete']">批量删除</el-button></li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
      <el-table v-loading="isWorking.search" :data="tableData.list" border stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="planCode" label="成品计划编码" min-width="150px">
          <template slot-scope="{row}">
@@ -83,12 +83,6 @@
            <span v-else-if="row.status == 8">已关闭</span>
          </template>
        </el-table-column>
        <el-table-column label="暂停" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.paused == 1">是</span>
            <span v-else>否</span>
          </template>
        </el-table-column>
        <el-table-column label="完工数" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.finishNum">{{ row.finishNum }}</span>
@@ -107,7 +101,27 @@
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column label="发布时间" min-width="100px">
        <el-table-column label="销售订单" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.finishUnQualifiedNum">{{ row.finishUnQualifiedNum }}</span>
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column label="优先级" min-width="80px">
          <template slot-scope="{row}">
            <span v-if="row.urgent">{{ row.urgent }}</span>
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column label="暂停" min-width="80px">
          <template slot-scope="{row}">
            {{ row.paused==0?'否':'是' }}
          </template>
        </el-table-column>
        <el-table-column label="发布日期" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.publishDate">{{ row.publishDate }}</span>
            <span v-else>-</span>
web_standard/src/views/ext/plansExt.vue
@@ -104,7 +104,7 @@
        <el-table-column prop="mmodel.name" fixed="left" label="物料名称" show-overflow-tooltip min-width="140px">
          <template slot-scope="{row}">
            <el-button type="text" class="materail" @click="showPlan(row.id)">
              <span class="long-title-style">{{ row.mmodel.name }}</span>
              <div class="long-title-style">{{ row.mmodel.name }}</div>
            </el-button>
          </template>
        </el-table-column>
web_standard/src/views/login.vue
@@ -12,7 +12,6 @@
        <img :src="$store.state.VUE_APP_CONFIG.LOGO" alt="">
      </div>
      <h2>{{ $store.state.VUE_APP_CONFIG.COMPANY_NAME }}</h2>
    </div>
    <div class="login">
      <h1>系统登录&nbsp;/&nbsp;LOGIN IN</h1>
web_standard/src/views/system/menu.vue
@@ -84,7 +84,7 @@
    handlePageChange () {
      const formData = new FormData()
      formData.append('type', 1)
      formData.append('moduleId', 1)
      // formData.append('moduleId', 1)
      this.isWorking.search = true
      fetchTree(formData)
        .then(records => {
web_standard/vue.config.js
@@ -1,17 +1,14 @@
// è¯¦ç»†é…ç½®è¯·å‚考https://cli.vuejs.org/zh/config/#vue-config-js
// const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1)
const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length)
module.exports = {
  publicPath: process.env.VUE_APP_CONTEXT_PATH,
  // publicPath: './',
  outputDir: 'doumeeplant_web',
  // outputDir: 'web',
  outputDir: outputDir || 'web',
  assetsDir: 'static',
  lintOnSave: false,
  devServer: {
    disableHostCheck: true,
    host: '0.0.0.0',
    port: 10086,
    // port: 10086,
    proxy: {
      [process.env.VUE_APP_API_PREFIX]: {
        target: process.env.VUE_APP_BASE_URL,
web_standard/yarn.lock
@@ -1766,7 +1766,7 @@
"ansi-styles@^4.1.0":
  "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
  "resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
  "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
  "version" "4.3.0"
  dependencies:
    "color-convert" "^2.0.1"
@@ -2564,7 +2564,7 @@
"chalk@^4.1.0":
  "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
  "resolved" "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
  "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
  "version" "4.1.2"
  dependencies:
    "ansi-styles" "^4.1.0"
@@ -2793,7 +2793,7 @@
"color-convert@^2.0.1":
  "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
  "resolved" "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz"
  "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
  "version" "2.0.1"
  dependencies:
    "color-name" "~1.1.4"
@@ -2805,7 +2805,7 @@
"color-name@~1.1.4":
  "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
  "resolved" "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
  "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
  "version" "1.1.4"
"color-string@^1.5.4":
@@ -4003,7 +4003,7 @@
  "resolved" "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1620088667316&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz"
  "version" "1.3.0"
"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0", "eslint@^5.0.0 || ^6.0.0", "eslint@^6.7.2", "eslint@>= 1.6.0 < 7.0.0", "eslint@>= 4.12.1", "eslint@>=1.6.0 <7.0.0", "eslint@>=4.19.1", "eslint@>=5.0.0", "eslint@>=5.16.0", "eslint@>=6.2.2":
"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0", "eslint@^5.0.0 || ^6.0.0", "eslint@>= 1.6.0 < 7.0.0", "eslint@>= 4.12.1", "eslint@>=1.6.0 <7.0.0", "eslint@>=4.19.1", "eslint@>=5.0.0", "eslint@>=5.16.0", "eslint@>=6.2.2":
  "integrity" "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s="
  "resolved" "https://registry.nlark.com/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1620440445769&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-6.8.0.tgz"
  "version" "6.8.0"
@@ -4873,7 +4873,7 @@
"has-flag@^4.0.0":
  "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
  "resolved" "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz"
  "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
  "version" "4.0.0"
"has-symbols@^1.0.1", "has-symbols@^1.0.2":
@@ -6043,9 +6043,9 @@
    "json5" "^1.0.1"
"loader-utils@^2.0.0":
  "integrity" "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A=="
  "resolved" "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz"
  "version" "2.0.2"
  "integrity" "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="
  "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz"
  "version" "2.0.4"
  dependencies:
    "big.js" "^5.2.2"
    "emojis-list" "^3.0.0"
@@ -9062,7 +9062,7 @@
"supports-color@^7.1.0":
  "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
  "resolved" "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz"
  "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
  "version" "7.2.0"
  dependencies:
    "has-flag" "^4.0.0"
@@ -9661,7 +9661,7 @@
"vue-loader-v16@npm:vue-loader@^16.1.0":
  "integrity" "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA=="
  "resolved" "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz"
  "resolved" "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz"
  "version" "16.8.3"
  dependencies:
    "chalk" "^4.1.0"