k94314517
2023-08-18 eee82fc63bf8b0b48bda5d6c89a491974a20bc97
Merge remote-tracking branch 'origin/master'
已添加63个文件
已删除6个文件
已修改31个文件
3778 ■■■■■ 文件已修改
h5_standard/src/components/common/Warehouse.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/components/newCom/quality.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/LogInAgain.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/needToBeDealtWith/addWarehousing.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/needToBeDealtWith/outbound.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/workOrder/processPlan.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/workOrder/reportingForWork.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/workOrder/workOrderReporting.vue 448 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/wxLogin.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/App.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/common/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/components/myTabber.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/main.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages.json 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/applyDetail/applyDetail.vue 602 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/applyList/applyList.vue 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/comApplyList/comApplyList.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/index/index.vue 170 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/login/login.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/mine/mine.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/projectList/projectList.vue 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/uploadCheckData/uploadCheckData.vue 405 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/uploadServiceData/uploadServiceData.vue 477 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/workbench/workbench.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/3@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ar_black@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/back.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/btn_saoma@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/btn_upload@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/btn_xinzeng@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/chuku_ic_cangku@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/chuku_ic_delete@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/daiban_btn_saoma@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/daiban_ic_daiban@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/daiban_ic_xiaoxi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/default_404@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/default_loginfailed@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/default_weishouquan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/diantong_open@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/gon1gdan_ic_saoma@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/gongdan_ic_saoma@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/gongdan_ic_shoudong@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_ar@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_close@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_delete@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_notpass@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_pass@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_pdf@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_play@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_saomiao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_search@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/ic_shenhe@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/jianyan_ic_saoma@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/loginError.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/login_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/login_ic_code@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/login_ic_password@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/login_ic_phone@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/logo@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_bangding@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_change@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_gerenxinxi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_shoujihao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_xitonggonggao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_xiugaimima@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/mine_ic_youxianghao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_daiban@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_daiban_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_gongzuotai@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_gongzuotai_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_ic_back@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_kanban@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_kanban_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_saoma@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_wode@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/nav_wode_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/notfound.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/password_ic_tip@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/work_ic_guanli@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/static/zhongjian_ic_delete.png 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/store/index.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/util/api/index.js 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/util/request/requestInterceptors.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/util/request/responseInterceptors.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/.env.development 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/base/BaseTable.vue 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/business/OperaSalaryParamWindow.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaPlanStaock.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaUserDeviceExtWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaWInboundExtWindow.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaWOutboundExtWindow.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OperaWrollOutStore.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/components/ext/OrderDistrubution.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/business/salaryParam.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/plansExt.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/salaryStatistic.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_standard/src/views/ext/workorderPutRecordExt.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/components/common/Warehouse.vue
@@ -19,7 +19,13 @@
                    @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>
                            <div class="content_list_item_name">
                                <span style="color: #03AF76;" v-if="item.tmodel.label == 'APPLIANCE_ONTEST'">[{{ item.tmodel.code }}]</span>
                                <span style="color: #305ED5;" v-if="item.tmodel.label == 'APPLIANCE_MIX'">[{{ item.tmodel.code }}]</span>
                                <span style="color: #F5A400;" v-if="item.tmodel.label == 'APPLIANCE_OFFTEST'">[{{ item.tmodel.code }}]</span>
                                <span style="color: red;" v-if="item.tmodel.label == 'APPLIANCE_USELESS'">[{{ item.tmodel.code }}]</span>
                                <span>{{item.name}}</span>
                            </div>
                        </div>
                    </div>
                </van-list>
@@ -223,7 +229,15 @@
                    margin-right: 10px;
                }
                .content_list_item_name {
                    font-size: 28px;
                    width: 100%;
                    display: flex;
                    align-items: center;
                    span {
                        font-size: 30px;
                        font-family: PingFangSC-Regular, PingFang SC;
                        font-weight: 400;
                        color: #222222;
                    }
                }
            }
        }
h5_standard/src/components/newCom/quality.vue
@@ -23,8 +23,7 @@
    let list = ref([
        { name: '合格', id: '0' },
        { name: '不良', id: '1' },
        { name: '报废', id: '2' },
        { name: '混合', id: '3' }
        { name: '报废', id: '2' }
    ])
    // è¿”回上一页带参数
h5_standard/src/views/LogInAgain.vue
@@ -84,20 +84,20 @@
      //   uuid: '0000',
      //   code: '0000'
      // })
      // let res = await testLogin({  // å¤§æ “
      //   username: '18019924213',
      //   password: '123456',
      //   companyId: '1',
      //   uuid: '0000',
      //   code: '0000'
      // })
      let res = await testLogin({ // æ–‡æ­¦
        username: '18656077929',
      let res = await testLogin({  // å¤§æ “
        username: '18019924213',
        password: '123456',
        companyId: '8',
        uuid: '0000',
        code: '0000'
      })
      // let res = await testLogin({ // æ–‡æ­¦
      //   username: '18656077929',
      //   password: '123456',
      //   companyId: '111',
      //   uuid: '0000',
      //   code: '0000'
      // })
      // let res = await testLogin({ // èƒ¡å…‹ä¸œ
      //   username: '17751132561',
      //   password: '123456',
h5_standard/src/views/needToBeDealtWith/addWarehousing.vue
@@ -139,6 +139,7 @@
        {
            batch: '',
            locationId: '',
            locationIdLabel: '',
            locationName: '',
            materialId: '',
            materialName: '',
@@ -165,6 +166,9 @@
    }
    // æ‰“开选择物料
    const openQ = (index: number) => {
        if (list.value[index].locationIdLabel == 'APPLIANCE_ONTEST' || list.value[index].locationIdLabel == 'APPLIANCE_OFFTEST' || list.value[index].locationIdLabel == 'APPLIANCE_USELESS') {
            return
        }
        i.value = index
        qualityShow.value = true
    }
@@ -180,18 +184,19 @@
        locationShow.value = true
    }
    const addItem = () => {
        // if (!form.warehouseId) return Toast('请选择入库仓库')
        if (!form.warehouseId) return Toast('请选择入库仓库')
        list.value.push({
            batch: '',
            locationId: '',
            locationName: '',
            locationIdLabel: list.value[list.value.length - 1].locationIdLabel,
            materialId: '',
            materialName: '',
            num: '',
            procedureId: '',
            procedureName: '',
            qualityType: '',
            qualityTypeName: '',
            qualityType: list.value[list.value.length - 1].qualityType,
            qualityTypeName: list.value[list.value.length - 1].qualityTypeName,
            unitId: '',
            unitName: ''
        })
@@ -301,6 +306,17 @@
                            item.locationId = res.data[0].id
                            item.locationName = res.data[0].unionName
                        })
                        list.value[i.value].locationIdLabel = res.data[0].label
                        if (res.data[0].label === 'APPLIANCE_ONTEST') {
                            list.value[i.value].qualityType = '0'
                            list.value[i.value].qualityTypeName = '合格'
                        } else if (res.data[0].label === 'APPLIANCE_OFFTEST') {
                            list.value[i.value].qualityType = '1'
                            list.value[i.value].qualityTypeName = '不良'
                        } else if (res.data[0].label === 'APPLIANCE_USELESS') {
                            list.value[i.value].qualityType = '2'
                            list.value[i.value].qualityTypeName = '报废'
                        }
                    } else {
                        location.value = true
                        list.value.forEach(item => {
@@ -340,6 +356,19 @@
    const getValue3 = (item: any): void => {
        list.value[i.value].locationId = item.id
        list.value[i.value].locationName = item.unionName
        list.value[i.value].qualityType = ''
        list.value[i.value].qualityTypeName = ''
        list.value[i.value].locationIdLabel = item.label
        if (item.label === 'APPLIANCE_ONTEST') {
            list.value[i.value].qualityType = '0'
            list.value[i.value].qualityTypeName = '合格'
        } else if (item.label === 'APPLIANCE_OFFTEST') {
            list.value[i.value].qualityType = '1'
            list.value[i.value].qualityTypeName = '不良'
        } else if (item.label === 'APPLIANCE_USELESS') {
            list.value[i.value].qualityType = '2'
            list.value[i.value].qualityTypeName = '报废'
        }
        locationShow.value = false
    }
    // é€‰æ‹©å·¥åº
h5_standard/src/views/needToBeDealtWith/outbound.vue
@@ -44,7 +44,7 @@
                        <span>出库货位:{{ item.locationName }}</span>
                        <div class="rework_qd_item_hw_right">
                            <span>数量:</span>
                            <input type="number" v-model="item.num" placeholder="0" />
                            <input type="number" v-model="item.num" @input="changeNum(item)" placeholder="0" />
                            <span>{{ item.unitName }}</span>
                        </div>
                    </div>
@@ -111,7 +111,16 @@
    const onCancel = () => {
        typeShow.value = false
    }
    const changeNum = (obj: any) => {
        if (obj.num < 0) {
            obj.num = ''
            return Toast('出库物料数量必须大于0')
        }
        if (obj.num > obj.total) {
            obj.num = ''
            return Toast('出库物料数量不能大于库存数')
        }
    }
    // èŽ·å–å½“å¤©å¹´æœˆæ—¥
    const getDay = () => {
      var date = new Date();
@@ -127,7 +136,7 @@
        if (!form.warehouseId) return Toast('请选择出库仓库')
        if (list.value.length === 0) return Toast('至少选择一条出库物料')
        for (let i = 0; i < list.value.length; i++) {
            if (!list.value[i].num || list.value[i].num == '' || list.value[i].num == 0) {
            if (!list.value[i].num || list.value[i].num == '' || list.value[i].num <= 0) {
                return Toast(`第${i + 1}个出库物料数量必须大于0`)
            }
            if (list.value[i].num > list.value[i].total) {
@@ -352,7 +361,7 @@
                            color: #333333;
                            background: #FFFFFF;
                            border-radius: 8px;
                            border: 1px solid #CCCCCC;
                            border: 1PX solid #CCCCCC;
                            margin: 0 20px;
                            padding: 0 30px;
                            box-sizing: border-box;
h5_standard/src/views/workOrder/processPlan.vue
@@ -1,5 +1,9 @@
<template>
    <div class="content">
        <div :class="{ 'content_top': status }" class="content_search">
            <v-Search @searchInput="searchInput" @submit="submit" :isShow="false" placeholder="搜索物料名称/编码/工序名称">
            </v-Search>
        </div>
        <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
            <van-list
                v-model:loading="loading"
@@ -48,12 +52,15 @@
</template>
<script setup lang="ts">
    import { reactive, ref, onBeforeUnmount, getCurrentInstance } from "vue"
    import { reactive, ref, onBeforeUnmount, getCurrentInstance, onMounted } from "vue"
    import { useRouter, useRoute } from "vue-router"
    import { getList } from "@/apis/PlanningAPI"
    import { judgmentPlatform } from '@/utils/utils'
    const route = useRoute()
    const router = useRouter()
    let status = ref<boolean>(false)    // æ ¹æ®å¹³å°æ˜¯å¦éœ€è¦è®¾ç½®top
    const { $Bus }  = getCurrentInstance().appContext.config.globalProperties 
@@ -61,7 +68,8 @@
    const pageData = reactive({
        capacity: 10,
        page: 0,
        total: 0
        total: 0,
        name: ''
    })
    // åˆ—表数据
@@ -73,6 +81,23 @@
    const clickItem = (obj: any) => {
        $Bus.emit('callback', obj)
        router.go(-1)
    }
    // æœç´¢æäº¤
    const submit = (): void => {
        pageData.page = 0
        finished.value = false
        listData.value = []
        onLoad()
    }
    // æœç´¢æ¡†
    const searchInput = (data: any) => {
        pageData.name = data
        pageData.page = 0
        finished.value = false
        listData.value = []
        onLoad()
    }
    // åˆ—表
@@ -124,6 +149,10 @@
    onBeforeUnmount(() => {
        $Bus.all.delete("changeOdr")
    })
    onMounted(() => {
        status.value = judgmentPlatform()
    })
</script>
<style lang="scss" scoped>
@@ -132,6 +161,79 @@
        // height: 100%;
        position: absolute;
        background: #F7F7F7;
        .content_top {
            top: 0 !important;
        }
        .content_search {
            padding: 30px;
            background: white;
            box-sizing: border-box;
            position: sticky;
            top: 88px;
            z-index: 9;
            .Search_item {
                margin-bottom: 40px;
                .Search_item_label {
                    font-size: 30px;
                    font-weight: 500;
                    color: #222222;
                }
                .Search_item_content {
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    margin-top: 30px;
                    .tag {
                        display: flex;
                        flex-wrap: wrap;
                        align-items: center;
                        .tag_active {
                            background: $nav-color !important;
                            color: #ffffff !important;
                        }
                        .tag_item {
                            width: 156px;
                            height: 70px;
                            box-sizing: border-box;
                            background: #F2F2F2;
                            border-radius: 8px;
                            font-size: 26px;
                            font-weight: 400;
                            color: #333333;
                            display: flex;
                            align-items: center;
                            justify-content: center;
                            margin-right: 22px;
                            margin-bottom: 22px;
                            &:nth-child(4n) {
                                margin-right: 0;
                            }
                        }
                    }
                    span {
                        font-size: 26px;
                        font-weight: 400;
                        color: #333333;
                    }
                    .Search_item_content_a {
                        width: 308px;
                        height: 70px;
                        background: #F7F7F7;
                        border-radius: 8px;
                        border: 1px solid #EEEEEE;
                        font-size: 26px;
                        font-weight: 400;
                        color: #B2B2B2;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                    }
                }
            }
            .content_search_x {
                height: 24px;
            }
        }
        .content_list {
            width: 100%;
            height: 100%;
h5_standard/src/views/workOrder/reportingForWork.vue
@@ -55,7 +55,7 @@
                        <span>新增投料</span>
                    </div>
                </div>
                <template v-if="wuList.length > 0">
                <template v-if="wuList.length > 0 && !(hasBom == 1 && bomType == 1)">
                    <van-swipe-cell v-for="(item, index) in wuList" :key="index">
                        <div class="bg_list_item_h">
                            <div class="bg_list_item_num">
@@ -82,7 +82,7 @@
                        </template>
                    </van-swipe-cell>
                </template>
                <template v-else>
                <template v-else-if="wuList.length == 0 && !(hasBom == 1 && bomType == 1)">
                    <div class="kong">
                        <span>暂无数据</span>
                    </div>
@@ -104,7 +104,7 @@
                            <span><b>*</b>良品数</span>
                            <div class="bg_list_item_num_item_sr">
                                <input type="number" v-model="from.qualified" @input="changeNum(1)" placeholder="请输入" />
                                <span>块</span>
                                <span v-if="from.processPlan">{{from.processPlan.unitName}}</span>
                            </div>
                        </div>
                    </div>
@@ -113,7 +113,7 @@
                            <span>不良数</span>
                            <div class="bg_list_item_num_item_sr">
                                <input type="number" v-model="from.undesirable" @input="changeNum(2)" placeholder="请输入" />
                                <span>块</span>
                                <span v-if="from.processPlan">{{from.processPlan.unitName}}</span>
                            </div>
                        </div>
                    </div>
@@ -158,7 +158,7 @@
                        <div class="bg_list_item_num_item">
                            <span>工资单价</span>
                            <div class="bg_list_item_num_item_sr">
                                <span class="color1">{{infoBox.salary}}元/{{infoBox.type == 0 ? 'ä»¶' : '时'}}</span>
                                <span class="color1">{{(infoBox.salary / 10 / 10).toFixed(2)}}元/{{infoBox.type == 0 ? 'ä»¶' : '时'}}</span>
                            </div>
                        </div>
                    </div>
@@ -188,7 +188,7 @@
            <div class="bg_footer_submit" @click="submit">提交</div>
        </div>
        <!-- é€‰æ‹©ä¸è‰¯é¡¹ -->
        <van-popup v-model:show="show" round position="bottom" :style="{ height: '53%' }">
        <van-popup v-model:show="show" round position="bottom">
            <div class="bl">
                <div class="bl_head">
                    <img src="@/assets/icon/ic_close@2x.png" style="opacity: 0;" alt="" />
@@ -280,8 +280,7 @@
        text: 'name'
    };
    let userShow = ref(false)
    let userList = ref([])
    let wuList: any = ref([])
    let wuList = ref<Array<any>>([])
    // äº§å‡ºæ•°é‡éªŒè¯
    const changeNum = (type: number) => {
@@ -348,7 +347,10 @@
        } else {
            if (!wuList.value.length === 0) return Toast('投料不能为空')
        }
        if (!from.qualified) return Toast('良品数不能为空')
        if (!from.qualified && !from.undesirable) {
            return Toast('良品数与不良数不能同时为空')
        }
        // if (!from.qualified) return Toast('良品数不能为空')
        // æœ‰ä¸è‰¯æ•°
        if (from.undesirable > 0) {
            if (from.defective.length === 0) return Toast('不良项不能为空')
@@ -357,8 +359,8 @@
        autoWorkReport({
            createWorkorderRecordDTO: {
                duration: from.duration,
                qualifiedNum: from.qualified,
                unQualifiedNum: from.undesirable
                qualifiedNum: from.qualified ? from.qualified : 0,
                unQualifiedNum: from.undesirable ? from.undesirable : 0
            },
            plansId: from.processPlan.id,
            proGroupId: deviceId.value,
@@ -387,43 +389,46 @@
    // é¢„计工资
    const expectedSalary = computed(() => {
        if (!infoBox.value) return 0
        if (!infoBox.value) return 0;
        // æŒ‰ä»¶è®¡ç®—
        if (infoBox.value.type == 0) {
            console.log('计件')
            if (!from.qualified) return 0
            if (infoBox.value.unqualified == 1) {   // æ˜¯å¦è®¡å…¥ä¸è‰¯å“
                let total = Number(from.qualified) + Number(from.undesirable)
                return total * infoBox.value.salary
                return (total * (infoBox.value.salary / 10 / 10)).toFixed(2) || 0
            } else {
                return Number(from.qualified) * infoBox.value.salary
                return (Number(from.qualified) * (infoBox.value.salary / 10 / 10)).toFixed(2) || 0
            }
        } else {
            console.log('计时')
            if (!from.duration) return 0;
            let h = (from.duration / 60 / 60).toFixed(2)
            return Number(h) * infoBox.value.salary
            return (Number(h) * (infoBox.value.salary / 10 / 10)).toFixed(2) || 0
        }
    })
    // è¾¾æ ‡çއ
    const complianceRate = computed(() => {
        if (!infoBox.value) return 0;
        if (!from.qualified) return 0;
        if (!from.qualified && !from.undesirable) return 0;
        if (!from.duration) return 0;
        // æŒ‰ä»¶è®¡ç®—
        // if (infoBox.value.type == 0) {
            // if (infoBox.value.unqualified == 1) {   // æ˜¯å¦è®¡å…¥ä¸è‰¯å“
            if (infoBox.value.unqualified == 1) {   // æ˜¯å¦è®¡å…¥ä¸è‰¯å“
                let a = ((Number(from.qualified) + Number(from.undesirable)) / (from.duration / 60 / 60)).toFixed(2)
                let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2)
                console.log(a)
                console.log(b)
                return (Number(a) / Number(b)).toFixed(2)
                return ((Number(a) / Number(b)) * 100).toFixed(2) || 0
                // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / )
                // return total * infoBox.value.salary;
            // } else {
            } else {
                let a = (from.qualified / (from.duration / 60 / 60)).toFixed(2)
                let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2)
                console.log(a)
                console.log(b)
                return ((Number(a) / Number(b)) * 100).toFixed(2) || 0
            //     return Number(from.qualified) * infoBox.value.salary;
            // }
            }
        // } else {
        //     console.log('按时长')
        // }
@@ -544,7 +549,7 @@
            // èŽ·å–ç±»åž‹
            getIdPlansExt(res.id)
                .then(res2 => {
                    if (res.code === 200) {
                    if (res2.code === 200) {
                        bomType.value = res2.data.bomType
                        hasBom.value = res2.data.hasBom
                    }
@@ -843,7 +848,7 @@
                                    font-size: 28px;
                                    font-weight: 400;
                                    color: #333333;
                                    padding: 0 30px
                                    padding: 0 30px;
                                }
                                .wulll {
                                    width: 400px;
@@ -906,12 +911,15 @@
            }
        }
        .bl {
            width: 100%;
            height: 800px;
            padding: 30px;
            box-sizing: border-box;
            display: flex;
            flex-direction: column;
            .bl_head {
                width: 100%;
                height: 50px;
                display: flex;
                align-items: center;
                justify-content: space-between;
@@ -942,7 +950,7 @@
            }
            .bl_list {
                width: 100%;
                height: 550px;
                height: calc(100% - 168px);
                overflow-y: scroll;
                margin-top: 30px;
                .bl_list_item {
h5_standard/src/views/workOrder/workOrderReporting.vue
@@ -30,6 +30,7 @@
                </div>
                <template v-if="feedingData && feedingData.length > 0">
                    <van-swipe-cell v-for="(item, index) in feedingData" :key="index">
                        <div class="bg_list_item_h">
                        <div class="bg_list_item_num">
                            <div class="bg_list_item_num_item">
                                <!-- <span>{{item.code}}</span> -->
@@ -49,6 +50,8 @@
                                </div>
                            </div>
                        </div>
                        </div>
                        <template #right v-if="proxy.$auth('h5:workorderinput:delete')">
                            <van-button style="height: 100%;" square text="删除" @click="deleItem(item.id, 'T')" type="danger" />
                        </template>
@@ -70,9 +73,10 @@
                <!-- <template v-if="produceData && produceData.length > 0"> -->
                    <!-- v-for="(item, index) in produceData" :key="index" -->
                    <van-swipe-cell>
                        <div class="bg_list_item_h">
                        <div class="bg_list_item_num">
                            <div class="bg_list_item_num_item">
                                <span>良品数</span>
                                    <span>良品数({{ info.umodel ? info.umodel.name : '' }})</span>
                                <div class="bg_list_item_num_item_sr">
                                    <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" -->
                                    <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" -->
@@ -81,12 +85,14 @@
                                </div>
                            </div>
                        </div>
                        </div>
                    </van-swipe-cell>
                    <van-swipe-cell>
                        <div class="bg_list_item_h">
                        <div class="bg_list_item_num">
                            <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" -->
                            <div class="bg_list_item_num_item">
                                <span>不良数</span>
                                    <span>不良数({{ info.umodel ? info.umodel.name : '' }})</span>
                                <div class="bg_list_item_num_item_sr">
                                    <!-- :disabled="!proxy.$auth('h5:workorderoutput:update')" -->
                                    <!-- @blur="change(item.id, item.num, 'C', item.maxNum, item)" -->
@@ -95,23 +101,79 @@
                                </div>
                            </div>
                        </div>
                        </div>
                    </van-swipe-cell>
                    <!-- <van-swipe-cell>
                    <van-swipe-cell v-if="produceFrom.undesirable > 0">
                        <div class="bg_list_item_h">
                        <div class="bg_list_item_num">
                            <div class="bg_list_item_num_item" @click="show = true">
                                <span>不良项</span>
                                <div class="bg_list_item_num_item_sr">
                                    <span>设置 ></span>
                                        <span class="wulll" :style="{color: from.defectiveName ? '#305ED5' : ''}">{{from.defectiveName ? from.defectiveName : '设置'}}</span>
                                        <img src="@/assets/icon/ic_ar@2x.png" alt="" />
                                </div>
                            </div>
                        </div>
                    </van-swipe-cell> -->
                        </div>
                    </van-swipe-cell>
                <!-- </template>
                <template v-else>
                    <div class="kong">
                        <span>暂无数据</span>
                    </div>
                </template> -->
            </div>
            <div class="bg_plan" @click="TimeShow = true">
                <div class="bg_plan_label">
                    <span><b>*</b>报工时长</span>
                </div>
                <div class="bg_plan_label_val">
                    <span :style="{color: from.durationName ? '#333' : ''}">{{from.durationName ? from.durationName : '请选择'}}</span>
                    <img src="@/assets/icon/ic_ar@2x.png" alt="" />
                </div>
            </div>
            <div class="bg_list_item" v-if="infoBox">
                <div class="bg_list_item_top">
                    <div class="bg_list_item_top_left">
                        <div class="bg_list_item_top_left_x"></div>
                        <span>工资绩效</span>
                    </div>
                </div>
                <div class="bg_list_item_h">
                    <div class="bg_list_item_num">
                        <div class="bg_list_item_num_item">
                            <span>计件方式</span>
                            <div class="bg_list_item_num_item_list">
                                <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 0">计件</div>
                                <div class="bg_list_item_num_item_list_item active" v-if="infoBox.type == 1">计时</div>
                            </div>
                        </div>
                    </div>
                    <div class="bg_list_item_num">
                        <div class="bg_list_item_num_item">
                            <span>工资单价</span>
                            <div class="bg_list_item_num_item_sr">
                                <span class="color1">{{infoBox.salary / 100}}元/{{infoBox.type == 0 ? 'ä»¶' : '时'}}</span>
                            </div>
                        </div>
                    </div>
                    <div class="bg_list_item_num">
                        <div class="bg_list_item_num_item">
                            <span>预计工资</span>
                            <div class="bg_list_item_num_item_sr">
                                <span class="color1">{{expectedSalary}}元</span>
                            </div>
                        </div>
                    </div>
                    <div class="bg_list_item_num">
                        <div class="bg_list_item_num_item">
                            <span>达标率</span>
                            <div class="bg_list_item_num_item_sr">
                                <span class="color1">{{complianceRate}}%</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <!-- <div class="bg_list_item">
                <div class="bg_list_item_top">
@@ -283,35 +345,48 @@
                </div>
            </div>
        </van-popup>
        <!-- æ—¶é—´ -->
        <van-popup v-model:show="TimeShow" round position="bottom" :style="{ height: '50%' }">
            <van-datetime-picker
                v-model="from.time"
                type="time"
                title="选择时间"
                @confirm="onConfirm2"
                @cancel="onCancel2"
            />
        </van-popup>
        <!-- é€‰æ‹©ä¸è‰¯é¡¹ -->
        <van-popup v-model:show="show" round position="bottom" :style="{ height: '53%' }">
        <van-popup v-model:show="show" round position="bottom">
            <div class="bl">
                <div class="bl_head">
                    <span @click="show = false">取消</span>
                    <img src="@/assets/icon/ic_close@2x.png" style="opacity: 0;" alt="" />
                    <span>不良项</span>
                    <span>确认</span>
                    <!-- <span>确认</span> -->
                    <img src="@/assets/icon/ic_close@2x.png" @click="show = false" alt="" />
                </div>
                <div class="bl_list">
                    <div class="bl_list_item" v-for="(item, i) in 12" :key="i">
                    <div class="bl_list_item" v-for="(item, i) in cateList" :key="i" @click="changeChecked(i)">
                        <div class="bl_list_item_left">
                            <input type="checkbox" :checked="true" name="" id="" />
                            <span>有划痕</span>
                            <input type="checkbox" :checked="item.active" />
                            <span>{{ item.name }}</span>
                        </div>
                        <div class="bl_list_item_right">
                            <input type="number" placeholder="请输入" />
                            <input type="number" @click.stop v-model="item.num" placeholder="0" />
                        </div>
                    </div>
                </div>
                <div class="bl_footer" @click="onConfirm3">确认</div>
            </div>
        </van-popup>
    </div>
</template>
<script setup lang="ts">
    import { getCurrentInstance, nextTick, onMounted, ref, reactive } from 'vue'
    import { getCurrentInstance, nextTick, onMounted, ref, reactive, computed } from 'vue'
    import { useRouter, useRoute } from "vue-router"
    import { Dialog, Toast } from 'vant'
    import { REGULAR } from '@/utils/utils'
    import { categoryExtList, queryOne } from '@/apis/PlanningAPI'
    import {
        getBarcodeContent,
        queryById,
@@ -334,6 +409,61 @@
    const router = useRouter()
    const route = useRoute()
    let TimeShow = ref(false)
    let from: any = reactive({
        time: '',
        defective: [],
        defectiveName: ''
    })
    // é¢„计工资
    const expectedSalary = computed(() => {
        if (!infoBox.value) return 0;
        // æŒ‰ä»¶è®¡ç®—
        if (infoBox.value.type == 0) {
            if (!produceFrom.qualified) return 0
            if (infoBox.value.unqualified == 1) {   // æ˜¯å¦è®¡å…¥ä¸è‰¯å“
                let total = Number(produceFrom.qualified) + Number(produceFrom.undesirable)
                return (total * (infoBox.value.salary / 100)).toFixed(2) || 0
            } else {
                return (Number(produceFrom.qualified) * (infoBox.value.salary / 100)).toFixed(2) || 0
            }
        } else {
            if (!from.duration) return 0;
            let h = (from.duration / 60 / 60).toFixed(2)
            return (Number(h) * (infoBox.value.salary / 10 / 10)).toFixed(2) || 0
        }
    })
    // è¾¾æ ‡çއ
    const complianceRate = computed(() => {
        if (!infoBox.value) return 0;
        if (!produceFrom.qualified && !produceFrom.undesirable) return 0;
        if (!from.duration) return 0;
        // æŒ‰ä»¶è®¡ç®—
        // if (infoBox.value.type == 0) {
            if (infoBox.value.unqualified == 1) {   // æ˜¯å¦è®¡å…¥ä¸è‰¯å“
                let a = ((Number(from.qualified) + Number(from.undesirable)) / (from.duration / 60 / 60)).toFixed(2)
                let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2)
                console.log(a)
                console.log(b)
                return (Number(a) / Number(b)).toFixed(2) || 0
                // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / )
                // return total * infoBox.value.salary;
            } else {
                let a = (produceFrom.qualified / (from.duration / 60 / 60)).toFixed(2)
                let b = (infoBox.value.num / (infoBox.value.times / 60 / 60)).toFixed(2)
                console.log(a)
                console.log(b)
                return (Number(a) / Number(b)).toFixed(2) || 0
                // return Number(from.qualified) * infoBox.value.salary;
            }
        // } else {
        //     console.log('按时长')
        // }
    })
    const loading = ref(false);
    const finished = ref(false);
    let show = ref(false)
@@ -345,13 +475,17 @@
        page: 0
    })
    let infoBox: any = ref(null)     // å·¥èµ„绩效
    // äº§å‡ºåˆæ ¼/不良
    let produceFrom = reactive({
    let produceFrom: any = reactive({
        qualifiedId: '',
        qualified: '',  // åˆæ ¼
        undesirableId: '',
        undesirable: '' // ä¸è‰¯
    })
    let cateList:any = ref([])  // ä¸è‰¯é¡¹
    // è¯¦æƒ…数据
    const info: any = ref({})
@@ -404,6 +538,70 @@
    // æŽ§åˆ¶æŠ¥å·¥ç»Ÿè®¡
    const statistics = ref<boolean>(false)
    const changeChecked = (i: number) => {
        cateList.value[i].active = !cateList.value[i].active
    }
    const getData = () => {
        categoryExtList({
            cateType: "3"
        }).then(res => {
            if (res.code === 200) {
                res.data.forEach((item: any) => {
                    item.active = false
                    item.num = ''
                })
                cateList.value = res.data
            }
        })
    }
    const onConfirm2 = (e: string) => {
        let h = Number(e.substring(0, 2))
        let m = Number(e.substring(3, 5))
        let s = 0
        if (h > 0) {
            s += h * 60 * 60
        }
        if (m > 0) {
            s += m * 60
        }
        from.duration = s
        from.durationName = `${h}小时${m}分钟`
        TimeShow.value = false
    }
    const onCancel2 = () => {
        TimeShow.value = false
    }
    const onConfirm3 = () => {
        let isOpen = false
        cateList.value.forEach((item: any, index: number) => {
            if (item.active) {
                isOpen = true
            }
        })
        if (!isOpen) return Toast('请选择不良项')
        let arr: any = []
        let total: any = 0
        let name: any = ''
        cateList.value.forEach((item: any, index: number) => {
            if (item.active) {
                if (item.num <= 0) {
                    return Toast('不良数量必须大于0')
                }
                total = total += item.num
                arr.push(item)
                name += item.name + item.num + ';'
            }
        })
        if (total !== produceFrom.undesirable) return Toast('不良数必须等于产出不良数')
        from.defective = arr
        from.defectiveName = name
        show.value = false
    }
    // æŠ•料统计
    const tlTotal = (): string => {
        if (feedingData.value.length > 0) {
@@ -419,18 +617,19 @@
    // ä¿®æ”¹äº§å‡º
    const changeCC = (downType: string, num: number, recordId: string) => {
        if (!num) return
        console.log(produceFrom.qualified + produceFrom.undesirable)
        if ((produceFrom.qualified + produceFrom.undesirable) > info.value.planNum) {
            return Toast.fail({ message: '产出数量不能大于计划数量', duration: 2000 })
        }
        if (num >= 0) {
            dealWorkorderRecordStandard({
                downType, num, recordId, workorderId: route.query.id
            }).then(res => {
                if (res.code === 200) {
                    getOrocessRecordCC()
                }
            })
            from.defective = []
            from.defectiveName = ''
            // dealWorkorderRecordStandard({
            //     downType, num, recordId, workorderId: route.query.id
            // }).then(res => {
            //     if (res.code === 200) {
            //         getOrocessRecordCC()
            //     }
            // })
        } else {
            if (downType == 0) {
                produceFrom.qualified = 0
@@ -602,6 +801,17 @@
        queryById(route.query.id).then(res => {
            if (res.code === 200) {
                info.value = res.data
                // èŽ·å–å·¥èµ„ç»©æ•ˆæ•°æ®
                queryOne({
                    deleted: 0,
                    departId: res.data.factoryId,
                    materialId: res.data.materialId,
                    procedureId: res.data.procedureId
                }).then((result: any) => {
                    if (result.code === 200) {
                        infoBox.value = result.data
                    }
                })
            }
        })
    }
@@ -688,7 +898,7 @@
            if (res.code === 200 && type === 'T') {
                getOrocessRecords()
            } else if (res.code === 200 && type === 'C') {
                getOrocessRecordCC()
                // getOrocessRecordCC()
            }
        })
    }
@@ -698,6 +908,10 @@
        if (info.value.bomType === 1) {  // æ‹‰å¼
            console.log('拉式')
            statisticsData.value = []
            if (produceFrom.qualified <= 0) {
                Toast.fail({ message: '产出明细不能为空' })
                return
            }
            if (info.value.hasBom === 0) {
                console.log('无bom')
                // let data: any = [
@@ -853,6 +1067,10 @@
                Toast.fail({ message: '投料明细不能为空' })
                return
            }
            if (produceFrom.qualified <= 0) {
                Toast.fail({ message: '产出明细不能为空' })
                return
            }
            statisticsData.value = []
            if (info.value.hasBom === 0) {
                console.log('无bom')
@@ -976,8 +1194,25 @@
    // ç¡®è®¤æŠ¥å·¥
    const submitBG = () => {
        if (!from.duration || from.duration <= 0) {
            return Toast('报工时长不能为空')
        }
        let createUnqualifiedDTOList = from.defective.map((item: any) => {
            return {
                categoryId: item.id,
                unQualifiedNum: item.num
            }
        })
        let createWorkorderRecordDTO = {
            workorderId: route.query.id,
            duration: from.duration,
            qualifiedNum: produceFrom.qualified ? produceFrom.qualified : 0,
            unQualifiedNum: produceFrom.undesirable ? produceFrom.undesirable : 0
        }
        // id: route.query.id
        comfirmDoneStandard({
            id: route.query.id
            createUnqualifiedDTOList,
            createWorkorderRecordDTO
        }).then(res => {
            if (res.code === 200) {
                Toast.success({ message: '报工成功', forbidClick: true, duration: 2000 })
@@ -992,7 +1227,8 @@
        pageDJs()
        queryByIds()
        getOrocessRecords()
        getOrocessRecordCC()
        getData()
        // getOrocessRecordCC()
    })
</script>
@@ -1002,6 +1238,59 @@
        /*height: 100%;*/
        position: absolute;
        background: #F7F7F7;
        .bg_plan {
            width: 100%;
            // height: 98px;
            padding: 30px;
            box-sizing: border-box;
            background: #FFFFFF;
            margin-bottom: 40px;
            display: flex;
            align-items: center;
            justify-content: space-between;
            span {
                font-size: 30px;
                font-family: PingFangSC-Regular, PingFang SC;
                font-weight: 400;
                color: #222222;
                b {
                    color: red;
                }
            }
            .bg_plan_nr {
                display: flex;
                flex-direction: column;
                span {
                    font-size: 24px;
                    font-family: PingFangSC-Regular, PingFang SC;
                    font-weight: 400;
                    color: #666666;
                    margin-top: 20px;
                    &:first-child {
                        font-size: 32px;
                        font-family: PingFangSC-Medium, PingFang SC;
                        font-weight: 500;
                        color: #333333;
                        margin-top: 0 !important;
                    }
                }
            }
            .bg_plan_label_val {
                display: flex;
                align-items: center;
                span {
                    font-size: 28px;
                    font-family: PingFangSC-Regular, PingFang SC;
                    font-weight: 400;
                    color: #999999;
                }
                img {
                    width: 12px;
                    height: 24px;
                    margin-left: 20px;
                }
            }
        }
        .details_cz {
            width: 100%;
            padding: 30px;
@@ -1125,11 +1414,22 @@
                        }
                    }
                }
                .bg_list_item_num {
                .bg_list_item_h {
                    width: 100%;
                    background: white;
                    padding: 0 30px;
                    box-sizing: border-box;
                    background: white;
                    .bg_list_item_num {
                        width: 100%;
                        min-height: 98px;
                        background: white;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        border-bottom: 1PX solid #E5E5E5;
                        &:last-child {
                            border: none !important;
                        }
                    .kong {
                        text-align: center;
                        font-size: 25px;
@@ -1137,6 +1437,8 @@
                        background: #ffffff;
                    }
                    .bg_list_item_num_item {
                            width: 100%;
                            height: 100%;
                        display: flex;
                        align-items: center;
                        // height: 118px;
@@ -1146,6 +1448,30 @@
                        border-bottom: 1px solid #E5E5E5;
                        &:last-child {
                            border: none;
                            }
                            .bg_list_item_num_item_list {
                                display: flex;
                                align-items: center;
                                .active {
                                    background: #305ED5 !important;
                                    color: #FFFFFF !important;
                                }
                                .bg_list_item_num_item_list_item {
                                    width: 116px;
                                    height: 62px;
                                    line-height: 62px;
                                    text-align: center;
                                    background: #F2F2F2;
                                    border-radius: 8px;
                                    font-size: 26px;
                                    font-family: PingFangSC-Regular, PingFang SC;
                                    font-weight: 400;
                                    color: #333333;
                                    margin-right: 20px;
                                    &:last-child {
                                        margin: 0 !important;
                                    }
                                }
                        }
                        .bg_list_item_num_item_wl {
                            flex-shrink: 0;
@@ -1169,11 +1495,21 @@
                        .err {
                            color: $nav-stateColor4 !important;
                        }
                            img {
                                width: 12px;
                                height: 24px;
                                margin-left: 20px;
                            }
                        span {
                            flex-shrink: 0;
                            overflow: hidden;
                            text-overflow: ellipsis;
                            white-space: nowrap;
                                b {
                                    font-size: 30px;
                                    color: red;
                                    margin-right: 5px;
                                }
                            .warning {
                                color: $nav-stateColor5 !important;
                                margin-right: 5px;
@@ -1199,6 +1535,12 @@
                            display: flex;
                            align-items: center;
                            justify-content: flex-end;
                                .color1 {
                                    font-size: 28px;
                                    font-family: PingFangSC-Regular, PingFang SC;
                                    font-weight: 400;
                                    color: #333333;
                                }
                            input::-webkit-input-placeholder {
                                font-size: 28px;
                            }
@@ -1214,10 +1556,19 @@
                                color: #333333;
                                padding: 0 30px
                            }
                                .wulll {
                                    width: 400px;
                                    text-align: right;
                                    overflow: hidden;
                                    white-space: nowrap;
                                    text-overflow: ellipsis;
                                }
                            span {
                                font-size: 28px;
                                    font-family: PingFangSC-Regular, PingFang SC;
                                font-weight: 400;
                                color: #666666;
                                    color: #999999;
                                }
                            }
                        }
                    }
@@ -1423,12 +1774,15 @@
            }
        }
        .bl {
            width: 100%;
            height: 800px;
            padding: 30px;
            box-sizing: border-box;
            display: flex;
            flex-direction: column;
            .bl_head {
                width: 100%;
                height: 50px;
                display: flex;
                align-items: center;
                justify-content: space-between;
@@ -1439,21 +1793,38 @@
                        font-size: 32px !important;
                    }
                }
                img {
                    width: 28px;
                    height: 28px;
                }
            }
            .bl_footer {
                width: 100%;
                height: 88px;
                line-height: 88px;
                text-align: center;
                background: #305ED5;
                border-radius: 8px;
                font-size: 32px;
                font-family: PingFangSC-Medium, PingFang SC;
                font-weight: 500;
                color: #FFFFFF;
                margin-top: 30px;
            }
            .bl_list {
                width: 100%;
                height: 580px;
                height: calc(100% - 168px);
                overflow-y: scroll;
                margin-top: 30px;
                .bl_list_item {
                    width: 100%;
                    height: 60px;
                    height: 96px;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    margin-bottom: 20px;
                    border-bottom: 1PX solid #E5E5E5;
                    &:last-child {
                        margin-bottom: 0 !important;
                        border: none !important;
                    }
                    .bl_list_item_left {
                        flex: 1;
@@ -1462,6 +1833,7 @@
                        input {
                            width: 30px;
                            height: 30px;
                            border: 1PX solid #CCCCCC;
                            margin: 0 !important;
                        }
                        span {
@@ -1478,9 +1850,19 @@
                            padding-left: 5px;
                            width: 160px;
                            height: 100%;
                            padding: 0 30px;
                            box-sizing: border-box;
                            text-align: right;
                            font-size: 28px;
                            color: #333333;
                            border-radius: 10px;
                            border: 2px solid #999999
                            border: 1PX solid #CCCCCC;
                            &::-webkit-input-placeholder {
                                font-size: 28px;
                                font-family: PingFangSC-Regular, PingFang SC;
                                font-weight: 400;
                                color: #999999;
                            }
                        }
                    }
                }
h5_standard/src/views/wxLogin.vue
@@ -157,6 +157,7 @@
                    input {
                        flex: 1;
                        height: 100%;
                        padding: 0 !important;
                        font-size: 30px;
                        font-family: PingFangSC-Regular, PingFang SC;
                        font-weight: 400;
minipro_standard/App.vue
@@ -1,6 +1,9 @@
<script>
    console.log('app------');
    // import { pageCount } from '@/util/api/index.js'
    export default {
        onLaunch: function() {
            // pageCount({})
        },
        onShow: function() {
        },
minipro_standard/common/config.js
@@ -1,5 +1,5 @@
module.exports = {
    // baseUrl: 'http://106.14.20.42/test_hfznzz/',
    baseUrl: 'https://hefei.dtkey.cn/test_hfznzz/',
    // baseUrl: 'http://192.168.0.35:10011/',
    // baseUrl: 'https://hefei.dtkey.cn/test_hfznzz/',
    baseUrl: 'https://dmtest.ahapp.net/doumeeplant_api/'
}
minipro_standard/components/myTabber.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
<template>
    <view>
        <u-tabbar
            :value="index"
            @change="change"
            fixed
            activeColor="#222"
            inactiveColor="#666"
        >
            <u-tabbar-item text="待办">
                <view class="" slot="active-icon">
                    <image src="@/static/nav_daiban_sel@2x.png" class="icon-style" mode=""></image>
                </view>
                <view class="" slot="inactive-icon">
                    <image src="@/static/nav_daiban@2x.png" class="icon-style" mode=""></image>
                </view>
            </u-tabbar-item>
            <u-tabbar-item text="工作台">
                <view class="" slot="active-icon">
                    <image src="@/static/nav_gongzuotai_sel@2x.png" class="icon-style" mode=""></image>
                </view>
                <view class="" slot="inactive-icon">
                    <image src="@/static/nav_gongzuotai@2x.png" class="icon-style" mode=""></image>
                </view>
            </u-tabbar-item>
            <u-tabbar-item text="我的">
                <view class="" slot="active-icon">
                    <image src="@/static/nav_wode_sel@2x.png" class="icon-style" mode=""></image>
                </view>
                <view class="" slot="inactive-icon">
                    <image src="@/static/nav_wode@2x.png" class="icon-style" mode=""></image>
                </view>
            </u-tabbar-item>
        </u-tabbar>
    </view>
</template>
<script>
    export default {
        name:"myTabbar",
        props: {
            index: 0
        },
        data() {
            return {
                value: 0
            };
        },
        methods: {
            click(index) {
                // console.log('click', index);
                // this.$nextTick(() => {
                //     this.value = index
                //     if (index==0) {
                //         uni.switchTab({
                //             url: '/pages/index/index'
                //         });
                //     } else if (index== 1) {
                //         uni.switchTab({
                //             url: '/pages/service/service'
                //         });
                //     }else {
                //         uni.switchTab({
                //             url: '/pages/mine/mine'
                //         });
                //     }
                // })
            },
            change(index) {
                this.$nextTick(() => {
                    this.value = index
                })
                console.log(this.value);
                if (index==0) {
                    // console.log('index');
                    uni.switchTab({
                        url: '/pages/index/index'
                    });
                } else if (index== 1) {
                    // console.log('workbench');
                    uni.switchTab({
                        url: '/pages/workbench/workbench'
                    });
                }else {
                    // console.log('mine');
                    uni.switchTab({
                        url: '/pages/mine/mine'
                    });
                }
            }
        },
    }
</script>
<style lang="scss" scope>
.icon-style {
    width: 44rpx;
    height: 44rpx;
}
</style>
minipro_standard/main.js
@@ -1,20 +1,23 @@
import Vue from 'vue'
import App from './App'
// vuex
import store from './store'
import mixin from './common/mixin'
// å¼•入全局uView
import uView from '@/uni_modules/uview-ui'
Vue.use(uView)
// vuex
import store from './store'
Vue.prototype.$store = store
store.dispatch('getHeight')
Vue.config.productionTip = false
App.mpType = 'app'
Vue.use(uView)
console.log(uni.$u);
// #ifdef MP
// å¼•å…¥uView对小程序分享的mixin封装
const mpShare = require('@/uni_modules/uview-ui/libs/mixin/mpShare.js')
@@ -22,13 +25,14 @@
// #endif
Vue.mixin(mixin)
// å¼•入请求封装
const app = new Vue({
    store,
  ...App
})
// å¼•入请求封装
require('./util/request/index')(app)
// èŽ·å–å¾…åŠžæ•°é‡
store.dispatch('getUpcomingNum')
app.$mount()
minipro_standard/pages.json
@@ -1,55 +1,32 @@
{
    "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
        {
            "path": "pages/projectList/projectList",
            "path": "pages/workbench/workbench",
            "style": {
                "navigationBarTitleText": "项目列表",
                // "enablePullDownRefresh": true,
                "navigationStyle": "custom"
                "navigationBarTitleText": "工作台",
                "enablePullDownRefresh": false
            }
        
        },{
        },
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "uni-app",
                "navigationStyle": "custom"
                "navigationBarTitleText": "待办"
            }
        }, {
            "path": "pages/applyList/applyList",
            "path": "pages/mine/mine",
            "style": {
                "navigationBarTitleText": "企业报名列表",
                "enablePullDownRefresh": false,
                "navigationBarBackgroundColor": "#F3F6F9"
            }
        }, {
            "path": "pages/comApplyList/comApplyList",
            "style": {
                "navigationBarTitleText": "企业报名列表",
                "navigationBarTitleText": "我的",
                "enablePullDownRefresh": false
            }
        }, {
            "path": "pages/applyDetail/applyDetail",
            "style": {
                "navigationBarTitleText": "企业报名详情",
        }
        ,{
            "path" : "pages/login/login",
            "style" :
            {
                "navigationBarTitleText": "登录",
                "enablePullDownRefresh": false,
                "navigationStyle": "custom"
            }
        }, {
            "path": "pages/uploadServiceData/uploadServiceData",
            "style": {
                "navigationBarTitleText": "上传服务数据",
                "enablePullDownRefresh": false
            }
        }, {
            "path": "pages/uploadCheckData/uploadCheckData",
            "style": {
                "navigationBarTitleText": "上传诊断数据",
                "enablePullDownRefresh": false
            }
        }
@@ -60,5 +37,31 @@
        "navigationBarBackgroundColor": "#F3F6F9",
        "backgroundColor": "#F3F6F9"
    },
    "tabBar": {
        "color": "#666666",
        "selectedColor": "#222222",
        "borderStyle": "black",
        "backgroundColor": "#fff",
        "list": [
            {
                "pagePath": "pages/index/index",
                "iconPath": "static/nav_daiban@2x.png",
                "selectedIconPath": "static/nav_daiban_sel@2x.png",
                "text": "待办"
            },
            {
                "pagePath": "pages/workbench/workbench",
                "iconPath": "static/nav_gongzuotai@2x.png",
                "selectedIconPath": "static/nav_gongzuotai_sel@2x.png",
                "text": "工作台"
            },
            {
                "pagePath": "pages/mine/mine",
                "iconPath": "static/nav_wode@2x.png",
                "selectedIconPath": "static/nav_wode_sel@2x.png",
                "text": "我的"
            }
        ]
    },
    "uniIdRouter": {}
}
minipro_standard/pages/applyDetail/applyDetail.vue
ÎļþÒÑɾ³ý
minipro_standard/pages/applyList/applyList.vue
ÎļþÒÑɾ³ý
minipro_standard/pages/comApplyList/comApplyList.vue
ÎļþÒÑɾ³ý
minipro_standard/pages/index/index.vue
@@ -1,44 +1,19 @@
<template>
    <view class="content">
        <view class="p40 nav bbox">
            <view class="">合肥市智改数转诊断服务平台</view>
            <view class="">欢迎登录</view>
        </view>
        <view class="p40 mt30">
            <u--input
                placeholder="请输入账号"
                prefixIcon="account"
                clearable
                v-model="form.account"
                prefixIconStyle="font-size: 40rpx;color: #AAAAAA"
            ></u--input>
            <view class="p20"></view>
            <u--input
                placeholder="请输入密码"
                prefixIcon="lock"
                password
                clearable
                v-model="form.password"
                prefixIconStyle="font-size: 40rpx;color: #AAAAAA"
            ></u--input>
            <view class="ptb50"></view>
            <u-button
                :loading="logining"
                type="primary"
                color="#216EEE"
                text="登录"
                size="large"
                @click="loginAction"
            ></u-button>
        </view>
    <view>
        
        <myTabbar :index="0" />
    </view>
</template>
<script>
    // import { coustomLogin, wxEmpower } from '@/util/api/index'
    
    import { coustomLogin, wxEmpower } from '@/util/api/index'
    import myTabbar from "@/components/myTabber.vue"
    export default {
        components: {
            myTabbar
        },
        data() {
            return {
                form: {
@@ -50,100 +25,53 @@
            }
        },
        onLoad() {
            uni.login({
                success: data => {
                    this.wxLogin(data.code)
                },
                fail: err => {
                    uni.$u.toast(err)
                }
            })
            // uni.login({
            //     success: data => {
            //         this.wxLogin(data.code)
            //     },
            //     fail: err => {
            //         uni.$u.toast(err)
            //     }
            // })
        },
        methods: {
            loginAction() {
                if (!this.form.account || !this.form.password) {
                    uni.$u.toast('账号或者密码不能为空')
                }
                this.logining = true
                coustomLogin({...this.form, openid: this.openId})
                    .then(res => {
                        this.$store.commit('SETTOKEN', res.token)
                        this.$store.commit('SETUSERINFO', res)
                        uni.navigateTo({
                            url:'/pages/projectList/projectList'
                        })
                    })
                    .finally(() => {
                        this.logining = false
                    })
            },
            wxLogin(code) {
                wxEmpower({code})
                    .then(res => {
                        this.openId = res.openid
                        if (res.userInfo) {
                            this.$store.commit('SETTOKEN', res.userInfo.token)
                            this.$store.commit('SETUSERINFO', res.userInfo)
                            uni.navigateTo({
                                url:'/pages/projectList/projectList'
                            })
                        }
                    })
                    .catch(err => {
                        uni.$u.toast(err)
                    })
            }
            // loginAction() {
            //     if (!this.form.account || !this.form.password) {
            //         uni.$u.toast('账号或者密码不能为空')
            //     }
            //     this.logining = true
            //     coustomLogin({...this.form, openid: this.openId})
            //         .then(res => {
            //             this.$store.commit('SETTOKEN', res.token)
            //             this.$store.commit('SETUSERINFO', res)
            //             uni.navigateTo({
            //                 url:'/pages/projectList/projectList'
            //             })
            //         })
            //         .finally(() => {
            //             this.logining = false
            //         })
            // },
            // wxLogin(code) {
            //     wxEmpower({code})
            //         .then(res => {
            //             this.openId = res.openid
            //             if (res.userInfo) {
            //                 this.$store.commit('SETTOKEN', res.userInfo.token)
            //                 this.$store.commit('SETUSERINFO', res.userInfo)
            //                 uni.navigateTo({
            //                     url:'/pages/projectList/projectList'
            //                 })
            //             }
            //         })
            //         .catch(err => {
            //             uni.$u.toast(err)
            //         })
            // }
        }
    }
</script>
<style lang="scss" scoped>
    .content {
        // display: flex;
        // flex-direction: column;
        // align-items: center;
        // justify-content: center;
        height: 100vh;
        background-color: #FFFFFF;
        .nav {
            
            width: 750rpx;
            height: 520rpx;
            background: linear-gradient(180deg, #C7EBFF 0%, #FFFFFF 100%);
            display: flex;
            flex-direction: column-reverse;
            color: #293C5B;
            :first-child {
                height: 52rpx;
                font-size: 36rpx;
                line-height: 52rpx;
            }
            :last-child {
                height: 80rpx;
                font-size: 56rpx;
                font-weight: 500;
                line-height: 80rpx;
                margin-bottom: 16rpx;
            }
        }
    }
    .logo {
        height: 200rpx;
        width: 200rpx;
        margin-top: 200rpx;
        margin-left: auto;
        margin-right: auto;
        margin-bottom: 50rpx;
    }
    .text-area {
        display: flex;
        justify-content: center;
    }
    .title {
        font-size: 36rpx;
        color: #8f8f94;
    }
</style>
minipro_standard/pages/login/login.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
<template>
    <view class="login-content plr60">
        <view class="login-bg">
            <image src="@/static/login_bg@2x.png" mode="aspectFill" class="bg-img"></image>
            <image src="@/static/logo@2x.png" mode="aspectFill" class="login-log img180"></image>
            <view class="tc title">DM云工厂</view>
        </view>
        <view class="bg_w rd8 ptb30 pl40 bbox com-input flex input-height">
            <image src="@/static/login_ic_code@2x.png" mode="" class="img40 mr25"></image>
            <u--input placeholder="企业代码" border="none"></u--input>
        </view>
        <view class="bg_w rd8 ptb30 pl40 bbox mt40 flex input-height">
            <image src="@/static/login_ic_phone@2x.png" mode="" class="img40 mr25"></image>
            <u--input placeholder="手机号" border="none"></u--input>
        </view>
        <view class="bg_w rd8 ptb30 pl40 bbox mt40 flex input-height">
            <image src="@/static/login_ic_password@2x.png" mode="" class="img40 mr25"></image>
            <u--input placeholder="密码" border="none"></u--input>
        </view>
        <view class="login-btn mt80">立即登录</view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                bgImg: require('@/static/login_bg@2x.png')
            };
        }
    }
</script>
<style lang="scss" scoped>
.login-content {
    height: 100vh;
    background: #FFFFFF linear-gradient(180deg, rgba(66,117,252,0.2) 0%, rgba(66,117,252,0) 100%);
    .login-bg {
        position: relative;
        height: 812rpx;
        .bg-img {
            position: absolute;
            z-index: 1;
            width: 100%;
            height: 100%;
        }
        .login-log {
            // margin-top: ;
            margin: 356rpx auto 0 auto ;
            left: 0;
            right: 0;
            position: absolute;
        }
        .title {
            position: absolute;
            margin-top: 576rpx;
            left: 0;
            width: 100%;
            height: 60rpx;
            font-size: 44rpx;
            font-weight: 600;
            color: #333333;
            line-height: 60rpx;
        }
    }
    .input-height {
        height: 100rpx;
    }
    .com-input {
        margin-top: -60px;
    }
    .login-btn {
        height: 98rpx;
        background: #4275FC;
        box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(66,117,252,0.2);
        border-radius: 8rpx;
        text-align: center;
        font-size: 32rpx;
        font-weight: 500;
        color: #FFFFFF;
        line-height: 98rpx;
    }
}
</style>
minipro_standard/pages/mine/mine.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
<template>
    <view>
        <myTabbar :index="2" />
    </view>
</template>
<script>
    import myTabbar from "@/components/myTabber.vue"
    export default {
        components: {
            myTabbar
        },
        data() {
            return {
                form: {
                    account: '',
                    password: '',
                },
                logining: false,
                openId: ''
            }
        },
        onLoad() {
            // uni.login({
            //     success: data => {
            //         this.wxLogin(data.code)
            //     },
            //     fail: err => {
            //         uni.$u.toast(err)
            //     }
            // })
        },
        methods: {
            // loginAction() {
            //     if (!this.form.account || !this.form.password) {
            //         uni.$u.toast('账号或者密码不能为空')
            //     }
            //     this.logining = true
            //     coustomLogin({...this.form, openid: this.openId})
            //         .then(res => {
            //             this.$store.commit('SETTOKEN', res.token)
            //             this.$store.commit('SETUSERINFO', res)
            //             uni.navigateTo({
            //                 url:'/pages/projectList/projectList'
            //             })
            //         })
            //         .finally(() => {
            //             this.logining = false
            //         })
            // },
            // wxLogin(code) {
            //     wxEmpower({code})
            //         .then(res => {
            //             this.openId = res.openid
            //             if (res.userInfo) {
            //                 this.$store.commit('SETTOKEN', res.userInfo.token)
            //                 this.$store.commit('SETUSERINFO', res.userInfo)
            //                 uni.navigateTo({
            //                     url:'/pages/projectList/projectList'
            //                 })
            //             }
            //         })
            //         .catch(err => {
            //             uni.$u.toast(err)
            //         })
            // }
        }
    }
</script>
<style lang="scss" scoped>
</style>
minipro_standard/pages/projectList/projectList.vue
ÎļþÒÑɾ³ý
minipro_standard/pages/uploadCheckData/uploadCheckData.vue
ÎļþÒÑɾ³ý
minipro_standard/pages/uploadServiceData/uploadServiceData.vue
ÎļþÒÑɾ³ý
minipro_standard/pages/workbench/workbench.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
<template>
    <view>
        <myTabbar :index="1" />
    </view>
</template>
<script>
    import myTabbar from "@/components/myTabber.vue"
    export default {
        components: {
            myTabbar
        },
        data() {
            return {
            };
        },
        onLoad() {
            uni.hideTabBar()
            // uni.login({
            //     success: data => {
            //         this.wxLogin(data.code)
            //     },
            //     fail: err => {
            //         uni.$u.toast(err)
            //     }
            // })
        },
        methods: {
            // wxLogin(code) {
            //     wxEmpower({code})
            //         .then(res => {
            //             this.openId = res.openid
            //             if (res.userInfo) {
            //                 this.$store.commit('SETTOKEN', res.userInfo.token)
            //                 this.$store.commit('SETUSERINFO', res.userInfo)
            //                 uni.navigateTo({
            //                     url:'/pages/projectList/projectList'
            //                 })
            //             }
            //         })
            //         .catch(err => {
            //             uni.$u.toast(err)
            //         })
            // }
        }
    }
</script>
<style lang="scss">
</style>
minipro_standard/static/2@2x.png
minipro_standard/static/3@2x.png
minipro_standard/static/@2x.png
minipro_standard/static/ar_black@2x.png
minipro_standard/static/back.png
minipro_standard/static/btn_saoma@2x.png
minipro_standard/static/btn_upload@2x.png
minipro_standard/static/btn_xinzeng@2x.png
minipro_standard/static/chuku_ic_cangku@2x.png
minipro_standard/static/chuku_ic_delete@2x.png
minipro_standard/static/daiban_btn_saoma@2x.png
minipro_standard/static/daiban_ic_daiban@2x.png
minipro_standard/static/daiban_ic_xiaoxi@2x.png
minipro_standard/static/default_404@2x.png
minipro_standard/static/default_loginfailed@2x.png
minipro_standard/static/default_weishouquan@2x.png
minipro_standard/static/diantong_open@2x.png
minipro_standard/static/gon1gdan_ic_saoma@2x.png
minipro_standard/static/gongdan_ic_saoma@2x.png
minipro_standard/static/gongdan_ic_shoudong@2x.png
minipro_standard/static/ic_ar@2x.png
minipro_standard/static/ic_close@2x.png
minipro_standard/static/ic_delete@2x.png
minipro_standard/static/ic_notpass@2x.png
minipro_standard/static/ic_pass@2x.png
minipro_standard/static/ic_pdf@2x.png
minipro_standard/static/ic_play@2x.png
minipro_standard/static/ic_saomiao@2x.png
minipro_standard/static/ic_search@2x.png
minipro_standard/static/ic_shenhe@2x.png
minipro_standard/static/jianyan_ic_saoma@2x.png
minipro_standard/static/loginError.png
minipro_standard/static/login_bg@2x.png
minipro_standard/static/login_ic_code@2x.png
minipro_standard/static/login_ic_password@2x.png
minipro_standard/static/login_ic_phone@2x.png
minipro_standard/static/logo@2x.png
minipro_standard/static/mine_bg@2x.png
minipro_standard/static/mine_ic_bangding@2x.png
minipro_standard/static/mine_ic_change@2x.png
minipro_standard/static/mine_ic_gerenxinxi@2x.png
minipro_standard/static/mine_ic_shoujihao@2x.png
minipro_standard/static/mine_ic_xitonggonggao@2x.png
minipro_standard/static/mine_ic_xiugaimima@2x.png
minipro_standard/static/mine_ic_youxianghao@2x.png
minipro_standard/static/nav_daiban@2x.png
minipro_standard/static/nav_daiban_sel@2x.png
minipro_standard/static/nav_gongzuotai@2x.png
minipro_standard/static/nav_gongzuotai_sel@2x.png
minipro_standard/static/nav_ic_back@2x.png
minipro_standard/static/nav_kanban@2x.png
minipro_standard/static/nav_kanban_sel@2x.png
minipro_standard/static/nav_saoma@2x.png
minipro_standard/static/nav_wode@2x.png
minipro_standard/static/nav_wode_sel@2x.png
minipro_standard/static/notfound.png
minipro_standard/static/password_ic_tip@2x.png
minipro_standard/static/work_ic_guanli@2x.png
minipro_standard/static/zhongjian_ic_delete.png
minipro_standard/store/index.js
@@ -1,5 +1,6 @@
import Vue from 'vue'
import Vuex from 'vuex'
import { pageCount } from '@/util/api/index.js'
Vue.use(Vuex) // vue的插件机制
@@ -20,6 +21,11 @@
        menuButtonWidth: menuButtonWidth || '0',
        statusbarHeight: statusbarHeight || '0',
        navHeight: navHeight || '0',
        // å¾…办数量
        upcomingNum: {
            d: 0,
            y: 0
        },
    },
    mutations: {
        setHeight(state, val) {
@@ -37,6 +43,10 @@
        SETUSERINFO(state, val) {
            state.userInfo = val
            uni.setStorageSync('userInfo', val);
        },
        SETNUM(state, val) {
            state.upcomingNum.d = val.d
            state.upcomingNum.y = val.y
        }
    },
    actions: {
@@ -56,6 +66,12 @@
                menuButtonWidth
            })
        },
        async getUpcomingNum() {
            let res = await pageCount({})
            if (res.code === 200) {
                content.commit('SETNUM', { d: res.data.startNum, y: res.data.endNum })
            }
        }
    }
})
minipro_standard/util/api/index.js
@@ -1,51 +1,18 @@
console.log('-----------');
const http = uni.$u.http
// ç™»å½•
export function coustomLogin(params) {
    return http.get('/wechat/ordinaryLogin', {params})
}
// å¾®ä¿¡æŽˆæƒ
export function wxEmpower(params) {
    return http.get('/wechat/wxEmpower', {params})
}
// åˆ†é¡µæŸ¥è¯¢é¡¹ç›®ä¿¡æ¯
export function projectPage(data) {
    return http.post('/wechat/project/page', data)
}
// æ ¹æ®é¡¹ç›®id分页查询企业报名数据
export function getPageByProjectId(data) {
    return http.post('/wechat/getPageByProjectId', data)
}
// æ ¹æ®ID查询报名详情
export function declaresDetail(id) {
    return http.get(`/wechat/declares/${id}`)
}
// æ ¹æ®ID查询报名详情
export function companyDetail(params) {
    return http.get(`/wechat/company/queryDetail`, { params })
}
// æ ¹æ®é¡¹ç›®id分页查询企业报名数据
export function serviceDetail(data) {
    return http.post('/wechat/declares/serviceDetail', data)
}
// æ ¹æ®ç»çº¬åº¦é€†è§£æžåœ°å€
export function getAddrByLatAndLng(params) {
    return http.get(`/wechat/getAddrByLatAndLng`, { params })
}
// æ ¹æ®ç”³æŠ¥ç¼–码查询最后一次核查或诊断数据
export function declareService({id, type}) {
    return http.post(`/wechat/declareService/${id}?type=${type}`)
}
// ä¸Šä¼ æ ¸æŸ¥èµ„æ–™-上传服务资料
export function uploadHCData(data) {
    return http.post(`/wechat/uploadHCData`, data)
// æŸ¥è¯¢ç»Ÿè®¡åˆ—表数量
export function pageCount(data) {
    return http.post('/ext/noticesExt/pageCount', data)
}
// é€€å‡ºç™»å½•
@@ -53,7 +20,3 @@
    return http.get(`/wechat/logout`)
}
// æ ¹æ®ç”³æŠ¥id查看申报进度
export function getDeclareHistoryList(data) {
    return http.post(`/wechat/getDeclareHistoryList`, data)
}
minipro_standard/util/request/requestInterceptors.js
@@ -6,6 +6,7 @@
    // console.log(vm)
    uni.$u.http.interceptors.request.use((config) => { // å¯ä½¿ç”¨async await åšå¼‚步操作
            // åˆå§‹åŒ–请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
            console.log('请求拦截');
            config.data = config.data || {}
            const token = vm.$store.state.token
            if (token) {
minipro_standard/util/request/responseInterceptors.js
@@ -2,7 +2,6 @@
 * å“åº”拦截
 * @param {Object} http 
 */
import { coustomLogin, wxEmpower } from '@/util/api/index'
module.exports = (vm) => {
    uni.$u.http.interceptors.response.use((response) => {
        /* å¯¹å“åº”成功做点什么 å¯ä½¿ç”¨async await åšå¼‚步操作*/
@@ -11,10 +10,11 @@
        const custom = response.config?.custom
        if (data.code !== 200) { // æœåŠ¡ç«¯è¿”å›žçš„çŠ¶æ€ç ä¸ç­‰äºŽ200,则reject()
            uni.$u.toast(data.message)
            if (data.code === 5112) {
            if (data.code === 401) {
                // console.log('未登录、登录失效');
                // æœªç™»å½•、登录失效
                uni.reLaunch({
                    url: '/pages/index/index'
                    url: '/pages/login/login'
                })
            }
            return Promise.reject(data)
web_standard/.env.development
@@ -14,12 +14,15 @@
VUE_APP_API_PREFIX = ''
# ç„¦æ¾
VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
# VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
# VUE_APP_BASE_URL = 'http://192.168.0.134:10021/'
# ä»»åº·æœ¬åœ°
VUE_APP_BASE_URL = 'http://192.168.0.15:10021/'
# æ±Ÿè
# VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
# æµ‹è¯•服务器
# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
web_standard/src/components/base/BaseTable.vue
@@ -262,7 +262,96 @@
      if (this.api == null) {
        throw new Error('The page is not initialized, you can use method \'this.config\' to initialize this page.')
      }
    },
    /**
 * æ•°å­—相加
 * @param {*} arg1
 * @param {*} arg2
 * @returns
 */
    accAdd(arg1, arg2) {
      return this.changeNum(arg1, arg2)
    },
    /**
     * æ•°å­—相减
     * @param {*} arg1
     * @param {*} arg2
     * @returns
     */
    accSub(arg1, arg2) {
      return this.changeNum(arg1, arg2, false)
    },
    /**
     * æ•°å­—相乘
     * @param {*} arg1
     * @param {*} arg2
     * @returns
     */
    accMul(arg1, arg2) {
      let m = 0;
      m = accAdd(m, getDecimalLength(arg1))
      m = accAdd(m, getDecimalLength(arg2))
      return getNum(arg1) * getNum(arg2) / Math.pow(10, m)
    },
    /**
     * æ•°å­—相除
     * @param {*} arg1
     * @param {*} arg2
     * @returns
     */
    accDiv(arg1, arg2) {
      let t1, t2;
      t1 = this.getDecimalLength(arg1)
      t2 = this.getDecimalLength(arg2)
      if (t1 - t2 > 0) {
        return (this.getNum(arg1) / this.getNum(arg2)) / Math.pow(10, t1 - t2)
      } else {
        return (this.getNum(arg1) / this.getNum(arg2)) * Math.pow(10, t2 - t1)
    }
    },
    changeNum(arg1 = '', arg2 = '', isAdd = true) {
      function changeInteger(arg, r, maxR) {
        if (r != maxR) {
          let addZero = ''
          for (let i = 0; i < maxR - r; i++) {
            addZero += '0'
          }
          arg = Number(arg.toString().replace('.', '') + addZero)
        } else {
          arg = this.getNum(arg)
        }
        return arg
      }
      let r1, r2, maxR, m;
      r1 = this.getDecimalLength(arg1)
      r2 = this.getDecimalLength(arg2)
      maxR = Math.max(r1, r2)
      arg1 = changeInteger(arg1, r1, maxR)
      arg2 = changeInteger(arg2, r2, maxR)
      m = Math.pow(10, maxR)
      if (isAdd) {
        return (arg1 + arg2) / m
      } else {
        return (arg1 - arg2) / m
      }
    },
    getDecimalLength(arg = '') {
      try {
        return arg.toString().split(".")[1].length
      } catch (e) {
        return 0
      }
    },
    getNum(arg = '') {
      return Number(arg.toString().replace(".", ""))
    }
  }
}
</script>
web_standard/src/components/business/OperaSalaryParamWindow.vue
@@ -196,7 +196,9 @@
          // if (!isEdit) {
          //   this.form.materialId = res[0]?res[0].materialId:''
          // }
          // this.selectMaterial(this.form.materialId)
          if (isEdit) {
            this.selectMaterial(this.form.materialId)
          }
        })
        .catch(err => {
          console.log(err)
web_standard/src/components/ext/OperaPlanStaock.vue
@@ -219,8 +219,8 @@
          layout="total, prev, pager, next, jumper"
          :total="pagination.total"
          @current-change="handlePageChange"
          background>
        </el-pagination>
          background
        ></el-pagination>
      </div>
    </SelectMaterail>
  </GlobalWindow>
web_standard/src/components/ext/OperaUserDeviceExtWindow.vue
@@ -18,7 +18,7 @@
        </el-select>
      </el-form-item>
      <el-form-item label="所属员工:" prop="userIds">
        <el-select v-model="form.userIds" multiple clearable filterable placeholder="请选择" @change="selectUser">
        <el-select v-model="form.userIds" reserve-keyword multiple clearable filterable placeholder="请选择" @change="selectUser">
          <el-option
            v-for="(item, index) in select()"
            :key="item.id"
web_standard/src/components/ext/OperaWInboundExtWindow.vue
@@ -126,8 +126,7 @@
    <SelectMaterail
      ref="selectMaterail"
      @selectData="selectData"
    >
    </SelectMaterail>
    ></SelectMaterail>
  </GlobalWindow>
</template>
web_standard/src/components/ext/OperaWOutboundExtWindow.vue
@@ -460,12 +460,26 @@
        },
        sorts: null
      }).then(res => {
        // console.log('res', res)
        this.pagination.total = res.total
        this.pagination.pageSize = res.capacity
        this.pagination.pageIndex = res.page
        this.tempMaterials = res.records
        this.isSelectMaterial = true
        // console.log('getTempMaterails', this.selectedAllMaterails)
        if (this.selectedAllMaterails[this.pagination.pageIndex]) {
          // debugger
          for (const item of this.selectedAllMaterails[this.pagination.pageIndex]) {
            this.$nextTick(() => {
              this.tempMaterials.forEach(tempItem => {
                if (tempItem.id === item.id) {
                  console.log(tempItem.mmodelUnionName);
                  this.$refs.materials.toggleRowSelection(tempItem, true)
                }
              })
            })
          }
        }
      }).catch(err => {
        this.$tip.error(err)
      })
@@ -475,8 +489,9 @@
      this.getTempMaterails()
    },
    handleSelectionChange (selectedRows) {
      // console.log(selectedRows)
      console.log(selectedRows)
      this.selectedAllMaterails[this.pagination.pageIndex] = selectedRows
      console.log(this.selectedAllMaterails);
    },
    selectData () {
      // console.log(this.selectedAllMaterails)
web_standard/src/components/ext/OperaWrollOutStore.vue
@@ -581,6 +581,18 @@
        this.pagination.pageIndex = res.page
        this.tempMaterials = res.records
        this.isSelectMaterial = true
        if (this.selectedAllMaterails[this.pagination.pageIndex]) {
          for (const item of this.selectedAllMaterails[this.pagination.pageIndex]) {
            this.$nextTick(() => {
              this.tempMaterials.forEach(tempItem => {
                if (tempItem.id === item.id) {
                  console.log(tempItem.mmodelUnionName);
                  this.$refs.materials.toggleRowSelection(tempItem, true)
                }
              })
            })
          }
        }
      }).catch(err => {
        this.$tip.error(err)
      })
@@ -592,6 +604,7 @@
    handleSelectionChange (selectedRows) {
      // console.log(selectedRows)
      this.selectedAllMaterails[this.pagination.pageIndex] = selectedRows
      console.log(this.selectedMaterails);
    },
    selectData () {
      console.log(this.selectedAllMaterails)
web_standard/src/components/ext/OrderDistrubution.vue
@@ -38,6 +38,7 @@
        <el-select 
          v-model="form.proUserList" 
          :disabled="!form.proGroupId" 
          reserve-keyword
          multiple 
          clearable
          filterable
web_standard/src/views/business/salaryParam.vue
@@ -62,7 +62,11 @@
        <el-table-column prop="materialName" label="物料名称" min-width="140px"></el-table-column>
        <el-table-column prop="materialCode" label="物料编码" min-width="100px"></el-table-column>
        <el-table-column prop="procedureName" label="工序名称" min-width="100px"></el-table-column>
        <el-table-column prop="salary" label="工资单价(元)" min-width="100px"></el-table-column>
        <el-table-column prop="salary" label="工资单价(元)" min-width="100px">
          <!-- <template slot-scope="{row}">
            {{ accDiv(row.salary, 100) }}
          </template> -->
        </el-table-column>
        <el-table-column prop="num" label="标准产出" min-width="100px">
          <template slot-scope="{row}">
            {{ (row.num == 0 || !row.num) ? '-' : row.num }}
web_standard/src/views/ext/plansExt.vue
@@ -3,8 +3,8 @@
  <keep-alive><TableLayout v-permissions="['ext:plansext:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form slot="search-form" ref="searchForm" :model="searchForm" label-suffix=":" label-width="110px" inline>
      <el-form-item label="搜索信息" prop="mixParam">
        <el-input v-model="searchForm.mixParam" placeholder="请输入物料名称/编码/工序名称" @keypress.enter.native="search"></el-input>
      <el-form-item label="物料信息" prop="mixParam">
        <el-input v-model="searchForm.mixParam" placeholder="请输入物料名称/编码" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="成品计划" prop="workPlanCode">
        <el-input v-model="searchForm.workPlanCode" placeholder="请输入成品计划编码" @keypress.enter.native="search"></el-input>
@@ -71,19 +71,19 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar">
        <!-- <li v-permissions="['ext:plansext:importExcel']">
        <li v-permissions="['ext:plansext:distribute']"><el-button type="primary" @click="plansDistribute">批量分配</el-button></li>
        <li v-permissions="['ext:plansext:importExcel']">
          <ImportButton
            text="导入"
            template-name="plans_import_template.xlsx"
            template-path="template/plans_import_template.xlsx"
            template-path="/template/plans_import_template.xlsx"
            action="/ext/plansExt/importBatch"
            @success="search"
          />
        </li> -->
        </li>
        <!-- <li v-permissions="['ext:plansext:create']"><el-button type="primary" @click="$refs.operaPlansExtWindow.open('新建生产计划')" >新建</el-button></li> -->
        <!-- <li v-permissions="['ext:plansext:publish']"><el-button type="primary" @click="planRelease" >发布</el-button></li> -->
        <li v-permissions="['ext:plansext:distribute']"><el-button type="primary" @click="plansDistribute">批量分配</el-button></li>
        <li v-permissions="['ext:plansext:exportExcel']"><el-button type="primary" :loading="isWorking.export" @click="exportExcel">导出</el-button></li>
        <!-- <li v-permissions="['ext:plansext:exportExcel']"><el-button type="primary" :loading="isWorking.export" @click="exportExcel">导出</el-button></li> -->
        <!-- <li v-permissions="['ext:plansext:planpink']"><el-button type="primary" @click="$refs.operaWTransferExtWindow.open('计划领料')">计划领料</el-button></li> -->
        <!-- <li v-permissions="['ext:plansext:stockpink']"><el-button type="primary" @click="$refs.operaPlanStaock.open('库存领料')">库存领料</el-button></li> -->
        <!-- <li v-permissions="['ext:plansext:delete']"><el-button type="danger" plain @click="deleteByIdInBatch">批量删除</el-button></li> -->
web_standard/src/views/ext/salaryStatistic.vue
@@ -60,18 +60,18 @@
        <el-table-column prop="userInfo.departName" label="部门" min-width="100px"> </el-table-column>
        <el-table-column prop="jijianSalary" label="计件工资" min-width="100px">
          <template slot-scope="{row}">
            {{ row.jijianSalary / 100 }}
            {{ accDiv(Math.round(row.jijianSalary), 100) }}
          </template>
        </el-table-column>
        <el-table-column prop="jishiSalary" label="计时工资" min-width="100px">
          <template slot-scope="{row}">
            {{ row.jishiSalary / 100 }}
            {{ accDiv(Math.round(row.jishiSalary), 100) }}
          </template>
        </el-table-column>
        <el-table-column prop="num" label="报工单总数" min-width="100px"></el-table-column>
        <el-table-column prop="totalSalary" label="小计工资(元)" min-width="100px">
          <template slot-scope="{row}">
            {{ row.totalSalary / 100 }}
            {{ accDiv(Math.round(row.totalSalary), 100) }}
          </template>
        </el-table-column>
       
web_standard/src/views/ext/workorderPutRecordExt.vue
@@ -120,19 +120,33 @@
            <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="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.num + row.umodel.name}}</span>
            <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
            <span class="unvalid-style">{{ row.unqualifiedNum + row.umodel.name}}</span>
          </template>
        </el-table-column> -->
        <el-table-column prop="doneType" 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>-</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="num" label="数量" min-width="100px">
           <template slot-scope="{row}">
            <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">
          <template slot-scope="{row}">
            {{ row.num + row.umodel.name }}
          </template>
        </el-table-column> -->
        <el-table-column prop="deviceCode" label="设备" show-overflow-tooltip min-width="100px">
          <template slot-scope="{row}">
            <span class="long-title-style" :title="row.deviceCode + ' | ' + row.deviceName">{{ row.deviceCode + ' | ' + row.deviceName}}</span>
@@ -264,7 +278,7 @@
        if (index === 0) {
          sums[index] = '合计';
          return;
        } else if (index === 4 || index === 6 || index === 8 || index === 10) {
        } else if (index === 4 || index === 8 || index === 10) {
          // || index === 8 || index === 9 || index === 16 || index === 17
          sums[index] = '-';
          return;