admin/src/views/stock/components/InDetail.vue
@@ -2,7 +2,7 @@ <GlobalWindow width="960px" :showConfirm="false" title="å ¥åºå详æ " :visible.sync="visible" :confirm-working="isWorking" @close="close" @confirm="confirm"> <div class="main"> <div class="title" style="color: #333333;"> <div class="title"> <span>å ¥åºåç¼å·ï¼{{ info.code }}</span> </div> <div class="title"> admin/src/views/stock/components/OutDetail.vue
@@ -2,7 +2,7 @@ <GlobalWindow width="960px" :showConfirm="false" title="åºåºå详æ " :visible.sync="visible" :confirm-working="isWorking" @close="close" @confirm="confirm"> <div class="main"> <div class="title" style="color: #333333;"> <div class="title"> <span>åºåºåç¼å·ï¼{{ info.code }}</span> </div> <div class="title"> admin/src/views/stock/in.vue
@@ -2,8 +2,8 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">æ°å»ºå ¥åºå</el-button> <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导åº</el-button> <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywoutinboundrecord:create']">æ°å»ºå ¥åºå</el-button> <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">导åº</el-button> </div> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="code" label="å ¥åºåå·" min-width="120" show-overflow-tooltip /> @@ -20,7 +20,7 @@ <el-table-column prop="createDate" label="æä½æ¶é´" min-width="140" show-overflow-tooltip /> <el-table-column prop="workTime" label="æä½" min-width="80" show-overflow-tooltip> <template v-slot="{ row }"> <span @click="handleDetail(row)" class="primaryColor pointer">æ¥ç详æ </span> <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">æ¥ç详æ </span> </template> </el-table-column> </el-table> admin/src/views/stock/out.vue
@@ -2,8 +2,8 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">æ°å»ºåºåºå</el-button> <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导åº</el-button> <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywoutinboundrecord:create']">æ°å»ºåºåºå</el-button> <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">导åº</el-button> </div> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="code" label="åºåºåå·" min-width="120" show-overflow-tooltip /> @@ -19,7 +19,7 @@ <el-table-column prop="createDate" label="æä½æ¶é´" min-width="140" show-overflow-tooltip /> <el-table-column prop="workTime" label="æä½" min-width="80" show-overflow-tooltip> <template v-slot="{ row }"> <span @click="handleDetail(row)" class="primaryColor pointer">æ¥ç详æ </span> <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">æ¥ç详æ </span> </template> </el-table-column> </el-table> admin/src/views/stock/query.vue
@@ -2,7 +2,7 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> <el-button @click="handleEx" v-permissions="['business:ywpatrolline:create']">导åº</el-button> <el-button @click="handleEx" v-permissions="['business:ywstock:exportExcel']">导åº</el-button> </div> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="materialId" label="èµäº§ç¼ç " min-width="100" show-overflow-tooltip /> admin/src/views/stock/record.vue
@@ -2,7 +2,7 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导åº</el-button> <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">导åº</el-button> </div> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="doneDate" label="åæ®æ¥æ" min-width="90" show-overflow-tooltip /> h5/api/staff.js
@@ -45,3 +45,10 @@ }) } export const myNoticesH5 = (data) => { return http({ url: 'visitsAdmin/cloudService/business/ywWorkDesk/myNoticesH5', method: 'post', data }) } h5/api/yw.js
@@ -141,6 +141,13 @@ data }) } // 微信æ«ä¸æ« export const getRecordByUserPoint = (data) => { return http({ url: 'visitsAdmin/cloudService/business/ywPatrolTaskRecord/getRecordByUserPoint', data }) } export const getFindByCode = (code) => { return http({ url: 'visitsAdmin/cloudService/business/ywDevice/findByCode?deviceCode=' + code, h5/pages.json
@@ -111,6 +111,13 @@ { "navigationBarTitleText" : "é®é¢ä¸æ¥" } }, { "path" : "pages/workOrder/wait", "style" : { "navigationBarTitleText" : "ä»»å¡ä¸å¿" } } ], "globalStyle": { h5/pages/index.vue
@@ -17,7 +17,8 @@ <view class="list"> <view v-for="item in list2" class="item" @click="itemClick(item)"> <image :src="item.img"></image> <view class="name">{{item.name}}</view> <view class="name">{{item.name}}</view> <view v-if="item.name == 'å¾ åä¸å¿' && taskNum" class="superscript">{{taskNum}}</view> </view> </view> <view class="loginout" @click="loginOut">éåºç»é</view> @@ -26,7 +27,8 @@ <script> import { logoutPost logoutPost, myNoticesH5 } from '@/api' export default { data() { @@ -49,6 +51,12 @@ url: '/pages/operation/device', img: require('@/static/home/ic_fangkebaobe@2x.png'), auth: 'weixin:menu:visitcar' }, { name: 'åºåçç¹', url: '/pages/inventory/index', img: require('@/static/home/ic_pandian@2x.png'), auth: 'weixin:menu:visitcar' }, ], list2: [{ @@ -62,12 +70,21 @@ url: '/pages/operation/record', img: require('@/static/home/ic_wodehuiyi@2x.png'), auth: 'weixin:menu:visitcar' }, { name: 'å¾ åä¸å¿', url: '/pages/workOrder/wait', img: require('@/static/home/ic_daiban@2x.png'), auth: 'weixin:menu:visitcar' }, ] ], taskNum: 0 } }, onLoad() { onShow() { myNoticesH5({ page: 1, capacity: 1,model: {status: 0}}).then(res => { this.taskNum = res.data.total }) }, methods: { itemClick(item) { @@ -132,8 +149,8 @@ display: flex; flex-direction: column; align-items: center; width: 25%; width: 25%; position: relative; image { width: 88rpx; height: 88rpx; @@ -143,6 +160,20 @@ .name { font-size: 26rpx; } .superscript{ height: 40rpx; width: 40rpx; position: absolute; top: -16rpx; right: 24rpx; background-color: red; color: #fff; font-size: 24rpx; display: flex; align-items: center; justify-content: center; border-radius: 50%; } } } h5/pages/inventory/index.vue
@@ -88,7 +88,6 @@ } } }) }, handleQuery() { this.list = [] h5/pages/login.vue
@@ -29,7 +29,9 @@ loginPost, getUserInfo, sendSMsPost, ywWxAuthorize ywWxAuthorize, getRecordByUserPoint } from '@/api' import { mapState, @@ -45,11 +47,19 @@ code: '' }, downTime: 0, code: '111' // code: '' code: '' } }, onLoad(option) { console.log('onLoad'); // https://zhcg.fnwtzx.com/#/pages/login?type=0&ywid=ywid if (option.ywid || option.ywid == 0) { uni.setStorageSync('ywinfo', { type: option.type, ywid: option.ywid }) } }, onShow() { // return var that = this @@ -66,19 +76,31 @@ ywWxAuthorize({ code: code || this.code }).then(res => { if (res.code === 200) { if (res.code === 200) { console.log('res', res); that.$store.commit('setOpenId', res.data.openid) if (res.data.token && res.data.token != '') { if (res.data.token && res.data.token != '') { that.$store.commit('setToken', res.data.token) getUserInfo().then(ress => { that.$store.commit('setUserInfo', ress.data) }) setTimeout(() => { uni.redirectTo({ url: "/pages/index" const ywinfo = uni.getStorageSync('ywinfo') || {} if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) { getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => { if(res.data && res.data.id){ uni.setStorageSync('ywinfo', {}) uni.redirectTo({ url: "/pages/polling/point?id=" + res.data.id }) } }) }, 300) } else { setTimeout(() => { uni.redirectTo({ url: "/pages/index" }) }, 300) } } } }) @@ -92,12 +114,6 @@ } }, // onBackPress(options) { // uni.redirectTo({ // url: '/pages/login/login' // }) // return true // }, methods: { ...mapMutations(["setToken", "setUserInfo"]), onLogin() { @@ -122,10 +138,24 @@ this.setToken(res.data) this.showToast('ç»å½æå') getUserInfo().then(ress => { this.setUserInfo(ress.data) uni.redirectTo({ url: "/pages/index" }) this.setUserInfo(ress.data) const ywinfo = uni.getStorageSync('ywinfo') || {} if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) { getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => { getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => { if(res.data && res.data.id){ uni.setStorageSync('ywinfo', {}) uni.redirectTo({ url: "/pages/polling/point?id=" + res.data.id }) } }) }) } else { uni.redirectTo({ url: "/pages/index" }) } }) } }) h5/pages/polling/detail.vue
@@ -129,10 +129,12 @@ }, (decodeText, decodeResult) => { if (decodeText) { //è¿édecodeTextå°±æ¯éè¿æ«æäºç»´ç å¾å°çå 容 this.stopScan(); //å ³éæ«ç åè½ this.stopScan(); //å ³éæ«ç åè½ const index = decodeText.indexOf('ywid') let pointCode = decodeText.slice(index + 5) getPointRecordByCode({ taskId: this.id, pointCode: decodeText pointCode }).then(ress => { if (ress.data) { uni.navigateTo({ h5/pages/polling/task.vue
@@ -117,10 +117,12 @@ }, (decodeText, decodeResult) => { if (decodeText) { //è¿édecodeTextå°±æ¯éè¿æ«æäºç»´ç å¾å°çå 容 const index = decodeText.indexOf('ywid') let pointCode = decodeText.slice(index + 5) this.stopScan(); //å ³éæ«ç åè½ getPointRecordByCode({ taskId: item.id, pointCode: decodeText pointCode }).then(ress=> { if(ress.data){ uni.navigateTo({ h5/pages/workOrder/wait.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,431 @@ <template> <view class="main_app"> <view class="tabs"> <view class="tab" :class="{active: queryStatus == 0}" @click="tabsClick(0)"> <text>å¾ å</text> <text class="border"></text> </view> <view class="tab" :class="{active: queryStatus == 1}" @click="tabsClick(1)"> <text>å·²å</text> <text class="border"></text> </view> </view> <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower"> <view class="list"> <view class="item" @click="itemClick(item)" v-for="item in list"> <view class="img"> <image v-if="item.type == 0 && item.status == 0" src="@/static/side/ic_pandian@2x.png"></image> <image v-if="item.type == 1 && item.status == 0" src="@/static/side/xunjianed.png"></image> <image v-if="item.type == 2 && item.status == 0" src="@/static/side/workordered.png"></image> <image v-if="item.type == 0 && item.status == 1" src="@/static/side/ic_pandian_grey@2x.png"></image> <image v-if="item.type == 1 && item.status == 1" src="@/static/side/xunjian.png"></image> <image v-if="item.type == 2 && item.status == 1" src="@/static/side/workorder.png"></image> </view> <view class="content"> <view class="title" v-if="item.obj"> <view>{{item.obj.key1}}</view> <view v-if="item.status == 0 && item.type == 2" class="status">å¾ å¤ç</view> <view v-if="item.status == 0 && item.param3 == 0 && (item.type == 0 || item.type == 1)" class="status">æªå¼å§ </view> <view v-if="item.status == 0 && item.param3 == 1 && (item.type == 0 || item.type == 1)" class="status green">è¿è¡ä¸</view> <view v-if="item.status == 1 && item.type == 2" class="status gray">å·²å¤ç</view> <view v-if="item.status == 1 && (item.type == 0 || item.type == 1)" class="status gray">已宿</view> </view> <template v-if="item.obj && item.type == 1"> <view class="text">任塿¥æï¼{{item.obj.key2}}</view> <view class="text">æ§è¡æ¶é´ï¼{{item.obj.key3}}</view> <view class="text"> <view class="">å·¡æ£è´è´£äººï¼{{item.obj.key4}}</view> <view class="btn" @click.stop="openSc(item)"> <image src="@/static/side/ic_saoma@2x.png" mode=""></image> <view v-if="item.status == 0" class="">æ«ç å·¡æ£</view> </view> </view> </template> <template v-if="item.obj && item.type == 0"> <view class="content"> <view class="text">çç¹æ¥æï¼{{item.obj.key2}}</view> <view class="text">çç¹ä»åºï¼{{item.obj.key3}}</view> <view class="text"> <view class="">çç¹åï¼{{item.obj.key4}}</view> <view v-if="item.status == 0 && item.param3 == 0" class="btn" @click.stop="startHandle(item)">å¼å§çç¹ </view> <view v-if="item.status == 0 && item.param3 == 1" class="btn" @click.stop="startHandle(item)">ç»§ç»çç¹ </view> </view> </view> </template> <template v-if="item.obj && item.type == 2"> <view class="content"> <view class="text">䏿¥æ¶é´ï¼{{item.obj.key2}}</view> <view class="text">ä½ç½®ç±»åï¼{{item.obj.key3}}</view> <view class="text">å·¥ååç±»ï¼{{item.obj.key4}}</view> </view> </template> </view> </view> </view> <view class="empty" v-if="list.length == 0"> <image src="@/static/empty.png" mode=""></image> <view class="">ææ æ°æ®</view> </view> </scroll-view> <!-- --> <view class="reader-box" @click="stopScan" v-if="isScaning"> <view class="reader" id="reader"></view> </view> </view> </template> <script> import { myNoticesH5, ywStocktakingBegin, getPointRecordByCode } from '@/api' import { Html5Qrcode } from 'html5-qrcode'; export default { data() { return { list: [], total: 0, page: 1, queryStatus: 0, html5Qrcode: null, isScaning: false, }; }, onShow() { this.page = 1 this.list = [] this.getList() }, methods: { tabsClick(val) { this.list = [] this.page = 1 this.queryStatus = val this.getList() }, itemClick(item) { if (item.objType == 0) { return uni.navigateTo({ url: `/pages/inventory/detail?id=${item.objId}` }) } else if (item.objType == 1) { // return uni.navigateTo({ url: `/pages/polling/detail?id=${item.objId}` }) } else { uni.navigateTo({ url: `/pages/workOrder/detail?id=${item.objId}` }) } }, startHandle(item) { if (item.param3 == 0) { uni.showModal({ content: 'çç¹æé´ä¸å¯è¿è¡åºå ¥åºæä½', success: (res) => { if (res.confirm) { ywStocktakingBegin(item.objId).then(() => { uni.navigateTo({ url: '/pages/inventory/detail?id=' + item.objId }) }) } } }) }else{ uni.navigateTo({ url: '/pages/inventory/detail?id=' + item.objId }) } }, getList() { const { page, total, list, queryStatus } = this myNoticesH5({ page, capacity: 20, model: { status: queryStatus } }).then(res => { this.list = [...this.list, ...res.data.records] this.list.forEach(item => { item.obj = JSON.parse(item.param2) }) console.log(this.list); this.total = res.data.total }) }, scrolltolower() { const { total, list } = this if (list.length < total) { this.page = this.page + 1 this.getList() } else { this.showToast('ææ æ´å¤æ°æ®') } }, openSc(item) { this.isScaning = true; Html5Qrcode.getCameras().then((devices) => { if (devices && devices.length) { this.html5Qrcode = new Html5Qrcode('reader'); this.html5Qrcode.start({ facingMode: 'environment' }, { focusMode: 'continuous', //设置è¿ç»èç¦æ¨¡å¼ fps: 5, //设置æ«ç è¯å«é度 qrbox: 280 //设置äºç»´ç æ«ææ¡å¤§å° }, (decodeText, decodeResult) => { if (decodeText) { //è¿édecodeTextå°±æ¯éè¿æ«æäºç»´ç å¾å°çå 容 this.stopScan(); //å ³éæ«ç åè½ const index = decodeText.indexOf('ywid') let pointCode = decodeText.slice(index + 5) getPointRecordByCode({ taskId: item.objId, pointCode }).then(ress => { if (ress.data) { uni.navigateTo({ url: '/pages/polling/point?id=' + ress.data.id }) } else { this.showToast('æªå¹é å°å·¡æ£ç¹,è¯·éæ°æ«æ') } }) } }, (err) => { // console.log(err); //éè¯¯ä¿¡æ¯ } ); } }); }, stopScan() { console.log('忢æ«ç ') this.isScaning = false; if (this.html5Qrcode) { this.html5Qrcode.stop(); } }, } } </script> <style lang="scss"> page { background-color: #f7f7f7; .main_app { padding: 0; height: 100vh; overflow: hidden; } .tabs { display: flex; width: 750rpx; margin: 12rpx 0rpx 0; border-bottom: 1rpx solid #E5E5E5; background-color: #fff; .tab { font-size: 30rpx; color: #666666; flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 88rpx; .name { display: flex; align-items: center; } .icon { width: 28rpx; height: 28rpx; margin-right: 10rpx; } .border { width: 54rpx; height: 6rpx; background-color: #fff; border-radius: 3rpx; margin-top: 24rpx; } } .active { font-weight: 600; font-size: 32rpx; color: #222222; .border { background-color: $primaryColor; } } } .scroll_Y { height: calc(100vh - 120rpx); .empty { padding-top: 260rpx; image { width: 360rpx; height: 360rpx; margin-bottom: 10rpx; } display: flex; flex-direction: column; justify-content: center; align-items: center; color: #999999; } } .list { // padding-top: 20rpx; .item { width: 100%; background: #FFFFFF; border-radius: 8rpx; display: flex; padding: 30rpx 24rpx; border-bottom: 1rpx solid #e5e5e5; .img { position: relative; margin-right: 20rpx; flex-shrink: 0; position: relative; image { width: 72rpx; height: 72rpx; } .dian { position: absolute; background-color: red; width: 18rpx; height: 18rpx; border-radius: 50%; top: -8rpx; right: -8rpx; } } .content { flex: 1; .title { font-weight: 500; font-size: 32rpx; color: #222222; margin-bottom: 6rpx; display: flex; align-items: center; justify-content: space-between; .status { color: $primaryColor; font-weight: 400; font-size: 28rpx; } .green { color: #0ADE79; } .gray { color: #999999; } } .text { font-size: 26rpx; color: #666666; height: 60rpx; display: flex; align-items: center; justify-content: space-between; .btn { background-color: $primaryColor; padding: 0 24rpx; height: 60rpx; border-radius: 30rpx; display: flex; align-items: center; color: #fff; image { width: 28rpx; height: 28rpx; margin-right: 6rpx; } } } .time { font-size: 26rpx; color: #999999; } } } } } .reader-box { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0, 0, 0, 0.5); } .reader { width: 100%; // width: 540rpx; // height: 540rpx; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style> h5/static/home/ic_daiban@2x.png
h5/static/home/ic_pandian@2x.png
h5/static/side/xiaoxi_ic_tongzhi@2x.png
h5/utils/config.js
@@ -1,6 +1,6 @@ export const baseUrl = 'gateway_interface/' // export const baseUrl = 'gateway_interface/' // export const baseUrl = 'http://192.168.0.173/gateway_interface/' // export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/' export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/' export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do` export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`