master
Tuzki 2 years ago
parent c859da7902
commit 0580027854
  1. 2
      components/htz-image-upload/htz-image-upload.vue
  2. 4
      config.js
  3. 1
      static/images/default-data.svg
  4. 184
      sunPages/addBlock/addBlock.vue
  5. 4
      sunPages/addNoteJobForm/addNoteJobForm.vue
  6. 20
      sunPages/commonSearch/commonSearch.vue
  7. 10
      sunPages/commonSearch/nzSearch.vue
  8. 132
      sunPages/editBlock/editBlock.vue
  9. 51
      sunPages/noteJobList/noteJobList.vue
  10. 2
      uni_modules/uv-pick-color/components/uv-pick-color/props.js

@ -32,7 +32,7 @@
</cover-view>
</video>
</view>
<view v-if="showTips" class="tip">请上传不超过5MB格式为png/jpg/jpeg的图片</view>
<view v-if="showTips" class="tip">请上传不超过5MB的图片</view>
<!-- -->
</view>

@ -1,8 +1,8 @@
// 应用全局配置
module.exports = {
baseUrl: 'https://sy.hbcjy.com/prod-api',
// baseUrl: 'https://sy.hbcjy.com/prod-api',
h5Url:'https://sy.hbcjy.com',
// baseUrl: 'http://127.0.0.1:48080',
baseUrl: 'http://127.0.0.1:48080',
// baseUrl: 'http://192.168.130.193:48080',
baseApi: '/admin-api',
// 应用信息

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 38 KiB

@ -1,24 +1,36 @@
<template>
<view class="content">
<view class="map-view">
<map id="map" v-if="formData.positionStr && formData.positionStr != ''" class="m-map" :longitude="longitude"
:latitude="latitude" :polygons="polygons" enable-satellite="true"></map>
<map
id="map"
v-if="formData.positionStr && formData.positionStr != ''"
class="m-map"
:longitude="longitude"
:latitude="latitude"
:polygons="polygons"
enable-satellite="true"
></map>
<view class="no-map" v-else>
<uv-empty icon="https://cdn.uviewui.com/uview/demo/empty/history.png"></uv-empty>
<image style="margin: 80rpx auto 20rpx; height: 330rpx;" src="https://sy.hbcjy.com/prod-api/admin-api/infra/file/23/get/08bb1813a2093a06c57e2733fc46034b30e4f98dac67d7106c5bf7db1d84d5a0.png" mode=""></image>
</view>
<view class="map-btn-group">
<button v-if="formData.positionStr && formData.positionStr != ''" @click="reset">清除地块</button>
<button v-else @click="drawMap(formData)">绘制地块</button>
<view v-if="formData.positionStr && formData.positionStr != ''" @click="clearMap">
<image src="@/static/images/icon_enclosure.svg"></image>
<view class="text">清除</view>
</view>
<view v-else @click="drawMap(formData)">
<image src="@/static/images/icon_enclosure.svg"></image>
<view class="text">绘制</view>
</view>
<view class="v-form v-container">
</view>
</view>
<view class="form-box">
<uni-forms label-width="80px" ref="valiForm" :rules="rules" :modelValue="formData">
<view class="v-form-item">
<view class="not-show">
<uni-forms-item label="" required name="baseId">
<uni-easyinput v-model="formData.baseId" placeholder=""></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="地块坐标" name="positionStr">
<uni-forms-item label="" name="positionStr">
<uni-easyinput disabled v-model="formData.positionStr" placeholder="地块坐标"></uni-easyinput>
</uni-forms-item>
</view>
@ -26,9 +38,13 @@
<uni-easyinput v-model="formData.blockName" placeholder="请输入地块名称"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="标识颜色" name="blockColor">
<view class="color" :style="{
<view
class="color"
:style="{
background: formData.blockColor
}" @click="openColor"></view>
}"
@click="openColor"
></view>
</uni-forms-item>
<uni-forms-item label="地块类型" required name="blockType">
<uni-data-select v-model="formData.blockType" :localdata="range"></uni-data-select>
@ -40,11 +56,8 @@
</template>
</uni-easyinput>
</uni-forms-item>
</view>
</uni-forms>
<view class="fixed fixedBottom v-container"><button class="v-primary-btn large" @click="submit('valiForm')">提交</button></view>
<button class="v-primary-btn large" type="primary" @click="submit('valiForm')">提交</button>
</view>
<uv-pick-color ref="pickerColor" @confirm="confirm"></uv-pick-color>
@ -52,18 +65,13 @@
</template>
<script>
import {
getDictDatas,
DICT_TYPE
} from '@/utils/dict';
import {
createBlock
} from '@/api/system/block/block.js';
// SDK
var QQMapWX = require('@/plugins/qqmap-wx-jssdk.min.js');
var qqmapsdk;
var self;
export default {
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import { createBlock } from '@/api/system/block/block.js';
// SDK
var QQMapWX = require('@/plugins/qqmap-wx-jssdk.min.js');
var qqmapsdk;
var self;
export default {
data() {
return {
data: [],
@ -82,22 +90,28 @@
},
rules: {
blockName: {
rules: [{
rules: [
{
required: true,
errorMessage: '地块名不能为空'
}]
}
]
},
blockArea: {
rules: [{
rules: [
{
required: true,
errorMessage: '面积名不能为空'
}]
}
]
},
blockType: {
rules: [{
rules: [
{
required: true,
errorMessage: '地块类型不能为空'
}]
}
]
}
// positionStr: {
// rules: [
@ -131,15 +145,13 @@
this.initmapPolygon();
console.log(this.formData);
}
self = this;
// self.getAuthorizeInfo();
// API
qqmapsdk = new QQMapWX({
key: 'PEFBZ-ELL64-MVDUZ-KDV4N-RISMO-VCB7A'
});
},
onUnload() {
},
methods: {
openColor() {
@ -153,7 +165,7 @@
}
},
toLocation: function(obj) {
toLocation: function (obj) {
self.mapCtx.moveToLocation(obj);
self.mapCtx.translateMarker({
markerId: 1,
@ -223,7 +235,7 @@
});
},
poitap: function(e) {
poitap: function (e) {
console.log(e, 'poitap');
var obj = e.detail;
self.searchKey = obj.name;
@ -231,7 +243,7 @@
self.toLocation(obj);
},
//
Cancel: function() {},
Cancel: function () {},
submit(ref) {
let this_ = this
@ -252,12 +264,12 @@
title: `创建成功`,
duration: 1500,
success() {
setTimeout(() => {
setTimeout(()=>{
this_.reset();
uni.reLaunch({
url: '/pages/block/index'
});
}, 1500)
},1500)
}
});
})
@ -270,7 +282,6 @@
});
},
drawMap(val) {
console.log(val)
const str = encodeURIComponent(JSON.stringify(val))
uni.redirectTo({
url: '/sunPages/drawMap/drawMap?str=' + str
@ -287,6 +298,11 @@
};
this.polygons = [];
},
clearMap(){
this.polygons = [];
this.formData.positionStr= null
this.formData.blockArea= null
},
initmapPolygon() {
let this_ = this;
const mapCon = uni.createMapContext('map');
@ -302,10 +318,8 @@
console.log(Arr);
let Obj = {
points: Arr,
strokeColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData
.blockColor : '#007969',
fillColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData
.blockColor + '5c' : '#0079695c',
strokeColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData.blockColor : '#007969',
fillColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData.blockColor + '5c' : '#0079695c',
zIndex: 1
};
this_.$nextTick(() => {
@ -332,23 +346,21 @@
return [centerLat, centerLng];
}
}
};
};
</script>
<style scoped lang="scss">
.not-show {
.not-show {
display: none;
}
.content {
background-color: #f5f5f5;
}
.content {
background-color: #f1f1f1;
overflow: hidden;
min-height: 100vh;
color: #646464;
font-size: 40rpx;
}
.option {
}
.option {
max-height: 300rpx;
width: 90%;
line-height: 60rpx;
@ -359,9 +371,8 @@
overflow: scroll;
left: 50%;
transform: translateX(-50%);
}
.column_item {
}
.column_item {
padding: 0 40rpx;
height: 60rpx;
font-size: 28rpx;
@ -372,33 +383,29 @@
text-overflow: ellipsis;
color: #fff;
white-space: nowrap;
}
.column_item:active {
}
.column_item:active {
background-color: #8f8f94;
}
}
.page-section-gap {
.page-section-gap {
width: 100%;
position: fixed;
top: 0;
z-index: 0;
}
.color {
}
.color {
width: 50rpx;
height: 50rpx;
border-radius: 6rpx;
border: solid 1rpx #d0d0d0;
background-color: transparent;
}
.input-slot-right {
}
.input-slot-right {
background-color: #eee;
padding: 10rpx;
}
.map-view {
}
.map-view {
width: 100%;
height: 500rpx;
overflow: hidden;
@ -412,14 +419,29 @@
.map-btn-group {
position: absolute;
background-color: #fff;
padding: 14rpx 30rpx;
text-align: center;
border-radius: 16rpx;
z-index: 9;
bottom: 20rpx;
left: 50%;
transform: translateX(-50%);
}
right: 30rpx;
box-shadow: 0 8rpx 20rpx 0 rgba(0, 0, 0, 0.05);
image {
width: 52rpx;
height: 52rpx;
}
.form-box {
.text {
margin-top: -4px;
color: #14c171;
font-size: 28rpx;
text-align: center;
}
}
}
.form-box {
padding: 40rpx 20rpx;
margin: 0 20rpx;
background: #fff;
@ -428,11 +450,13 @@
/deep/ .uni-forms-item {
align-items: center;
&:last-child {
display: none;
}
}
}
}
.no-map{
width: 100%;
height: fit-content;
display: flex;
align-items: center;
}
</style>

@ -85,10 +85,10 @@
<htz-image-upload
v-model="imgList"
:action="baseUrls"
:chooseNum="1"
:chooseNum="5"
:compress="false"
:headers="headers"
:max="1"
:max="5"
:quality="80"
:remove="true"
:sourceType="['album', 'camera']"

@ -19,6 +19,7 @@
</view>
</template>
<template v-if="!showCrop && !showBlock" class="m-sdata-list" slot="searchData">
<view v-if="searchData.length > 0">
<view class="m-sdata-box" v-for="item in searchData" @click="check(item)">
<view class="m-variety-name">
<image style="width: 100%; height: 100%; background-color: #d4d4d4" mode="aspectFit" :src="item.productPic" @error="imageError"></image>
@ -35,8 +36,14 @@
</view>
</view>
</view>
</view>
<view class="no-data" v-else>
<image src="@/static/images/default-data.svg" mode=""></image>
暂无数据
</view>
</template>
<template v-if="showBlock" class="m-sdata-list v-pages-list" slot="searchData">
<view v-if="searchData.length > 0">
<view class="v-pages-list-item" v-for="item in searchData" @click="check(item, 1)">
<view class="v-card">
<view class="v-card-content">
@ -54,6 +61,11 @@
</view>
</view>
</view>
</view>
<view class="no-data" v-else>
<image src="@/static/images/default-data.svg" mode=""></image>
暂无数据
</view>
</template>
</d-search-log>
</view>
@ -309,7 +321,7 @@ export default {
color: #666;
padding-left: 15rpx;
position: relative;
&:before{
&:before {
content: ' ';
width: 4rpx;
height: 60%;
@ -354,4 +366,10 @@ export default {
box-shadow: 0 0 9px 0px gainsboro;
border-radius: 15rpx;
}
.no-data{
display: flex;
flex-direction: column;
align-items: center;
color: #666;
}
</style>

@ -24,6 +24,10 @@
</uni-transition>
</view>
</view>
<view class="no-data" v-else>
<image src="@/static/images/default-data.svg" mode=""></image>
暂无数据
</view>
<button class="m-next-step" @click="nextStep">保存</button>
</view>
</template>
@ -344,4 +348,10 @@ export default {
bottom: 55rpx;
z-index: 97;
}
.no-data{
display: flex;
flex-direction: column;
align-items: center;
color: #666;
}
</style>

@ -1,8 +1,15 @@
<template>
<view class="content">
<view class="map-view">
<map id="map" v-if="formData.positionStr && formData.positionStr != ''" class="m-map" :longitude="longitude"
:latitude="latitude" :polygons="polygons" enable-satellite="true"></map>
<map
id="map"
v-if="formData.positionStr && formData.positionStr != ''"
class="m-map"
:longitude="longitude"
:latitude="latitude"
:polygons="polygons"
enable-satellite="true"
></map>
<view class="no-map" v-else>
<uv-empty icon="https://cdn.uviewui.com/uview/demo/empty/history.png"></uv-empty>
</view>
@ -27,14 +34,21 @@
<uni-forms-item class="not-show" label="" required name="id">
<uni-easyinput v-model="formData.id" placeholder=""></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="地块坐标" name="positionStr">
<uni-easyinput disabled v-model="formData.positionStr" placeholder="地块坐标"></uni-easyinput>
</uni-forms-item>
</view>
<uni-forms-item label="地块名称" required name="blockName">
<uni-easyinput v-model="formData.blockName" placeholder="请输入地块名称"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="标识颜色" name="blockColor">
<view class="color" :style="{
<view
class="color"
:style="{
background: formData.blockColor
}" @click="openColor"></view>
}"
@click="openColor"
></view>
</uni-forms-item>
<uni-forms-item label="地块类型" required name="blockType">
<uni-data-select v-model="formData.blockType" :localdata="range"></uni-data-select>
@ -46,9 +60,6 @@
</template>
</uni-easyinput>
</uni-forms-item>
<uni-forms-item label="地块坐标" name="positionStr">
<uni-easyinput disabled v-model="formData.positionStr" placeholder="地块坐标"></uni-easyinput>
</uni-forms-item>
</uni-forms>
<button class="v-primary-btn large" @click="submit('valiForm')">提交</button>
</view>
@ -58,18 +69,13 @@
</template>
<script>
import {
getDictDatas,
DICT_TYPE
} from '@/utils/dict';
import {
updateBlock
} from '@/api/system/block/block.js';
// SDK
var QQMapWX = require('@/plugins/qqmap-wx-jssdk.min.js');
var qqmapsdk;
var self;
export default {
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import { updateBlock } from '@/api/system/block/block.js';
// SDK
var QQMapWX = require('@/plugins/qqmap-wx-jssdk.min.js');
var qqmapsdk;
var self;
export default {
data() {
return {
data: [],
@ -90,22 +96,28 @@
},
rules: {
blockName: {
rules: [{
rules: [
{
required: true,
errorMessage: '地块名不能为空'
}]
}
]
},
blockArea: {
rules: [{
rules: [
{
required: true,
errorMessage: '面积名不能为空'
}]
}
]
},
blockType: {
rules: [{
rules: [
{
required: true,
errorMessage: '地块类型不能为空'
}]
}
]
}
// positionStr: {
// rules: [
@ -130,7 +142,7 @@
const obj = JSON.parse(decodeURIComponent(options.val));
console.log(obj);
this.formData = obj;
this.formData.baseId = this.$store.state.user.baseId
this.formData.baseId = this.$store.state.user.baseId;
this.initmapPolygon();
}
if (options.data) {
@ -146,9 +158,7 @@
key: 'PEFBZ-ELL64-MVDUZ-KDV4N-RISMO-VCB7A'
});
},
onUnload() {
},
onUnload() {},
methods: {
openColor() {
this.$refs.pickerColor.open();
@ -161,7 +171,7 @@
}
},
toLocation: function(obj) {
toLocation: function (obj) {
self.mapCtx.moveToLocation(obj);
self.mapCtx.translateMarker({
markerId: 1,
@ -231,7 +241,7 @@
});
},
poitap: function(e) {
poitap: function (e) {
console.log(e, 'poitap');
var obj = e.detail;
self.searchKey = obj.name;
@ -239,7 +249,7 @@
self.toLocation(obj);
},
//
Cancel: function() {},
Cancel: function () {},
submit(ref) {
let this_ = this;
@ -278,7 +288,7 @@
});
},
drawMap(val) {
const str = encodeURIComponent(JSON.stringify(val))
const str = encodeURIComponent(JSON.stringify(val));
uni.redirectTo({
url: '/sunPages/drawMap/drawMap?str=' + str
});
@ -314,10 +324,8 @@
console.log(Arr);
let Obj = {
points: Arr,
strokeColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData
.blockColor : '#007969',
fillColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData
.blockColor + '5c' : '#0079695c',
strokeColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData.blockColor : '#007969',
fillColor: this_.formData.blockColor && this_.formData.blockColor != null ? this_.formData.blockColor + '5c' : '#0079695c',
zIndex: 1
};
this_.$nextTick(() => {
@ -344,19 +352,19 @@
return [centerLat, centerLng];
}
}
};
};
</script>
<style scoped lang="scss">
.content {
.content {
background-color: #f5f5f5;
overflow: hidden;
min-height: 100vh;
color: #646464;
font-size: 40rpx;
}
}
.option {
.option {
max-height: 300rpx;
width: 90%;
line-height: 60rpx;
@ -367,9 +375,9 @@
overflow: scroll;
left: 50%;
transform: translateX(-50%);
}
}
.column_item {
.column_item {
padding: 0 40rpx;
height: 60rpx;
font-size: 28rpx;
@ -380,33 +388,33 @@
text-overflow: ellipsis;
color: #fff;
white-space: nowrap;
}
}
.column_item:active {
.column_item:active {
background-color: #8f8f94;
}
}
.page-section-gap {
.page-section-gap {
width: 100%;
position: fixed;
top: 0;
z-index: 0;
}
}
.color {
.color {
width: 50rpx;
height: 50rpx;
border-radius: 6rpx;
border: solid 1rpx #d0d0d0;
background-color: transparent;
}
}
.input-slot-right {
.input-slot-right {
background-color: #eee;
padding: 10rpx;
}
}
.map-view {
.map-view {
width: 100%;
height: 500rpx;
overflow: hidden;
@ -436,14 +444,14 @@
.text {
margin-top: -4px;
color: #14C171;
color: #14c171;
font-size: 28rpx;
text-align: center;
}
}
}
}
.form-box {
.form-box {
padding: 40rpx 20rpx;
margin: 0 30rpx;
background: #fff;
@ -452,16 +460,6 @@
/deep/ .uni-forms-item {
align-items: center;
&:last-child,
{
display: none;
}
&:first-child {
display: none;
}
}
}
}
</style>

@ -6,17 +6,27 @@
</uni-section>
<view class="add-btn" v-if="canClick" @click="goNoteJob">记农事</view>
</view>
<view class="note-list">
<view class="note-list" v-if="activities.length > 0">
<view class="note-item-box" v-for="(item, index) in activities">
<vlew class="item-title" :class="index == 0 ? 'active-title' : ''">
<span class="title-time">{{ parseTime(item.jobTime, '{y}-{m}-{d}') }}</span>
<span class="title-time" v-if="item.operatingTime && item.operatingTime != '' && item.operatingTime != null">
{{ parseTime(item.operatingTime, '{y}-{m}-{d} {h}:{i}') }}
</span>
<span class="titme-name">{{ item.husbandryName && item.husbandryName != '' && item.husbandryName != null ? item.husbandryName : '-' }}</span>
</vlew>
<view class="item-data" :class="index == 0 ? 'active-data' : ''">
<view class="item-label" v-if="item.nickname">
操作:
农事负责:
<span class="item-value">{{ item.nickname && item.nickname != '' && item.nickname != null ? item.nickname : '-' }}</span>
</view>
<view class="item-label" v-if="item.operator">
操作人:
<span class="item-value">{{ item.operator && item.operator != '' && item.operator != null ? item.operator : '-' }}</span>
</view>
<view class="item-label" v-if="item.jobTime">
农事时间:
<span class="item-value">{{ parseTime(item.jobTime, '{y}-{m}-{d}') }}</span>
</view>
<view class="item-label" v-if="item.husbandryId && item.husbandryId == 1">
种植方式:
<dict-tag :type="'planting_way'" :value="item.plantingWay" class="m-dic-tag" />
@ -61,6 +71,10 @@
</view>
</view>
</view>
<view class="no-data" v-else>
<image src="@/static/images/default-data.svg" mode=""></image>
暂无数据
</view>
</view>
</template>
@ -88,9 +102,9 @@ export default {
onLoad(options) {
if (options.params) {
this.resviceData = JSON.parse(options.params);
this.resviceData.choose = false
this.resviceData.choose = false;
this.getBathList(this.resviceData.batch);
this.defaultBitch = this.resviceData.batch
this.defaultBitch = this.resviceData.batch;
this.getCropperNote(this.defaultBitch);
}
},
@ -112,17 +126,17 @@ export default {
//
bathChange(e) {
this.defaultBitch = e;
this.resviceData.batch = e
console.log(e,this.resviceData);
this.resviceData.batch = e;
console.log(e, this.resviceData);
this.getCropperNote(e);
},
//
goNoteJob(){
const data = encodeURIComponent(JSON.stringify(this.resviceData))
console.log(data)
goNoteJob() {
const data = encodeURIComponent(JSON.stringify(this.resviceData));
console.log(data);
uni.navigateTo({
url:'/sunPages/addNoteJob/addNoteJob?params='+data
})
url: '/sunPages/addNoteJob/addNoteJob?params=' + data
});
},
//
getCropperNote(val) {
@ -211,7 +225,7 @@ export default {
font-size: 32rpx;
color: #1b1b1b;
line-height: 60rpx;
width: 50%;
width: 100%;
position: relative;
padding-left: 50rpx;
display: flex;
@ -276,7 +290,7 @@ export default {
.nz-top {
max-width: 70%;
.nz-name{
.nz-name {
color: #333;
}
.nz-name,
@ -300,4 +314,13 @@ export default {
}
}
}
.no-data {
display: flex;
flex-direction: column;
align-items: center;
color: #666;
height: 100vh;
background: #fff;
padding-top: 100rpx;
}
</style>

@ -40,7 +40,7 @@ export default {
// 确认按钮的颜色
confirmColor: {
type: String,
default: '#3c9cff'
default: '#14c171'
},
...uni.$uv?.props?.pickColor
}

Loading…
Cancel
Save