| | |
| | | .ap { position: absolute; }
|
| | |
|
| | | .orange{ color: #EA531B !important;}
|
| | | .green{ color: #65C35D !important;}
|
| | | .yellow{ color: #F5A400 !important;}.bg_yellow{background-color: #F5A400}
|
| | | .green{ color: #00BF97 !important;}.bg_green{background-color: #00BF97}
|
| | | .blue{ color: #3C77DA !important;}
|
| | | .red{ color: #f00 !important;} |
| | | .white{ color: #fff !important;} |
| | |
| | | .wc{color:#F98107 !important;} |
| | | |
| | | .cm {color: #305ED5} |
| | | .c1{color: #111}.c2{color: #222}.c3{ color: #333;}.c6{ color: #666;}.cc{ color: #ccc;}.cf{ color: #fff;}
|
| | | .c1{color: #111!important;}.c2{color: #222!important;}.c3{ color: #333!important;}.c6{ color: #666!important;}.cc{ color: #ccc!important;}.cf{ color: #fff!important;}
|
| | | /* /deep/ .uicon-close .u-icon--right{ position: absolute; right: 30rpx; top: 30rpx; z-index: 999;} */ |
| | | .popCloseBtn{ position: absolute; width:50rpx; height:50rpx; right: 20rpx; top: 20rpx;}
|
| | | .fixedTL{ position: absolute; left: 0; top: 0;}
|
| | |
| | | <template> |
| | | <view class="p30 bg_w f26 info-style"> |
| | | <view v-if="isOut" class="cm b f32">计划出库日期:{{ info.outPlandate }}</view> |
| | | <view v-else class="cm b f32">计划入库日期:{{ info.inPlandate || info.planDate }}</view> |
| | | <view v-if="isOut" class="cm b f32">计划出库日期:{{ info.outPlandate||'' }}</view> |
| | | <view v-else class="cm b f32">计划入库日期:{{ info.inPlandate || info.planDate || '' }}</view> |
| | | <view class="c2 mt25"> |
| | | <text class="c6">来源类型:</text> |
| | | {{ typeTstr(info.originType) }} |
| | |
| | | <template> |
| | | |
| | | <view class="search"> |
| | | <view class="search_box"> |
| | | <view class="search_input"> |
| | |
| | | <image @click="openCate()" src="@/static/filter@2x.png" mode="widthFix"> |
| | | </view> |
| | | </view> |
| | | <u-popup closeOnClickOverlay :show="open" @close="open=false" :round="10" mode="bottom"> |
| | | <u-popup closeOnClickOverlay :show="open" @close="close" :round="10" mode="bottom"> |
| | | <scroll-view scroll-y class="content"> |
| | | <slot name="content"></slot> |
| | | </scroll-view> |
| | |
| | | }, |
| | | // 打开弹窗 |
| | | openCate() { |
| | | this.$emit('scrollerBan', true) |
| | | this.open = true |
| | | }, |
| | | close() { |
| | | this.open = false |
| | | this.$emit('scrollerBan', false) |
| | | }, |
| | | // 重置 |
| | | closes() { |
| | |
| | | justify-content: space-between; |
| | | padding-left: 40rpx; |
| | | padding-right: 40rpx; |
| | | padding-bottom: env(safe-area-inset-bottom); |
| | | padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); |
| | | box-sizing: border-box; |
| | | position: fixed; |
| | | bottom: 0; |
| | |
| | | <view> |
| | | <u-tabbar |
| | | :value="index" |
| | | :customStyle="{paddingTop: '5px',paddingBottom: '5px',}" |
| | | @change="change" |
| | | fixed |
| | | activeColor="#222" |
| | |
| | | <image src="@/static/nav_wode@2x.png" class="icon-style" mode=""></image> |
| | | </view> |
| | | </u-tabbar-item> |
| | | |
| | | </u-tabbar> |
| | | </view> |
| | | </template> |
| | |
| | | <view class="p30 bg_w order-info">
|
| | | <view class="bX">
|
| | | <view class="cY">
|
| | | <view class="mr10 b">{{ `${orederMessage.mmodel.name} |${orederMessage.procedureName}`}}</view>
|
| | | <u-tag size="mini" bgColor="#03AF76" text="正常"></u-tag>
|
| | | <view class="mr10 b">{{ `${orederMessage.mmodel.name || ''} | ${orederMessage.procedureName || ''}`}}
|
| | | </view>
|
| | | <view class="status" :class="orederMessage.status==0?'wc':orederMessage.status==1?'green':orederMessage.status==3?'blue':orederMessage.status==7?'green':'c6'">{{ stausToStr(orederMessage.status) }}</view>
|
| | | <!-- <u-tag size="mini" bgColor="#03AF76" text="正常"></u-tag> -->
|
| | | <div class="type bg_green" v-if="orederMessage.type === 0">正常</div>
|
| | | <div class="type bg_yellow" v-if="orederMessage.type === 2">返工返修</div>
|
| | | </view>
|
| | | <view class="status"
|
| | | :class="orederMessage.status==0?'wc':orederMessage.status==1?'green':orederMessage.status==3?'blue':orederMessage.status==7?'green':'c6'">
|
| | | {{ stausToStr(orederMessage.status) }}</view>
|
| | | </view> |
| | | <view class="f24 c6 mt20">工单编号:{{ orederMessage.code || '-' }}</view> |
| | | <view class="f24 mt20 bg_f7 ptb20 plr30 n"> |
| | |
| | | },
|
| | | data() {
|
| | | return {
|
| | | status: [ |
| | | { status: 0, label: '已创建' }, |
| | | { status: 1, label: '已备料' }, |
| | | { status: 2, label: '已完工检' }, |
| | | { status: 3, label: '已检验' }, |
| | | { status: 4, label: '已报工' }, |
| | | { status: 5, label: '已入库' }, |
| | | { status: 6, label: '已取消' }, |
| | | { status: 7, label: '进行中' } |
| | | status: [{
|
| | | status: 0,
|
| | | label: '已创建'
|
| | | },
|
| | | {
|
| | | status: 1,
|
| | | label: '已备料'
|
| | | },
|
| | | {
|
| | | status: 2,
|
| | | label: '已完工检'
|
| | | },
|
| | | {
|
| | | status: 3,
|
| | | label: '已检验'
|
| | | },
|
| | | {
|
| | | status: 4,
|
| | | label: '已报工'
|
| | | },
|
| | | {
|
| | | status: 5,
|
| | | label: '已入库'
|
| | | },
|
| | | {
|
| | | status: 6,
|
| | | label: '已取消'
|
| | | },
|
| | | {
|
| | | status: 7,
|
| | | label: '生产中'
|
| | | }
|
| | | ]
|
| | | };
|
| | | }, |
| | |
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss">
|
| | | <style lang="scss" scoped>
|
| | | .status { |
| | | height: 26rpx; |
| | | font-size: 26rpx; |
| | |
| | | color: #666666; |
| | | line-height: 26rpx; |
| | | } |
| | |
|
| | | .type {
|
| | | padding: 0 8rpx;
|
| | | color: white;
|
| | | margin-left: 10rpx; |
| | | height: 38rpx; |
| | | line-height: 38rpx; |
| | | font-size: 22rpx; |
| | | border: 8rpx;
|
| | | }
|
| | |
|
| | | // .order-info { |
| | | // border-bottom: 20rpx #f7f7f7 solid; |
| | | // }
|
| | |
| | | <button class="fp_footer_submit" @click="submit">确认</button> |
| | | </view> |
| | | <!-- 选择日期 --> |
| | | <u-calendar :show="timeShow" @close="timeShow = false" @confirm="timeConfirm"></u-calendar> |
| | | <!-- <u-calendar :show="timeShow" @close="timeShow = false" @confirm="timeConfirm"></u-calendar> --> |
| | | <l-calendar :lunar="false" v-model="timeShow" @change="timeConfirm" :isRange="true" activeBgColor="#305ED5" |
| | | rangeColor="#305ED5" rangeBgColor="rgba(48, 80, 213, 0.1)"></l-calendar> |
| | | <!-- 选择设备 --> |
| | | <u-picker :show="show1" :columns="equipment" @confirm="confirm" @cancel="show1 = false" keyName="text"></u-picker> |
| | | </view> |
| | |
| | | this.form.equipmentId = val.value[0].id |
| | | this.form.equipmentName = val.value[0].text |
| | | this.personnelData = [] |
| | | getFindAll({ |
| | | deviceId: this.form.equipmentId |
| | | }).then(res => { |
| | | if (res.code === 200 && res.data && res.data.length !== 0) { |
| | | this.form.personnelId = [] |
| | | let arr = [] |
| | | res.data.forEach((item) => { |
| | | arr.push({ text: item.dmodel.name + '-' + item.umodel.name, id: item.userId }) |
| | | }) |
| | | this.personnelData = arr |
| | | } |
| | | this.show1 = false |
| | | }) |
| | | this.getUser() |
| | | }, |
| | | timeConfirm(val) { |
| | | this.form.startTime = val[0] |
| | | // this.form.startTime = val[0] |
| | | this.listData.startDate = val.startDate |
| | | this.listData.endDate = val.endDate |
| | | this.timeShow = false |
| | | }, |
| | | // 提交分配 |
| | |
| | | res.data.forEach((element) => { |
| | | arr.push({ text: element.code + '-' + element.name, id: element.id, checked: false }) |
| | | }) |
| | | this.form.equipmentId = arr[0].id |
| | | this.form.equipmentName = arr[0].text |
| | | this.getUser() |
| | | this.equipment.push(arr) |
| | | } |
| | | }) |
| | | }, |
| | | getUser() { |
| | | getFindAll({ |
| | | deviceId: this.form.equipmentId |
| | | }).then(res => { |
| | | if (res.code === 200 && res.data && res.data.length !== 0) { |
| | | this.form.personnelId = [] |
| | | let arr = [] |
| | | res.data.forEach((item) => { |
| | | arr.push({ text: item.dmodel.name + '-' + item.umodel.name, id: item.userId }) |
| | | }) |
| | | this.personnelData = arr |
| | | } |
| | | this.show1 = false |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | <template>
|
| | | <page-meta :page-style="ban ?'overflow: hidden;': ''"/>
|
| | | <view class="index">
|
| | | <!-- :class="ban?'scroll-ban': ''" --> |
| | | <!-- <view class="mask" @tap="tapMask" @touchmove="moveHandle"></view> -->
|
| | | <!-- <web-view v-if="show" @onPostMessage="onMessage" :src="'https://dmtest.ahapp.net/doumeeplant_h5/#/appletLogin?code=' + code"></web-view> -->
|
| | | <!-- {{$store.state.statusbarHeight}} -->
|
| | |
|
| | |
| | | 待办</view>
|
| | | <div class="content_search"> |
| | | <v-Search @searchInput="searchInput" @submit="confirm" @reset="resetType" :isShow="true" |
| | | placeholder="搜索关键字"> |
| | | placeholder="搜索关键字" @scrollerBan="$event => ban=$event"> |
| | | <template v-slot:content> |
| | | <view class="rp contanir"> |
| | | <view class="c2 b">类型</view> |
| | |
| | | </view>
|
| | | </scroll-view>
|
| | | <view v-else class="tc c6">暂无数据...</view>
|
| | | <u-popup :show="show" @close="close" :round="8" zIndex="20000">
|
| | | <!-- <u-popup :show="show" @close="close" :round="8" zIndex="20000">
|
| | | <view class="rp p40 contanir">
|
| | | <view class="c2 b">类型</view>
|
| | | <view class="content">
|
| | |
| | | <view class="fx1 ptb20 sbtn_gray c9" @click="resetType">重置</view>
|
| | | <view class="fx1 ml20 ptb20 sbtn_green" @click="confirm">确定</view>
|
| | | </view>
|
| | | </view>
|
| | | </view> -->
|
| | | </u-popup>
|
| | | <myTabbar :index="0" />
|
| | | </view>
|
| | |
| | | },
|
| | | data() {
|
| | | return { |
| | | ban: false, |
| | | height: '', |
| | | top: '',
|
| | | code: '',
|
| | |
| | | .in(this) |
| | | .select('.content_search') |
| | | .boundingClientRect((rect) => { |
| | | that.height = `calc(100vh - ${rect.height + 80}px)` |
| | | that.height = `calc(100vh - ${rect.height + 150}px)` |
| | | that.top = `${rect.height}px` |
| | | }) |
| | | .exec() |
| | |
| | | .then(res => { |
| | | this.tagList[0].num = res.data.startNum |
| | | this.tagList[1].num = res.data.endNum |
| | | this.$store.commit('SETNUM', {
|
| | | d: res.data.startNum,
|
| | | y: res.data.endNum
|
| | | }) |
| | | }) |
| | | .catch(err => {}) |
| | | },
|
| | |
| | | resetType() {
|
| | | this.type = ''
|
| | | this.searchForm.type = ''
|
| | | this.ban =false
|
| | | this.confirm() |
| | |
|
| | | },
|
| | | confirm() {
|
| | | this.searchForm.type = this.type
|
| | | this.show = false |
| | | this.ban =false |
| | | this.search()
|
| | | }, |
| | | search() { |
| | |
| | | .content_search_x { |
| | | height: 24rpx; |
| | | }
|
| | | .mask { |
| | | z-index: 8000; |
| | | position: fixed; |
| | | left: 0; |
| | | top: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | height: 100vh; |
| | | background-color: rgba(0, 0, 0, 0.5); |
| | | }
|
| | | </style> |
| | |
| | | </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> |
| | | <input placeholder="企业代码" border="none" v-model="form.companyId"/> |
| | | <!-- <input placeholder="企业代码" border="none" v-model="form.companyId"/> --> |
| | | <u--input placeholder="企业代码" border="none" v-model="form.companyId"></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> |
| | |
| | | <span v-if="item.status === 4">已报工</span>
|
| | | <span v-if="item.status === 5">已入库</span>
|
| | | <span v-if="item.status === 6">已取消</span>
|
| | | <span v-if="item.status === 7">生产中</span>
|
| | | </div>
|
| | | </div>
|
| | | <span>工单编码: {{item.code}}</span>
|
| | | <span class="f24">工单编码: {{item.code}}</span>
|
| | | <div class="content_list_item_content">
|
| | | <div class="content_list_item_content_item">
|
| | | <div class="content_list_item_content_item_label">物料编码:</div>
|
| | |
| | | width: 80%;
|
| | |
|
| | | span {
|
| | | font-size: 32rpx;
|
| | | font-size: 24rpx;
|
| | | font-weight: 500;
|
| | | color: #333333;
|
| | | overflow: hidden;
|
| | |
| | | <template>
|
| | | <view>
|
| | | <view class="content">
|
| | | <workOrderInfo :orederMessage="info" />
|
| | | <div class="bg_list">
|
| | | <view class="bg_cate"> |
| | | <view @click="clickIten(index)" :class="typeView == index ? 'bg_cate_item active' : 'bg_cate_item'" |
| | | v-for="(item, index) in cate" :key="index">{{ item.name }}</view> |
| | | </view>
|
| | | <div v-if="typeView==0" class="bg_list">
|
| | | <div class="bg_list_item">
|
| | | <div class="bg_list_item_top">
|
| | | <div class="bg_list_item_top_left">
|
| | |
| | | </div>
|
| | |
|
| | | <template v-if="feedingData && feedingData.length > 0">
|
| | | <view class="plr30">
|
| | | <view>
|
| | | <view v-for="(item, index) in feedingData" :key="index">
|
| | | <div class="bg_list_item_h">
|
| | | <div v-for="(item, index) in feedingData" :key="index" class="bg_list_item_h">
|
| | | <div class="bg_list_item_num">
|
| | | <div class="bg_list_item_num_item">
|
| | | <div class="bg_list_item_num_item_wl">
|
| | |
| | | <div class="bg_list_item_num_item_sr">
|
| | | <view class="cY">
|
| | | <view class="mr10">{{ item.num }}</view> |
| | | <span v-if="info.umodel">{{ info.umodel.name }}</span>
|
| | | <span>{{ item.unitName }}</span>
|
| | | </view>
|
| | |
|
| | | </div>
|
| | |
| | | </div>
|
| | | </div>
|
| | | <div class="bg_list_item_h">
|
| | | <div class="bg_list_item_num">
|
| | | <div class="bg_list_item_num plr30">
|
| | | <div class="bg_list_item_num_item">
|
| | | <span>良品数{{ info.umodel ? `(${info.umodel.name})` : '' }}</span>
|
| | | <div class="bg_list_item_num_item_sr">
|
| | |
| | | </div>
|
| | | </div>
|
| | | <div class="bg_list_item_h">
|
| | | <div class="bg_list_item_num">
|
| | | <div class="bg_list_item_num plr30">
|
| | | <div class="bg_list_item_num_item">
|
| | | <span>不良数{{ info.umodel ? `(${info.umodel.name})` : '' }}</span>
|
| | | <div class="bg_list_item_num_item_sr">
|
| | |
| | | <div class="bg_list_item_top"> |
| | | <div class="bg_list_item_top_left"> |
| | | <div class="bg_list_item_top_left_x bg_m"></div> |
| | | <span>生产点检</span> |
| | | </div> |
| | | </div> |
| | | <template v-if="djData && djData.length > 0"> |
| | | <div class="details_dj"> |
| | | |
| | | <div class="details_dj_list"> |
| | | <scroll-view scroll-y="true" refresher-enabled="true" @scrolltolower="getLists"> |
| | | <view v-for="(item, index) in djData" :key="index"> |
| | | <div class="details_dj_list_item"> |
| | | <span>{{ item.attrName }}:{{ item.val }}</span> |
| | | <span>{{ item.userName }} {{ item.createTime }}</span> |
| | | </div> |
| | | </view> |
| | | </scroll-view> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="kong"> |
| | | <span>暂无数据</span> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | <div class="bg_list_item"> |
| | | <div class="bg_list_item_top"> |
| | | <div class="bg_list_item_top_left"> |
| | | <div class="bg_list_item_top_left_x bg_m"></div> |
| | | <span>工资绩效</span> |
| | | </div> |
| | | </div> |
| | | <div class="bg_list_item_h"> |
| | | <div class="bg_list_item_num"> |
| | | <div class="bg_list_item_h mb40 "> |
| | | <div class="bg_list_item_num plr30" style="display: block;"> |
| | | <div class="bX ptb15"> |
| | | <div class="f30 c2">预计工资</div> |
| | | <div class="f28" style="color:#4275FC">{{ (performance.salary / 10 / 10).toFixed(2) }}元</div> |
| | | </div> |
| | | <div class="f24 c6"> |
| | | {{ performance.salaryType == 0 ? '计件' : '计时' }} | |
| | | {{ (performance.salaryPrice / 10 / 10).toFixed(2) }}元/{{ performance.salaryType == |
| | | 0 ? '件' : '时' }} | |
| | | {{ complianceRate }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <div class="bg_list_item_num"> |
| | | <div class="bg_list_item_num_item"> |
| | | <span>计件方式</span> |
| | | <div class="bg_list_item_num_item_list"> |
| | | {{ performance.salaryType == 0 ? '计件' : '计时' }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="bg_list_item_num"> |
| | | </div> --> |
| | | <!-- <div class="bg_list_item_num"> |
| | | <div class="bg_list_item_num_item"> |
| | | <span>工资单价</span> |
| | | <div class="bg_list_item_num_item_sr"> |
| | |
| | | </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">{{ (performance.salary / 10 / 10).toFixed(2) }}元</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="bg_list_item_num"> |
| | | <div class="bg_list_item_num_item"> |
| | | <span>达标率</span> |
| | |
| | | <span class="color1">{{ complianceRate }}%</span> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | </div>
|
| | | <div v-else class="bg_list"> |
| | | <!-- <div class="bg_list_item"> |
| | | <div class="bg_list_item_top"> |
| | | <div class="bg_list_item_top_left"> |
| | | <div class="bg_list_item_top_left_x bg_m"></div> |
| | | <span>生产点检</span> |
| | | </div> |
| | | </div> --> |
| | | <template v-if="djData && djData.length > 0"> |
| | | <div class="details_dj"> |
| | | <div class="details_dj_list"> |
| | | <view v-for="(item, index) in djData" :key="index"> |
| | | <div class="details_dj_list_item"> |
| | | <span>{{ item.attrName }}:{{ item.val }}</span> |
| | | <span>{{ item.userName }} {{ item.createTime }}</span> |
| | | </div> |
| | | </view> |
| | | <!-- <scroll-view scroll-y="true" refresher-enabled="true" @scrolltolower="getLists"> |
| | | |
| | | </scroll-view> --> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="kong"> |
| | | <span>暂无数据</span> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </div>
|
| | |
|
| | |
| | | },
|
| | | data() {
|
| | | return {
|
| | | cate: [{ |
| | | name: '生产' |
| | | }, |
| | | { |
| | | name: '点检' |
| | | } |
| | | ],
|
| | | workorderId: '',
|
| | | form: {
|
| | | time: '',
|
| | |
| | | complianceRate() {
|
| | | if (!this.performance) return 0; |
| | | if (!this.performance.duration) return 0; |
| | | if (!this.performance.salaryNum || this.performance.salaryTimes) return 0 |
| | |
|
| | | if (!this.performance.qualifiedNum && !this.performance.unqualifiedNum) return 0;
|
| | | if (this.performance.salaryUnqualified == 1) { // 是否计入不良品
|
| | | let a = ((Number(this.performance.qualifiedNum) + Number(this.performance.unqualifiedNum)) / (this.performance
|
| | | .duration / 3600)).toFixed(2)
|
| | | let b = (this.performance.salaryNum / (this.performance.salaryTimes / 3600)).toFixed(2)
|
| | | debugger
|
| | | return ((Number(a) / Number(b)) * 100).toFixed(2)
|
| | | // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / )
|
| | | // return total * infoBox.value.salary;
|
| | |
| | | let a = (this.performance.qualifiedNum / (this.performance.duration / 3600)).toFixed(2)
|
| | | // let b = (this.arrType[this.form.index].num / (this.arrType[this.form.index].times / 3600)).toFixed(2) |
| | | let b = (this.performance.salaryNum / (this.performance.salaryTimes / 3600)).toFixed(2)
|
| | | debugger
|
| | | return ((Number(a) / Number(b)) * 100).toFixed(2)
|
| | | }
|
| | | }
|
| | |
| | | getWorkorderRecordListStandard({
|
| | | workorderId: this.workorderId
|
| | | }).then(res => { |
| | | console.log(res.data[0]); |
| | | debugger
|
| | | // console.log(res.data[0]); |
| | | if (res.data.length > 0) { |
| | | this.produceFrom.qualified = res.data[0].qualifiedNum |
| | | this.produceFrom.undesirable = res.data[0].unqualifiedNum |
| | |
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | .content { |
| | | height: 100vh; |
| | | background-color: #f7f7f7; |
| | | }
|
| | | .bg_cate {
|
| | | width: 100%;
|
| | | height: 88rpx;
|
| | | background: #FFFFFF;
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
|
| | | border-top: 20rpx solid #f7f7f7;
|
| | | .active {
|
| | | box-sizing: border-box;
|
| | | color: #305ED5 !important;
|
| | |
| | | // margin-bottom: 40rpx;
|
| | | // border-bottom: 40rpx #f7f7f7 solid;
|
| | |
|
| | | .kong {
|
| | | text-align: center;
|
| | | padding: 30rpx 0;
|
| | | background: #ffffff;
|
| | | font-size: 25rpx;
|
| | |
|
| | | span {
|
| | | color: #474747;
|
| | | }
|
| | | }
|
| | |
|
| | | .bg_list_item_top {
|
| | | display: flex;
|
| | |
| | |
|
| | | .bg_list_item_h {
|
| | | width: 100%;
|
| | | padding: 0 30rpx;
|
| | | box-sizing: border-box;
|
| | | background: white;
|
| | |
|
| | | border-bottom: 1rpx solid #E5E5E5; |
| | | padding: 15rpx 0; |
| | | &:last-child { |
| | | border: none !important; |
| | | }
|
| | | .bg_list_item_num {
|
| | | width: 100%;
|
| | | min-height: 98rpx;
|
| | | background: white;
|
| | | box-sizing: border-box;
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | border-bottom: 1rpx solid #E5E5E5;
|
| | |
|
| | | &:last-child {
|
| | | border: none !important;
|
| | | }
|
| | |
|
| | | .kong {
|
| | | text-align: center;
|
| | | font-size: 25rpx;
|
| | |
| | | display: flex;
|
| | | align-items: center;
|
| | | // height: 118rpx;
|
| | | padding: 15rpx 0;
|
| | | // padding: 15rpx 0;
|
| | | box-sizing: border-box;
|
| | | justify-content: space-between;
|
| | | border-bottom: 1rpx solid #E5E5E5;
|
| | | // border-bottom: 3rpx solid #111;
|
| | |
|
| | | &:last-child {
|
| | | border: none;
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | .kong { |
| | | text-align: center; |
| | | padding: 30rpx 0; |
| | | // background: #ffffff; |
| | | font-size: 25rpx; |
| | | |
| | | span { |
| | | color: #474747; |
| | | } |
| | | }
|
| | | </style> |
| | |
| | | })
|
| | | },
|
| | | changeNumber(num, index, unitAttribute) {
|
| | | |
| | | if (unitAttribute === 0 && num !== '') {
|
| | | if (!positiveInteger.test(num)) {
|
| | | uni.$u.toast({
|
| | | message: '只能输入正整数'
|
| | | })
|
| | | uni.$u.toast('只能输入正整数')
|
| | | this.materialList[index].num = ''
|
| | | }
|
| | | } else if (unitAttribute === 1 && num !== '') {
|
| | | if (!number.test(num)) {
|
| | | uni.$u.toast({
|
| | | message: '只能输入正整数或小数(最多四位)'
|
| | | })
|
| | | uni.$u.toast('只能输入正整数或小数(最多四位)')
|
| | | this.materialList[index].num = ''
|
| | | }
|
| | | }
|
| | | if (num <= 0) {
|
| | | uni.$u.toast({
|
| | | message: '投料数量不能小于等于0'
|
| | | })
|
| | | uni.$u.toast('投料数量不能小于等于0')
|
| | | this.materialList[index].num = ''
|
| | | }
|
| | | },
|
| | |
| | | <image class="shanchu" src="@/static/chuku_ic_delete@2x.png" mode="widthFix" @click="dele(i)"></image> |
| | | <text>{{item.materialName}}|{{item.materialCode}}</text> |
| | | <text> |
| | | <text class="green" v-if="item.qualityType === '0'">合格 |</text> |
| | | <text class="yellow" v-if="item.qualityType === '1'">不良 |</text> |
| | | <text class="red" v-if="item.qualityType === '2'">报废 |</text> |
| | | <text>{{item.procedureName ? item.procedureName : '-'}} | </text> |
| | | <text class="green" v-if="item.qualityType === '0'" decode>合格<text class="c6" decode>{{ division }}</text></text> |
| | | <text class="yellow" v-if="item.qualityType === '1'" decode>不良<text class="c6" decode>{{ division }}</text></text> |
| | | <text class="red" v-if="item.qualityType === '2'" decode>报废<text class="c6" decode>{{ division }}</text></text> |
| | | <text decode>{{item.procedureName ? item.procedureName : '-'}}{{division}}</text> |
| | | <text>{{item.batch ? item.batch : '-'}}</text> |
| | | </text> |
| | | <view class="zk_wl_item_num"> |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | division: ' / ', |
| | | data: { |
| | | type: '', |
| | | outUserId: '', |
| | |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | uni.showToast({ title: '创建成功!', icon: 'success', duration: 2000 }); |
| | | this.$store.dispatch('getUpcomingNum') |
| | | setTimeout(() => { |
| | | uni.navigateBack({ delta: 1 }); |
| | | }, 2000) |
| | |
| | | } |
| | | |
| | | text { |
| | | font-size: 30rpx; |
| | | font-size: 24rpx; |
| | | font-weight: 400; |
| | | color: #222222; |
| | | } |
| | |
| | | |
| | | text { |
| | | &:nth-child(1) { |
| | | font-size: 30rpx; |
| | | font-size: 24rpx; |
| | | font-weight: 500; |
| | | color: #222222; |
| | | margin-bottom: 24rpx; |
| | |
| | | <image src="@/static/ic_ar@2x.png" alt="" /> |
| | | </view> |
| | | </view> |
| | | <template v-if="plansId"> |
| | | <view class="bg_list"> |
| | | <view class="bg_list_item"> |
| | | <view class="bg_list_item_top"> |
| | |
| | | <view class="bg_footer_submit1" @click="continueSubmit">继续报工</view> |
| | | <view class="bg_footer_submit" @click="submit">提交</view> |
| | | </view> |
| | | </template> |
| | | |
| | | <!-- 生产人员 --> |
| | | <user :show="userShow" @close="userShow = false" @value="onConfirm1" /> |
| | | <!-- 生产设备 --> |
| | |
| | | ...mapState(['userInfo']), |
| | | // 预计工资 |
| | | expectedSalary() { |
| | | |
| | | if (this.arrType.length === 0) return 0; |
| | | if (this.arrType[this.from.index].type == 0) { |
| | | if (!this.from.qualified) return 0 |
| | | if (this.arrType[this.from.index].unqualified == 1) { // 是否计入不良品 |
| | | let total = Number(this.from.qualified) + Number(this.from.undesirable) |
| | | return (total * (this.arrType[from.index].salary / 10 / 10)).toFixed(2) |
| | | let { index, qualified, undesirable, duration } = this.from |
| | | let temp = this.arrType[index] |
| | | if (temp.type == 0) { |
| | | if (!qualified) return 0 |
| | | if (temp.unqualified == 1) { // 是否计入不良品 |
| | | let total = Number(qualified) + Number(undesirable) |
| | | return (total * (temp.salary / 10 / 10)).toFixed(2) |
| | | } else { |
| | | return (Number(this.from.qualified) * (this.arrType[this.from.index].salary / 10 / 10)).toFixed(2) |
| | | return (Number(qualified) * (temp.salary / 10 / 10)).toFixed(2) |
| | | } |
| | | } else { |
| | | if (!this.from.duration) return 0; |
| | | let h = (this.from.duration / 60 / 60).toFixed(2) |
| | | return (Number(h) * (this.arrType[this.from.index].salary / 10 / 10)).toFixed(2) |
| | | if (!duration) return 0; |
| | | let h = (duration / 60 / 60).toFixed(2) |
| | | return (Number(h) * (temp.salary / 10 / 10)).toFixed(2) |
| | | } |
| | | }, |
| | | // 达标率 |
| | | complianceRate() { |
| | | if (this.arrType.length === 0) return 0; |
| | | if (!this.from.qualified && !this.from.undesirable) return 0; |
| | | if (!this.from.duration) return 0; |
| | | if (!this.arrType[this.from.index].num) return 0; |
| | | if (this.arrType[this.from.index].unqualified == 1) { // 是否计入不良品 |
| | | let a = ((Number(this.from.qualified) + Number(this.from.undesirable)) / (this.from.duration / 3600)).toFixed(2) |
| | | let b = (this.arrType[this.from.index].num / (this.arrType[this.from.index].times / 3600)).toFixed(2) |
| | | let { index, qualified, undesirable, duration } = this.from |
| | | let temp = this.arrType[index] |
| | | if (!qualified && !undesirable) return 0; |
| | | if (!duration) return 0; |
| | | if (!temp.num) return 0; |
| | | if (temp.unqualified == 1) { // 是否计入不良品 |
| | | let a = ((Number(qualified) + Number(undesirable)) / (duration / 3600)).toFixed(2) |
| | | let b = (temp.num / (temp.times / 3600)).toFixed(2) |
| | | return ((Number(a) / Number(b)) * 100).toFixed(2) |
| | | } else { |
| | | let a = (this.from.qualified / (this.from.duration / 3600)).toFixed(2) |
| | | let b = (this.arrType[this.from.index].num / (this.arrType[this.from.index].times / 3600)).toFixed(2) |
| | | let a = (qualified / (duration / 3600)).toFixed(2) |
| | | let b = (temp.num / (temp.times / 3600)).toFixed(2) |
| | | return ((Number(a) / Number(b)) * 100).toFixed(2) |
| | | } |
| | | } |
| | |
| | | this.wuList = [] |
| | | this.from.defective = [] |
| | | this.from.defectiveName = '' |
| | | this.from.userName = '' |
| | | this.from.userId = '' |
| | | // this.from.userName = '' |
| | | // this.from.userId = '' |
| | | // 获取设备 |
| | | getDeviceByCondition({ procedureId: data.obj.procedureId }) |
| | | .then(res1 => { |
| | |
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" v-if="item.type === ''">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_label">属性值1</div>
|
| | | <div class="tl_list_item_go">
|
| | | <input type="text" v-model="item.num" placeholder="请输入" />
|
| | | </div>
|
| | |
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <u-radio-group v-model="item.num" placement="row" @change="radioSelect">
|
| | | <u-radio v-for="(item1, i) in item.data" :key="i" activeColor="#4275FC" :name="item1" :label="item1">
|
| | | </u-radio>
|
| | | </u-radio-group>
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" v-else-if="item.type === 1">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <u-checkbox-group v-model="item.num" placement="row" >
|
| | | <u-checkbox v-for="(item1, i) in item.data" :key="i" :label="item1" :name="item1">
|
| | | </u-checkbox>
|
| | | </u-checkbox-group>
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" v-else-if="item.type === 2">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <input type="text" v-model="item.num" :placeholder="item.tips" />
|
| | | </div>
|
| | | </div><div class="tl_list_item" v-else-if="item.type === 3">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go"> |
| | | <u--input v-model="item.num" :placeholder="item.tips" |
| | | placeholder="请输入内容" |
| | | type="digit" |
| | | border="surround" |
| | | ></u--input>
|
| | | <input />
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" @click="openTimer(index)" v-else-if="item.type === 4">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <span :style="item.num ? 'color: #000;' : ''">{{item.num ? item.num : item.tips}}</span>
|
| | | <u-icon name="arrow-right" color="#999999" size="20"></u-icon>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </u-swipe-action-item>
|
| | | </u-swipe-action>
|
| | | <!-- <van-swipe-cell v-for="(item, index) in formList" :key="index">
|
| | | <div class="tl_list">
|
| | | <div class="tl_list_item" @click="open(index)">
|
| | | <div class="tl_list_item_label">生产属性</div>
|
| | | <div class="tl_list_item_go">
|
| | | <span
|
| | | :style="item.attributeName ? 'color: #000;' : ''">{{ item.attributeName ? item.attributeName : '请选择'}}</span>
|
| | | <van-icon name="arrow" color="#999999" />
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" v-if="item.type === ''">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <input type="text" v-model="item.num" placeholder="请输入" />
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" v-else-if="item.type === 0">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <u-radio-group v-model="item.num" placement="row">
|
| | | <u-radio v-for="(item1, i) in item.data" :key="i" activeColor="#4275FC" :label="item1">
|
| | | <u-radio v-for="(item1, i) in item.data" :key="i" activeColor="#4275FC" :name="item1"
|
| | | :label="item1">
|
| | | </u-radio>
|
| | | </u-radio-group>
|
| | | </div>
|
| | |
| | | <div class="tl_list_item" v-else-if="item.type === 3">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <input type="text" v-model="item.num" :placeholder="item.tips" />
|
| | | <input v-model="item.num" type="digit" :placeholder="item.tips" />
|
| | | <!-- <u--input v-model="item.num" :placeholder="item.tips" type="digit"
|
| | | border="surround"></u--input> -->
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item" @click="openTimer(index)" v-else-if="item.type === 4">
|
| | | <div class="tl_list_item_label">属性值</div>
|
| | | <div class="tl_list_item_go">
|
| | | <span :style="item.num ? 'color: #000;' : ''">{{item.num ? item.num : item.tips}}</span>
|
| | | <u-icon name="arrow" color="#999999" />
|
| | | <u-icon name="arrow-right" color="#999999" size="20"></u-icon>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <template #right>
|
| | | <van-button square style="height: 100%;" type="danger" text="删除" @click="dele(index)" />
|
| | | </template>
|
| | | </van-swipe-cell> -->
|
| | | </u-swipe-action-item>
|
| | | </u-swipe-action>
|
| | |
|
| | | <div class="tl_zw"></div>
|
| | | <div class="tl_footer">
|
| | |
| | | </div>
|
| | | <u-picker :show="show" :columns="[gzqjData]" title="选择生产属性" @confirm="gzqjConfirm" @cancel="show=false">
|
| | | </u-picker>
|
| | | <u-datetime-picker :show="timer" v-model="value1" @cancel="timer=false" @confirm="onConfirm" mode="datetime">
|
| | | </u-datetime-picker>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | |
| | | data() {
|
| | | return {
|
| | | options1: [{
|
| | | text: '删除'
|
| | | text: '删除',
|
| | | style: {
|
| | | backgroundColor: '#f00',
|
| | | }
|
| | | }],
|
| | | value1: Number(new Date()),
|
| | | show: false,
|
| | | timer: false,
|
| | | index: '',
|
| | | workOrderId: '',
|
| | | info: {},
|
| | |
| | | this.index = index
|
| | | this.show = true
|
| | | },
|
| | | // 打开日期插件
|
| | | openTimer(index) {
|
| | | this.index = index
|
| | | this.timer = true
|
| | | },
|
| | | gzqjConfirm({
|
| | | value
|
| | | }) {
|
| | |
| | | return
|
| | | }
|
| | | this.formList.splice(index, 1)
|
| | | },
|
| | | onConfirm(value) {
|
| | | console.log(value);
|
| | | this.formList.forEach((item, index) => {
|
| | | if (this.index === index) {
|
| | | item.num = setTimeO(new Date(value.value), '-')
|
| | | }
|
| | | })
|
| | | this.timer = false;
|
| | | }, |
| | | radioSelect(v) { |
| | | console.log(v); |
| | |
| | | flex-direction: column;
|
| | | background: white;
|
| | | padding: 0 30rpx;
|
| | | margin-bottom: 20rpx;
|
| | | // margin-bottom: 20rpx;
|
| | |
|
| | | .tl_list_item {
|
| | | min-height: 98rpx;
|
| | |
| | | align-items: center;
|
| | | flex: 1; |
| | | justify-content: flex-end;
|
| | |
|
| | | input {
|
| | | text-align: right;
|
| | | width: 450rpx;
|
| | |
| | | }
|
| | | }
|
| | | } |
| | |
|
| | | /deep/ .u-checkbox-group { |
| | | flex-wrap: wrap; |
| | | max-width: 100%; |
| | | } |
| | |
|
| | | /deep/ .u-radio-group { |
| | | flex-wrap: wrap; |
| | | max-width: 100%; |
| | |
| | | <span v-if="item.status === 4">已报工</span> |
| | | <span v-if="item.status === 5">已入库</span> |
| | | <span v-if="item.status === 6">已取消</span> |
| | | <span class="green" v-if="item.status === 7">进行中</span> |
| | | <span class="green" v-if="item.status === 7">生产中</span> |
| | | </div> |
| | | </div> |
| | | <span class="f24">工单编号: {{item.code}}</span> |
| | |
| | | this.searchForm = { |
| | | mixParam: '', |
| | | startDate: '', |
| | | endDate: gsdate(new Date()), |
| | | // endDate: gsdate(new Date()), |
| | | endDate: '', |
| | | statusList: [] |
| | | } |
| | | this.page.page = 1 |
| | | this.pageCounts() |
| | | this.loadData() |
| | | this.search() |
| | | }, |
| | | searchInput(data) { |
| | | this.searchForm.mixParam = data |
| | | this.page.page = 1 |
| | | this.pageCounts() |
| | | this.loadData() |
| | | this.search() |
| | | },
|
| | | loadData() {
|
| | | getList({
|
| | |
| | | pageCounts() {
|
| | | pageCount({
|
| | | ...this.searchForm,
|
| | | endDate: this.searchForm.endDate || '',
|
| | | endDate: this.searchForm.endDate || null,
|
| | | statusList: this.searchForm.statusList.length === 0 ? this.tagList[0].id : this.searchForm
|
| | | .statusList
|
| | | }).then(res => { |
| | | console.log(res);
|
| | | if (res.code === 200) {
|
| | | this.tagList[0].num = String(res.data.startNum)
|
| | | this.tagList[1].num = String(res.data.ingNum)
|
| | |
| | | this.loadData()
|
| | | },
|
| | | dateConfirm(v) {
|
| | | console.log(v);
|
| | | this.isOpenDate = false
|
| | | this.searchForm.startDate = v[0]
|
| | | this.searchForm.endDate = v[v.length - 1]
|
| | | this.searchForm.startDate = v.startDate
|
| | | this.searchForm.endDate = v.endDate
|
| | | },
|
| | | getLists() {
|
| | | this.page.page += 1
|
| | |
| | | onRefresh() {
|
| | | if (this.triggered) return
|
| | | this.triggered = true;
|
| | | this.page.page = 1
|
| | | this.loadData()
|
| | | this.search() |
| | | }, |
| | | search() { |
| | | this.page.page = 1 |
| | | this.loadData() |
| | | this.pageCounts() |
| | | },
|
| | | jump(item) { |
| | | // uni.navigateTo({ |
| | |
| | | width: 80%;
|
| | |
|
| | | span {
|
| | | font-size: 32rpx;
|
| | | font-size: 24rpx;
|
| | | font-weight: 500;
|
| | | color: #333333;
|
| | | overflow: hidden;
|
| | |
| | | <template>
|
| | | <page-meta :page-style="(badShow||statistics) ?'overflow: hidden;': ''"/>
|
| | | <view>
|
| | | <view class="tips-label">当前任务需要质检;产出后,请耐心等待质检员检验,并根据检验结果调整产出数据后再报工。</view>
|
| | | <workOrderInfo :orederMessage="info" />
|
| | |
| | | <image src="../../../static/ic_ar@2x.png" class="img_ar" mode=""></image>
|
| | | </div>
|
| | | </div>
|
| | | <div class="bg_list_item" v-if="form.duration && arrType && arrType.length > 0">
|
| | | <!-- form.duration && -->
|
| | | <div class="bg_list_item" v-if="arrType && arrType.length > 0">
|
| | | <div class="bg_list_item_top">
|
| | | <div class="bg_list_item_top_left">
|
| | | <div class="bg_list_item_top_left_x bg_m"></div>
|
| | |
| | | <div class="details_dj" v-if="typeView === 1">
|
| | |
|
| | | <div class="details_dj_list">
|
| | | <scroll-view scroll-y="true" refresher-enabled="true" @scrolltolower="getLists">
|
| | | <u-swipe-action v-for="(item, index) in djData" :key="index">
|
| | | <u-swipe-action-item :options="options" @click="dele(item.id)">
|
| | | <div class="details_dj_list_item">
|
| | |
| | | </div>
|
| | | </u-swipe-action-item>
|
| | | </u-swipe-action>
|
| | | </scroll-view>
|
| | | </div>
|
| | | </div>
|
| | | <!-- v-if="info.status === 2 || info.procedureNeedcheck === 1" -->
|
| | | <template v-if="info.status === 2 || info.procedureNeedcheck === 1">
|
| | | <!-- status 0已创建、1已备料、2已完工、3已检验、4已报工、5已入库、6已取消、7生产中 --> |
| | | <!-- procedureNeedcheck 工序是否需要检验才能报工 0是 1否 -->
|
| | | <template v-if="typeView == 0 &&( info.status === 2 || info.procedureNeedcheck === 1 )">
|
| | | <div class="bh_zw"></div>
|
| | | <div class="bg_footer bg_f7">
|
| | | <div class="bg_footer_submit bg_m" v-if="typeView == 0" @click="submit">确认报工</div>
|
| | | <!-- proxy.$auth('h5:workorder:processRecord') && -->
|
| | | |
| | | </div>
|
| | | </template> |
| | | <template v-if="typeView == 1 && info.status !== 4 && info.procedureNeedcheck !== 5 && info.procedureNeedcheck !== 6">
|
| | | <div class="bh_zw"></div>
|
| | | <div class="bg_footer bg_f7">
|
| | | <div class="bg_footer_submit1" @click="jumpdj" v-if="typeView == 1">
|
| | | <image src="../../../static/gongdan_ic_shoudong@2x.png" class="fornt-img" mode=""></image>
|
| | | <span>新增点检</span>
|
| | | </div>
|
| | | </div>
|
| | | </template>
|
| | | <u-safe-bottom></u-safe-bottom>
|
| | | <u-datetime-picker :show="TimeShow" @cancel="TimeShow=false" @confirm="timeConfirm" v-model="form.time"
|
| | | mode="time"></u-datetime-picker>
|
| | | <u-popup :show="badShow" @close="badShow=false" :round="8" closeable zIndex="20000">
|
| | |
| | | }
|
| | | },
|
| | | complianceRate() {
|
| | | let { index, duration } = this.form |
| | | let { qualified, undesirable } = this.produceFrom |
| | | if (this.arrType.length === 0) return 0;
|
| | | if (!this.produceFrom.qualified && !this.produceFrom.undesirable) return 0;
|
| | | if (!this.form.duration) return 0;
|
| | | if (!this.arrType[this.form.index].num) return 0;
|
| | | if (!qualified && !undesirable) return 0;
|
| | | if (!duration) return 0;
|
| | | if (!this.arrType[index].num) return 0;
|
| | | // 按件计算
|
| | | // if (infoBox.value.type == 0) {
|
| | | if (this.arrType[this.form.index].unqualified == 1) { // 是否计入不良品
|
| | | let a = ((Number(this.produceFrom.qualified) + Number(this.produceFrom.undesirable)) / (this.form
|
| | | .duration / 3600)).toFixed(2)
|
| | | let b = (this.arrType[this.form.index].num / (this.arrType[form.index].times / 3600)).toFixed(2)
|
| | | if (this.arrType[index].unqualified == 1) { // 是否计入不良品
|
| | | let a = ((Number(qualified) + Number(undesirable)) / (duration / 3600)).toFixed(2)
|
| | | let b = (this.arrType[index].num / (this.arrType[index].times / 3600)).toFixed(2)
|
| | | return ((Number(a) / Number(b)) * 100).toFixed(2)
|
| | | // let total = (Number(from.qualified) + Number(from.undesirable)) / ((from.duration * 60 * 60) * infoBox.value.num / )
|
| | | // return total * infoBox.value.salary;
|
| | | } else {
|
| | | let a = (this.produceFrom.qualified / (this.form.duration / 3600)).toFixed(2)
|
| | | let b = (this.arrType[this.form.index].num / (this.arrType[this.form.index].times / 3600)).toFixed(2)
|
| | | let a = (qualified / (duration / 3600)).toFixed(2)
|
| | | let b = (this.arrType[index].num / (this.arrType[index].times / 3600)).toFixed(2)
|
| | | return ((Number(a) / Number(b)) * 100).toFixed(2)
|
| | | // return Number(from.qualified) * infoBox.value.salary;
|
| | | }
|
| | |
| | | timeConfirm({
|
| | | value
|
| | | }) {
|
| | | console.log(value)
|
| | | let h = Number(value.substring(0, 2))
|
| | | let m = Number(value.substring(3, 5))
|
| | | let s = 0
|
| | |
| | | })
|
| | | return
|
| | | }
|
| | | total = total += item.num
|
| | | total += Number(item.num)
|
| | | arr.push(item)
|
| | | name += item.name + item.num + ';'
|
| | | }
|
| | |
| | | padding: 0 30rpx;
|
| | | box-sizing: border-box;
|
| | | background: white;
|
| | |
|
| | | &:last-child { |
| | | .bg_list_item_num{ |
| | | border: none !important;
|
| | | }
|
| | | }
|
| | | .bg_list_item_num {
|
| | | width: 100%;
|
| | | min-height: 98rpx;
|
| | |
| | | justify-content: center;
|
| | | align-items: center;
|
| | | border-bottom: 1rpx solid #E5E5E5;
|
| | |
|
| | | &:last-child {
|
| | | border: none !important;
|
| | | }
|
| | |
|
| | | .kong {
|
| | | text-align: center;
|
| | | font-size: 25rpx;
|
| | |
| | |
|
| | | span {
|
| | | flex-shrink: 0;
|
| | | overflow: hidden;
|
| | | text-overflow: ellipsis;
|
| | | white-space: nowrap;
|
| | | // overflow: hidden;
|
| | | // text-overflow: ellipsis;
|
| | | // white-space: nowrap;
|
| | |
|
| | | b {
|
| | | font-size: 30rpx;
|
| | |
| | | .wulll {
|
| | | width: 400rpx;
|
| | | text-align: right;
|
| | | overflow: hidden;
|
| | | white-space: nowrap;
|
| | | text-overflow: ellipsis;
|
| | | // overflow: hidden;
|
| | | // white-space: nowrap;
|
| | | // text-overflow: ellipsis;
|
| | | }
|
| | |
|
| | | span {
|
| | |
| | | padding: 30rpx;
|
| | | box-sizing: border-box;
|
| | | background: #FFFFFF;
|
| | | margin-bottom: 40rpx;
|
| | | // margin-bottom: 40rpx;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | |
| | | <span>{{item.locationName ? item.locationName : '-'}}</span> |
| | | </div> |
| | | </div> |
| | | <div class="items"> |
| | | <div class="items f24"> |
| | | <div class="label">数量:</div> |
| | | <div class="nr"> |
| | | <input type="text" v-model="item.scanNum" placeholder="请输入" /> |
| | |
| | | <div class="itemy" v-for="(item1, idx) in item.woutboundRedisCodeBeanList" :key="idx"> |
| | | <div class="label">工装{{item1.scanCode}}:</div> |
| | | <div class="nr">{{item1.num}}{{item1.unitName}}</div> |
| | | <div class="dele" @click="dele(item1)"> |
| | | <image src="../../../static/chuku_ic_delete@2x.png" class="img36" mode=""></image> |
| | | <div class="dele" @click="woScanMaterialBeanList.splice(index, 1)"> |
| | | <image src="../../../static/chuku_ic_delete@2x.png" class="img48" mode=""></image> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <span>{{item1.locationName}}</span> |
| | | </div> |
| | | </div> |
| | | <div class="itemy_item"> |
| | | <div class="itemy_item f24"> |
| | | <div class="label">数量:</div> |
| | | <div class="nr"> |
| | | <!-- @input="inputNum(item1)" --> |
| | |
| | | <span>{{item1.unitName}}</span> |
| | | </div> |
| | | </div> |
| | | <!-- @click="dele()" --> |
| | | <div class="dele" @click="dele(idx)"> |
| | | <image src="../../../static/chuku_ic_delete@2x.png" class="img36" mode=""></image> |
| | | <!-- @click="dele()" dele(index) { |
| | | this.outboundList.splice(index, 1) |
| | | }, --> |
| | | <div class="dele" @click="seleMateriaList.splice(index, 1)"> |
| | | <image src="../../../static/chuku_ic_delete@2x.png" class="img48" mode=""></image> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | margin-top: 15rpx; |
| | | font-size: 24rpx; |
| | | } |
| | | |
| | | .page_yxwl_list_item_num { |
| | |
| | | <view> |
| | | <InOutInfo :info="info" /> |
| | | <uni-collapse @change="change" @close="close" @open="open"> |
| | | <uni-collapse-item :open="item1.wtransferDetailList.length" v-if="type==7" v-for="(item1, index) in warehouseList" :key="index"> |
| | | <uni-collapse-item :open="item1.wtransferDetailList.length" v-if="type==7"
|
| | | v-for="(item1, index) in warehouseList" :key="index">
|
| | | <view class="p30 cY" style="border-bottom: 4rpx solid #f7f7f7;" slot="title"> |
| | | <image src="../../../static/chuku_ic_cangku@2x.png" class="img36 mr10" mode=""></image> |
| | | <view>{{ item1.warehouseName }}</view> |
| | |
| | | <span>{{item.batch ? item.batch : '-'}}</span> |
| | | </div> |
| | | </div> |
| | | <div class="page_content_list" v-for="(childer, idxs) in item.wstockExtListVOList" v-if="childer.batch == item.batch" :key="idxs"> |
| | | <div class="page_content_list" v-for="(childer, idxs) in item.wstockExtListVOList" :key="idxs">
|
| | | <div class="page_content_list_item"> |
| | | <div class="page_content_list_item_label">出库货位:</div> |
| | | <div class="page_content_list_item_nr">{{ childer.locationName }}</div> |
| | |
| | | <span>待出 <span>{{ item.num }}</span> {{ item.unitName }}</span> |
| | | </div> |
| | | <div class="page_content_title_bottom"> |
| | | <span class="green" v-if="item.qualityType === 0">合格 <span |
| | | class="black">/</span> </span> |
| | | <span class="warning" v-else-if="item.qualityType === 1">不良 <span |
| | | class="black">/</span> </span> |
| | | <span class="error" v-else-if="item.qualityType === 2">报废 <span |
| | | class="black">/</span> </span> |
| | | <span v-else>- / </span> |
| | | <span>{{item.procedureName ? item.procedureName : '-'}} / </span> |
| | | <span class="green" v-if="item.qualityType === 0">合格<text class="c6" decode>{{ split}}</text></span>
|
| | | <span class="warning" v-else-if="item.qualityType === 1">不良<text class="c6" decode>{{ split}}</text></span>
|
| | | <span class="error" v-else-if="item.qualityType === 2">报废<text class="c6" decode>{{ split}}</text></span>
|
| | | <span v-else>-<text class="c6" decode>{{ split}}</text></span>
|
| | | <span>{{item.procedureName ? item.procedureName : '-'}}<text class="c6" decode>{{ split}}</text></span>
|
| | | <span>{{item.batch ? item.batch : '-'}}</span> |
| | | </div> |
| | | </div> |
| | | <div class="page_content_list" v-for="(items, ind) in item.wstockExtListVOList" v-if="items.batch == item.batch" :key="ind"> |
| | | <div class="page_content_list" v-for="(items, ind) in item.wstockExtListVOList" :key="ind">
|
| | | <div class="page_content_list_item"> |
| | | <div class="page_content_list_item_label">批次号1:</div> |
| | | <div class="page_content_list_item_nr">{{ items.batch ? items.batch : '-' }}</div> |
| | |
| | | </div> |
| | | |
| | | <div class="right" v-if="isZKD" @click="openxz"> |
| | | <image src="../../../static/gongdan_ic_shoudong@2x.png" class="img36" mode=""></image><span>手动出库</span> |
| | | <image src="../../../static/gongdan_ic_shoudong@2x.png" class="img36" mode=""></image>
|
| | | <span>手动出库</span>
|
| | | </div> |
| | | </div> |
| | | <div class="page_yxwl_list" v-if="outboundList.length > 0"> |
| | |
| | | |
| | | </div> |
| | | <div class="page_yxwl_list_item_sx"> |
| | | <span class="green" v-if="item.qualityType == 0">合格 <span>/</span></span> |
| | | <span class="yellow" v-else-if="item.qualityType == 1">不良 <span>/</span></span> |
| | | <span class="red" v-else-if="item.qualityType == 2">报废 <span>/</span></span> |
| | | <span v-else>- / </span> |
| | | <span> {{ item.procedureName ? item.procedureName : '-' }} / </span> |
| | | <span> {{ item.batch ? item.batch : '-' }}</span> |
| | | <span class="green" v-if="item.qualityType == 0">合格t<text class="c6" decode>{{ split}}</text></span>
|
| | | <span class="yellow" v-else-if="item.qualityType == 1">不良<text class="c6" decode>{{ split}}</text></span>
|
| | | <span class="red" v-else-if="item.qualityType == 2">报废<text class="c6" decode>{{ split}}</text></span>
|
| | | <span v-else>-<text class="c6" decode>{{ split}}</text></span>
|
| | | <span>{{ item.procedureName ? item.procedureName : '-' }}<text class="c6" decode>{{ split}}</text></span>
|
| | | <span>{{ item.batch ? item.batch : '-' }}</span>
|
| | | </div> |
| | | <div class="page_yxwl_list_item_num"> |
| | | <div class="item"> |
| | |
| | | <span>{{ item.locationName }}</span> |
| | | </div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="item f24">
|
| | | <div class="label">数量:</div> |
| | | <div class="nr"> |
| | | <!-- @input="changeNum(item)" --> |
| | |
| | | </div> |
| | | <div class="dele" @click="dele(index)"> |
| | | <!-- <img src="@/assets/icon/chuku_ic_delete@2x.png" alt="" /> --> |
| | | <image src="../../../static/chuku_ic_delete@2x.png" class="img24" mode=""></image> |
| | | <image src="../../../static/chuku_ic_delete@2x.png" class="img48" mode=""></image>
|
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | info: { |
| | | |
| | | }, |
| | | split: ' / ',
|
| | | mainOrder: '', |
| | | warehouseId: '', |
| | | ids: [], |
| | |
| | | }, |
| | | selectMaterail(v) { |
| | | let tempList = this.warehouseList[0].wtransferDetailList |
| | | let materials = v.materials |
| | | |
| | | materials.forEach(materail => { |
| | | |
| | | let materials = JSON.parse(JSON.stringify(v.materials)) |
| | | tempList.forEach(item => { |
| | | item.wstockExtListVOList.forEach(hw => { |
| | | if (materail.materialId == hw.materialId && materail.procedureId == hw |
| | | .procedureId && materail.qualityType == hw.qualityType && materail.batch == |
| | | hw.batch) { |
| | | let isExist = false |
| | | let isOutList = false |
| | | this.outboundList.forEach(selected => { |
| | | if (selected.newId == item.id) { |
| | | isOutList = true |
| | | return |
| | | } |
| | | }) |
| | | if (!isOutList) { |
| | | materials.forEach((materail, index) => { |
| | | if (item.batch) { |
| | | // 精确匹配 |
| | | if (materail.materialId == item.materialId && |
| | | materail.procedureId == item.procedureId && |
| | | materail.qualityType == item.qualityType && |
| | | materail.batch == item.batch |
| | | ) { |
| | | this.addToOutList(materail, item) |
| | | materials.splice(index, 1) |
| | | return |
| | | } |
| | | } else { |
| | | if (materail.materialId == item.materialId && |
| | | materail.procedureId == item.procedureId && |
| | | materail.qualityType == item.qualityType |
| | | ) { |
| | | this.addToOutList(materail, item) |
| | | materials.splice(index, 1) |
| | | return |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | addToOutList(materail, item) { |
| | | let isExist = false |
| | | this.outboundList.forEach(selected => { |
| | | if (selected.newId == materail.id) { |
| | | isExist = true |
| | | return |
| | | } |
| | | }) |
| | | if (isExist) { |
| | | uni.$u.toast('该物料已存在') |
| | | return |
| | | } |
| | | } else { |
| | | let obj = JSON.parse(JSON.stringify(materail)) |
| | | obj.newId = item.id |
| | | this.outboundList.push(obj) |
| | | console.log(this.outboundList); |
| | | } |
| | | }) |
| | | |
| | | }) |
| | | }) |
| | | }, |
| | | dele(index) { |
| | | this.outboundList.splice(index, 1) |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | margin-top: 15rpx; |
| | | font-size: 24rpx;
|
| | | } |
| | | |
| | | .page_yxwl_list_item_num { |
| | |
| | | left: 30rpx; |
| | | padding-bottom: 68rpx; |
| | | z-index: 9999; |
| | |
|
| | | .page_footer_qr { |
| | | flex: 1; |
| | | height: 88rpx; |
| | |
| | | |
| | | image { |
| | | display: block; |
| | | |
| | | } |
| | | /* #endif */ |
| | | |
| | |
| | | justify-content: center;
|
| | | flex-direction: column;
|
| | | background-color: #fff;
|
| | | padding: 0 42rpx env(safe-area-inset-bottom);
|
| | | padding: 0 42rpx calc(env(safe-area-inset-bottom) + 20rpx);
|
| | | box-sizing: border-box;
|
| | | font-size: 24rpx;
|
| | | color: #666;
|
| | |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | this.type = type |
| | | this.form.type = type |
| | | }) |
| | | }, |
| | | confirm () { |
| | |
| | | <!-- 表格和分页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['system:role:create', 'system:role:delete']"> |
| | | <li v-permissions="['system:role:create']"><el-button type="primary" @click="$refs.operaRoleWindow.open('新建角色', null, 1)" icon="el-icon-plus">新建</el-button></li> |
| | | <li v-permissions="['system:role:create']"><el-button type="primary" @click="$refs.operaRoleWindow.open('新建角色', null, 0)" icon="el-icon-plus">新建</el-button></li> |
| | | <li v-permissions="['system:role:delete']"><el-button @click="deleteByIdInBatch" icon="el-icon-delete">删除</el-button></li> |
| | | </ul> |
| | | <el-table |
| | |
| | | fixed="right" |
| | | > |
| | | <template v-if="isAdmin || (row.code !== adminCode && userInfo.roles.findIndex(code => code === row.code) === -1)" slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaRoleWindow.open('编辑角色', row, 1)" v-permissions="['system:role:update']">编辑</el-button> |
| | | <el-button type="text" @click="$refs.permissionConfigWindow.open(row)" v-permissions="['system:role:createRolePermission']">配置权限</el-button> |
| | | <el-button type="text" @click="$refs.menuConfigWindow.open('授权菜单', row)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">授权菜单</el-button> |
| | | <el-button type="text" @click="$refs.operaRoleWindow.open('编辑角色', row, 0)" v-permissions="['system:role:update']">编辑</el-button> |
| | | <el-button type="text" @click="$refs.permissionConfigWindow.open(row, 0)" v-permissions="['system:role:createRolePermission']">配置权限</el-button> |
| | | <el-button type="text" @click="$refs.menuConfigWindow.open('授权菜单', row, 0)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">授权菜单</el-button> |
| | | |
| | | <el-button v-if="!row.fixed" type="text" style="color: red" @click="deleteById(row)" v-permissions="['system:role:delete']">删除</el-button> |
| | | </template> |