Commit 13f1ff51 authored by Facius's avatar Facius

feat: 【ID1001292】 前台-师傅在小程序前台完工后,“审核中”及“已完工”状态下均可查看完工信息

parent 4c952cfb
<!-- ******************* 定位 ******************* -->
<template>
<view>
<view class="list u-flex u-row-between">
<image class="item-image" :src="mixingImage" v-if="item.required"></image>
<view class="u-m-r-20">{{item.fieldsTitle}}</view>
<view class="u-flex-1 location-name" @click="getLocation">
<u-icon name="map" color="#2979ff" size="30"></u-icon>自动定位
</view>
</view>
<view class="u-flex-1 location">{{valueTxt || '正在获取中...'}}</view>
</view>
<view>
<view class="list u-flex u-row-between">
<image class="item-image" :src="mixingImage" v-if="item.required"></image>
<view class="u-m-r-20">{{ item.fieldsTitle }}</view>
<view class="u-flex-1 location-name" @click="getLocation">
<u-icon name="map" color="#2979ff" size="30"></u-icon>自动定位
</view>
</view>
<view class="u-flex-1 location">{{ valueTxt || '正在获取中...' }}</view>
</view>
</template>
<script>
import arrMixin from './arrMixin'
export default {
name: 'XhLocation',
components: {},
mixins: [arrMixin],
props: {},
filters:{},
data() {
return {}
},
computed: {
valueTxt() {
let str = ''
const dataValue = this.dataValue
if(dataValue && dataValue.length>1){
str = '经度:'+dataValue[0].toFixed(4)+','+'纬度:'+dataValue[1].toFixed(4)
}
return str
},
mixingImage() {
return process.uniEnv.qn_base_url + 'mixing.png'
}
},
watch: {},
created() {
this.getLocation()
},
methods: {
getLocation() {
let self = this
const dataValue = this.dataValue || []
const waterInfo = this.waterInfo
uni.getLocation({
type: 'gcj02',
success: function(res) {
dataValue.push(res.longitude)
dataValue.push(res.latitude)
self.dataValue = dataValue
self.setValue(dataValue)
},
fail(err) {}
});
},
setValue(txt) {
this.valueChange(this.dataValue)
}
}
}
import arrMixin from './arrMixin'
export default {
name: 'XhLocation',
components: {},
mixins: [arrMixin],
props: {},
filters: {},
data() {
return {}
},
computed: {
valueTxt() {
let str = ''
const dataValue = this.dataValue
if (dataValue && dataValue.length > 1) {
str =
'经度:' +
dataValue[0].toFixed(4) +
',' +
'纬度:' +
dataValue[1].toFixed(4)
}
return str
},
mixingImage() {
return process.uniEnv.qn_base_url + 'mixing.png'
},
},
watch: {},
created() {
this.getLocation()
},
methods: {
getLocation() {
if (this.disabled) return
let self = this
const dataValue = this.dataValue || []
const waterInfo = this.waterInfo
uni.getLocation({
type: 'gcj02',
success: function(res) {
dataValue.push(res.longitude)
dataValue.push(res.latitude)
self.dataValue = dataValue
self.setValue(dataValue)
},
fail(err) {},
})
},
setValue(txt) {
this.valueChange(this.dataValue)
},
},
}
</script>
<style lang="scss" scoped>
.required {
padding-right: 10rpx;
font-size: 28rpx;
line-height: 40rpx;
color: #fa3534;
}
.item-image {
width: 24rpx;
height: 24rpx;
margin-right: 10rpx;
}
.location-name {
color: #2272FF;
text-align: right;
}
.location {
background: #F4F5F7;
padding: 10rpx 20rpx;
border-radius: 12rpx;
}
.required {
padding-right: 10rpx;
font-size: 28rpx;
line-height: 40rpx;
color: #fa3534;
}
.item-image {
width: 24rpx;
height: 24rpx;
margin-right: 10rpx;
}
.location-name {
color: #2272ff;
text-align: right;
}
.location {
background: #f4f5f7;
padding: 10rpx 20rpx;
border-radius: 12rpx;
}
</style>
<!-- ******************* 扫码 ******************* -->
<template>
<view class="">
<view class="u-flex" @click="scanCode">
<view class="txt u-flex-1">扫描二维码(仅挚达充电桩可扫描)</view>
<u-icon name="arrow-right" color="#666" size="28"></u-icon>
</view>
<view class="u-flex">
<u-input class="u-flex-1 input-item" v-model="dataValue" @input="valueChange" type="text" />
</view>
</view>
<view class="">
<view class="u-flex" @click="scanCode">
<view class="txt u-flex-1">扫描二维码(仅挚达充电桩可扫描)</view>
<u-icon name="arrow-right" color="#666" size="28"></u-icon>
</view>
<view class="u-flex">
<u-input
class="u-flex-1 input-item"
v-model="dataValue"
@input="valueChange"
type="text"
:disabled="disabled"
/>
</view>
</view>
</template>
<script>
import stringMixin from './stringMixin'
export default {
name: 'XhScan',
components: {},
mixins: [stringMixin],
props: {},
filters:{},
data() {
return {}
},
computed: {
},
watch: {},
mounted() {},
methods: {
scanCode(type){
const self = this
uni.scanCode({
success: function (res) {
let result = res.result
if (result.substring(0, 4) === 'http') {
let arr = result.split('/#/')
if (arr.length < 2) arr = result.split('?')
result = arr[1]
}
self.dataValue = result
self.valueChange(result)
}
});
}
}
}
import stringMixin from './stringMixin'
export default {
name: 'XhScan',
components: {},
mixins: [stringMixin],
props: {},
filters: {},
data() {
return {}
},
computed: {},
watch: {},
mounted() {},
methods: {
scanCode(type) {
if (this.disabled) return
const self = this
uni.scanCode({
success: function(res) {
let result = res.result
if (result.substring(0, 4) === 'http') {
let arr = result.split('/#/')
if (arr.length < 2) arr = result.split('?')
result = arr[1]
}
self.dataValue = result
self.valueChange(result)
},
})
},
},
}
</script>
<style lang="scss" scoped>
.required {
padding-right: 10rpx;
font-size: 28rpx;
line-height: 40rpx;
color: #fa3534;
}
.input-item{
background: #F4F5F7;
border-radius: 12rpx;
padding-left: 20rpx;
}
.required {
padding-right: 10rpx;
font-size: 28rpx;
line-height: 40rpx;
color: #fa3534;
}
.input-item {
background: #f4f5f7;
border-radius: 12rpx;
padding-left: 20rpx;
}
</style>
......@@ -12,11 +12,12 @@
:value="index"
range-key="label"
:range="settings"
:disabled="disabled"
@click="showPicker = true"
@change="pickerChange"
class="txt u-flex-1"
>
<view>{{ text || "请选择" }}</view>
<view>{{ text || '请选择' }}</view>
</picker>
<u-icon
class="input-icon"
......@@ -30,9 +31,9 @@
</template>
<script>
import objMixin from "./objMixin";
import objMixin from './objMixin'
export default {
name: "XhPicker",
name: 'XhPicker',
components: {},
mixins: [objMixin],
props: {
......@@ -40,17 +41,17 @@ export default {
defaultSelector: {
type: Array,
default() {
return [0];
return [0]
},
},
// 当 range 是一个 Array<Object> 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
rangeKey: {
type: String,
default: "label",
default: 'label',
},
value: {
type: String,
default: "{}",
default: '{}',
},
orderId: {
type: Number,
......@@ -62,11 +63,11 @@ export default {
},
specificationId: {
type: String,
default: "0",
default: '0',
},
orderServiceType: {
type: String,
default: "安装",
default: '安装',
},
},
filters: {},
......@@ -76,47 +77,47 @@ export default {
showPicker: false,
settings: [],
measure: [],
index: "",
};
index: '',
}
},
computed: {
text() {
let val = "";
let val = ''
if (this.value) {
let data = JSON.parse(this.value);
val = data[0].measureTypeName + "-" + data[0].measureName;
let data = JSON.parse(this.value)
val = data[0].measureTypeName + '-' + data[0].measureName
}
return val;
return val
},
fieldsWidth() {
return this.item.fieldsWidth ? this.item.fieldsWidth + "rpx" : "100%";
return this.item.fieldsWidth ? this.item.fieldsWidth + 'rpx' : '100%'
},
},
watch: {
specificationId(val, oldVal) {
this.initComponent();
this.initComponent()
},
},
mounted() {
this.isNotMulti = this.orderServiceType === "安装";
this.initComponent();
this.isNotMulti = this.orderServiceType === '安装'
this.initComponent()
},
methods: {
openPicker() {
if (this.specificationId === "0") {
if (this.specificationId === '0') {
this.$refs.uToast.show({
title: "请先选择规格",
type: "error",
});
return;
title: '请先选择规格',
type: 'error',
})
return
}
this.showPicker = true;
this.showPicker = true
},
initComponent() {
if (this.isNotMulti) {
this.initMeasure();
this.initMeasure()
} else {
this.initSymptoms();
this.initSymptoms()
}
},
initSymptoms() {
......@@ -133,50 +134,50 @@ export default {
categoryId: this.categoryId,
specificationId: this.specificationId,
orderServiceTypeText: this.orderServiceType,
};
this.$u.api.getMeasureV2(param).then(res => {
}
this.$u.api.getMeasureV2(param).then((res) => {
if (res.code == 200) {
let result = [];
let result = []
for (let key in res.data) {
this.measure = res.data[key].measureExtendDtos;
this.measure = res.data[key].measureExtendDtos
res.data[key].measureExtendDtos.map((item, index) => {
result.push({ id: item.measureId, label: item.measureName });
});
result.push({ id: item.measureId, label: item.measureName })
})
}
if (this.orderServiceType === "安装") {
this.settings = result;
if (this.orderServiceType === '安装') {
this.settings = result
} else {
this.settings[2] = result;
this.settings[2] = result
}
} else {
console.log(res.message, "查询措施失败");
console.log(res.message, '查询措施失败')
}
});
})
}
},
pickerConfirm(data) {
let result = [];
let result = []
if (this.isMulti) {
// 维修
} else {
// 安装
result.push(this.measure[data[0]]);
result.push(this.measure[data[0]])
}
this.valueChange(JSON.stringify(result));
this.valueChange(JSON.stringify(result))
},
pickerChange(data) {
this.showPicker = false;
this.index = data.detail.value;
this.showPicker = false
this.index = data.detail.value
let result = [];
let result = []
if (this.isMulti) {
// 维修
} else {
// 安装
result.push(this.measure[this.index]);
result.push(this.measure[this.index])
}
this.valueChange(JSON.stringify(result));
this.valueChange(JSON.stringify(result))
},
columnchange(data) {
// // 树列改变时进行联动操作
......@@ -185,7 +186,7 @@ export default {
// this.settings.splice(column+1,1,arr)
},
},
};
}
</script>
<style lang="scss" scoped>
.picker-common {
......
......@@ -23,66 +23,67 @@
</template>
<script>
import arrMixin from "./arrMixin";
import arrMixin from './arrMixin'
export default {
name: "XhInput", // 新建 input
name: 'XhInput', // 新建 input
components: {},
mixins: [arrMixin],
props: {
placeholder: {
type: String,
default: "请输入",
default: '请输入',
},
orderId: {
type: String,
default: "请输入",
default: '请输入',
},
},
data() {
return {
maxlength: 140,
};
}
},
computed: {
mixingImage() {
return process.uniEnv.qn_base_url + "mixing.png";
return process.uniEnv.qn_base_url + 'mixing.png'
},
arrowText() {
if(this.$u.test.isEmpty(this.dataValue)) return "请选择";
if(this.item.fieldsName == "materialList") {
if (this.$u.test.isEmpty(this.dataValue)) return '请选择'
if (this.item.fieldsName == 'materialList') {
let hasMate = false
var newData = this.dataValue.find((item) => {
if(!this.$u.test.isEmpty(item.useLength)) {
if (!this.$u.test.isEmpty(item.useLength)) {
hasMate = true
return item.useLength != '0'
}
})
if(hasMate && this.$u.test.isEmpty(newData)) return "请选择"
if (hasMate && this.$u.test.isEmpty(newData)) return '请选择'
}
return "已选择";
return '已选择'
},
},
watch: {},
mounted() {},
methods: {
toMaterialPage() {
let self = this;
if (this.disabled) return
let self = this
uni.navigateTo({
url:
"pages/order/material?orderId=" +
'pages/order/material?orderId=' +
this.orderId +
"&fieldName=" +
'&fieldName=' +
this.item.fieldsName,
// 接口调用成功的回调函数,即跳转到B页面 test.vue 后的回调函数
success: function (res) {
success: function(res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit("showMaterialData", self.dataValue);
res.eventChannel.emit('showMaterialData', self.dataValue)
},
});
})
},
},
};
}
</script>
<style lang="scss" scoped>
......
<!-- ******************* 输入框 ******************* -->
<template>
<view class="picker-box">
<!-- <view class="u-flex u-row-between" @click="openPicker">
<view class="picker-box">
<!-- <view class="u-flex u-row-between" @click="openPicker">
<view class="txt u-flex-1">{{dataValue||'请选择时间'}}</view>
<u-icon name="arrow-right" color="#666" size="28"></u-icon>
</view> -->
<!-- <u-picker :params="params" v-model="showPicker" mode="time" @confirm="pickerConfirm"></u-picker> -->
<view class="u-flex u-row-between">
<picker mode="date" :value="dataValue" @change="bindDateChange" class="txt u-flex-1">
<view>{{dataValue || '请选择时间'}}</view>
</picker>
<u-icon name="arrow-right" color="#666" size="28"></u-icon>
</view>
</view>
<!-- <u-picker :params="params" v-model="showPicker" mode="time" @confirm="pickerConfirm"></u-picker> -->
<view class="u-flex u-row-between">
<picker
mode="date"
:value="dataValue"
@change="bindDateChange"
class="txt u-flex-1"
:disabled="disabled"
>
<view>{{ dataValue || '请选择时间' }}</view>
</picker>
<u-icon name="arrow-right" color="#666" size="28"></u-icon>
</view>
</view>
</template>
<script>
import stringMixin from './stringMixin'
export default {
components: {},
mixins: [stringMixin],
props: {},
data() {
return {
showPicker: false,
params: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false,
timestamp: true,
},
date: '请选择',
}
},
mounted() {},
methods: {
openPicker() {
this.showPicker = true
},
pickerConfirm(data) {
let result = []
let dataValue = data.year + '-' + data.month + '-' + data.day
this.dataValue = dataValue
this.valueChange(dataValue)
},
bindDateChange: function(e) {
const value = e.target.value
this.dataValue = value
this.valueChange(value)
}
}
}
import stringMixin from './stringMixin'
export default {
components: {},
mixins: [stringMixin],
props: {},
data() {
return {
showPicker: false,
params: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false,
timestamp: true,
},
date: '请选择',
}
},
mounted() {},
methods: {
openPicker() {
this.showPicker = true
},
pickerConfirm(data) {
let result = []
let dataValue = data.year + '-' + data.month + '-' + data.day
this.dataValue = dataValue
this.valueChange(dataValue)
},
bindDateChange: function(e) {
const value = e.target.value
this.dataValue = value
this.valueChange(value)
},
},
}
</script>
<style>
</style>
<style></style>
......@@ -62,7 +62,10 @@
label-position="top"
:prop="item.fieldsName"
:border-bottom="false"
v-show="item.fieldsName != 'actualPaid' || show200"
v-show="
(item.fieldsName != 'actualPaid' || show200) &&
((readOnly && form[item.fieldsName]) || !readOnly)
"
:id="`item${item.fieldsId}`"
>
<view
......@@ -152,7 +155,7 @@
@value-change="fieldValueChange"
>
<template v-slot>
<view class="img-list">
<view class="img-list" v-if="!readOnly">
<u-image
class="pic"
width="160rpx"
......@@ -178,6 +181,7 @@
:itemIndex="itemIndex"
:item="item"
:value="form[item.fieldsName] || ''"
:disabled="readOnly"
@value-change="fieldValueChange"
>
</xh-location>
......@@ -187,6 +191,7 @@
:itemIndex="itemIndex"
:item="item"
:value="form[item.fieldsName] || ''"
:disabled="readOnly"
@value-change="fieldValueChange"
>
</xh-scan>
......@@ -200,6 +205,7 @@
:orderServiceType="orderServiceType"
:specificationId="form['specificationId'] || 0"
:value="form[item.fieldsName]"
:disabled="readOnly"
@value-change="fieldValueChange"
>
</xh-service-measure>
......@@ -209,6 +215,7 @@
:itemIndex="itemIndex"
:item="item"
:value="form[item.fieldsName] || ''"
:disabled="readOnly"
@value-change="fieldValueChange"
>
</xh-time>
......@@ -219,6 +226,7 @@
:item="item"
:order-id="orderId"
:value="form[item.fieldsName] || ''"
:disabled="readOnly"
@value-change="fieldValueChange"
>
</xh-service-more>
......@@ -1063,7 +1071,6 @@ export default {
// ------------------------- 以下方法为上传组件相关 -------------------------
// 弹出上传选项
selectUpload(item, groupIndex, itemIndex) {
if (this.disabled) return
const imgList = this.$refs[`fileChild${groupIndex}${itemIndex}`][0]
.imgList
if (imgList.length === 10) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment