| | |
| | | # VUE_APP_API = 'https://hsky.doumee.com/doumeeplant_api/' |
| | | |
| | | # 测试 |
| | | # VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/' |
| | | VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/' |
| | | |
| | | # 演示 |
| | | VUE_APP_API = 'https://www.mes.red/doumeeplant/' |
| | | # VUE_APP_API = 'https://www.mes.red/doumeeplant/' |
| | |
| | | <div class="content_total">共{{form.total}}条数据</div> |
| | | <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}} | {{item.dmodel.name}}</div> |
| | | <div class="content_list_item_name" v-if="item.dmodel">{{item.name}} | {{item.dmodel.name}}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="content_list_item_content_item_label">计划人员:</div> |
| | | <div class="content_list_item_content_item_nr">{{info.usermodel.realname}}</div> |
| | | </div> |
| | | <div class="content_list_item_content_item"> |
| | | <div class="content_list_item_content_item_label">分配数量:</div> |
| | | <div class="content_list_item_content_item_nr">{{info.createTime}}</div> |
| | | </div> |
| | | <div class="content_list_item_content_item"> |
| | | <div class="content_list_item_content_item_label">完工数量:</div> |
| | | <div class="content_list_item_content_item_nr" v-if="info.umodel">{{info.doneNum}}{{info.umodel.name}}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <NotFound info="暂未分配工单" v-if="info.workorderList && info.workorderList.length === 0" /> |
| | | <template v-else> |
| | | <div class="details_timeline" v-for="(item, i) in info.workorderList" :key="i"> |
| | | <div class="details_list"> |
| | | <div class="details_list_item" v-for="(item, i) in info.workorderList" :key="i" @click="jump(item.id)"> |
| | | <div class="details_list_item_top"> |
| | | <span>{{ item.createUserName }}</span><span>{{ item.code }}</span> |
| | | </div> |
| | | <div class="details_list_item_center"> |
| | | <span>良品数:{{ item.qualifiedNum }}</span><span>不良数:<span class="red">{{ item.unqualifiedNum }}</span></span> |
| | | </div> |
| | | <div class="details_list_item_bottom"> |
| | | <span>{{ item.createTime }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="details_timeline" v-for="(item, i) in info.workorderList" :key="i"> |
| | | <div class="details_timeline_header"> |
| | | <div class="details_timeline_header_code"> |
| | | <span>工单编号:{{item.code}}</span> |
| | |
| | | <span v-if="item.status === 3" class="purple">已检验</span> |
| | | <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 === 6">已取消</span> --> |
| | | <!-- <span v-if="item.status === 7">已取消</span>--> |
| | | <!-- <span v-if="item.status === 8">已关闭</span>--> |
| | | </div> |
| | | <!-- </div> |
| | | <div class="details_timeline_item" v-if="item.produceDate"> |
| | | <div class="activedian"></div> |
| | | <div class="dian active"></div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </template> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ref, onMounted, watch } from 'vue' |
| | | import { useRoute } from "vue-router" |
| | | import { useRoute, useRouter } from "vue-router" |
| | | import { queryByID } from '@/apis/PlanningAPI' |
| | | import NotFound from '@/components/common/NotFound.vue' |
| | | |
| | | const route = useRoute() |
| | | const router = useRouter() |
| | | |
| | | // 详情数据 |
| | | let info = ref({}) |
| | | let info:any = ref({}) |
| | | |
| | | let loading = ref<boolean>(true) |
| | | |
| | |
| | | info.value = res.data |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const jump = (id: any) => { |
| | | router.push({ name: 'workOrderReporting', query: { id } }) |
| | | } |
| | | |
| | | const proUserStr = (item: any) => { |
| | |
| | | } |
| | | } |
| | | } |
| | | .details_list { |
| | | width: 100%; |
| | | height: auto; |
| | | background-color: #FFFFFF; |
| | | margin-top: 20px; |
| | | .details_list_item { |
| | | width: 100%; |
| | | padding: 24px 30px; |
| | | box-sizing: border-box; |
| | | background-color: #FFFFFF; |
| | | border-bottom: 2px solid #F7F7F7; |
| | | &:last-child { |
| | | border: none !important; |
| | | } |
| | | .details_list_item_top { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | span { |
| | | &:first-child { |
| | | font-size: 30px; |
| | | font-family: PingFangSC-Medium, PingFang SC; |
| | | font-weight: 500; |
| | | color: #222222; |
| | | margin-right: 16px; |
| | | } |
| | | &:last-child { |
| | | font-size: 24px; |
| | | font-family: PingFangSC-Regular, PingFang SC; |
| | | font-weight: 400; |
| | | color: #666666; |
| | | } |
| | | } |
| | | } |
| | | .details_list_item_center { |
| | | width: 100%; |
| | | margin: 16px 0 20px 0; |
| | | .red { |
| | | color: #DE5243; |
| | | } |
| | | span { |
| | | &:first-child { |
| | | font-size: 26px; |
| | | font-family: PingFangSC-Regular, PingFang SC; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | margin-right: 100px; |
| | | } |
| | | &:last-child { |
| | | font-size: 26px; |
| | | font-family: PingFangSC-Regular, PingFang SC; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | } |
| | | } |
| | | } |
| | | .details_list_item_bottom { |
| | | span { |
| | | font-size: 24px; |
| | | font-family: PingFangSC-Regular, PingFang SC; |
| | | font-weight: 400; |
| | | color: #999999; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .details_timeline { |
| | | padding: 30px; |
| | | background: #ffffff; |
| | |
| | | getDeviceByCondition({ procedureId: res.procedureId }) |
| | | .then(res1 => { |
| | | if (res1.code === 200) { |
| | | if (res1.data && res1.data.length > 0) |
| | | deviceId.value = res1.data[0].id |
| | | from.deviceId = res1.data[0].id |
| | | from.deviceName = res1.data[0].name |
| | |
| | | <div class="bh_zw"></div> |
| | | <div class="bg_footer"> |
| | | <div class="bg_footer_submit" v-if="typeView == 0" @click="submit">确认报工</div> |
| | | <div class="bg_footer_submit1" @click="jumpdj" v-if="proxy.$auth('h5:workorder:processRecord') && typeView == 1"> |
| | | <!-- proxy.$auth('h5:workorder:processRecord') && --> |
| | | <div class="bg_footer_submit1" @click="jumpdj" v-if="typeView == 1"> |
| | | <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" /> |
| | | <span>新增点检</span> |
| | | </div> |
| | |
| | | /*每个页面公共css */ |
| | | @import "@/uni_modules/uview-ui/index.scss"; |
| | | @import "common/css/lib.css"; |
| | | page { |
| | | background-color: #F3F6F9 !important; |
| | | }
|
| | | // page { |
| | | // background-color: #F3F6F9 !important; |
| | | // }
|
| | | </style> |
| | |
| | | fixed |
| | | activeColor="#222" |
| | | inactiveColor="#666" |
| | | > |
| | | :safeAreaInsetBottom="true"> |
| | | <u-tabbar-item text="待办"> |
| | | <view class="" slot="active-icon"> |
| | | <image src="@/static/nav_daiban_sel@2x.png" class="icon-style" mode=""></image> |
| | |
| | | import Vue from 'vue' |
| | | import App from './App' |
| | | |
| | | |
| | | 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'
|
| | | |
| | | App.mpType = 'app' |
| | | console.log(uni.$u); |
| | | // #ifdef MP
|
| | | // 引入uView对小程序分享的mixin封装
|
| | | const mpShare = require('@/uni_modules/uview-ui/libs/mixin/mpShare.js') |
| | | Vue.mixin(mpShare) |
| | | // #endif |
| | | |
| | | Vue.mixin(mixin) |
| | | // 引入请求封装
|
| | | |
| | | // 引入请求封装 |
| | | const app = new Vue({ |
| | | store,
|
| | | ...App
|
| | |
| | | "quickapp" : {}, |
| | | /* 小程序特有相关 */ |
| | | "mp-weixin" : { |
| | | "appid" : "wxf8f2d1ee4b273688", |
| | | "appid" : "wxcd2b89fd2ff065f8", |
| | | "setting" : { |
| | | "urlCheck" : false |
| | | "urlCheck" : false, |
| | | "es6" : true, |
| | | "postcss" : true, |
| | | "minified" : true |
| | | }, |
| | | "usingComponents" : true, |
| | | "requiredPrivateInfos": [ |
| | | "getLocation" |
| | | ], |
| | | "requiredPrivateInfos" : [ "getLocation" ], |
| | | "permission" : { |
| | | "scope.userLocation" : { |
| | | "desc" : "实时上传图片" |
| | |
| | | {
|
| | | "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
| | | "pages": [
|
| | | { |
| | | "path": "pages/workbench/workbench", |
| | | "style": { |
| | | "navigationBarTitleText": "工作台", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | |
| | | }, |
| | | {
|
| | | "path": "pages/index/index",
|
| | |
| | | { |
| | | "navigationBarTitleText": "登录", |
| | | "enablePullDownRefresh": false, |
| | | "navigationStyle": "custom" |
| | | } |
| | | |
| | | "navigationStyle": "custom" |
| | | }
|
| | | }
|
| | | ],
|
| | | "globalStyle": {
|
| | | "navigationBarTextStyle": "black",
|
| | | "navigationBarTitleText": "uni-app", |
| | | "navigationBarBackgroundColor": "#F3F6F9",
|
| | | "backgroundColor": "#F3F6F9"
|
| | | "navigationBarBackgroundColor": "#ffffff",
|
| | | "backgroundColor": "#ffffff"
|
| | | }, |
| | | "tabBar": { |
| | | "color": "#666666", |
| | |
| | | <template>
|
| | | <view> |
| | | |
| | | <view>
|
| | | <myTabbar :index="0" />
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | // import { coustomLogin, wxEmpower } from '@/util/api/index'
|
| | |
|
| | |
|
| | | import myTabbar from "@/components/myTabber.vue"
|
| | | export default {
|
| | | components: {
|
| | |
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | |
|
| | | |
| | | </style> |
| | |
| | | <template>
|
| | | <view>
|
| | |
|
| | | <myTabbar :index="2" />
|
| | | </view>
|
| | | <view>
|
| | | <div class="box">
|
| | | <div class="box_info" :style="{background: 'url(' + img + ')'}">
|
| | | <image src="@/static/2@2x.png" mode="widthFix" />
|
| | | <div class="box_info_box">
|
| | | <text>张三</text>
|
| | | <div class="box_info_box_x">
|
| | | <text>豆米科技</text>
|
| | | <image src="@/static/mine_ic_change@2x.png" alt="" />
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="box_function">
|
| | | <div class="box_function_item" v-for="(item, index) in MENU" :key="index">
|
| | | <div class="box_function_item_left">
|
| | | <image :src="item.icon" alt="" />
|
| | | <text>{{item.name}}</text>
|
| | | </div>
|
| | | <div class="box_function_item_right">
|
| | | <van-icon name="arrow" size="20" color="#CCCCCC" />
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="box_out"><text>退出登录</text></div>
|
| | | </div>
|
| | | <myTabbar :index="2" />
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | |
| | | },
|
| | | data() {
|
| | | return {
|
| | | form: {
|
| | | account: '',
|
| | | password: '',
|
| | | },
|
| | | logining: false,
|
| | | openId: ''
|
| | | MENU: [ |
| | | { name: '个人信息', url: '/personal/personalInformation', icon: require('@/static/mine_ic_gerenxinxi@2x.png') }, |
| | | // { name: '系统通知', url: '', icon: require('@/assets/icon/mine_ic_xitonggonggao@2x.png') }, |
| | | { name: '更新手机号', url: '/personal/updatePhone', icon: require('@/static/mine_ic_shoujihao@2x.png') }, |
| | | { name: '更新邮箱号', url: '/personal/updateMailbox', icon: require('@/static/mine_ic_youxianghao@2x.png') }, |
| | | { name: '扫码绑定账号', url: '', icon: require('@/static/mine_ic_bangding@2x.png') }, |
| | | { name: '修改密码', url: '/personal/changePassword', icon: require('@/static/mine_ic_xiugaimima@2x.png') }, |
| | | ],
|
| | | img: require('@/static/mine_bg@2x.png')
|
| | | }
|
| | | },
|
| | | onLoad() {
|
| | | uni.hideTabBar()
|
| | | // uni.login({
|
| | | // success: data => {
|
| | | // this.wxLogin(data.code)
|
| | |
| | | // })
|
| | | },
|
| | | 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>
|
| | |
|
| | | .box {
|
| | | width: 100%;
|
| | | padding: 30rpx;
|
| | | box-sizing: border-box;
|
| | | .box_info {
|
| | | padding: 0 30rpx;
|
| | | height: 168rpx;
|
| | | border-radius: 16rpx;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | background-repeat: no-repeat;
|
| | | background-size: cover;
|
| | | image {
|
| | | width: 88rpx;
|
| | | height: 88rpx;
|
| | | }
|
| | | .box_info_box {
|
| | | height: 88rpx;
|
| | | display: flex;
|
| | | margin-left: 30rpx;
|
| | | flex-direction: column;
|
| | | justify-content: space-between;
|
| | | .box_info_box_x {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | text {
|
| | | font-size: 26rpx;
|
| | | font-weight: 400;
|
| | | color: rgba(255, 255, 255, 0.8);
|
| | | }
|
| | | image {
|
| | | width: 26rpx;
|
| | | height: 26rpx;
|
| | | margin-left: 10rpx;
|
| | | }
|
| | | }
|
| | | text {
|
| | | font-size: 34rpx;
|
| | | font-weight: 500;
|
| | | color: #FFFFFF;
|
| | | }
|
| | | }
|
| | | }
|
| | | .box_function {
|
| | | margin-top: 30rpx;
|
| | | .box_function_item {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | height: 98rpx;
|
| | | border-bottom: 1rpx solid #E5E5E5;
|
| | | /*&:last-child {*/
|
| | | /* border: none;*/
|
| | | /*}*/
|
| | | .box_function_item_left {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | image {
|
| | | width: 36rpx;
|
| | | height: 36rpx;
|
| | | margin-right: 24rpx;
|
| | | }
|
| | | text {
|
| | | font-size: 30rpx;
|
| | | font-weight: 400;
|
| | | color: #222222;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | .box_out {
|
| | | position: fixed;
|
| | | bottom: 200rpx;
|
| | | left: 50%;
|
| | | transform: translate(-50%, 0);
|
| | | width: 350rpx;
|
| | | height: 88rpx;
|
| | | background: #F7F7F7;
|
| | | border-radius: 8rpx;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | font-size: 30rpx;
|
| | | font-weight: 400;
|
| | | color: #333333;
|
| | | }
|
| | | }
|
| | | </style> |
| | |
| | | <template>
|
| | | <view>
|
| | |
|
| | | <view class="index">
|
| | | <view class="menu">
|
| | | <view class="menu_list" v-for="(row, i) in 3" :key="i">
|
| | | <view class="menu_list_head">
|
| | | <span>常用功能</span>
|
| | | </view>
|
| | | <div class="menu_list_list">
|
| | | <view class="menu_list_item" v-for="item in list" :key="item.id" @click="jump(item)">
|
| | | <image :src="item.icon" mode="widthFix" />
|
| | | <span>{{item.label}}</span>
|
| | | </view>
|
| | | <view class="menu_list_zw"></view>
|
| | | <view class="menu_list_zw"></view>
|
| | | <view class="menu_list_zw"></view>
|
| | | </div>
|
| | | </view>
|
| | | </view>
|
| | | <myTabbar :index="1" />
|
| | | </view>
|
| | | </template>
|
| | |
| | | },
|
| | | data() {
|
| | | return {
|
| | |
|
| | | list: [
|
| | | {
|
| | | icon: require('@/static/logo@2x.png'),
|
| | | label: '测试'
|
| | | },
|
| | | {
|
| | | icon: require('@/static/logo@2x.png'),
|
| | | label: '测试'
|
| | | },
|
| | | {
|
| | | icon: require('@/static/logo@2x.png'),
|
| | | label: '测试'
|
| | | },
|
| | | {
|
| | | icon: require('@/static/logo@2x.png'),
|
| | | label: '测试'
|
| | | },
|
| | | {
|
| | | icon: require('@/static/logo@2x.png'),
|
| | | label: '测试'
|
| | | },
|
| | | {
|
| | | icon: require('@/static/logo@2x.png'),
|
| | | label: '测试'
|
| | | }
|
| | | ]
|
| | | };
|
| | | },
|
| | | onLoad() { |
| | |
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss">
|
| | |
|
| | | <style>
|
| | | page {
|
| | | background-color: #F7F7F7 !important;
|
| | | }
|
| | | </style>
|
| | | <style scoped lang="scss">
|
| | | .index {
|
| | | width: 100%;
|
| | | .menu {
|
| | | width: 100%;
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | .menu_list {
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | padding: 30rpx;
|
| | | box-sizing: border-box;
|
| | | margin-bottom: 20rpx;
|
| | | background: white;
|
| | | &:last-child {
|
| | | margin-bottom: 0;
|
| | | }
|
| | | .menu_list_head {
|
| | | width: 100%;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | margin-bottom: 40rpx;
|
| | | span {
|
| | | font-size: 32rpx;
|
| | | font-family: PingFangSC-Medium, PingFang SC;
|
| | | font-weight: 500;
|
| | | color: #222222;
|
| | | }
|
| | | }
|
| | | .menu_list_list {
|
| | | width: 100%;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | flex-wrap: wrap;
|
| | | justify-content: space-between;
|
| | | .menu_list_zw {
|
| | | width: 20%;
|
| | | height: 0;
|
| | | }
|
| | | .menu_list_item {
|
| | | width: 20%;
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | margin-top: 40rpx;
|
| | | &:nth-child(1) {
|
| | | margin: 0;
|
| | | }
|
| | | &:nth-child(2) {
|
| | | margin: 0;
|
| | | }
|
| | | &:nth-child(3) {
|
| | | margin: 0;
|
| | | }
|
| | | &:nth-child(4) {
|
| | | margin: 0;
|
| | | }
|
| | | &:nth-child(5) {
|
| | | margin: 0;
|
| | | }
|
| | | image {
|
| | | width: 88rpx;
|
| | | height: 88rpx;
|
| | | border-radius: 24rpx;
|
| | | overflow: hidden;
|
| | | }
|
| | | span {
|
| | | font-size: 24rpx;
|
| | | font-weight: 400;
|
| | | color: #333333;
|
| | | margin-top: 16rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | </style> |
| | |
| | | /* 对响应成功做点什么 可使用async await 做异步操作*/
|
| | | const data = response.data
|
| | | // 自定义参数
|
| | | const custom = response.config?.custom
|
| | | if (data.code !== 200) { // 服务端返回的状态码不等于200,则reject() |
| | | uni.$u.toast(data.message) |
| | | if (data.code === 401) { |
| | | // console.log('未登录、登录失效'); |
| | | // 未登录、登录失效 |
| | | uni.reLaunch({ |
| | | url: '/pages/login/login' |
| | | }) |
| | | } |
| | | return Promise.reject(data)
|
| | | } |
| | | // const custom = response.config?.custom
|
| | | // if (data.code !== 200) { // 服务端返回的状态码不等于200,则reject() |
| | | // uni.$u.toast(data.message) |
| | | // if (data.code === 401) { |
| | | // // console.log('未登录、登录失效'); |
| | | // // 未登录、登录失效 |
| | | // uni.reLaunch({ |
| | | // url: '/pages/login/login' |
| | | // }) |
| | | // } |
| | | // return Promise.reject(data)
|
| | | // } |
| | | // console.log(data.data);
|
| | | return data.data || {}
|
| | | }, (response) => {
|