From d53f8346128633356e0b0996a78d2a039c97f4d7 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 20 一月 2025 18:39:53 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1
---
h5/pages.json | 28 +
h5/static/side/btn_jian@3x.png | 0
h5/pages/polling/detail.vue | 15
h5/pages/inventory/detail.vue | 665 +++++++++++++++++++++++++++
h5/static/side/btn_jian_grey@2x.png | 0
h5/static/ic_paysuccess@2x.png | 0
h5/pages/operation/device.vue | 13
h5/static/side/ic_pandian@2x.png | 0
h5/static/side/ic_pandian_grey@2x.png | 0
h5/api/yw.js | 48 ++
h5/pages/workOrder/detail.vue | 2
h5/pages/polling/point.vue | 89 +++
h5/pages/workOrder/problemEdit.vue | 313 +++++++++++++
h5/pages/workOrder/result.vue | 39 +
h5/pages/inventory/index.vue | 213 ++++++++
h5/static/side/btn_jia@3x.png | 0
16 files changed, 1,407 insertions(+), 18 deletions(-)
diff --git a/h5/api/yw.js b/h5/api/yw.js
index 5e211b0..5fb57ba 100644
--- a/h5/api/yw.js
+++ b/h5/api/yw.js
@@ -28,6 +28,12 @@
data
})
}
+export const ywProblemCreate = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywProblem/create',
+ data
+ })
+}
// 椤圭洰鍒楄〃
export const ywProjectPost = (data) => {
return http({
@@ -134,4 +140,46 @@
url: 'visitsAdmin/cloudService/business/ywPatrolTaskRecord/getPointRecordByCode',
data
})
+}
+export const getFindByCode = (code) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywDevice/findByCode?deviceCode=' + code,
+ method: 'get',
+ })
+}
+export const getYwStocktaking = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/page',
+ data
+ })
+}
+export const ywStocktakingDetail = (id) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/' + id,
+ method: 'get'
+ })
+}
+export const ywStocktakingBegin = (id) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/beginById?id=' + id,
+ method: 'get'
+ })
+}
+export const ywStocktaFinishById = (id) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktaking/finishById?id=' + id,
+ method: 'get'
+ })
+}
+export const getYwStocktakingRecord = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktakingRecord/page',
+ data
+ })
+}
+export const takingDataOpen = (data) => {
+ return http({
+ url: 'visitsAdmin/cloudService/business/ywStocktakingRecord/takingData',
+ data
+ })
}
\ No newline at end of file
diff --git a/h5/pages.json b/h5/pages.json
index d255e6d..0e89470 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -83,6 +83,34 @@
{
"navigationBarTitleText" : "閫夋嫨浜哄憳"
}
+ },
+ {
+ "path" : "pages/inventory/index",
+ "style" :
+ {
+ "navigationBarTitleText" : "搴撳瓨鐩樼偣"
+ }
+ },
+ {
+ "path" : "pages/inventory/detail",
+ "style" :
+ {
+ "navigationBarTitleText" : "鐩樼偣鍗�"
+ }
+ },
+ {
+ "path" : "pages/workOrder/problemEdit",
+ "style" :
+ {
+ "navigationBarTitleText" : "闂涓婃姤"
+ }
+ },
+ {
+ "path" : "pages/workOrder/result",
+ "style" :
+ {
+ "navigationBarTitleText" : "闂涓婃姤"
+ }
}
],
"globalStyle": {
diff --git a/h5/pages/inventory/detail.vue b/h5/pages/inventory/detail.vue
new file mode 100644
index 0000000..02fec9f
--- /dev/null
+++ b/h5/pages/inventory/detail.vue
@@ -0,0 +1,665 @@
+<template>
+ <view class="main_app">
+ <view class="main_head">
+ <view class="tabs">
+ <view class="tab" :class="{active: activeTab == 0}" @click="tabsClick(0)">
+ <text>鏈洏({{info.unFinishAmount || 0}})</text>
+ <text class="border"></text>
+ </view>
+ <view class="tab" :class="{active: activeTab == 1}" @click="tabsClick(1)">
+ <text>宸茬洏({{info.finishAmount || 0}})</text>
+ <text class="border"></text>
+ </view>
+ </view>
+ <view class="head_wrap">
+ <view class="search_wrap">
+ <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+ <input v-model="param.materialCode" @confirm="handleQuery" type="text" placeholder="鎼滅储璧勪骇缂栫爜/璧勪骇鍚嶇О"
+ placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <!-- -->
+ <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
+ <view class="list">
+ <view class="item" v-for="item in list">
+ <view class="line">
+ <view class="title">{{item.materialName}}</view>
+ <view class="status red" v-if="item.type == 1">鐩樹簭</view>
+ <view class="status primaryColor" v-if="item.type == 2">鐩樼泩</view>
+ </view>
+ <view class="line">璧勪骇缂栫爜锛歿{item.materialCode}}</view>
+ <view class="line">鏉$爜锛歿{item.materialQrcode}}</view>
+ <view class="line">瑙勬牸鍨嬪彿锛歿{item.materialAttr}}</view>
+ <view class="line">
+ <view class="">璐﹂潰鏁伴噺锛歿{item.stock}}{{item.materialUnitName}}</view>
+ <view v-if="item.status == 0" @click="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
+ </view>
+ <view class="static" v-if="item.status == 1">
+ <view class="ite">
+ <view class="la">璐﹂潰鏁伴噺锛�</view>
+ <view class="val">{{item.stock}}</view>
+ </view>
+ <view class="spi"></view>
+ <view class="ite">
+ <view class="la">瀹為檯鏁伴噺锛�</view>
+ <view class="val" :class="{
+ primaryColor: item.type == 2,
+ red: item.type == 1,
+ }">{{item.actStock}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ <view class="footer_btn">
+ <view @click="openQrcode" v-if="activeTab== 0" class="sweep">
+ <image src="@/static/side/ic_saoma@2x.png" mode=""></image>
+ <view class="">鎵爜鐩樼偣</view>
+ </view>
+ <view @click="showTip = true" v-if="activeTab== 1" class="sweep sub_result">
+ <view class="">鎻愪氦鐩樼偣缁撴灉</view>
+ </view>
+ </view>
+ <!-- -->
+ <u-popup :show="showModal" :round="10" @close="showModal = false" closeOnClickOverlay>
+ <view class="modal_wrap">
+ <view class="modal_title">鎵ц鐩樼偣</view>
+ <view class="title">{{modalForm.materialName}}</view>
+ <view class="item">璧勪骇缂栫爜锛歿{modalForm.materialCode}}</view>
+ <view class="item">鏉$爜锛歿{modalForm.materialQrcode}}</view>
+ <view class="item">鍝佺墝锛歿{modalForm.materialBrand}}</view>
+ <view class="item">瑙勬牸鍨嬪彿锛歿{modalForm.materialAttr}}</view>
+ <view class="item">鎵�鍦ㄤ粨搴擄細{{modalForm.warehouseName}}</view>
+ <view class="content">
+ <view class="line">
+ <view class="la">璐﹂潰鏁伴噺锛�</view>
+ <view class="val">
+ <view class="wrap">{{modalForm.stock}}</view>
+ <view class="unit">{{modalForm.materialUnitName}}</view>
+ </view>
+ </view>
+ <view class="line">
+ <view class="la">鐩樼偣鏁伴噺锛�</view>
+ <view class="val">
+ <view class="wrap">
+ <image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
+ <image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
+ <input type="number" v-model="modalForm.actStock"></input>
+ <image @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode=""></image>
+ </view>
+ <view class="unit">{{modalForm.materialUnitName}}</view>
+ </view>
+ </view>
+ </view>
+ <view class="remark">
+ <view class="la">澶囨敞锛�</view>
+ <textarea v-model="modalForm.remark" placeholder="璇峰~鍐欏娉�" :maxlength="-1" placeholder-class="placeholder9"
+ cols="30" rows="10"></textarea>
+ </view>
+ <view class="btns">
+ <view class="btn" @click="showModal = false">鍙栨秷</view>
+ <view class="btn sub" @click="onSubmit">鎻愪氦</view>
+ </view>
+ </view>
+ </u-popup>
+ <!-- -->
+ <u-popup :show="showTip" mode="center" :round="10" @close="showTip = false" closeOnClickOverlay>
+ <view class="modal_t">
+ <view class="h1">娓╅Θ鎻愮ず</view>
+ <view class="content">
+ <view v-if="info.unFinishAmount > 0">杩樻湁<text class="red">{{ info.unFinishAmount }}</text>椤圭墿鏂欐湭鐩樼偣</view>
+ <view>鎻愪氦鍚庡皢鏃犳硶淇敼</view>
+ </view>
+ <view class="btns">
+ <view class="btn" @click="showTip = false">鍙栨秷</view>
+ <view class="btn sub" @click="tipSub">纭鎻愪氦</view>
+ </view>
+ </view>
+ </u-popup>
+ </view>
+ <!-- -->
+ <view class="reader-box" @click="stopScan" v-if="isScaning">
+ <view class="reader" id="reader"></view>
+ </view>
+ </view>
+</template>
+
+<script>
+ import {
+ ywStocktakingDetail,
+ getYwStocktakingRecord,
+ takingDataOpen,
+ ywStocktaFinishById
+ } from '@/api'
+ import {
+ Html5Qrcode
+ } from 'html5-qrcode';
+ export default {
+ data() {
+ return {
+ param: {},
+ info: {},
+ id: '',
+ activeTab: 0,
+
+ list: [],
+ page: 0,
+ total: 0,
+
+ showModal: false,
+ showTip: false,
+ modalForm: {},
+
+ html5Qrcode: null,
+ isScaning: false,
+
+ };
+ },
+ onLoad(op) {
+ this.id = op.id
+ this.getDetail()
+ this.getList()
+ },
+ methods: {
+ checkSub() {
+ const {
+ modalForm
+ } = this
+ // let str = modalForm.unFinishAmount > 0 ? '杩樻湁涓夐」鐗╂枡'
+ },
+ getDetail() {
+ const {
+ id
+ } = this
+ ywStocktakingDetail(id).then(res => {
+ this.info = res.data
+
+ })
+ },
+ handleQuery() {
+ this.list = []
+ this.page = 1
+ this.getList()
+ },
+ getList() {
+ const {
+ page,
+ activeTab,
+ id,
+ param
+ } = this
+ getYwStocktakingRecord({
+ capacity: 20,
+ page,
+ model: {
+ status: activeTab,
+ stocktakingId: id,
+ ...param
+ }
+ }).then(res => {
+ this.list = [...this.list, ...res.data.records]
+ this.total = res.data.total
+ if(this.param.materialQrcode && this.list.length == 1){
+ this.openEheck(this.list[0])
+ this.$set(this.param, 'materialQrcode', null)
+ }
+
+
+ })
+ },
+ scrolltolower() {
+ const {
+ total,
+ list
+ } = this
+ if (list.length < total) {
+ this.page = this.page + 1
+ this.getList()
+ } else {
+ this.showToast('鏆傛棤鏇村鏁版嵁')
+ }
+ },
+ openEheck(item) {
+ this.modalForm = {
+ ...item
+ }
+ this.showModal = true
+ },
+ onSubmit() {
+ const {
+ modalForm
+ } = this
+ if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
+ takingDataOpen({
+ ...modalForm
+ }).then(res => {
+ if (res.code == 200) {
+ this.showToast('鎻愪氦鎴愬姛')
+ this.handleQuery()
+ this.getDetail()
+ this.showModal = false
+ }
+ })
+ },
+ changeAct(val) {
+ const actStock = this.modalForm.actStock || 0
+ this.$set(this.modalForm, 'actStock', actStock + val)
+ },
+ tabsClick(val) {
+ this.activeTab = val
+ this.page = 0
+ this.list = []
+ this.getList()
+ },
+ tipSub() {
+ const { info } = this
+ ywStocktaFinishById(info.id).then(res => {
+ this.showTip = false
+ uni.navigateBack()
+ })
+
+ },
+ openQrcode() {
+ 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()
+ this.$set(this.param, 'materialQrcode', decodeText)
+ this.handleQuery()
+ }
+ },
+ (err) => {
+ // console.log(err); //閿欒淇℃伅
+ }
+ );
+ }
+ });
+ },
+
+ stopScan() {
+ console.log('鍋滄鎵爜')
+ this.isScaning = false;
+ if (this.html5Qrcode) {
+ this.html5Qrcode.stop();
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ .main_app {
+ padding: 0 30rpx;
+ overflow: hidden;
+ }
+
+ .tabs {
+ display: flex;
+ width: 750rpx;
+ margin: 12rpx -30rpx 20rpx;
+ border-bottom: 1rpx solid #E5E5E5;
+
+ .tab {
+ font-size: 30rpx;
+ color: #666666;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-end;
+ height: 72rpx;
+
+ .name {
+ display: flex;
+ align-items: center;
+ }
+
+ .border {
+ width: 54rpx;
+ height: 6rpx;
+ background-color: #fff;
+ border-radius: 3rpx;
+ margin-top: 12rpx;
+ }
+ }
+
+ .active {
+ font-weight: 600;
+ font-size: 32rpx;
+ color: #222222;
+
+ .border {
+ background-color: $primaryColor;
+ }
+
+ }
+
+ }
+
+ .head_wrap {
+ display: flex;
+ align-items: center;
+ margin-bottom: 36rpx;
+
+ .search_wrap {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 76rpx;
+ background: #F7F7F7;
+ border-radius: 38rpx;
+ padding-left: 30rpx;
+
+ input {
+ flex: 1;
+ }
+
+ .search {
+ width: 28rpx;
+ height: 28rpx;
+ }
+ }
+
+ }
+
+ .scroll_Y {
+ height: calc(100vh - 350rpx);
+ }
+
+ .list {
+
+ .item {
+ border-bottom: 1rpx solid #E5E5E5;
+ padding-bottom: 24rpx;
+ margin-bottom: 16rpx;
+
+ .title {
+ font-weight: 600;
+ font-size: 34rpx;
+ color: #222222;
+ margin-bottom: 10rpx;
+ }
+
+ .line {
+ height: 60rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ color: #666666;
+
+ .btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 60rpx;
+ padding: 0 20rpx;
+ background: #0068FF;
+ box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 30rpx;
+ font-size: 26rpx;
+ color: #FFFFFF;
+ }
+ }
+
+ .static {
+ display: flex;
+ height: 84rpx;
+ background: #F7F7F7;
+ font-size: 30rpx;
+ margin-top: 12rpx;
+ padding: 16rpx 0;
+
+ .spi {
+ border: 1rpx solid #E5E5E5;
+ }
+
+ .ite {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .val {
+ font-weight: 500;
+ }
+ }
+ }
+ }
+ }
+
+ .footer_btn {
+ padding: 20rpx 40rpx 0;
+ border-top: 1px solid #e5e5e5;
+ width: 750rpx;
+ margin: 0 -30rpx;
+
+ .sweep {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ font-weight: 500;
+ width: 670rpx;
+ height: 88rpx;
+ background: #0068FF;
+ box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 44rpx;
+ color: #FFFFFF;
+ }
+
+ .sub_result {
+ background-color: #fff;
+ color: #FF0000;
+ border: 1rpx solid #FF0000;
+ box-shadow: none
+ }
+
+ image {
+ width: 32rpx;
+ height: 32rpx;
+ margin-right: 6rpx;
+ }
+ }
+
+ .modal_wrap {
+ padding: 36rpx 30rpx;
+
+ .modal_title {
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #222222;
+ margin-bottom: 40rpx;
+ text-align: center;
+ }
+
+ .title {
+ font-weight: 600;
+ font-size: 34rpx;
+ color: #222222;
+ }
+
+ .item {
+ font-size: 28rpx;
+ color: #666666;
+ height: 56rpx;
+ display: flex;
+ align-items: center;
+ }
+
+ .content {
+ border-top: 1rpx solid #E5E5E5;
+ margin-top: 16rpx;
+
+ .line {
+ height: 84rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .la {
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #222222;
+ }
+
+ .val {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ flex: 1;
+
+ .wrap {
+ display: flex;
+ align-items: center;
+
+ input {
+ width: 120rpx;
+ height: 72rpx;
+ border-radius: 8rpx;
+ border: 2rpx solid #0068FF;
+ margin: 0 16rpx;
+ padding: 0 10rpx;
+ text-align: center;
+ }
+ }
+
+ .unit {
+ font-size: 30rpx;
+ color: #666666;
+ margin-left: 20rpx;
+ }
+ }
+
+ image {
+ width: 72rpx;
+ height: 72rpx;
+ }
+ }
+ }
+
+ .remark {
+ margin-top: 16rpx;
+
+ .la {
+ font-size: 30rpx;
+ color: #222222;
+ margin-bottom: 16rpx;
+ }
+
+ textarea {
+ width: 690rpx;
+ height: 240rpx;
+ background: #F7F7F7;
+ border-radius: 12rpx;
+ padding: 10rpx 20rpx;
+ }
+ }
+
+ .btns {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 80rpx;
+
+ .btn {
+ width: 336rpx;
+ height: 88rpx;
+ border-radius: 44rpx;
+ border: 2rpx solid $primaryColor;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ color: $primaryColor;
+ }
+
+ .sub {
+ background-color: $primaryColor;
+ color: #fff;
+ }
+ }
+ }
+
+
+ .modal_t {
+ width: 520rpx;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+
+ .h1 {
+ height: 86rpx;
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #333333;
+ display: flex;
+ align-items: flex-end;
+ justify-content: center;
+ }
+
+ .content {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 30rpx 0;
+ }
+
+ .btns {
+ height: 102rpx;
+ display: flex;
+ align-items: center;
+ border-top: 1rpx solid #E5E5E5;
+
+ .btn {
+ height: 102rpx;
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-right: 1rpx solid #E5E5E5;
+ font-weight: 400;
+ font-size: 32rpx;
+ color: #999999;
+
+ &:nth-last-child(1) {
+ border-right: none;
+ }
+ }
+
+ .sub {
+ color: $primaryColor;
+ }
+ }
+ }
+
+ .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>
\ No newline at end of file
diff --git a/h5/pages/inventory/index.vue b/h5/pages/inventory/index.vue
new file mode 100644
index 0000000..140a4e9
--- /dev/null
+++ b/h5/pages/inventory/index.vue
@@ -0,0 +1,213 @@
+<template>
+ <view class="main_app">
+ <view class="head_wrap">
+ <view class="search_wrap">
+ <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+ <input v-model="param.name" @confirm="handleQuery" type="text" placeholder="鎼滅储鐩樼偣鍗曞悕绉�"
+ placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <!-- -->
+ <view class="list">
+ <view class="item" @click="itemClick(item)" v-for="item in list">
+ <image v-if="item.status == 0 || item.status == 1" class="img" src="@/static/side/ic_pandian@2x.png" mode="">
+ </image>
+ <image v-else class="img" src="@/static/side/ic_pandian_grey@2x.png" mode=""></image>
+ <view class="content">
+ <view class="head">
+ <view class="title">{{item.name}}</view>
+ <view class="status" v-if="item.status == 0">鏈紑濮�</view>
+ <view class="status green" v-if="item.status == 1">鐩樼偣涓�</view>
+ <view class="status gray" v-if="item.status == 2">宸插畬鎴�</view>
+ <view class="status gray" v-if="item.status == 3">宸插彇娑�</view>
+ </view>
+ <view class="line">鐩樼偣鏃ユ湡锛歿{item.planDate}}</view>
+ <view class="line">鐩樼偣浠撳簱锛歿{item.warehouseName}}</view>
+ <view class="line">
+ <view class="">鐩樼偣浜哄憳锛歿{item.userName}}</view>
+ <view class="btn" v-if="item.status == 0" @click="startHandle(item)">寮�濮嬬洏鐐�</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ import {
+ getYwStocktaking,
+ ywStocktakingBegin
+ } from '@/api'
+ export default {
+ data() {
+ return {
+ param: {},
+ list: [],
+ page: 0,
+ total: 0,
+ };
+ },
+ onShow() {
+ this.handleQuery()
+ },
+ methods: {
+ getList() {
+ const {
+ page,
+ param
+ } = this
+ getYwStocktaking({
+ capacity: 20,
+ page,
+ model: {
+ ...param
+ }
+ }).then(res => {
+ this.list = [...this.list, ...res.data.records]
+ this.total = res.data.total
+ })
+ },
+ itemClick(item) {
+ if(item.status == 1){
+ uni.navigateTo({
+ url: '/pages/inventory/detail?id=' + item.id
+ })
+ }
+ },
+ startHandle(item) {
+ uni.showModal({
+ content: '鐩樼偣鏈熼棿涓嶅彲杩涜鍑哄叆搴撴搷浣�',
+ success: (res) => {
+ if (res.confirm) {
+ ywStocktakingBegin(item.id).then(() => {
+ uni.navigateTo({
+ url: '/pages/inventory/detail?id=' + item.id
+ })
+ })
+
+ }
+ }
+ })
+
+ },
+ handleQuery() {
+ this.list = []
+ this.page = 1
+ this.getList()
+ },
+ scrolltolower() {
+ const {
+ total,
+ list
+ } = this
+ if (list.length < total) {
+ this.page = this.page + 1
+ this.getList()
+ } else {
+ this.showToast('鏆傛棤鏇村鏁版嵁')
+ }
+ },
+ }
+ }
+</script>
+
+<style lang="scss">
+ .main_app {
+ padding: 10rpx 30rpx 0;
+ font-size: 28rpx;
+ }
+
+ .head_wrap {
+ display: flex;
+ align-items: center;
+ margin-bottom: 40rpx;
+
+ .search_wrap {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 76rpx;
+ background: #F7F7F7;
+ border-radius: 38rpx;
+ padding-left: 30rpx;
+
+ input {
+ flex: 1;
+ }
+
+ .search {
+ width: 28rpx;
+ height: 28rpx;
+ }
+ }
+
+ }
+
+ .list {
+ height: calc(100vh - 136rpx);
+
+ .item {
+ display: flex;
+ border-bottom: 1rpx solid #E5E5E5;
+ padding-bottom: 28rpx;
+ margin-bottom: 20rpx;
+ .img {
+ width: 80rpx;
+ height: 80rpx;
+ background: rgba(0, 104, 255, 0.08);
+ border-radius: 12rpx;
+ margin-right: 24rpx;
+ }
+
+ .content {
+ flex: 1;
+
+ .head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 12rpx;
+
+ .title {
+ font-weight: 600;
+ font-size: 34rpx;
+ color: #222222;
+ }
+
+ .status {
+ color: $primaryColor;
+ }
+
+ .green {
+ color: #0ADE79;
+ }
+
+ .gray {
+ color: #AAAAAA;
+ }
+ }
+
+ .line {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: #666666;
+ height: 60rpx;
+
+ .btn {
+ width: 144rpx;
+ height: 60rpx;
+ background: $primaryColor;
+ box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 30rpx;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 26rpx;
+ }
+ }
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue
index 414be7b..25d7921 100644
--- a/h5/pages/operation/device.vue
+++ b/h5/pages/operation/device.vue
@@ -84,7 +84,7 @@
uploadUrl,
ywDevicePost,
ywDeviceCreate,
- getPointRecordByCode
+ getFindByCode
} from '@/api'
import dayjs from 'dayjs';
import {
@@ -285,15 +285,14 @@
qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
},
(decodeText, decodeResult) => {
- if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
- this.$set(this.param, 'deviceCode', decodeText)
+ if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
this.stopScan(); //鍏抽棴鎵爜鍔熻兘
- getPointRecordByCode({
- // taskId: this.id,
- pointCode: decodeText
- }).then(ress => {
+ getFindByCode(decodeText).then(ress => {
if (ress.data) {
console.log('ress', ress.data);
+ this.$set(this.param, 'deviceCode', ress.data.code)
+ this.$set(this.param, 'deviceId', ress.data.id)
+ this.$set(this.param, 'deviceName', ress.data.name)
} else {
this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�')
}
diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue
index 45ad7fb..2218e35 100644
--- a/h5/pages/polling/detail.vue
+++ b/h5/pages/polling/detail.vue
@@ -48,7 +48,7 @@
<view class="la">宸℃鏃堕棿锛�</view>
<view class="val">
<text>{{item.dealDate}}</text>
- <text v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text>
+ <text @click="detailClick(item)" v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text>
</view>
</view>
</template>
@@ -60,6 +60,7 @@
<view class="sub_btn">鎵爜宸℃</view>
</view>
<!-- -->
+
<view class="reader-box" @click="stopScan" v-if="isScaning">
<view class="reader" id="reader"></view>
</view>
@@ -101,7 +102,9 @@
},
],
html5Qrcode: null,
- isScaning: false,
+ isScaning: false,
+
+
};
},
onLoad(option) {
@@ -155,12 +158,18 @@
if (this.html5Qrcode) {
this.html5Qrcode.stop();
}
- },
+ },
+
itemClick(item) {
if (!this.flag) return
uni.navigateTo({
url: '/pages/polling/point?id=' + item.id
})
+ },
+ detailClick(item) {
+ uni.navigateTo({
+ url: '/pages/polling/point?id=' + item.id
+ })
},
getDetail() {
const {
diff --git a/h5/pages/polling/point.vue b/h5/pages/polling/point.vue
index 1288d07..122737b 100644
--- a/h5/pages/polling/point.vue
+++ b/h5/pages/polling/point.vue
@@ -28,7 +28,12 @@
<view class="files">
<view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.multifileList" :key="i">
<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
+ <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
+ <view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
+ <video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
+ class="video" :enable-progress-gesture="false" muted />
+ <image src="@/static/play.png" class="play" mode=""></image>
+ </view>
</view>
</view>
<view v-if="info.dealInfo" class="desc">{{ info.dealInfo }}</view>
@@ -96,7 +101,13 @@
@cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
<u-picker :show="isShowRes" keyName="name" @cancel="isShowRes = false" @confirm='confirmRes'
:columns="columns"></u-picker>
-
+ <!-- -->
+ <view v-if="videoPlay" class="video_app">
+ <video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
+ :src="videoUrl" @fullscreenchange="screenChange"></video>
+ <view class="bg" @click="closeVideo"></view>
+ </view>
+ <!-- -->
</view>
</template>
@@ -135,7 +146,11 @@
name: '璺宠繃'
},
]
- ],
+ ],
+
+ videoPlay: false,
+ videoContext: null,
+ videoUrl: ''
};
},
onLoad(option) {
@@ -204,6 +219,26 @@
this.$set(this.handleParam, 'dealStatus', e.value[0].id)
this.$set(this.handleParam, 'dealName', e.value[0].name)
this.isShowRes = false
+ },
+ videoClick(item) {
+ this.videoPlay = true;
+ this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶
+ this.videoUrl = item.fileurlFull;
+ this.videoContext.requestFullScreen();
+ this.$nextTick(() => {
+ this.videoContext.play();
+ })
+ },
+ screenChange(e) {
+ let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞�
+ if (!fullScreen) {
+ //閫�鍑哄叏灞�
+ this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙
+ }
+ },
+ closeVideo() {
+ this.videoPlay = false
+ this.videoContext = null
},
fileDel(str, i) {
this[str].splice(i, 1);
@@ -470,11 +505,51 @@
image {
width: 100%;
height: 100%;
+ }
+ video {
+ width: 100%;
+ height: 100%;
}
-
- video {
- width: 100%;
- height: 100%;
+ .video_wrap {
+ position: relative;
+ border: 1px solid;
+ width: 156rpx;
+ height: 156rpx;
+ border-radius: 4rpx;
+
+ .play {
+ width: 60rpx !important;
+ height: 60rpx !important;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
}
+ }
+
+ .video_app {
+ overflow: hidden;
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ align-items: center;
+ z-index: 9990;
+
+ .bg {
+ background-color: rgba(0, 0, 0, .6);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: -1;
+ }
+
+ video {
+ width: 100%;
+ height: 42vh;
+ }
}
</style>
\ No newline at end of file
diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue
index c112a22..1a4b1a1 100644
--- a/h5/pages/workOrder/detail.vue
+++ b/h5/pages/workOrder/detail.vue
@@ -14,7 +14,7 @@
<!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
<view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
<video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
- class="video" :enable-progress-gesture="false" autoplay muted />
+ class="video" :enable-progress-gesture="false" muted />
<image src="@/static/play.png" class="play" mode=""></image>
</view>
</view>
diff --git a/h5/pages/workOrder/problemEdit.vue b/h5/pages/workOrder/problemEdit.vue
new file mode 100644
index 0000000..0cf8f09
--- /dev/null
+++ b/h5/pages/workOrder/problemEdit.vue
@@ -0,0 +1,313 @@
+<template>
+ <view class="main_app">
+ <view class="list">
+ <view class="item">
+ <view class="la">浣嶇疆</view>
+ <view class="line input_wrap">
+ <input type="text" v-model="param.position" :maxlength="50" placeholder="璇疯緭鍏ュ彂鐜伴棶棰樼殑璇︾粏浣嶇疆" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <view class="item">
+ <view class="la"><text class="red">*</text>鎻忚堪</view>
+ <view class="line">
+ <textarea :maxlength="300" v-model="param.content" placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐�,渚夸簬宸ヤ綔浜哄憳鍙婃椂澶勭悊" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <view class="item">
+ <view class="la">鐜板満鐓х墖</view>
+ <view class="upload_wrap">
+ <view class="upload_file" @click="showUpload = true">
+ <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+ <view class="mt6">鍥剧墖/瑙嗛</view>
+ </view>
+ <view class="upload_file" v-for="(item, i) in fileList" :key="i">
+ <u-icon class="close" size="20" name="close-circle-fill" color="red"
+ @click="fileDel('fileList', i)"></u-icon>
+ <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
+ <video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull" :controls="false"></video>
+ </view>
+ </view>
+ </view>
+ <view class="item">
+ <view class="la"><text class="red">*</text>涓婃姤浜�</view>
+ <view class="line input_wrap">
+ <input v-model="param.name" type="text" :maxlength="10" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ <view class="item">
+ <view class="la"><text class="red">*</text>涓婃姤浜虹數璇�</view>
+ <view class="line input_wrap">
+ <input v-model="param.phone" type="tel" :maxlength="18" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+ </view>
+ </view>
+ </view>
+ <view class="sub_btn" @click="onSubmit">鎻愪氦</view>
+ <!-- -->
+ <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
+ <view class="sel_upload_wrap">
+ <view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
+ <view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
+ </view>
+ </u-popup>
+ <!-- -->
+
+ </view>
+</template>
+
+<script>
+ import {
+ uploadUrl,
+ ywProblemCreate,
+ } from '@/api'
+ import dayjs from 'dayjs';
+ export default {
+ data() {
+ return {
+ param: {},
+ showUpload: false,
+ fileList: [],
+
+ };
+ },
+ onLoad() {
+ },
+ methods: {
+ onSubmit() {
+ const {
+ param,
+ fileList
+ } = this
+ if (!param.content) return this.showToast('璇疯緭鍏ョ幇鍦烘儏鍐垫弿杩�')
+ if (!param.name) return this.showToast('璇疯緭鍏ヤ笂鎶ヤ汉濮撳悕')
+ if (!param.phone) return this.showToast('璇疯緭鍏ヤ笂鎶ヤ汉鐢佃瘽')
+ ywProblemCreate({
+ ...param,
+ fileList
+ }).then(res => {
+ this.showToast('鎻愪氦鎴愬姛')
+ this.param = {}
+ uni.navigateTo({
+ url: '/pages/workOrder/result'
+ })
+ })
+ },
+ fileDel(str, i) {
+ this[str].splice(i, 1);
+ },
+ uploadImage() {
+ this.showUpload = false;
+ let token = uni.getStorageSync('token') || '';
+ uni.chooseImage({
+ count: 6,
+ success: chooseImageRes => {
+ uni.showLoading({
+ title: '涓婁紶涓�',
+ mask: true
+ });
+ const tempFilePaths = chooseImageRes.tempFilePaths;
+ let imgs = tempFilePaths.map((value, index) => {
+ return {
+ name: 'file',
+ uri: value
+ };
+ });
+ uni.uploadFile({
+ url: `${uploadUrl}`,
+ files: imgs,
+ name: 'file',
+ formData: {
+ folder: 'YW_WORKORDER_FILE'
+ },
+ header: {
+ Dm_user_token: token
+ },
+ success: uploadFileRes => {
+ let res = JSON.parse(uploadFileRes.data);
+ if (res.data && res.data.length > 0) {
+ res.data.forEach(i => {
+ i.type = 0;
+ i.fileurl = i.imgaddr;
+ i.fileurlFull = i.url;
+ if(this.fileList.length < 9){
+ this.fileList.push(i);
+ }
+ });
+ }
+ },
+ fail(err) {
+ console.log('err', err);
+ },
+ complete() {
+ uni.hideLoading();
+ // if (i === chooseImageRes.tempFilePaths.length - 1) {
+ // uni.hideLoading()
+ // }
+ }
+ });
+ }
+ });
+ },
+ uploadVideo() {
+ this.showUpload = false;
+ let token = uni.getStorageSync('token') || '';
+ uni.chooseVideo({
+ success: chooseImageRes => {
+ uni.showLoading({
+ title: '涓婁紶涓�',
+ mask: true
+ });
+ uni.uploadFile({
+ url: `${uploadUrl}`,
+ filePath: chooseImageRes.tempFilePath,
+ header: {
+ Dm_user_token: token
+ },
+ name: 'file',
+ formData: {
+ folder: 'YW_WORKORDER_FILE'
+ },
+ success: uploadFileRes => {
+ let res = JSON.parse(uploadFileRes.data);
+ if (res.data && res.data.length > 0) {
+ res.data.forEach(i => {
+ i.type = 1;
+ i.fileurl = i.imgaddr;
+ i.fileurlFull = i.url;
+ if(this.fileList.length < 9){
+ this.fileList.push(i);
+ }
+ });
+ }
+ },
+ complete() {
+ uni.hideLoading();
+ }
+ });
+ }
+ });
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .list {
+
+ .item {
+ .la {
+ margin-top: 30rpx;
+ }
+
+ .line {
+
+ textarea {
+ box-sizing: border-box;
+ width: 690rpx;
+ height: 200rpx;
+ background-color: #f7f7f7;
+ font-size: 28rpx;
+ color: #333333;
+ padding: 24rpx;
+ border-radius: 8rpx;
+ margin-bottom: 30rpx;
+ margin-top: 20rpx;
+ }
+ }
+
+ .sel_wrap {
+ height: 90rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1rpx solid #E5E5E5;
+ }
+ .input_wrap{
+ width: 100%;
+ height: 90rpx;
+ display: flex;
+ align-items: center;
+ border-bottom: 1rpx solid #e5e5e5;
+ input{
+ width: 100%;
+ }
+ }
+
+ .upload_wrap {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 30rpx;
+ }
+
+ .upload_file {
+ margin-top: 24rpx;
+ width: 156rpx;
+ height: 156rpx;
+ margin-right: 20rpx;
+ border: 2rpx solid #e5e5e5;
+ background: #f7f7f7;
+ color: #666666;
+ font-size: 22rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+
+ &:nth-of-type(4n) {
+ margin-right: 0;
+ }
+
+ .close {
+ position: absolute;
+ right: -20rpx;
+ top: -20rpx;
+ z-index: 9999;
+ background-color: #fff;
+ border-radius: 50%;
+ overflow: hidden;
+ }
+
+ image {
+ width: 100%;
+ height: 100%;
+ }
+
+ video {
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ }
+ }
+
+ .sub_btn {
+ // position: fixed;
+ // bottom: 68rpx;
+ // left: 40rpx;
+ width: 670rpx;
+ height: 88rpx;
+ margin-top: 80rpx;
+ background: $primaryColor;
+ box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+ border-radius: 44rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: 500;
+ font-size: 32rpx;
+ color: #FFFFFF;
+ }
+
+ .sel_upload_wrap {
+ width: 100%;
+ border-top: 1px solid #666666;
+ box-shadow: 0 1 1 #333333;
+
+ .btn {
+ height: 90rpx;
+ line-height: 90rpx;
+ text-align: center;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/h5/pages/workOrder/result.vue b/h5/pages/workOrder/result.vue
new file mode 100644
index 0000000..d0d3859
--- /dev/null
+++ b/h5/pages/workOrder/result.vue
@@ -0,0 +1,39 @@
+<template>
+ <view class="main_app">
+ <image class="logo" src="/static/ic_paysuccess@2x.png" mode=""></image>
+ <view class="title">鎻愪氦鎴愬姛</view>
+ <view class="">鎰熻阿鎮ㄧ殑涓婃姤锛屾垜浠皢灏藉揩鏍稿疄澶勭悊</view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ };
+ }
+ }
+</script>
+
+<style lang="scss">
+.main_app{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding-top: 200rpx;
+ font-size: 26rpx;
+ color: #999999;
+ .title{
+ font-weight: 500;
+ font-size: 36rpx;
+ color: #333333;
+ margin-bottom: 26rpx;
+ }
+ .logo{
+ width: 180rpx;
+ height: 180rpx;
+ margin-bottom: 40rpx;
+ }
+}
+</style>
diff --git a/h5/static/ic_paysuccess@2x.png b/h5/static/ic_paysuccess@2x.png
new file mode 100644
index 0000000..737e03d
--- /dev/null
+++ b/h5/static/ic_paysuccess@2x.png
Binary files differ
diff --git a/h5/static/side/btn_jia@3x.png b/h5/static/side/btn_jia@3x.png
new file mode 100644
index 0000000..986666c
--- /dev/null
+++ b/h5/static/side/btn_jia@3x.png
Binary files differ
diff --git a/h5/static/side/btn_jian@3x.png b/h5/static/side/btn_jian@3x.png
new file mode 100644
index 0000000..6949c9f
--- /dev/null
+++ b/h5/static/side/btn_jian@3x.png
Binary files differ
diff --git a/h5/static/side/btn_jian_grey@2x.png b/h5/static/side/btn_jian_grey@2x.png
new file mode 100644
index 0000000..274b96c
--- /dev/null
+++ b/h5/static/side/btn_jian_grey@2x.png
Binary files differ
diff --git a/h5/static/side/ic_pandian@2x.png b/h5/static/side/ic_pandian@2x.png
new file mode 100644
index 0000000..e8f8717
--- /dev/null
+++ b/h5/static/side/ic_pandian@2x.png
Binary files differ
diff --git a/h5/static/side/ic_pandian_grey@2x.png b/h5/static/side/ic_pandian_grey@2x.png
new file mode 100644
index 0000000..3917fb3
--- /dev/null
+++ b/h5/static/side/ic_pandian_grey@2x.png
Binary files differ
--
Gitblit v1.9.3