jiangping
2023-08-17 8d7cb8876ac222eca1c82d5bab250f5551531edb
初始化1.0.1
已添加2个文件
已修改56个文件
19113 ■■■■■ 文件已修改
h5_standard/.env.development 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/package-lock.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/package.json 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/apis/WorkOrderAPI.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/apis/index.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/components/common/Warehouse.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/router/module/needToBeDealtWith/index.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/router/module/productionInspection/index.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/router/module/workOrder/index.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/utils/utils.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/LogInAgain.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/productionInspection/manualInspection.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/tabPage/workBench.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/wxLogin.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/.env.development 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/.env.production 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/business/OperaClientMangerWindow.vue 1 ●●●● 补丁 | 查看 | 原始文档 | 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 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/system/menu/OperaMenuWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/components/system/permission/OperaPermissionWindow.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | 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 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/views/system/permission.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.env.development 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.env.production 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.env.staging 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.gitignore 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/package-lock.json 17783 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/public/template/workplans_import_template.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/App.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/assets/js/validate.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/assets/style/style.scss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/business/OperaWorkPlansWindow.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/common/Header.vue 54 ●●●●● 补丁 | 查看 | 原始文档 | 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 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaProceduresExtWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaWorkorderDetailWindow.vue 217 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OrderDistrubution.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OrderQrCodeLabel.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/addProcesRoute.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | 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/utils/form.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/business/workPlans.vue 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/plansExt.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/workingorderExt.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/workorderPutRecordExt.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/workorderRecordExt.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/login.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/system/menu.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/yarn.lock 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/.env.development
@@ -12,6 +12,7 @@
# èå§æœ¬åœ°
# VUE_APP_API = 'http://192.168.0.12:10012/'
# ä»»åº·æœ¬åœ°
# VUE_APP_API = 'http://192.168.0.15:10021/'
@@ -21,5 +22,7 @@
# VUE_APP_API = 'http://192.168.0.15:10012/'
# åˆ˜ç£Šç£Š
# VUE_APP_API = 'http://192.168.0.18:10012/'
# VUE_APP_API = 'http://192.168.0.18:10012/'
h5_standard/package-lock.json
@@ -11,7 +11,6 @@
        "axios": "^0.27.2",
        "dingtalk-jsapi": "^2.13.92",
        "echarts": "^4.8.0",
        "js-sha1": "^0.6.0",
        "jsqr": "^1.4.0",
        "lib-flexible": "^0.3.2",
        "mitt": "^3.0.0",
@@ -27,12 +26,10 @@
        "vue": "^3.2.13",
        "vue-pdf-embed": "^1.1.4",
        "vue-router": "^4.0.3",
        "vuex": "^4.0.0",
        "weixin-js-sdk": "^1.6.0"
        "vuex": "^4.0.0"
      },
      "devDependencies": {
        "@types/echarts": "^4.9.15",
        "@types/js-sha1": "^0.6.0",
        "@vue/cli-plugin-router": "~5.0.0",
        "@vue/cli-plugin-typescript": "~5.0.0",
        "@vue/cli-plugin-vuex": "~5.0.0",
@@ -860,12 +857,6 @@
      "dependencies": {
        "@types/node": "*"
      }
    },
    "node_modules/@types/js-sha1": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/@types/js-sha1/-/js-sha1-0.6.0.tgz",
      "integrity": "sha512-TBJguE0wDNgtAwL7TpjzPbj5Sz5fsIuTQbgyXDJ7nV1eExhE/kd3YNS/q6JSiPAdElcFoKY3zlSifzjb/vO6xw==",
      "dev": true
    },
    "node_modules/@types/json-schema": {
      "version": "7.0.11",
@@ -5110,11 +5101,6 @@
      "engines": {
        "node": ">=0.6.0"
      }
    },
    "node_modules/js-sha1": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz",
      "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w=="
    },
    "node_modules/js-tokens": {
      "version": "4.0.0",
@@ -9701,11 +9687,6 @@
        "node": ">=0.8.0"
      }
    },
    "node_modules/weixin-js-sdk": {
      "version": "1.6.0",
      "resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz",
      "integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ=="
    },
    "node_modules/whatwg-fetch": {
      "version": "3.6.2",
      "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
@@ -10587,12 +10568,6 @@
      "requires": {
        "@types/node": "*"
      }
    },
    "@types/js-sha1": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/@types/js-sha1/-/js-sha1-0.6.0.tgz",
      "integrity": "sha512-TBJguE0wDNgtAwL7TpjzPbj5Sz5fsIuTQbgyXDJ7nV1eExhE/kd3YNS/q6JSiPAdElcFoKY3zlSifzjb/vO6xw==",
      "dev": true
    },
    "@types/json-schema": {
      "version": "7.0.11",
@@ -13847,11 +13822,6 @@
      "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
      "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
      "dev": true
    },
    "js-sha1": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz",
      "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w=="
    },
    "js-tokens": {
      "version": "4.0.0",
@@ -17262,11 +17232,6 @@
      "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
      "dev": true
    },
    "weixin-js-sdk": {
      "version": "1.6.0",
      "resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz",
      "integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ=="
    },
    "whatwg-fetch": {
      "version": "3.6.2",
h5_standard/package.json
@@ -10,7 +10,6 @@
    "axios": "^0.27.2",
    "dingtalk-jsapi": "^2.13.92",
    "echarts": "^4.8.0",
    "js-sha1": "^0.6.0",
    "jsqr": "^1.4.0",
    "lib-flexible": "^0.3.2",
    "mitt": "^3.0.0",
@@ -26,12 +25,10 @@
    "vue": "^3.2.13",
    "vue-pdf-embed": "^1.1.4",
    "vue-router": "^4.0.3",
    "vuex": "^4.0.0",
    "weixin-js-sdk": "^1.6.0"
    "vuex": "^4.0.0"
  },
  "devDependencies": {
    "@types/echarts": "^4.9.15",
    "@types/js-sha1": "^0.6.0",
    "@vue/cli-plugin-router": "~5.0.0",
    "@vue/cli-plugin-typescript": "~5.0.0",
    "@vue/cli-plugin-vuex": "~5.0.0",
h5_standard/src/apis/WorkOrderAPI.ts
@@ -469,22 +469,4 @@
      method: 'get',
      params
  })
}
// æ–°å¢žå‡ºåº“
export function createForStandard (data: any): Promise<any> {
    return httpRequest({
        url: '/ext/wOutboundExt/createForStandard',
        method: 'post',
        data
    })
}
// åº“存调整、采购入库入库单创建
export function wOutBoundForStockUp (data: any): Promise<any> {
    return httpRequest({
        url: '/ext/wOutboundExt/wOutBoundForStockUp',
        method: 'post',
        data
    })
}
h5_standard/src/apis/index.ts
@@ -11,24 +11,6 @@
    })
}
// èŽ·å–å¾®ä¿¡openId
export function wxLogin(params: any): Promise<any> {
    return httpRequest({
        url: '/system/wxLogin',
        method: 'get',
        params
    })
}
// å¾®ä¿¡ç«¯ç™»å½•
export function wxAccountLogin(data: any): Promise<any> {
    return httpRequest({
        url: '/system/wxAccountLogin',
        method: 'post',
        data
    })
}
// èŽ·å–ä¼ä¸šid
export function getDingdingCorpId(companyId: any): Promise<any> {
    return httpRequest({
h5_standard/src/components/common/Warehouse.vue
@@ -2,7 +2,7 @@
    <van-popup
        v-model:show="props.show"
        position="bottom"
        :style="{ height: props.height }">
        :style="{ height: '100%' }">
        <div class="title">
            <div class="close" @click="close"><van-icon name="arrow-down" size="30" color="#ffffff" /></div>
        </div>
@@ -16,7 +16,8 @@
                    v-model:loading="loading"
                    :finished="finished"
                    finished-text="没有更多了~"
                    @load="onLoad">
                    @load="onLoad"
                >
                    <div class="content_list">
                        <div class="content_list_item" v-for="(item, i) in list" :key="i" @click="jump(item)">
                            <div class="content_list_item_name">{{item.name}}</div>
@@ -135,10 +136,6 @@
        systemDicDataId: {
            type: String,
            default: ''
        },
        height: {
            type: String,
            default: '100%'
        }
    })
h5_standard/src/router/module/needToBeDealtWith/index.ts
@@ -26,24 +26,6 @@
                component: () => import('@/views/needToBeDealtWith/warehousing.vue')
            },
            {
                path: '/needToBeDealtWith/outbound',
                name: 'outbound',
                meta: {
                    title: '新增出库',
                    keepAlive: false
                },
                component: () => import('@/views/needToBeDealtWith/outbound.vue')
            },
            {
                path: '/needToBeDealtWith/addWarehousing',
                name: 'addWarehousing',
                meta: {
                    title: '新增入库',
                    keepAlive: false
                },
                component: () => import('@/views/needToBeDealtWith/addWarehousing.vue')
            },
            {
                path: '/needToBeDealtWith/codeScanningWarehousing',
                name: 'codeScanningWarehousing',
                meta: {
h5_standard/src/router/module/productionInspection/index.ts
@@ -74,28 +74,10 @@
                path: '/productionInspection/manualInspection',
                name: 'manualInspection',
                meta: {
                    title: '巡线',
                    title: '手动检验',
                    keepAlive: true
                },
                component: () => import('@/views/productionInspection/manualInspection.vue')
            },
            {
                path: '/productionInspection/manualInspection1',
                name: 'manualInspection1',
                meta: {
                    title: '巡检',
                    keepAlive: true
                },
                component: () => import('@/views/productionInspection/manualInspection1.vue')
            },
            {
                path: '/productionInspection/manualInspection2',
                name: 'manualInspection2',
                meta: {
                    title: '完工检',
                    keepAlive: true
                },
                component: () => import('@/views/productionInspection/manualInspection2.vue')
            },
            {
                path: '/productionInspection/selectWorkOrder',
h5_standard/src/router/module/workOrder/index.ts
@@ -186,15 +186,6 @@
                    keepAlive: false
                },
                component: () => import('@/views/workOrder/location.vue')
            },
            {
                path: '/workOrder/reportingForWork',
                name: 'reportingForWork',
                meta: {
                    title: '一键报工',
                    keepAlive: false
                },
                component: () => import('@/views/workOrder/reportingForWork.vue')
            }
        ]
    }
h5_standard/src/utils/utils.ts
@@ -1,44 +1,5 @@
import * as dd from 'dingtalk-jsapi'
import sha1 from 'js-sha1'
import store from '@/store'
/**
 * èŽ·å–å½“å‰æ—¶é—´ æ—¶é—´æˆ³
 * @returns {number}
 */
export function getTimestamp () {
    return new Date().getTime()
}
/**
 * èŽ·å–éšæœºå­—ç¬¦ä¸²
 * @param {number} len å¯æŒ‡å®šé•¿åº¦
 * @returns {string}
 */
export function randomString (len: number): string {
    len = len || 32
    let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
    let maxPos = $chars.length
    let pwd = ''
    for (let i = 0; i < len; i++) {
        pwd += $chars.charAt(Math.floor(Math.random() * maxPos))
    }
    return pwd
}
/**
 * æ‹¼æŽ¥ç­¾åå­—符串
 * @param {string} ticket é€šè¿‡access_token获取的jsapi_ticket
 * @param {string} noncestr è‡ªå·±ç”Ÿæˆçš„随机字符串
 * @param {string} timestamp ç”Ÿæˆç­¾åæ—¶çš„æ—¶é—´æˆ³
 * @param {string} urlLink url地址获取code
 * @param {string} return {*}
 */
export function getSignature (ticket: String, noncestr: String, timestamp: String, urlLink: String): String {
    let url = urlLink
    let jsapi_ticket = `jsapi_ticket=${ticket}&noncestr=${noncestr}&timestamp=${timestamp}&url=${url}`
    return sha1(jsapi_ticket)
}
/***
 * phoneRegular: æ‰‹æœºå·éªŒè¯
h5_standard/src/views/LogInAgain.vue
@@ -117,7 +117,7 @@
        window.localStorage.setItem('token', res.data)
        let info: any = await getUserInfo()
        if (info.code === 200) {
          await store.commit('setEntrance', 'H5')
          // await store.commit('setEntrance', 'H5')
          await store.commit('setUserInfo', info.data)
          await store.dispatch('getMenuList', 2)
          await router.go(-1)
h5_standard/src/views/productionInspection/manualInspection.vue
@@ -3,13 +3,8 @@
        <div class="inspection_list">
            <div class="inspection_list_item">
                <span>检验类型</span>
                <!-- <div class="right">
                    <div class="right_item" :class="{ 'active': item.active }" v-for="(item, index) in status" :key="index" @click="changeItem(index, item.id)">{{item.name}}</div>
                </div> -->
                <div class="right">
                    <div class="right_item active">巡线</div>
                    <!-- <div class="right_item active" v-if="form.status == '1'">巡检</div>
                    <div class="right_item active" v-if="form.status == '2'">完工检</div> -->
                    <div class="right_item" :class="{ 'active': item.active }" v-for="(item, index) in status" :key="index" @click="changeItem(index, item.id)">{{item.name}}</div>
                </div>
            </div>
        </div>
@@ -282,7 +277,6 @@
    onMounted(() => {
        checkAllLists()
        // /productionInspection/manualInspection
        // getListByConditions1()
        // toolingQueryByIds()
    })
h5_standard/src/views/tabPage/workBench.vue
@@ -38,11 +38,11 @@
<script setup lang="ts">
    import { reactive, ref } from "vue"
    import { useStore } from "vuex"
    // import { BrowserMultiFormatReader } from '@zxing/library'
    import { BrowserMultiFormatReader } from '@zxing/library'
    import vTags from '@/components/common/Tags.vue'
    import vMenu from '@/components/common/Menu.vue'
    const store = useStore()
    // let openCode = ref<boolean>(false)
    let openCode = ref<boolean>(false)
    // let loadingShow = ref<boolean>(false)
    // let codeReader: any = ref(null)
@@ -181,7 +181,7 @@
    height: 100%;
    background: #f5f5f5;
    .top {
        margin-bottom: 20px;
        margin-top: 20px;
    }
    .box_notfound {
        padding-top: 300px;
h5_standard/src/views/wxLogin.vue
@@ -7,86 +7,26 @@
            <div class="wx_login_list">
                <div class="wx_login_list_item">
                    <img src="@/assets/icon/login_ic_code@2x.png" alt="" />
                    <input type="text" v-model="from.companyId" placeholder="企业代码" />
                    <input type="text" placeholder="企业代码" />
                </div>
                <div class="wx_login_list_item">
                    <img src="@/assets/icon/login_ic_phone@2x.png" alt="" />
                    <input type="text" maxlength="11" v-model="from.username" placeholder="手机号" />
                    <input type="text" placeholder="手机号" />
                </div>
                <div class="wx_login_list_item">
                    <img src="@/assets/icon/login_ic_password@2x.png" alt="" />
                    <input type="password" v-model="from.password" placeholder="密码" />
                    <input type="text" placeholder="密码" />
                </div>
            </div>
            <div class="wx_login_footer">
                <div class="wx_login_footer_btn" @click="login">立即登录</div>
                <div class="wx_login_footer_btn">立即登录</div>
            </div>
        </div>
    </div>
</template>
<script setup lang="ts">
import { onMounted, reactive } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useStore } from 'vuex';
import { wxLogin, wxAccountLogin, getUserInfo } from '@/apis/index';
import { Toast } from 'vant';
const route = useRoute()
const router = useRouter()
const store = useStore()
let from: any = reactive({
    openid: '',
    unionid: '',
    companyId: '',
    username: '',
    password: ''
})
const login = async () => {
    if (!from.openid) return Toast('openid不能为空')
    if (!from.unionid) return Toast('unionid不能为空')
    if (!from.companyId) return Toast('企业代码不能为空')
    if (!from.username) return Toast('手机号不能为空')
    if (!from.password) return Toast('密码不能为空')
    Toast.loading({
        message: '登录中...',
        forbidClick: true
    });
    let res = await wxAccountLogin(from)
    if (res.code === 200) {
        let info = await getUserInfo()
        if (info.code === 200) {
            await store.commit('setEntrance', 'DD')
            await store.commit('setUserInfo', info.data)
            await store.dispatch('getMenuList', 2)
            await router.replace('/workbench')
        }
    }
    Toast.clear();
}
onMounted(() => {
    wxLogin({ code: route.query.code })
        .then(async (res) => {
            if (res.code === 200) {
                // å…ç™»å½•,直接跳首页
                if (res.data.loginStatus == 0) {
                    let info = await getUserInfo()
                    if (info.code === 200) {
                        await store.commit('setEntrance', 'DD')
                        await store.commit('setUserInfo', info.data)
                        await store.dispatch('getMenuList', 2)
                        await router.replace('/workbench')
                    }
                } else {
                    from.openid = res.data.openid
                    from.unionid = res.data.unionid
                }
            }
        })
})
</script>
<style lang="scss" scoped>
platform_web/.env.development
@@ -13,11 +13,20 @@
# æŽ¥å£å‰ç¼€
VUE_APP_API_PREFIX = ''
#测试服务器
# VUE_APP_BASE_URL = 'http://139.186.142.91:10012/'
#汇智
#VUE_APP_BASE_URL = 'https://106.14.220.133:10012/'
#任康本地
# VUE_APP_BASE_URL = 'http://192.168.0.15:10012/'
# VUE_APP_BASE_URL = 'https://hsky.doumee.com/doumeeplant_api/'
#江萍本地
#VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
#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/'
VUE_APP_BASE_URL = 'http://192.168.0.18:10021/'
# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
platform_web/.env.production
@@ -20,4 +20,11 @@
# 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/business/OperaClientMangerWindow.vue
@@ -217,7 +217,6 @@
        this.form.fileurlfull = this.form.fileStoreAddr ? this.form.fileurlfull : ''
      })
    },
    typeChange() {
      let tempDate = new Date();
      tempDate.setDate(tempDate.getDate() + (this.form.oepnType ? 365 : 15))
platform_web/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
  <div class="common-header">
    <div class="header">
      <div class="logo">
        <div>DM云工厂平台端</div>
        <div>工厂平台端</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,8 +48,6 @@
      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.parentId != null && form.id == null">为 <em>{{parentName}}</em> æ–°å»ºå­èœå•</p>
    <p class="tip" v-if="form.parent != 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.fullIcon, 'imgurl': form.icon }"
            :file="{ 'imgurlfull': form.icon, 'imgurl': form.icon }"
            :uploadData="uploadData"
            customStyle="width: 80px; height: 80px;"
            tipsLabel="上传图标"
@@ -29,7 +29,7 @@
            @uploadBegin="isUploading=true"
          />
          <div style="display: flex; flex-direction: column-reverse;" v-if="!!form.icon">
            <el-button style="margin-left: 5px; padding: 0 5px;" type="text" @click="deletePic">删除</el-button>
            <el-button style="margin-left: 5px; padding: 0 5px;" type="text" @click="form.icon=''">删除</el-button>
          </div>
        </div>
      </el-form-item>
@@ -59,10 +59,8 @@
      // éœ€æŽ’除选择的菜单ID
      excludeMenuId: null,
      uploadData: {
        // floader: 'company/menu'
        folder: 'company/menu'
        floader: 'company/menu'
      },
      parent: {},
      // è¡¨å•数据
      form: {
        id: null,
@@ -70,7 +68,6 @@
        name: '',
        path: '',
        icon: '',
        fullIcon: '',
        remark: '',
        type: '2'
      },
@@ -82,12 +79,6 @@
      }
    }
  },
  created () {
    this.config({
      api: '/system/menu'
    })
  },
  methods: {
    /**
     * @title: çª—口标题
@@ -95,21 +86,18 @@
     * @parent: æ–°å»ºæ—¶çš„上级菜单
     * @type: 0平台 1、企业 2、h5
     */
    open (title, target, parent) {
      debugger
    open (title, target, parent, type) {
      this.title = title
      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.fullIcon = ''
          this.form.type = type
        })
        return
      }
@@ -119,18 +107,20 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.fullIcon = !!target.icon ? (target.resourcePath + target.icon) : ''
      })
    },
    uploadReverseSuccess(file) {
      this.form.icon = file.imgurl;
      this.form.fullIcon = file.imgurlfull;
    },
    deletePic() {
      this.form.fullIcon=''
      this.form.icon=''
    }
  },
  created () {
    this.config({
      api: '/system/menu'
    })
  },
  methods: {
    uploadReverseSuccess(file) {
      // this.form. = file.imgurl;
      this.form.icon = file.imgurlfull;
    }
  }
}
</script>
platform_web/src/components/system/menu/OperaMenuWindow.vue
@@ -73,6 +73,7 @@
     * @type: 0平台 1、企业 2、h5
     */
    open (title, target, parent, type) {
      debugger
      this.title = title
      this.visible = true
      // æ–°å»ºï¼Œmenu为空时表示新建菜单
@@ -80,10 +81,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
      }
@@ -93,7 +94,6 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.type = type
      })
    }
  },
platform_web/src/components/system/permission/OperaPermissionWindow.vue
@@ -26,12 +26,6 @@
  name: 'OperaPermissionWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  props: {
    type: {
      type: Number|String,
      default: 0
    }
  },
  data () {
    return {
      // åŽŸæƒé™ç 
@@ -64,7 +58,6 @@
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
          this.form.type = this.type
        })
        return
      }
@@ -74,7 +67,6 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.type = this.type
      })
    },
    confirm () {
platform_web/src/views/business/clientRecord.vue
@@ -97,6 +97,162 @@
}
/**
 *  
    è¿™ä¸€æ¬¡å¤åŸå´©å¼€å¯èƒ½å°±æ˜¯ä¸Žé’铜仙殿有关,是它散发的气机加剧了此地高地的龟裂,而后全面塌沉,出现天坑。
    ä¸Žé’铜仙殿相比,三位古圣的身高若蚁虫般,主要是这座铜殿太大了且在散发无穷仙光。
    æ˜¾ç„¶ï¼Œä»–们发现了叶凡几人,霍坦的的一双瞳孔像是黑日般,漆黑而深不可测发出一缕缕乌光,扫视了过来,有一种高高在上,俯视蝼蚁般的气势。
    å¯æƒœï¼Œä»–无法脱困没有办法冲过来,更不能出手。
    å¶å‡¡ã€æ®µå¾·ã€é»‘皇等人都无惧,三人自身难保被定在了那里,能否活下去都两说。
    â€œæ¯æ°”……这么多?!”龙马四蹄发出光火,远远的绕着铜殿每行,一副精力过利的样子。
    å¶çž³ä¹Ÿå¼ å¤§äº†å˜´å·´ï¼Œé›³å‡ºä¸å¯æ€è®®çš„神色,道:“师博这就是你鼎的来源处?”
    â€œç‹ äººåœŒå¤§å¸äº†ä¸å¾—,这是要做什么,挖开了一个混沌仙地,这是要打造最强仙兵吗这么多母气铸鼎,反复提炼,一击之下谁能挡住?”大黑狗也震撼。
    åœ¨é’铜仙殿外部万物母气缭绕,成片成山成海,一层又一层,若星域般沉重压的人将停止呼吸,有无量的道痕在交织。
    ä»»ä½•一缕母气都可以压塌一座山脊这么多凝聚在一起,这得多么沉重?古之大帝以它铸成兵器,是想一击圌打碎其他帝兵吗?
    å¯»å¸¸äººè‹¥èƒ½å¯»åˆ°ä¸€ç¼•母气就是大机缘了,而今这么多,跟云层一般密布,笼苹此地,古朴大气,巍峨磅旖,是一种奇迹。
    â€œèµ·ï¼â€
    å¶å‡¡å¤§å–äº†ä¸€å£°ï¼Œé¢éª¨å†…一个金色的小人睁开了眼睛,长身而起,一步迈出,以道痕为战衣,以鼎为兵器。
    ä¸‡è½´æ¯æ°”鼎悬在其头乒,金色小人张口一声清啸,小鼎快速放大,向前飞去,开始鲸吸牛饮,吞收那海量的母气!
    â€œä½ æ•¢â€¦â€¦â€éœå¦å¤§æ€’,终是变了颜色,难以不语,无法镇定。
    è¿™ä¹ˆå¤šä¸‡ç‰©æ¯æ°”,即便失去了源根,也是举世难寻的神料,若是到手,简直是逆天的造化。
    ä»€ä¹ˆä¸œè¥¿æœ€çè´µï¼Œè‡ªç„¶æ˜¯å¤ä¹‹å¤§å¸çš„兵器,而这些的母气集是人族大帝准备用来炼兵的,价值没有办法衡量。
    å¦å¤–两位古圣变色,有心无力,真身都难保了,还怎么去阻挡?
    â€œäººæ—çš„圣体,你杀我部众,夺我造化,此是大仇,我若脱困,杀以百次,即便是斗战胜佛也无话可说。”霍坦幽森的开口。
    â€œç­‰ä½ è„±å›°æ—¶å†è®¡è¾ƒå§ï¼ŒçŽ°åœ¨æˆ‘æ²¡ç©ºæ­ç†ä½ ï¼Œç»™æˆ‘æ‰¾ä¸ªåœ°æ–¹è‡ªå·²æ¸…å‡€åŽ»ã€‚â€å¶å‡¡æ¼«ä¸ç»å¿ƒçš„è¯´é“ã€‚
    æ­¤æ—¶ï¼Œä»–心情大好,以鼎吞收海量母气,纳于鼎婺,熔圌炼于一体。
    å…µå­—诀原状,他的鼎沉沉浮浮,俚掰作响,母气如万流归海,压的虚空扭曲、崩塌,与鼎合一,不分彼此。
    ä¸‡ç‰©æ¯æ°”源从此合一,狠人的帝兵材料,万圌古罕见,霍坦眼红与怒吼,自然是再正常不过的事情了!
    é¼Žï¼Œä¸ºæ¯æ°”精粹,此时与海量母气合一,水乳圌交融,散发出一种生命波动,像是将要诞生神灵志了。
    â€œä½ åˆå‘½æ”¶èµ°ï¼Œæ— å‘½ä½¿ç”¨ã€‚”霍坦冷森森的笑,他充满了不敢,杀机毕雳,是不加掩饰的。
    è‹¥æ˜¯èƒ½è¡ŒåŠ¨ï¼Œä»–è‚¯å®šä¼šåœ¨ç¬¬ä¸€æ—¶é—´å‡ºæ‰‹ï¼Œå°†å¶å‡¡ç¢¾åŽ‹æˆé£žç°ï¼Œæ— æ¯”çš„é—æ†¾ã€‚
    â€œä½ æ²¡æœ‰è¿™ä¸ªæœºä¼šï¼Œå³ä¾¿ä½ æˆä¸ºäº†åœ£çº§äººç‰©ï¼Œä½†ä¹Ÿä¸è§å¾—不会殒落,还是当心你自已吧。”叶凡笑道。
    ä»–并根本不计较,有什么比证道之器完美更人激动,他的鼎海纳百川,将所有母气都给汲取了,道痕交织。
    â€œäºŒåä¸‰ï¼Œä½ å˜´å·´æœ€å¥½è€å®žç‚¹ï¼Œä¸ç„¶æœ¬åº§èµä½ ä¸€ä¸ªé”…贴,再让你来个驴打滚。”龙马满口浑话。
    å®ƒè¾¹è¯´è¾¹æŠ¬èµ·äº†è¹„子,准备一蹶子尥过去,落圌井圌下圌石,将霍坦饮恨,死在青铜仙殿中。
    â€œåˆ«ï¼â€æ®µå¾·èµ¶ç´§é˜»æ­¢ï¼Œè®©å®ƒä¸è¦è½»ä¸¾å¦„动。
    é‚£é’铜殿,一仙光亿万缕,将祖王都要吞没了,他们若是贸然出手,也被吞过去就麻烦大了。
    â€œè¿™ç§å¹³è¡¡ä¸å¯æ‰“破,他们若是命大就闯出来,命小就等着殒落吧。”黑皇也道。
    å¶å‡¡å®Œå·¥ï¼Œé¼Žä¸€ä¸‹å­ä¹Ÿä¸çŸ¥é‡äº†å¤šå°‘倍,好在早已被炼化,其重不被他承受,现在砸出去,不动用法圌力,估计一般的敌手就得直接成为齑粉。
    â€œå°å­ï¼Œè¿™ä¹ˆå®è´µçš„东西落入了你的手中,你得拿东西补偿我们,不然就平分,换作他人,本皇早就抢了!”大黑狗叫嚣。
    â€œå‡»æ¯™å¤©çš‡å­ï¼Œä»Žä»–身圌体圌内扒拉出的好东西不少,怎么不见你上缴?”叶凡揭他老底。
    â€œæ— é‡å¤©å°Šï¼Œæ—¢ç„¶è¿™æ˜¯ä½ çš„证道物,贫道也有成圌人之美,到时候将从不死天皇行宫中弄来的悟道茶等多分我一份就行了。”
    â€œè¿˜æœ‰æˆ‘的……”龙马也叫道。
    ä¸‰ä¸ªæžå“ä¸€èµ·å«åš·ã€‚叶瞳很本分,不可能去瓜分师傅的宝贝。
    ä¸è¿œå¤„,三位古圣生闷气,眼睁睁的看着几个小辈收走了古之大帝的专属仙料,而今还放肆的在此议论分赃,实在让他们大恨。
    å°¤å…¶æ˜¯éœå¦ï¼Œè‚ºéƒ½è¦æ°”炸了,因为那头龙马一口一个二十三,听那口吻肯定不是什么好话,斜着眼睛看他,根本就没有将他当成一位圣圌人。
    â€œå’¦â€¦â€¦â€æ®µå¾·è¹™çœ‰ï¼Œåƒæ˜¯è§‰å¯Ÿåˆ°äº†ä»€ä¹ˆã€‚
    å°”好,有圣圌人来了,本皇布下阵纹有反应,我心惊肉跳。”黑皇变色。
    è€Œä»Šï¼Œä¸ä¸ºåœ£åœŒäººï¼Œç¼ºå°‘安身立命的资本,他们自然谨慎小心,在进来前布下了各种阵纹,只要圣圌人降临,就会预弊。
    é»‘皇二话没说,取出棋盘阵台,打开虚空,直接没入了进去,快速从这个地方消失。
    â€œçœŸå¯æƒœï¼Œé’铜仙殿下可是有一个混沌仙地,里面多半有神珍。”段德很遗憾。
    â€œå¤ªå¯æƒœäº†ï¼â€é¾™é©¬æ›´æ˜¯åå§ä¸å®‰ï¼Œä½†æ²¡æœ‰åŠžæ³•ï¼Œåœ£åœŒäººæ¥äº†ï¼Œä»–ä»¬åªèƒ½é€€ã€‚
    â€œä¸‡ç‰©æ¯æ°”暂且寄存你们手中,项上人头也先留着,我会去收取的!”霍坦阴森森的说道。
    â€œäºŒåä¸‰ï¼Œå®‰å¿ƒçš„等死吧。”龙马直接一句话差点噎死他。
    â€œåˆ·â€
    å…‰åŽä¸€é—ªï¼Œä»–们消失在了地圌下世界。
    è¿œå¤„,神秘波动扩散,域门打开,一个满头赤发的女子走出,肌体修圌长矫健,是一名强大的古族。
    â€œè¡€ç”µå¥³çŽ‹æ¥äº†ï¼â€
    ä¸å°‘人惊呼,这是一个圣圌人王,曾在瑶池大圌会出现过,曾与姜神王对决,今日竟然亲身降临,事情越来越大,这等人物也都坐不住了。
    å¥¹æ²¡æœ‰è½»ä¸¾å¦„动,绕着深渊走了很长时间,才一步迈下去,当来到青铜仙殿远处时,见到了三位古圣被困。
    â€œè½°ï¼â€
    åŠåˆ»é’ŸåŽä¸€å£°å·¨å“ï¼Œè¡€ç”µå¥³çŽ‹å†²äº†ä¸Šæ¥ï¼Œèº«ä¸Šæœ‰æ–‘æ–‘è¡€è¿¹ï¼Œèº«åœŒå­å·®ç‚¹ç‚¸å¼€ï¼Œè€Œåœ¨å©·çš„èº«åŽï¼Œå¦æœ‰ä¸‰é“åœŒäººå½±ï¼Œåæ˜¯å‡„æƒ¨åˆ°äº†æžç‚¹ï¼Œå…ƒç¥žä¹‹ç«å·®ä¸€ç‚¹ç†„ç­ï¼Œèº«åœŒå­ç ´çƒ‚çš„ä¸æˆæ ·å­ã€‚
    å•Šâ€¦â€¦â€
    ä»–们冲上来后,全都大叫,充满了愤怒,地圌下有仙珍,却不可夺得,一座仙殿就足以镇死有人!
    å°¤å…¶æ˜¯éœå¦ï¼Œå€æ„Ÿæ†‹å±ˆï¼Œè¢«å¶å‡¡ä¸Žé¾™é©¬å¥šè½ï¼Œçœ¼çççš„看着万物母气鼎被洗劫走,那种不敢与愤懑难以言表。
    â€œäººæ—åœ£ä½“,我必杀你,神复牛也救不了你!”霍坦大吼。
    è½°éš†å…­å£°ï¼ŒéŸ³æ´«ä¼¼å¤©é›·ï¼Œå¤§åŸé™„近很多修士身圌体龟裂,修为稍差的人直接崩开,化成了血雾,圣贤一怒,伏尸无数,并非字话。
    â€œå£æ°”不小,就是不知道,若有一日真有神明降临,你会如何自处?”一个苍老的声音传来。
    æ— å£°æ— æ¯ï¼Œå¤©ç’‡åœ£åœ°çŸ³åŠçš„老圣圌人卫易出现,古井无波,站在那里,如一段枯木。
    è¡€ç”µå¥³çŽ‹å¦‚ä¸´å¤§æ•Œï¼Œç¥žè‰²å˜äº†ï¼Œäººæ—åœ£åœŒäººå“ªä¸€ä¸ªæ˜¯å‡¡ä¿—ï¼Œå½“å¹´åœ¨ç‘¶æ± å¤§åœŒä¼šä¸€ä¸ªç™½è¡£ç¥žçŽ‹æ€å¤æ—è¯¸åœ£è¡€æº…å¡ç©ºï¼Œæ­»äº†ä¸€æ‰¹åˆä¸€æ‰¹ï¼Œå…ƒæ°”å¤§ä¼¤ã€‚
    è¿™ä¸ªè€åœ£åœŒäººï¼Œè¿žå¥¹éƒ½ä¸èƒ½åº¦æ·±æµ…,心中突突直跳,不敢妄动。
    å«æ˜“站在这里,默默推演了一番,而后蹙起了眉头,一语不发,身影模糊,凭空消失了。
    åŒæ—¶ï¼Œå«æ˜“消失的刹那,将高地诸多修士都给带走了,传圌送入到远空。
    â€œè½°â€
    çªç„¶ï¼Œé’铜仙殿,瞬间万丈,一下子冲上了天坑,仙光无数,像是一轮太阳般发光,内部一个血圌淋圌淋的“仙”,化成一道光,映在虚空中,横断古今。
    è¡€ç”µå¥³çŽ‹ã€éœå¦å‡ äººé£žå¿«å€’é€€ï¼Œéª¨èŠ‚ä½œå“ï¼Œå·®ä¸€ç‚¹åœ¨è¿™ä¸ªåœ°æ–¹ç‚¸å¼€ï¼Œæµ‘èº«éƒ½æ˜¯è¡€ï¼Œå‡ ä¹Žè¢«æ´»æ´»é•‡æ­»ã€‚
    å¥½ä¸€ä¸ªä»™æ®¿ï¼Œæžœç„¶éžå‡¡ï¼ŒçœŸæ˜¯éš¾ä»¥æƒ³è±¡ï¼Œç©¶ç«Ÿæ˜¯è°åœ¨å…¶å†…部击出一个大洞,生生打了出来。”一个苍老的声音说道,浑拓大圣显化,出现在天边。
    åœ¨å…¶èº«åŽï¼Œæœ‰æ•°ä½å¤åœ£ç›¸éšï¼Œä¸Žå…¶å…±è¿›é€€ï¼Œæ˜¾ç„¶å¯¹å¤§åŸå†…的神珍势在必得。
    å¦ä¸€è¾¹ï¼Œäººæ—å‰å‡ºçŽ°ä¸€é“èº«å½±ï¼Œç™½è¡£çŒŽçŒŽï¼Œæ­£æ˜¯ç¥žçŽ‹å§œå¤ªè™šï¼Œä»–ä¹ŸçŽ°å‡ºäº†è¸ªè¿¹ã€‚
    ç¥žçŽ‹ä¸€å‡ºçŽ°ï¼ŒçŽ°åœºé¡¿æ—¶ä¸€é˜µå¤§ä¹±ï¼Œè¯¸å¤šå¤æ—é¢¤åœŒæŠ–ï¼Œè¿žä¸€äº›ç¥–çŽ‹éƒ½æ˜¯æµ‘èº«å‘å‡‰ï¼Œç‘¶æ± å¤§åœŒä¼šï¼Œç»ä»£ç¥žçŽ‹ä¸€äººæ€çš„ä»–ä»¬å¿ƒèƒ†éƒ½å¯’äº†ã€‚
    â€œå˜¿ï¼Œè¿™åº§é“œæ®¿ä¸Žä»™æœ‰å…³ï¼Œä¸è‹¥æˆ‘等一起将打开如何,看一看到底有什么。”有一道身影降临,很是古老,不少人圌大惊,是万龙巢的大圣到了。
    ä¸€åº§å¸åŸå¼•发了一场滔天大乱,诸多古王,还有几位大圣也坐不住了,想要开启,获取成仙的秘密。
    â€œäººæ—å¤§å¸çš„坟,外人难动……”姜太虚自语。
 */
</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, 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 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 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)" icon="el-icon-plus" v-permissions="['system:menu:create']">新建</el-button></li>
        <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 @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>
@@ -23,7 +23,7 @@
        <el-table-column prop="name" label="菜单名称"  fixed="left" align="center" min-width="160px"></el-table-column>
        <el-table-column prop="icon" label="图标" align="center" min-width="80px" class-name="table-column-icon">
          <template slot-scope="{row}">
            <el-image v-if="row.icon != null && row.icon !== ''" style="width: 40px; height: 40px;" :src="row.resourcePath + row.icon"></el-image>
            <el-image v-if="row.icon != null && row.icon !== ''" style="width: 40px; height: 40px;" :src="row.icon"></el-image>
            <template v-else>未设置</template>
          </template>
        </el-table-column>
@@ -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" @click="$refs.operaMenuWindow.open('新建子菜单', null, row)" v-permissions="['system:menu:create']">新建子菜单</el-button>
            <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 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/permission.vue
@@ -60,7 +60,7 @@
      ></pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaPermissionWindow ref="operaPermissionWindow" :type="0" @success="handlePageChange"/>
    <OperaPermissionWindow ref="operaPermissionWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
web_standard/.env.development
@@ -13,12 +13,21 @@
# æŽ¥å£å‰ç¼€
VUE_APP_API_PREFIX = ''
# ç„¦æ¾
VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
# æ±Ÿè
# VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
# æµ‹è¯•服务器
# VUE_APP_BASE_URL = 'http://139.186.142.91:10012/'
# æ±‡æ™º
# VUE_APP_BASE_URL = 'https://106.14.220.133:10012/'
# ä»»åº·æœ¬åœ°
# VUE_APP_BASE_URL = 'http://192.168.0.15:10021/'
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.production
@@ -8,9 +8,21 @@
VUE_APP_ROUTER_MODE = 'hash'
# é¡¹ç›®ä¸Šä¸‹æ–‡è·¯å¾„
# VUE_APP_CONTEXT_PATH = '/doumeeplant_web/'
VUE_APP_CONTEXT_PATH = '/web/'
# æŽ¥å£å‰ç¼€
VUE_APP_API_PREFIX = '/doumeeplant'
# æµ‹è¯•服务器
# VUE_APP_BASE_URL = 'http://139.186.142.91:10012/'
# æ¼”示服务器
# 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/'
# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
VUE_APP_BASE_URL = 'https://www.mes.red/doumeeplant/'
web_standard/.env.staging
@@ -1,11 +1,2 @@
# æµ‹è¯•环境配置
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/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
.DS_Store
coderd.json
node_modules
doumeeplant_web
vue.config.js
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
web_standard/package-lock.json
ÎļþÌ«´ó
web_standard/package.json
@@ -38,6 +38,7 @@
    "@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/public/template/workplans_import_template.xlsx
Binary files differ
web_standard/src/App.vue
@@ -10,20 +10,10 @@
</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/style.scss
@@ -89,7 +89,7 @@
.el-date-editor--daterange.el-input__inner,
.el-date-editor--timerange.el-input,
.el-date-editor--timerange.el-input__inner {
  width: 240px !important;
  width: 220px !important;
}
.el-input__inner {
web_standard/src/components/business/OperaWorkPlansWindow.vue
@@ -5,8 +5,8 @@
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" label-suffix=":" :rules="rules">
      <el-form-item label="工厂" prop="factoryId">
    <el-form :model="form" ref="form" :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,32 +28,21 @@
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="计划开始日期" prop="startDate">
        <el-date-picker
          v-model="form.startDate"
          value-format="yyyy-MM-dd"
          placeholder="请选择计划开始日期"
          :picker-options="pickerOptions"
        ></el-date-picker>
      </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="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="salesorder">
        <el-input v-model="form.salesorder" placeholder="请输入" 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>
@@ -86,9 +75,7 @@
        num: null,
        batch: null,
        unitId: '',
        startDate: '',
        planDate: '',
        salesorder: '',
        urgent: ''
      },
      materials: [],
@@ -121,8 +108,6 @@
      api: '/business/workPlans',
      'field.id': 'id'
    })
    let tempDate = new Date()
    this.form.startDate = `${tempDate.getFullYear()}-${tempDate.getMonth() + 1}-${tempDate.getDate()}`
    this.pickerOptions.disabledDate = (time) => {
        // ä¸€å¤©
      let tempTime = 3600 * 1000 * 24 
@@ -252,7 +237,4 @@
    }
  }
}
/**
 *
 */
</script>
web_standard/src/components/common/Header.vue
@@ -8,18 +8,13 @@
          {{title}}
        </h2>
        <div class="user">
          <div class="help" @click="jumpWord">
            <div class="user_help">
              <img src="@/assets/images/ic_help@2x.png" alt="" />
              <span>帮助文档</span>
            </div>
            <span class="ml5 mr5">|</span>
            <span>企业代码: {{ tempId }}</span>
          <div class="user_help" @click="jumpWord">
            <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">
            <span class="c2 f16">{{ tempC }}</span><i class="el-icon-arrow-down el-icon--right"></i>
              {{ tempC }}<i class="el-icon-arrow-down el-icon--right"></i>
            </span>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item v-for="(item, index) in cList" :key="index" :command='item.id'>{{ item.name }}</el-dropdown-item>
@@ -78,7 +73,6 @@
  data () {
    return {
      tempC: '',
      tempId: '',
      cList: '',
      visible: {
        // ä¿®æ”¹å¯†ç 
@@ -133,10 +127,7 @@
    }
  },
  created () {
    if (this.userInfo.curComDepartment) {
      this.tempC = this.userInfo.curComDepartment.name
      this.tempId = this.userInfo.company.id
    }
    this.tempC = this.userInfo.curComDepartment ? this.userInfo.curComDepartment.name : ''
    getDepartmentListByConditon({
      type: 0
    })
@@ -280,41 +271,30 @@
      // width: 30%;
      flex-shrink: 0;
      // text-align: right;
      vertical-align: middle;
      display: flex;
      align-items: center;
      .help {
      .user_help {
        width: 111px;
        height: 36px;
        display: flex;
        height: 29px;
        line-height: 38px;
        align-items: center;
        justify-content: center;
        vertical-align: middle;
        background: #F7F7F7;
        border-radius: 4px;
        margin-right: 30px;
        cursor: pointer;
        img {
          width: 16px;
          height: 16px;
          margin-right: 7px !important;
        }
        span {
          font-size: 12px;
          font-size: 16px;
          font-family: PingFangSC-Regular, PingFang SC;
          font-weight: 400;
          vertical-align: middle;
          color: #666666;
        }
        .user_help {
          // width: 111px;
          // background: #F7F7F7;
          cursor: pointer;
          img {
            width: 16px;
            height: 16px;
            margin-right: 7px !important;
            vertical-align: middle;
          }
        }
      }
      .el-dropdown {
        flex-shrink: 0;
        top: 2px;
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}">DM云工厂</h1>
      <h1 :class="{hidden: menuData.collapse}">{{ rootName() }}</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,10 +71,9 @@
          { pattern: /^[0-9]+$/, message: '只可以输入数字', trigger: 'change' }
        ],
        empNo: [
          // { required: true, message: '请输入工号', trigger: 'blur' },
          { required: true, message: '请输入工号', trigger: 'blur' },
          { max: 20, message: '输入字数不超过20', trigger: 'blur' },
          { validator: validateSpecialKey,  message: '只可以输入数字、字母或者英文字符', trigger: 'blur' },
          // { pattern: /^[0-9a-zA-Z]+$/, trigger: 'change' }
          { pattern: /^[0-9a-zA-Z]+$/, message: '只可以输入数字和字母', trigger: 'change' }
        ],
        departmentId: [
          { required: true, message: '请选择部门', trigger: 'blur' }
web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
@@ -49,10 +49,7 @@
              <span v-else style="color: #03AF76;" class="status-log">{{ item.status==1 ? '已备料' : item.status==2 ? '已完工' : item.status==3 ? '已检验' : '已报工' }}</span>
            </div>
          </div>
          <div class="c3 mt10 mb10 f12" style="display: flex;">
            <div>计划数量:{{ form.num }}</div>
            <div class="ml10">计划开工日期:{{ form.num }}</div>
          </div>
          <div style="color: #777; font-size: 11px; margin-bottom: 15px;">{{ '生产人员:' + proUserStr(item) }}</div>
          <div v-if="item.produceDate" class="order-setup">
            <!-- æŠ¥å·¥ä¿¡æ¯ -->
            <div class="line-style">
@@ -62,20 +59,23 @@
            </div>
            <div class="setup-content">
              <div class="left-message">
                <div class="message-title-temp">产出</div>
              </div>
              <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 class="message-title-temp">
                  äº§å‡º
                </div>
                <div style="display: flex;" class="mt10">
                  <span style="color:#666;">产品:</span>
                <p class="time-style">
                  {{ item.produceDate }}
                </p>
              </div>
              <div class="right-message">
                <div style="margin-left: 30px">
                  <span style="color:#666;">物料:</span>
                </div>
                <div>
                  <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" class="ml20">
                  <div v-if="item.unqualifiedNum">
                    <span style="color:#F5A400">[不良品] </span>
                    <span style="color:#333333">{{ item.unqualifiedNum + (form.umodel && form.umodel.name) }}</span>
                  </div>
@@ -95,18 +95,17 @@
                <div :class="item.produceDate ? 'message-title' : 'message-title-temp'">
                  æŠ•æ–™
                </div>
                <p class="time-style">
                  {{ item.materialDate }}
                </p>
              </div>
              <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 class="right-message">
                <div style="margin-left: 30px">
                  <span style="color:#666;">物料:</span>
                </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 v-for="(sItem, sIndex) in item.materialList" :key="sIndex">
                    <span style="color:#333333">{{ sItem.name + ' / ' + sItem.num + sItem.unitName }}</span>
                  </div>
                </div>
              </div>
@@ -123,17 +122,17 @@
                <div :class="item.materialDate ? 'message-title' : 'message-title-temp'">
                  åˆ†é…
                </div>
                <p class="time-style">
                  {{ item.distributeDate }}
                </p>
              </div>
              <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 class="right-message">
                <div style="margin-left: 30px">
                  <span style="color:#666;">分配数量:</span>
                </div>
                <div class="mt10">
                  <span style="color:#666;">分配数量:{{ item.planNum + (form.umodel && form.umodel.name) }}</span>
                <div>
                  <span style="color:#333333">{{ item.planNum + (form.umodel && form.umodel.name) }}</span>
                </div>
              </div>
            </div>
          </div>
@@ -342,9 +341,9 @@
      flex: 1;
      // background-color: #f7f7f7;
      display: flex;
      justify-content: space-between;
      .left-message {
        display: flex;
        line-height: 20px;
        width: 62px;
        .message-title {
          color: #333;
          font-weight: 500;
@@ -357,11 +356,14 @@
        }
        .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: 1,
        needcheck: 0,
        sortnum: ''
      },
      iscalculates: [
web_standard/src/components/ext/OperaWorkorderDetailWindow.vue
@@ -1,23 +1,28 @@
<template>
  <GlobalWindow :title="title" width="1182px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
  <GlobalWindow
    :title="title"
    width="1182px"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <div style="min-width:1150px">
      <el-form :model="form" ref="form" label-width="100px" label-suffix=":" inline>
        <div style="margin-bottom:15px">
          <span class="text-code">{{ form.procedureName + ' | ' + form.mmodel.name + ' ' + form.mmodel.code }}</span>
          <!-- 0已创建、1已备料、2已完工检、3已检验、4已报工、、6已取消 -->
          <span v-if="form.status == 0" style="background-color: #305ED5;" class="status-log">已创建</span>
          <span v-else-if="form.status == 6" style="background-color: #BBBBBB;" class="status-log">已取消</span>
          <span v-else style="background-color: #03AF76;" class="status-log">{{ form.status == 1 ? '已备料' : form.status == 2 ?
            '已完工检' : form.status == 3 ? '已检验' : '已报工' }}</span>
          <span v-if="form.status==0" style="background-color: #305ED5;" class="status-log">已创建</span>
          <span v-else-if="form.status==6" style="background-color: #BBBBBB;" class="status-log">已取消</span>
          <span v-else style="background-color: #03AF76;" class="status-log">{{ form.status==1 ? '已备料' : form.status==2 ? '已完工检' : form.status==3 ? '已检验' : '已报工' }}</span>
          <!-- <span v-if="form.status==3" style="background-color: #BBBBBB;" class="status-log">已取消</span> -->
        </div>
        <el-form-item label="工单编号" prop="workorderCode" class="count-style">
        <el-form-item label="工单编号" prop="workorderCode" class="count-style" >
          {{ form.code }}
        </el-form-item>
        <el-form-item label="生产日期" prop="proTime" class="count-style">
        <el-form-item label="生产日期" prop="proTime" class="count-style" >
          {{ form.planDate }}
        </el-form-item>
        <el-form-item label="生产批次号" prop="batch" class="count-style">
        <el-form-item label="生产批次号" prop="batch" class="count-style" >
          {{ form.batch }}
        </el-form-item>
        <!-- <el-form-item label="计划人员" prop="planUser" class="count-style" >
@@ -26,8 +31,8 @@
        <el-form-item label="计划日期" prop="planDate" class="count-style" >
          {{ form.pmodel.createTime }}
        </el-form-item> -->
        <el-form-item label="生产数量" prop="machine" class="count-style">
          {{ form.planNum ? (form.planNum + (form.umodel.name ? form.umodel.name : '')) : '0' }}
        <el-form-item label="生产数量" prop="machine" class="count-style" >
          {{ form.planNum ? (form.planNum + (form.umodel.name ? form.umodel.name : '')) : '0'  }}
        </el-form-item>
        <!-- <el-form-item label="计划数量" prop="planNum" class="count-style" >
          {{ form.pmodel.num }}
@@ -38,36 +43,42 @@
        <!-- <el-form-item label="发布日期" prop="startDate" class="count-style" >
          {{ form.pmodel.publishDate }}
        </el-form-item> -->
        <el-form-item label="原工单号" prop="originWorkorderId" class="count-style">
        <el-form-item label="原工单号" prop="originWorkorderId" class="count-style" >
          {{ form.originWorkorderId }}
        </el-form-item>
        <el-form-item label="分配人员" prop="distributeUser" class="count-style">
        <el-form-item label="分配人员" prop="distributeUser" class="count-style" >
          {{ form.userName }}
        </el-form-item>
        <el-form-item label="分配时间" prop="distributeTime" class="count-style">
        <el-form-item label="分配时间" prop="distributeTime" class="count-style" >
          {{ form.createTime }}
        </el-form-item>
        <el-form-item label="生产人员" prop="proUser" class="count-style">
        <el-form-item label="生产人员" prop="proUser" class="count-style" >
          <div v-for="(item, index) in form.proUserList" :key="index">{{ item.proUserDepartName }}</div>
          <!-- {{ form.proUserName + (form.proUserDepartName ? ('/' + form.proUserDepartName) : '') }} -->
        </el-form-item>
        <el-form-item label="生产设备" prop="machine" class="count-style">
          {{ form.pgmodel && `【${form.pgmodel.code}】${form.pgmodel.name}` }}
        <el-form-item label="生产设备" prop="machine" class="count-style" >
          {{ form.pgmodel && `【${form.pgmodel.code}】${form.pgmodel.name}`}}
        </el-form-item>
        <el-form-item label="合格数量" prop="qualifiedNum" class="count-style">
        <el-form-item label="合格数量" prop="qualifiedNum" class="count-style" >
          {{ form.qualifiedNum ? (form.qualifiedNum + (form.umodel.name ? form.umodel.name : '')) : '0' }}
        </el-form-item>
        <el-form-item label="不良数量" prop="unqualifiedNum" class="count-style">
        <el-form-item label="不良数量" prop="unqualifiedNum" class="count-style" >
          {{ form.unqualifiedNum ? (form.unqualifiedNum + (form.umodel.name ? form.umodel.name : '')) : '0' }}
        </el-form-item>
      </el-form>
      <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
      <el-tabs v-model="activeName" @tab-click="handleClick">
        <el-tab-pane label="生产报工" name="first">
          <el-table v-loading="isSearch" :data="report" border show-summary :summary-method="getReportSummaries">
            <!-- stripe -->
          <el-table
            v-loading="isSearch"
            :data="report"
            border
            show-summary
            :summary-method="getReportSummaries"
          >
          <!-- stripe -->
            <el-table-column prop="createTime" label="报工时间" min-width="140px"></el-table-column>
            <el-table-column label="生产人员" show-overflow-tooltip min-width="100px">
              <template slot-scope="{row}">
@@ -75,27 +86,11 @@
              </template>
            </el-table-column>
            <el-table-column prop="machine" label="生产设备" min-width="100px">
              {{ form.pgmodel && `【${form.pgmodel.code}】${form.pgmodel.name}` }}
              {{ form.pgmodel && `【${form.pgmodel.code}】${form.pgmodel.name}`}}
            </el-table-column>
            <!-- <el-table-column prop="amodel.code" label="工装容器编号" show-overflow-tooltip="" min-width="100px"></el-table-column> -->
            <el-table-column prop="mmodel.name" label="物料名称" show-overflow-tooltip min-width="100px"></el-table-column>
            <el-table-column prop="qualifiedNum" label="合格数量" min-width="100px">
              <template slot-scope="{row}">
                <span class="valid-style">{{ row.qualifiedNum + row.umodel.name }}</span>
              </template>
            </el-table-column>
            <el-table-column prop="unqualifiedNum" label="不良数量" min-width="100px">
              <template slot-scope="{row}">
                <span class="unvalid-style">{{ row.unqualifiedNum + row.umodel.name }}</span>
                <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
              </template>
            </el-table-column>
            <el-table-column prop="num" label="报工数量" min-width="100px">
              <template slot-scope="{row}">
                <span>{{ row.num + row.umodel.name }}</span>
              </template>
            </el-table-column>
            <!-- <el-table-column prop="doneType" label="报工类型" min-width="60px">
            <el-table-column prop="doneType" label="报工类型" min-width="60px">
              <template slot-scope="{row}">
                <span v-if="row.doneType==0" class="valid-style">合格</span>
                <span v-else-if="row.doneType==1" class="unvalid-style">不良</span>
@@ -107,11 +102,15 @@
              <template slot-scope="{row}">
                <span :class="row.doneType==0 ? 'valid-style' : (row.doneType==1 ? 'unvalid-style' :(row.doneType==2 ? 'scrap-style' : ''))">{{ row.num ? (row.num + (row.umodel.name ? row.umodel.name : '')) : '0' }}</span>
              </template>
            </el-table-column> -->
            </el-table-column>
          </el-table>
        </el-tab-pane>
        <el-tab-pane label="生产检验" name="second">
          <el-table v-loading="isSearch" :data="verify" stripe border>
          <el-table
            v-loading="isSearch"
            :data="verify"
            stripe
            border>
            <el-table-column prop="code" label="检验记录编号" min-width="140px"></el-table-column>
            <el-table-column prop="createTime" label="检验时间" min-width="140px"></el-table-column>
            <el-table-column prop="smodelRealName" label="检验人员" min-width="100px"></el-table-column>
@@ -139,23 +138,30 @@
            </el-table-column>
            <el-table-column prop="devmodel.code" label="生产设备" min-width="100px">
              <template slot-scope="{row}">
                {{ row.devmodel && `【${row.devmodel.code}】${row.devmodel.name}` }}
                {{ row.devmodel && `【${row.devmodel.code}】${row.devmodel.name}`}}
              </template>
            </el-table-column>
            <!-- <el-table-column prop="proUserids" label="生产人员" show-overflow-tooltip min-width="100px"></el-table-column> -->
          </el-table>
        </el-tab-pane>
        <el-tab-pane label="生产投料" name="third">
          <el-table v-loading="isSearch" :data="feeds" stripe border show-summary :summary-method="getPutSummaries">
          <el-table
            v-loading="isSearch"
            :data="feeds"
            stripe
            border
            show-summary
            :summary-method="getPutSummaries"
          >
            <el-table-column prop="createTime" label="投料时间" min-width="140px"></el-table-column>
            <!-- <el-table-column prop="amodel.code" label="工装容器编号" min-width="100px"></el-table-column> -->
            <el-table-column prop="mmodel.name" label="物料名称" min-width="100px"></el-table-column>
            <el-table-column prop="promodel.name" label="工序名称" min-width="100px"></el-table-column>
            <el-table-column label="质量属性" min-width="100px">
              <template slot-scope="{row}">
                <span v-if="row.materialDonetype == 0" class="valid-style">合格</span>
                <span v-else-if="row.materialDonetype == 1" class="unvalid-style">不良</span>
                <span v-else-if="row.materialDonetype == 2" class="scrap-style">报废</span>
                <span v-if="row.materialDonetype==0" class="valid-style">合格</span>
                <span v-else-if="row.materialDonetype==1" class="unvalid-style">不良</span>
                <span v-else-if="row.materialDonetype==2" class="scrap-style">报废</span>
                <span v-else>-</span>
              </template>
            </el-table-column>
@@ -172,7 +178,12 @@
          </el-table>
        </el-tab-pane>
        <el-tab-pane label="生产点检" name="fourth">
          <el-table v-loading="isSearch" :data="check" stripe border>
          <el-table
            v-loading="isSearch"
            :data="check"
            stripe
            border
          >
            <el-table-column prop="createTime" label="记录时间" min-width="140px"></el-table-column>
            <el-table-column prop="userName" label="操作人员" min-width="100px"></el-table-column>
            <el-table-column prop="attrName" label="检点属性" min-width="100px"></el-table-column>
@@ -192,8 +203,12 @@
            <el-table-column prop="value" align="left"></el-table-column>
          </el-table> -->
        </el-tab-pane>
        <Pagination style="margin-top:10px" @size-change="handleSizeChange" @current-change="handlePageChange"
          :pagination="pagination"></Pagination>
        <Pagination
          style="margin-top:10px"
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="pagination"
        ></Pagination>
      </el-tabs>
    </div>
    <div slot="footer" class="window__header">
@@ -214,7 +229,7 @@
  name: 'OperaWorkorderDetailWindow',
  extends: BaseOpera,
  components: { GlobalWindow, Pagination },
  data() {
  data () {
    return {
      // è¡¨å•数据
      form: {
@@ -272,7 +287,7 @@
    }
  },
  inject: ['origins'],
  created() {
  created () {
    this.config({
      api: '/ext/materialExt',
      'field.id': 'id'
@@ -287,39 +302,39 @@
    //   })
  },
  methods: {
    open(title, target) {
    open (title, target) {
      this.title = title
      this.visible = true
      this.activeName = 'first',
        // ç¼–辑
        this.$nextTick(() => {
          for (const key in this.form) {
            this.form[key] = target[key]
          }
          // console.log('this.form', this.form)
          workorderRecordExtPage(
            {
              capacity: this.pagination.pageSize,
              model: {
                type: 1,
                workorderId: this.form.id
              },
              page: this.pagination.pageIndex,
              sorts: null
            })
            .then(res => {
              // console.log(res)
              this.report = res.records
              this.pagination.pageIndex = res.page
              this.pagination.total = res.total
              this.pagination.pageSize = res.capacity
            })
            .catch(err => {
              console.log(err)
            })
        })
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        // console.log('this.form', this.form)
        workorderRecordExtPage(
          {
            capacity: this.pagination.pageSize,
            model: {
              type: 1,
              workorderId: this.form.id
            },
            page: this.pagination.pageIndex,
            sorts: null
          })
          .then(res => {
            // console.log(res)
            this.report = res.records
            this.pagination.pageIndex = res.page
            this.pagination.total = res.total
            this.pagination.pageSize = res.capacity
          })
          .catch(err => {
            console.log(err)
          })
      })
    },
    cancel() {
    cancel () {
      this.$refs.form.resetFields()
      this.activeName = 'first'
      this.pagination.pageIndex = 1
@@ -327,21 +342,21 @@
      this.pagination.total = 0
      this.visible = false
    },
    statusToStr(status) {
    statusToStr (status) {
      for (const item of this.status) {
        if (item.id === status) {
          return item.name
        }
      }
    },
    originToStr(id) {
    originToStr (id) {
      for (const item of this.origins()) {
        if (item.id === id) {
          return item.code
        }
      }
    },
    columnStyle({ row, column, rowIndex, columnIndex }) {
    columnStyle ({ row, column, rowIndex, columnIndex }) {
      if (rowIndex % 2 === 0) {
        // ä¿®æ”¹æ¯è¡Œç¬¬ä¸€ä¸ªå•元格的背景色
        return 'background:#f3f6fc;'
@@ -349,22 +364,22 @@
        return 'background:#ffffff;'
      }
    },
    handleClick(tab, event) {
    handleClick (tab, event) {
      this.pagination.pageIndex = 1
      this.pagination.pageSize = 10
      this.pagination.total = 0
      this.search()
    },
    handleSizeChange(pageSize) {
    handleSizeChange (pageSize) {
      this.pagination.pageSize = pageSize
      this.search()
    },
    handlePageChange(pageIndex) {
    handlePageChange (pageIndex) {
      this.pagination.pageIndex = pageIndex
      // console.log('获取数据')
      this.search()
    },
    search() {
    search () {
      if (this.activeName === 'first') {
        workorderRecordExtPage(
          {
@@ -374,7 +389,7 @@
              workorderId: this.form.id
            },
            page: this.pagination.pageIndex,
            sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
            sorts: [{direction: "DESC", property: "CREATE_TIME"}]
          })
          .then(res => {
            // console.log(res)
@@ -393,7 +408,7 @@
            workorderId: this.form.id
          },
          page: this.pagination.pageIndex,
          sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
          sorts: [{direction: "DESC", property: "CREATE_TIME"}]
        })
          .then(res => {
            // console.log(res.records)
@@ -414,7 +429,7 @@
              workorderId: this.form.id
            },
            page: this.pagination.pageIndex,
            sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
            sorts: [{direction: "DESC", property: "CREATE_TIME"}]
          })
          .then(res => {
            // console.log(res)
@@ -434,7 +449,7 @@
              workorderId: this.form.id
            },
            page: this.pagination.pageIndex,
            sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
            sorts: [{direction: "DESC", property: "CREATE_TIME"}]
          })
          .then(res => {
            // console.log(res)
@@ -448,7 +463,7 @@
          })
      }
    },
    getPutSummaries(param) {
    getPutSummaries (param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
@@ -461,7 +476,7 @@
        } else if (index === 5) {
          sums[index] = '-';
          return;
        }
        }
        const values = data.map(item => Number(item[column.property]));
        if (!values.every(value => isNaN(value))) {
          sums[index] = 0
@@ -474,12 +489,15 @@
      });
      return sums
    },
    getReportSummaries(param) {
    getReportSummaries (param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合计';
          return;
        } else if (index === 4) {
          sums[index] = '-';
          return;
        }
        const values = data.map(item => Number(item[column.property]));
@@ -504,24 +522,21 @@
  width: 23%;
  // height: 32px;
}
::v-deep .el-form-item {
  margin-bottom: 8px !important;
}
.text-code {
  color: #333;
  font-weight: 500;
  padding-right: 15px;
  font-size: 15px;
  vertical-align: middle;
  vertical-align:middle;
}
.status-log {
  padding: 1px 5px;
  border-radius: 3px;
  font-size: 12px;
  color: #fff;
  vertical-align: middle;
  color:#fff;
  vertical-align:middle;
}
</style>
web_standard/src/components/ext/OrderDistrubution.vue
@@ -109,12 +109,9 @@
        this.form.planDate = new Date()
        this.form.planId = target.id
        this.form.planNum = target.num - target.distributNum
        getDeviceByCondition({procedureId: target.procedureId})
        getDeviceByCondition({})
          .then(res => {
            this.device = res
            this.form.proGroupId = res[0] ? res[0].id : ''
            this.getUser(this.form.proGroupId)
          })
          .catch(err => {
            console.log(err)
@@ -196,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/ext/OrderQrCodeLabel.vue
@@ -93,7 +93,7 @@
                <tr>
                  <td>打印信息</td>
                  <td style="text-align:left; line-height:16px;" colspan="2">
                    <div>{{ userInfo.companyUser.name + ', ' + current}}</div>
                    <div>{{ userInfo.realname + ', ' + current}}</div>
                  </td>
                </tr>
              </tbody>
web_standard/src/components/ext/addProcesRoute.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
<template>
  <GlobalWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    :width="width"
    @confirm="confirm"
  >
    <div class="text">基本信息</div>
    <el-form ref="searchForm"  :model="searchForm" label-width="140px" inline>
      <el-form-item label="工艺名称:" prop="rmodelName" required="true">
        <el-input v-model="searchForm.rmodelName" placeholder="请输入工艺名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="工艺编码:" prop="procedureId" required="true">
    Â Â <GlobalWindow
    Â Â Â Â :title="title"
    Â Â Â Â :visible.sync="visible"
    Â Â Â Â :confirm-working="isWorking"
    Â Â Â Â :width="width"
    Â Â Â Â @confirm="confirm"
    Â Â >
    Â Â Â Â <div class="text">基本信息</div>
    Â Â Â Â Â <el-form ref="searchForm"  :model="searchForm" label-width="140px" inline>
      Â Â Â Â Â Â <el-form-item label="工艺名称:" prop="rmodelName" required="true">
      Â Â Â Â Â Â Â Â <el-input v-model="searchForm.rmodelName" placeholder="请输入工艺名称" @keypress.enter.native="search"></el-input>
      Â Â Â Â Â Â </el-form-item>
    Â Â Â Â Â Â Â Â <el-form-item label="工艺编码:" prop="procedureId" required="true">
    Â Â <GlobalWindow
    Â Â Â Â :title="title"
    Â Â Â Â :visible.sync="visible"
    Â Â Â Â :confirm-working="isWorking"
    Â Â Â Â :width="width"
    Â Â Â Â @confirm="confirm"
    Â Â >
<!-- Â Â Â Â <div class="text">基本信息</div>
     <el-form ref="searchForm"  :model="searchForm" label-width="140px" inline>
            <el-form-item label="工艺名称:" prop="rmodelName" required="true">
        <el-input v-model="searchForm.rmodelName" placeholder="请输入工艺名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
        <el-form-item label="工艺编码:" prop="procedureId" required="true">
>>>>>>> .r46706
        <el-input v-model="searchForm.procedureId" placeholder="请输入工艺编码" @keypress.enter.native="search"></el-input>
      </el-form-item>
          <el-form-item label="所属工厂:" prop="procedureId" required="true">
        <el-input v-model="searchForm.dmodelCompanyId" placeholder="请输入所属工厂" @keypress.enter.native="search"></el-input>
      </el-form-item>
        <div class="text title"><span>工序列表</span></div>
        <div style="padding-top:20px">
       <el-button type="primary"  @click="drawer = true" >添加工序
         <el-drawer
     title="我是标题"
     :visible.sync="drawer"
     size='50%'
     modal="false"
    :with-header="false">
    <span>我来啦!</span>
      <div class="demo-drawer__footer">
      <el-button @click="cancelForm">取 消</el-button>
      <el-button type="primary" @click="$refs.drawer.closeDrawer()" :loading="loading">{{ loading ? '提交中 ...' : '确 定' }}</el-button>
    </div>
    </el-drawer>
       </el-button>
       <el-button type="primary" plain>上移</el-button>
       <el-button type="primary" plain>下移</el-button>
       </div>
          <template v-slot:table-wrap>
      <el-table
        :data="list"
        stripe
        border
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55" fixed="left"></el-table-column>
        <el-table-column label="物料信息" min-width="140px">
        </el-table-column>
        <el-table-column prop="origin" label="产生方式" min-width="100px">
        </el-table-column>
        </el-table-column>
        <el-table-column label="被转换属性" min-width="100px">
        </el-table-column>
        <el-table-column prop="convertedName" label="被转换单位" min-width="100px"></el-table-column>
        <el-table-column prop="convertedNum" label="被转换数值" min-width="100px"></el-table-column>
        <el-table-column label="转换属性" min-width="100px">
        </el-table-column>
        <el-table-column prop="unitName" label="转换单位" min-width="100px"></el-table-column>
        <el-table-column prop="unitNum" label="转换数值" min-width="100px"></el-table-column>
        <el-table-column prop="convertedTime" label="转换时间" min-width="140px"></el-table-column>
        <el-table-column
          label="操作"
          min-width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaUnitConversionExtWindow.open('编辑单位转换', row)">编辑</el-button>
            <el-button type="text" @click="deleteById(row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
      <section>
        <el-button type="primary" @click="search">查找</el-button>
        <el-button type="primary" @click="reset">清空</el-button>
      </section>
    </el-form> -->
  </GlobalWindow>
</template>
<script>
import BaseOpera from "@/components/base/BaseOpera";
import GlobalWindow from "@/components/common/GlobalWindow";
export default {
  name: "OperaRouteProcedureExtWindow",
  extends: BaseOpera,
  components: { GlobalWindow },
  data() {
    return {
      width: "86%",
      drawer: false,
      searchForm: {
        rmodelName: "",
        routeId: "",
        procedureId: "",
        dmodelCompanyId: "",
        activeIndex: "1",
        activeIndex2: "1",
        id: null,
        deleted: "",
        // rmodelName: '',
      },
      rules: {},
    };
  },
  methods: {},
  created() {
    this.config({
      api: "/ext/routeProcedureExt",
      "field.id": "id",
    });
  },
};
</script>
<style lang="scss" scoped>
.text {
  font-weight: 500;
}
.title {
  width: 80px;
  height: 30px;
  border-bottom: 4px solid #2E68EC;
  text-align: center;
  color: #2e68ec;
  padding-top: 20px;
}
</style>
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,8 +61,7 @@
      // const formData = new FormData()
      // formData.append('type', role.type)
      // formData.append('moduleId', 1)
      // , moduleId: 1
      fetchMenuList({ type: type })
      fetchMenuList({ type: type, moduleId: 1 })
        .then(records => {
          this.menus = records
          // å¦‚果为固定角色,则固定菜单不可更改
web_standard/src/utils/form.js
@@ -35,12 +35,3 @@
  }
  callback()
}
export function numRule(rule, value, callback) {
  // debugger
  if (value == null || value < 0 || !value) {
    callback(new Error())
  } else {
    callback()
  }
}
web_standard/src/views/business/workPlans.vue
@@ -26,9 +26,6 @@
      <el-form-item label="批次号" prop="batch">
        <el-input v-model="searchForm.batch" placeholder="请输入" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="销售单号" prop="salesorder">
        <el-input v-model="searchForm.salesorder" placeholder="请输入" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="计划日期" prop="planDate">
        <el-date-picker style="width: 300px;" @change="changeDate" v-model="searchForm.planDate" type="datetimerange"
          value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
@@ -48,7 +45,7 @@
          <ImportButton
            text="导入"
            template-name="workplans_import_template.xlsx"
            template-path="/template/workplans_import_template.xlsx"
            template-path="template/workplans_import_template.xlsx"
            action="/business/workPlans/importBatch"
            @success="search"
          />
@@ -58,20 +55,18 @@
        <!-- 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" border stripe @selection-change="handleSelectionChange">
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="planCode" label="成品计划编码" min-width="190px">
        <el-table-column prop="planCode" label="成品计划编码" min-width="150px">
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.plannedProgress.open('计划执行进度', row)">
              <span class="long-title-style">{{ row.planCode }}</span>
            </el-button>
            <el-tag type="danger" size="mini" v-if="row.hasExpire">延期</el-tag>
          </template>
        </el-table-column>
        <el-table-column prop="materialName" label="物料名称" min-width="100px"></el-table-column>
        <el-table-column prop="materialCode" label="物料编码" min-width="100px"></el-table-column>
        <el-table-column prop="startDate" label="计划开始日期" min-width="100px"></el-table-column>
        <el-table-column prop="planDate" label="计划完成日期" min-width="100px"></el-table-column>
        <el-table-column prop="planDate" label="计划日期" min-width="100px"></el-table-column>
        <el-table-column prop="factoryName" label="工厂" min-width="100px"></el-table-column>
        <el-table-column prop="batch" label="生产批次号" min-width="100px"></el-table-column>
        <el-table-column prop="num" label="计划数量" min-width="100px"></el-table-column>
@@ -86,6 +81,12 @@
            <span v-else-if="row.status == 6">已完工</span>
            <!-- <span v-else-if="row.status == 7">已入库</span> -->
            <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">
@@ -106,26 +107,7 @@
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column label="销售订单" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.salesorder">{{ row.salesorder }}</span>
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column prop="urgent" 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">
        <el-table-column label="发布时间" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.publishDate">{{ row.publishDate }}</span>
            <span v-else>-</span>
@@ -188,7 +170,6 @@
        factoryId: '',
        materialId: '',
        batch: '',
        salesorder: '',
        planStatus: '',
        planCode: ''
      },
web_standard/src/views/ext/plansExt.vue
@@ -100,49 +100,46 @@
        @row-style="rowStyle"
      >
        <el-table-column type="selection" fixed="left" width="55"></el-table-column>
        <el-table-column prop="id" label="计划序号" fixed="left" min-width="80px">
          <template slot-scope="{row}">
            <span>{{ row.id }}</span><el-tag type="danger" size="mini" v-if="row.hasExpire">延期</el-tag>
          </template>
        </el-table-column>
        <el-table-column prop="id" label="计划序号" fixed="left" min-width="80px"></el-table-column>
        <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)">
              <div class="long-title-style">{{ row.mmodel.name }}</div>
              <span class="long-title-style">{{ row.mmodel.name }}</span>
            </el-button>
          </template>
        </el-table-column>
        <el-table-column prop="mmodel.code" label="物料编码" min-width="160px">
        </el-table-column>
        <el-table-column prop="planDate" label="计划日期" min-width="100px"></el-table-column>
        <el-table-column prop="fmodel.name" label="工厂" min-width="100px"></el-table-column>
        <el-table-column prop="pmodel.name" label="工序" show-overflow-tooltip min-width="100px">
          <template slot-scope="{row}">
            <span class="long-title-style">{{ row.pmodel ? row.pmodel.name : '-' }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="batch" label="生产批次号" show-overflow-tooltip min-width="140px"></el-table-column>
        <el-table-column prop="num" label="计划数量" min-width="100px">
          <template slot-scope="{row}">
            <span>{{ row.num + (row.umodel ? row.umodel.name : '') }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="workPlanStartDate" label="计划开始日期" min-width="100px">
          <!-- <template slot-scope="{row}">
            {{ row.workPlanStartDate ? row.workPlanStartDate.substring(0, row.workPlanStartDate.length-9) : '-' }}
          </template> -->
        </el-table-column>
        <el-table-column prop="workPlanEndDate" label="计划结束日期" min-width="100px">
          <template slot-scope="{row}">
            {{ row.workPlanStartDate ? row.workPlanStartDate.substring(0, row.workPlanStartDate.length-9) : '-' }}
          </template>
        </el-table-column>
        <el-table-column prop="batch" label="生产批次号" show-overflow-tooltip min-width="140px"></el-table-column>
        <el-table-column prop="urgent" label="优先级" min-width="60px"></el-table-column>
        <el-table-column label="计划状态" min-width="80px">
          <template slot-scope="{row}">
            {{ statusToStr(row.status) }}
          </template>
        </el-table-column>
        <el-table-column label="计划类型" min-width="80px">
          <template slot-scope="{row}">
            <span :style="typeColor(row.type)">{{ typeToStr(row.type) }}</span>
          </template>
        </el-table-column>
        <el-table-column label="暂停" min-width="60px">
          <template slot-scope="{row}">
            {{ row.paused == 0 ? '否' : '是' }}
          </template>
        </el-table-column>
        <el-table-column prop="workPlanCode" label="成品计划编码" min-width="140px"></el-table-column>
        <el-table-column prop="distributNoDoneNum" label="已分配未报工数量" min-width="140px">
          <template slot-scope="{row}">
            <span>{{row.distributNoDoneNum ? (row.distributNoDoneNum + (row.umodel ? row.umodel.name : '')) : '-' }}</span>
@@ -156,18 +153,6 @@
        <el-table-column prop="unqulifiedNum" label="不良数量" min-width="100px">
          <template slot-scope="{row}">
            <span>{{row.unqulifiedNum ? (row.unqulifiedNum + (row.umodel ? row.umodel.name : '')) : '-' }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="urgent" label="优先级" min-width="60px"></el-table-column>
        <el-table-column label="暂停" min-width="60px">
          <template slot-scope="{row}">
            {{ row.paused == 0 ? '否' : '是' }}
          </template>
        </el-table-column>
        <el-table-column prop="workPlanCode" label="主计划编码" min-width="140px"></el-table-column>
        <el-table-column label="类型" min-width="80px">
          <template slot-scope="{row}">
            <span :style="typeColor(row.type)">{{ typeToStr(row.type) }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="publishDate" label="发布日期" min-width="100px">
@@ -574,7 +559,7 @@
        if (index === 0) {
          sums[index] = '合计';
          return;
        } else if (index === 1 || index === 6 || index === 8 || index === 9 || index === 14 || index === 16 || index === 17) {
        } else if (index === 1 || index === 8 || index === 9 || index === 16 || index === 17) {
          sums[index] = '-';
          return;
        } else if (index === 8 ) {
web_standard/src/views/ext/workingorderExt.vue
@@ -282,7 +282,7 @@
        status: '',
        mixParam: '',
        pgmodelId: '',
        statusList: [0,1,2,3,7]
        statusList: [0,1,2,3]
      },
      origins: [],
      types: [
@@ -307,7 +307,7 @@
        { name: '已检验', id: 3 },
        // { name: '已报工', id: 4 },
        // { name: '已入库', id: 5 },
        { name: '生产中', id: 7 }
        // { name: '已取消', id: 6 }
      ],
      productes: [
      ],
web_standard/src/views/ext/workorderPutRecordExt.vue
@@ -120,18 +120,19 @@
            <span class="long-title-style">{{ row.procedureName }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="qualifiedNum" label="合格数量" min-width="100px">
        <el-table-column prop="doneType" label="质量属性" min-width="100px">
          <template slot-scope="{row}">
            <span class="valid-style">{{ row.qualifiedNum + row.umodel.name }}</span>
            <span v-if="row.materialDonetype==0" class="valid-style">合格</span>
            <span v-else-if="row.materialDonetype==1" class="unvalid-style">不良</span>
            <!-- <span v-else-if="row.doneType==2" class="scrap-style">报废</span> -->
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column prop="unqualifiedNum" label="不良数量" min-width="100px">
        <el-table-column prop="num" label="数量" min-width="100px">
          <template slot-scope="{row}">
            <span class="unvalid-style">{{ row.num + row.umodel.name}}</span>
            <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
            <span :class="row.materialDonetype==0 ? 'valid-style' : 'unvalid-style'">{{ row.num + row.umodel.name }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="num" label="报工数量" min-width="100px"></el-table-column>
        <!-- <el-table-column prop="amodel.code" label="工装器具" min-width="100px"></el-table-column> -->
        <el-table-column prop="deviceCode" label="设备" show-overflow-tooltip min-width="100px">
          <template slot-scope="{row}">
web_standard/src/views/ext/workorderRecordExt.vue
@@ -112,7 +112,7 @@
          </template>
        </el-table-column>
        <el-table-column prop="procedureName" label="生产员工" min-width="100px"></el-table-column>
        <!-- <el-table-column prop="doneType" label="报工类型" min-width="100px">
        <el-table-column prop="doneType" label="报工类型" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.doneType==0" class="valid-style">合格</span>
            <span v-else-if="row.doneType==1" class="unvalid-style">不良</span>
@@ -123,22 +123,6 @@
        <el-table-column prop="num" label="数量" min-width="100px">
          <template slot-scope="{row}">
            <span :class="row.doneType==0 ? 'valid-style' : (row.doneType==1 ? 'unvalid-style' : (row.doneType==2 ? 'scrap-style' : ''))">{{ row.num + row.umodel.name }}</span>
          </template>
        </el-table-column> -->
        <el-table-column prop="qualifiedNum" label="合格数量" min-width="100px">
          <template slot-scope="{row}">
            <span class="valid-style">{{ row.qualifiedNum + row.umodel.name }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="unqualifiedNum" label="不良数量" min-width="100px">
          <template slot-scope="{row}">
            <span class="unvalid-style">{{ row.unqualifiedNum + row.umodel.name}}</span>
            <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
          </template>
        </el-table-column>
        <el-table-column prop="num" label="报工数量" min-width="100px">
          <template slot-scope="{row}">
            <span>{{ row.num + row.umodel.name}}</span>
          </template>
        </el-table-column>
        <!-- <el-table-column prop="amodel.code" label="工装器具" min-width="100px"></el-table-column> -->
web_standard/src/views/login.vue
@@ -12,6 +12,7 @@
        <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/yarn.lock
@@ -1766,7 +1766,7 @@
"ansi-styles@^4.1.0":
  "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
  "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
  "resolved" "https://registry.npmmirror.com/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.npmjs.org/chalk/-/chalk-4.1.2.tgz"
  "resolved" "https://registry.npmmirror.com/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.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
  "resolved" "https://registry.npmmirror.com/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.npmjs.org/color-name/-/color-name-1.1.4.tgz"
  "resolved" "https://registry.npmmirror.com/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@>= 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@^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":
  "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.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
  "resolved" "https://registry.npmmirror.com/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-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="
  "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz"
  "version" "2.0.4"
  "integrity" "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A=="
  "resolved" "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz"
  "version" "2.0.2"
  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.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
  "resolved" "https://registry.npmmirror.com/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.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz"
  "resolved" "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz"
  "version" "16.8.3"
  dependencies:
    "chalk" "^4.1.0"