Explorar el Código

服务商主账号可以直接创建服务申请单

xiaohaizhao hace 5 meses
padre
commit
4c31c6c624
Se han modificado 7 ficheros con 783 adiciones y 54 borrados
  1. 26 23
      App.vue
  2. 12 0
      pages.json
  3. 37 30
      pages/index/home.vue
  4. 484 0
      pages/launchApplication/index.vue
  5. 217 0
      pages/launchApplication/skus.vue
  6. 6 0
      pages/workOrder/detail.vue
  7. 1 1
      utils/Http.js

+ 26 - 23
App.vue

@@ -2,30 +2,33 @@
 import { ref, getCurrentInstance } from 'vue'
 export default {
 	onLaunch: function () {
-		const { $Http } = getCurrentInstance().proxy;
-		if (uni.getStorageSync('userMsg').token) {
-			$Http.basic({
-				"classname": "webmanage.site.site",
-				"method": "querySite_Parameter", //查询站点数据
-				content: {
-					nocache: true
-				}
-			}).then(res => {
-				if (res.code == 1) {
-					uni.removeStorageSync('siteP');
-					uni.setStorageSync("siteP", res.data)
-					try {
-						let currentPages = getCurrentPages().pop();
-						if (currentPages.route == 'pages/login/login' || currentPages.$page.fullPath == "/pages/login/login") uni.redirectTo({
-							url: '/pages/index/index',
-						});
-					} catch (error) {
-						uni.redirectTo({
-							url: '/pages/index/index',
-						});
+		if (process.env.NODE_ENV === 'development') {
+		} else {
+			const { $Http } = getCurrentInstance().proxy;
+			if (uni.getStorageSync('userMsg').token) {
+				$Http.basic({
+					"classname": "webmanage.site.site",
+					"method": "querySite_Parameter", //查询站点数据
+					content: {
+						nocache: true
+					}
+				}).then(res => {
+					if (res.code == 1) {
+						uni.removeStorageSync('siteP');
+						uni.setStorageSync("siteP", res.data)
+						try {
+							let currentPages = getCurrentPages().pop();
+							if (currentPages.route == 'pages/login/login' || currentPages.$page.fullPath == "/pages/login/login") uni.redirectTo({
+								url: '/pages/index/index',
+							});
+						} catch (error) {
+							uni.redirectTo({
+								url: '/pages/index/index',
+							});
+						}
 					}
-				}
-			})
+				})
+			}
 		}
 	},
 	onShow: function () {

+ 12 - 0
pages.json

@@ -65,6 +65,18 @@
 			"style": {
 				"navigationBarTitleText": "服务申请详情"
 			}
+		},
+		{
+			"path": "pages/launchApplication/index",
+			"style": {
+				"navigationBarTitleText": "发起服务申请"
+			}
+		},
+		{
+			"path": "pages/launchApplication/skus",
+			"style": {
+				"navigationBarTitleText": "选择序列号"
+			}
 		}
 	],
 	"globalStyle": {

+ 37 - 30
pages/index/home.vue

@@ -83,6 +83,11 @@ onLoad(() => {
 	let userMsg = uni.getStorageSync('userMsg');
 	if (userMsg.usertype == 21) {
 		itemList.value = [{
+			label: '新建服务申请',
+			icon: '/static/image/djd.png',
+			text: "提交服务需求",
+			path: "/pages/launchApplication/index",
+		}, {
 			label: '服务申请处理',
 			icon: '/static/image/djd.png',
 			text: "服务登记汇总",
@@ -97,27 +102,27 @@ onLoad(() => {
 			nocache: true
 		}
 	}).then(res => {
-		console.log("广告图",res)
+		console.log("广告图", res)
 		if (res.code !== 0 && res.data.length) {
 			uni.removeStorageSync('banner')
 			uni.setStorageSync('banner', res.data);
 			try {
 				banner.value = res.data.find(v => v.location == "index_top").ads.map(v => {
-				v.imageUrl = v.attinfos[0].url;
-				return v
-			}) || [];
+					v.imageUrl = v.attinfos[0].url;
+					return v
+				}) || [];
 			} catch (error) {
-				
+
 			}
 		} else {
 			const list = uni.getStorageSync('banner') || [];
 			try {
 				if (list.length) banner.value = list.find(v => v.location == "index_top").ads.map(v => {
-				v.imageUrl = v.attinfos[0].url;
-				return v
-			}) || [];
+					v.imageUrl = v.attinfos[0].url;
+					return v
+				}) || [];
 			} catch (error) {
-				
+
 			}
 		}
 		if (banner.value.length == 0) {
@@ -166,31 +171,33 @@ function uploadNumber() {
 				item.badge = total;
 			})
 		} else {
-			let content = {
-				"id": "20230208140203", "content":
-					{ "pageNumber": 1, "pageSize": 0, "nocache": true, isadmin: item.label == '抢单中心' ? '1' : '', "where": { "status": item.label == '抢单中心' ? '待接单' : item.label, "condition": "", ispublic: item.label == '抢单中心' ? '1' : '' } }
-			};
-			if (['待受理', '服务申请处理'].includes(item.label)) {
-				content = {
-					id: "20230206101303",
-					content: {
-						"pageNumber": 1,
-						"pageSize": 0,
-						"nocache": true,
-						"where": {
-							"status": '待受理',/* item.label == '服务申请处理' ? '' :  */
-							"condition": ""
+			if (item.label != '新建服务申请') {
+				let content = {
+					"id": "20230208140203", "content":
+						{ "pageNumber": 1, "pageSize": 0, "nocache": true, isadmin: item.label == '抢单中心' ? '1' : '', "where": { "status": item.label == '抢单中心' ? '待接单' : item.label, "condition": "", ispublic: item.label == '抢单中心' ? '1' : '' } }
+				};
+				if (['待受理', '服务申请处理'].includes(item.label)) {
+					content = {
+						id: "20230206101303",
+						content: {
+							"pageNumber": 1,
+							"pageSize": 0,
+							"nocache": true,
+							"where": {
+								"status": '待受理',/* item.label == '服务申请处理' ? '' :  */
+								"condition": ""
+							}
 						}
 					}
 				}
+				$Http.basic(content).then(res => {
+					if (res.code !== 0) {
+						item.badge = res.total;
+					} else {
+						item.badge = 0;
+					}
+				})
 			}
-			$Http.basic(content).then(res => {
-				if (res.code !== 0) {
-					item.badge = res.total;
-				} else {
-					item.badge = 0;
-				}
-			})
 		}
 	});
 	try {

+ 484 - 0
pages/launchApplication/index.vue

@@ -0,0 +1,484 @@
+<template>
+    <view class="content">
+        <view class="title">
+            服务信息
+        </view>
+        <up-form :model="form" labelWidth="70" ref="uFormRef">
+            <up-form-item label="服务类型" :required="rules.servicetype[0].required" prop="servicetype">
+                <up-radio-group v-model="form.servicetype" @change="servicetypeChange">
+                    <up-radio :customStyle="{ marginLeft: '12px' }" v-for="(item) in servertypes" :key="item"
+                        :label="item" :name="item">
+                    </up-radio>
+                </up-radio-group>
+            </up-form-item>
+
+            <up-form-item label="产品品类" :required="rules.class1[0].required" prop="class1">
+                <up-radio-group v-model="form.class1">
+                    <up-radio :customStyle="{ marginLeft: '12px' }" v-for="(item) in class1" :key="item.value"
+                        :label="item.value" :name="item.value">
+                    </up-radio>
+                </up-radio-group>
+            </up-form-item>
+
+            <up-form-item v-if="rules.class2[0].required" label="故障类型" :required="rules.class2[0].required"
+                prop="class2">
+                <picker class="picker" mode="selector" :range="class2" range-key="value" @change="changeClass2">
+                    {{ form.class2 || '请选择故障类型' }}
+                </picker>
+            </up-form-item>
+
+            <view class="title">
+                产品信息
+            </view>
+
+            <up-form-item label="序列号" :required="rules.sku[0].required" prop="sku">
+                <up-input v-model="form.sku" placeholder="序列号" clearable @blur="skuConfirm">
+                    <template #suffix>
+                        <view style="display: flex;align-items: center;">
+                            <view class="my-but" hover-class="navigator-hover" @click="toSelectMyProduct">
+                                选择序列号
+                            </view>
+                            <up-icon name="scan" color="#2979ff" size="28" @click="openScan" />
+                        </view>
+                    </template>
+                </up-input>
+            </up-form-item>
+
+            <up-form-item label="客户电话" :required="rules.customerphonenumber[0].required" prop="customerphonenumber">
+                <up-input v-model="form.customerphonenumber" placeholder="客户电话">
+                    <template #suffix>
+                        <up-button type="success" :disabled="!form.customerphonenumber" size="mini" text="查询"
+                            @click="phonenumberConfirm" />
+                    </template>
+                </up-input>
+            </up-form-item>
+
+            <up-form-item label="客户名称" :required="rules.customername[0].required" prop="customername">
+                <up-input v-model="form.customername" :disabled="disabledCustomername" placeholder="客户名称" />
+            </up-form-item>
+
+            <up-form-item label="产品名称" prop="itemname" :required="rules.itemname[0].required">
+                <up-input v-model="form.itemname" disabled placeholder="请输入序列号或选择产品"></up-input>
+            </up-form-item>
+
+            <up-form-item label="产品型号" prop="model">
+                <up-input v-model="form.model" disabled placeholder="请输入序列号或选择产品" />
+            </up-form-item>
+
+            <view class="title">
+                联系人信息
+            </view>
+
+            <up-form-item label="联系人" :required="rules.scenecontact[0].required" prop="scenecontact">
+                <up-input v-model="form.scenecontact" placeholder="联系人" clearable />
+            </up-form-item>
+
+            <up-form-item label="手机号" :required="rules.scenecontactphonenumber[0].required"
+                prop="scenecontactphonenumber">
+                <up-input type="number" v-model="form.scenecontactphonenumber" placeholder="联系人电话" clearable />
+            </up-form-item>
+
+            <up-form-item label="省市县" :required="rules.province[0].required" prop="province">
+                <picker class="picker" mode="region" :value="[form.province, form.city, form.county]"
+                    @change="changeRegion">
+                    {{ form.province ? [form.province, form.city, form.county].join("-") : '选择省市县' }}
+                </picker>
+            </up-form-item>
+
+            <up-form-item label="详细地址" prop="address" :required="rules.address[0].required">
+                <up-textarea maxlength="499" v-model="form.address" placeholder="详细地址" autoHeight height="20" />
+            </up-form-item>
+
+            <up-form-item label="" prop="remarks">
+                <up-textarea v-model="form.remarks" placeholder="如有特殊需求,您可在此处留言" count></up-textarea>
+            </up-form-item>
+
+        </up-form>
+        <view style="padding-bottom: 50px;width: 350rpx;margin: 40rpx auto 0;" @click="save">
+            <My-button text="保存" :loading="loading" />
+        </view>
+    </view>
+
+    <up-popup :show="products.length" @close="closePopup" :customStyle="{
+        width: '80vw',
+    }" mode="right">
+        <scroll-view :safeAreaInsetBottom="false" scroll-y style="width: 100%;height: 100vh;">
+            <view class="product" v-for="item in products" :key="item.itemid" hover-class="navigator-hover"
+                @click="changeItem(item)">
+                <view class="itemname">
+                    {{ item.itemname }}
+                </view>
+                <view class="row">
+                    序列号: {{ item.sku || '--' }}
+                </view>
+                <!-- <view class="row">
+                    产品编号: {{ item.itemno || '--' }}
+                </view> -->
+                <view class="row">
+                    产品型号: {{ item.model || '--' }}
+                </view>
+                <view class="row">
+                    经销商: {{ item.enterprisename || '--' }}
+                </view>
+                <view class="row">
+                    用户信息: {{ item.name || '--' }} {{ item.phonenumber || '--' }}
+                </view>
+            </view>
+            <view style="height: 30px;" />
+        </scroll-view>
+    </up-popup>
+</template>
+
+<script setup>
+import { ref, reactive, getCurrentInstance } from 'vue';
+const { $Http } = getCurrentInstance().proxy;
+import { onShow } from '@dcloudio/uni-app';
+const uFormRef = ref(null);
+const form = reactive({
+    sa_serviceorderid: 0,
+    sa_orderid: 0,
+    servicetype: '', // 服务类型
+    class1: '', // 产品品类
+    class2: '', // 故障类型
+    sku: '', // 序列号
+    itemid: '', // 产品ID
+    itemname: '', // 产品名称
+    itemno: '', // 产品编号
+    model: '', // 产品型号
+    cardno: '', // 保修卡号
+    scenecontact: '', // 联系人
+    scenecontactphonenumber: '', // 联系人电话
+    province: '', // 省
+    city: '', // 市
+    county: '', // 县
+    address: '', // 详细地址
+    remarks: '',
+    sys_enterpriseid: '',
+    customername: "", // 客户名称
+    customerphonenumber: "", // 客户电话
+    sa_customersid: 0
+});
+
+$Http.basic({
+    "classname": "common.usercenter.usercenter",
+    "method": "queryUserMsg",
+    "content": {}
+}).then(res => {
+    if (res.code === 1) {
+        form.sys_enterpriseid = res.data.hr.sys_enterpriseid;
+    }
+})
+
+const rules = reactive({
+    servicetype: [{ required: true, message: '请选择服务类型', trigger: 'change' }],
+    class1: [{ required: true, message: '请选择产品品类', trigger: 'change' }],
+    class2: [{ required: false, message: "请选择故障类型", trigger: 'change' }],
+    sku: [{ required: true, message: '请输入序列号', trigger: 'blur' }],
+    itemno: [{ required: false, message: '请输入产品编号', trigger: 'blur' }],
+    itemname: [{ required: true, message: '请选择产品', trigger: 'blur' }],
+    model: [{ required: false, message: '请输入产品型号', trigger: 'blur' }],
+    cardno: [{ required: false, message: '请输入保修卡号', trigger: 'blur' }],
+    province: [{ required: true, message: '请选择省市县', trigger: 'change' }],
+    address: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
+    customername: [{ required: true, disabled: true, message: '请输客户名称', trigger: 'blur' }],
+    customerphonenumber: [{ required: true, message: '请输入客户电话', trigger: 'blur', pattern: /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/, message: '请输入正确的手机号码' }],
+    scenecontact: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
+    scenecontactphonenumber: [{ required: true, message: '请输入联系人电话', trigger: 'blur', pattern: /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/, message: '请输入正确的手机号码' }],
+});
+
+// 切换故障类型
+function changeClass2(e) {
+    let index = e.detail.value - 0;
+    form.class2 = class2.value[index].value;
+}
+
+// 切换服务类型
+function servicetypeChange(type) {
+    rules.class2[0].required = type == '维修';
+    uFormRef.value.setRules(rules);
+}
+
+const class1 = ref(''),
+    servertypes = ref(['安装', '维修', '清洗']),
+    class2 = ref('');
+
+onShow(() => {
+    $Http.getClass('servertype').then(res => {
+        servertypes.value = res.data.map(v => v.value);
+        if (res.code !== 1) return uni.showToast({ title: res.msg, icon: 'none' });
+    });
+
+    $Http.getClass('prodclass1').then(res => {
+        class1.value = res.data;
+        if (res.code !== 1) return uni.showToast({ title: res.msg, icon: 'none' });
+    });
+
+    $Http.getClass('faulttype').then(res => {
+        class2.value = res.data;
+        uFormRef.value.setRules(rules);
+        if (res.code !== 1) return uni.showToast({ title: res.msg, icon: 'none' });
+    });
+});
+
+function changeRegion(e) {
+    form.province = e.detail.value[0];
+    form.city = e.detail.value[1];
+    form.county = e.detail.value[2];
+}
+
+// 保存
+let loading = ref(false);
+
+function save() {
+    if (querySku.value === false) return uni.showToast({ title: '序列号不正确', icon: 'none' });
+    if (loading.value) return;
+    uFormRef.value.validate().then(valid => {
+        if (valid) wx.showModal({
+            content: '请确认预约信息正确以便后续服务,是否确认提交?',
+            title: '提示',
+            success: ({ confirm }) => {
+                if (confirm) {
+                    form.customername = form.scenecontact;
+                    form.customerphonenumber = form.scenecontactphonenumber;
+                    form.name = form.customername;
+                    form.phonenumber = form.scenecontactphonenumber;
+                    let content = {
+                        ...form,
+                    };
+                    loading.value = true;
+                    $Http.basic({
+                        "id": "20230206091403",
+                        content
+                    }).then(res => {
+                        loading.value = false;
+                        console.log("提交申请单", res);
+                        if (res.code !== 1) {
+                            uni.showToast({ title: res.code !== 1 ? res.msg : "保存成功", icon: 'none', mask: res.code == 1 });
+                        } else {
+                            $Http.basic({
+                                id: 20230206101403,
+                                content: {
+                                    sa_serviceorderid: res.data.sa_serviceorderid,
+                                    backreason: "",
+                                    issumbit: 1
+                                }
+                            }).then(res1 => {
+                                console.log("提交工单", res1);
+                            })
+                            uni.showModal({
+                                content: "预约申请已提交,立即前往还是继续创建?",
+                                confirmText: '立即前往',
+                                cancelText: '继续创建',
+                                success: (success) => {
+                                    if (success.confirm) {
+                                        uni.redirectTo({
+                                            url: `/pages/generalServices/detail?id=${res.data.sa_serviceorderid}`,
+                                        });
+                                    } else {
+                                        uni.redirectTo({
+                                            url: '/pages/launchApplication/index',
+                                        });
+                                    }
+                                },
+                            })
+                        }
+                    }).catch(err => {
+                        loading.value = false;
+                        console.error("保存工单失败", err);
+                        uni.showToast({ title: '保存失败,请稍后重试', icon: 'none' });
+                    });
+                }
+            },
+        })
+    })
+}
+
+function phonenumberConfirm() {
+    // 校验手机号
+    const phoneRegex = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/;
+    if (!phoneRegex.test(form.customerphonenumber)) {
+        return uni.showToast({ title: '请输入正确的手机号', icon: 'none' });
+    }
+    uni.showLoading({ title: '查询中...' });
+    $Http.basic({
+        "id": 2025080813465203,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 50,
+            "where": {
+                phonenumber: form.customerphonenumber,
+            }
+        }
+    }).then(res => {
+        uni.hideLoading();
+        console.log("根据用户手机查询", res)
+        if (res.code !== 1) return uni.showToast({ title: res.msg, icon: 'none' });
+        if (res.data.length === 0) return uni.showToast({ title: '未找到对应的客户信息', icon: 'none' });
+        if (res.data.length == 1 && detail.itemid == res.data[0].itemid) {
+            changeItem(res.data[0]);
+        } else {
+            products.value = res.data;
+        }
+    })
+}
+
+let querySku = ref(true); // SKU是否正确
+let disabledCustomername = ref(true);
+
+function skuConfirm() {
+    if (form.sku) {
+        ['contact', 'serviceenterprisename', 'cardno', 'itemid', 'itemname', 'itemno', 'model', 'phonenumber', 'unitname', 'spec'].forEach(key => {
+            form[key] = '';
+        });
+        if (form.sku == '') return;
+        uni.showLoading({
+            title: '查询中...',
+            mask: true,
+        });
+        $Http.basic({
+            "id": 2025080813465203,
+            "content": {
+                "pageNumber": 1,
+                "pageSize": 1,
+                "where": {
+                    sku: form.sku,
+                }
+            }
+        }).then(res => {
+            console.log("查询sku", res)
+            uni.hideLoading();
+            if (res.code !== 1) return uni.showToast({ title: res.msg, icon: 'none' });
+            if (res.data.length === 0 || res.data[0].sku !== form.sku) {
+                uni.showToast({ title: '未找到对应的产品信息', icon: 'none' });
+                querySku.value = false;
+                return;
+            }
+            querySku.value = true;
+            changeItem(res.data[0]);
+            uni.showToast({ title: '已自动写入客户、产品信息', icon: 'none' });
+        })
+    } else {
+        form.sku = '';
+    }
+}
+
+let products = ref([]); // 产品列表
+function closePopup() {
+    products.value = [];
+}
+function changeItem(item) {
+    item.contact = item.name;
+    item.serviceenterprisename = item.serviceenterprisename || item.enterprisename;
+    ['customername', 'customerphonenumber', 'sku', 'cardno', 'itemid', 'itemname', 'itemno', 'model', 'unitname', 'spec', 'sa_customersid'].forEach(key => {
+        if (key == 'customername') {
+            form.scenecontact = item['customername'];
+            disabledCustomername.value = item['customername'] != ''
+        } else if (key == 'customerphonenumber') {
+            form.scenecontactphonenumber = item['customerphonenumber'];
+        }
+        form[key] = item[key] || '';
+    });
+    uni.showToast({ title: '已自动写入客户、产品信息', icon: 'none' });
+    querySku.value = true;
+    closePopup();
+}
+
+function openScan() {
+    uni.navigateTo({
+        url: '/pages/bookingService/getCode'
+    });
+    $Http.getCode = (code) => {
+        form.sku = code || '';
+        skuConfirm();
+        uni.navigateBack()
+        delete $Http.getCode;
+    }
+}
+
+function toSelectMyProduct() {
+    uni.navigateTo({
+        url: '/pages/launchApplication/skus'
+    });
+    $Http.onSelected = (item) => {
+        ['customername', 'customerphonenumber', 'sku', 'cardno', 'itemid', 'itemname', 'itemno', 'model', 'unitname', 'spec', 'sa_customersid'].forEach(key => {
+            if (key == 'customername') {
+                form.scenecontact = item['customername'];
+                disabledCustomername.value = item['customername'] != ''
+            } else if (key == 'customerphonenumber') {
+                form.scenecontactphonenumber = item['customerphonenumber'];
+            }
+            form[key] = item[key] || '';
+        });
+        uni.navigateBack()
+        delete $Http.onSelected
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.content {
+    width: 100vw;
+    padding: 20px;
+    box-sizing: border-box;
+    min-height: 100vh;
+    background: #fff;
+
+
+    .picker {
+        font-size: 28rpx;
+        color: #606266;
+        padding: 9px;
+        border-radius: 8rpx;
+        border: 1rpx solid #2979FF;
+        color: #2979FF;
+    }
+
+    .title {
+        font-size: 34rpx;
+        color: #4773EE;
+        margin: 20rpx 0;
+        font-weight: bold;
+    }
+
+    .region {
+        font-size: 28rpx;
+        color: #606266;
+        padding: 10px 9px;
+        width: 280px;
+        box-sizing: border-box;
+        border-radius: 8rpx;
+        border: 1rpx solid #dadbde !important;
+    }
+}
+
+.product {
+    padding: 20rpx;
+    background: #fff;
+    margin: 10rpx 0;
+    border-radius: 8rpx;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+
+    .itemname {
+        font-size: 32rpx;
+        color: #333;
+        font-weight: bold;
+        margin-bottom: 10rpx;
+    }
+
+    .row {
+        font-size: 28rpx;
+        color: #666;
+        margin-top: 8rpx;
+    }
+}
+
+.my-but {
+    line-height: 44rpx;
+    padding: 0 20rpx;
+    background: #2979ff;
+    color: #fff;
+    border-radius: 8rpx;
+    margin-right: 10rpx;
+    font-size: 24rpx;
+}
+</style>

+ 217 - 0
pages/launchApplication/skus.vue

@@ -0,0 +1,217 @@
+<template>
+    <view class="search-box">
+        <up-search placeholder="搜索关键词" v-model="keyword" height="35" @blur="onSearch" :clearabled="false"
+            :showAction="false" />
+        <view v-if="content.where.condition" class="clear" @click.stop="onSearch('')">
+            <up-icon name="close-circle-fill" size="20" />
+        </view>
+    </view>
+    <view style="height: 20rpx; " />
+    <My_listbox ref="listBox" :empty="!list.length" @getlist="getList">
+        <view class="item" hover-class="navigator-hover" v-for="item in list" :key="item.itemid"
+            @click="selected(item)">
+            <view class="image-box" >
+                <up-image :show-loading="true" :src="item.cover" width="80px" height="80px" />
+                <view class="tag" v-if="item.cardno" :style="{
+                    background: item.isUnderWarranty ? '#27D8B4' : '#E14154',
+                }">
+                    {{ item.isUnderWarranty ? '在' : '过' }}保
+                </view>
+            </view>
+            <view class="content">
+                <view class="row">
+                    <text class="label">
+                        产品名称
+                    </text>
+                    {{ item.itemname || ' --' }}
+                </view>
+                <view class="row">
+                    <text class="label">
+                        产品型号
+                    </text>
+                    {{ item.model || ' --' }}
+                </view>
+                <view class="row">
+                    <text class="label">
+                        序列号
+                    </text>
+                    {{ item.sku || ' --' }}
+                </view>
+                <view class="row">
+                    <text class="label">
+                        保修卡号
+                    </text>
+                    {{ item.cardno || ' --' }}
+                </view>
+                <view class="row">
+                    <text class="label">
+                        保修期限
+                    </text>
+                    {{ item.begdate ? item.begdate + '至' + item.enddate : ' --' }}
+                </view>
+            </view>
+        </view>
+        <view style="height: 30px;" />
+    </My_listbox>
+</template>
+
+<script setup>
+import { ref, reactive, getCurrentInstance } from 'vue';
+const { $Http } = getCurrentInstance().proxy;
+import { onLoad } from '@dcloudio/uni-app';
+
+const keyword = ref('');
+const listBox = ref(null);
+
+const content = reactive({
+    loading: false,
+    "pageNumber": 1,
+    "pageSize": 20,
+    sys_enterpriseid: '',
+    "where": {
+        "condition": ""
+    }
+});
+
+function onSearch(e) {
+    if (content.where.condition == e) return;
+    content.where.condition = e;
+    keyword.value = e;
+    getList(true);
+}
+const list = ref([])
+
+onLoad(() => {
+    $Http.basic({
+        "classname": "common.usercenter.usercenter",
+        "method": "queryUserMsg",
+        "content": {}
+    }).then(res => {
+        if (res.code != 1) return uni.showToast({
+            title: res.msg,
+            icon: 'none'
+        });
+        content.sys_enterpriseid = res.data.hr.sys_enterpriseid;
+        getList();
+    })
+});
+
+function getList(init = false) {
+    if (content.loading) {
+        listBox.value.refreshToComplete();
+        listBox.value.setHeight();
+        return
+    };
+    content.loading = true;
+    if (init) content.pageNumber = 1;
+    $Http.basic({
+        "id": "2025082210142103",
+        content
+    }).then(res => {
+        content.loading = false;
+        if (res.code != 1) return uni.showToast({
+            title: res.msg,
+            icon: 'none'
+        });
+        console.log("获取产品列表", res)
+        listBox.value.refreshToComplete();
+        listBox.value.setHeight();
+        res.data = res.data.map(v => {
+            v.isUnderWarranty = new Date() >= new Date(v.begdate) && new Date() <= new Date(v.enddate);
+            try {
+                v.cover = v.attinfos.length ? $Http.getSpecifiedImage(v.attinfos[0]) : ''
+            } catch (error) {
+                
+            }
+            return v
+        })
+        if (res.code == 1) {
+            list.value = reactive(res.firstPage ? res.data : list.value.concat(res.data));
+            content.pageTotal = res.pageTotal;
+            content.pageNumber = res.pageNumber;
+        } else {
+            if (res.msg) uni.showToast({
+                title: res.msg,
+                icon: 'none'
+            });
+        }
+    })
+}
+
+function selected(item) {
+    $Http.onSelected && $Http.onSelected(item)
+}
+</script>
+
+<style lang="scss" scoped>
+.search-box {
+    position: relative;
+    padding: 20rpx;
+    background: #fff;
+
+    .clear {
+        position: absolute;
+        display: flex;
+        align-items: center;
+        right: 0;
+        top: 50%;
+        transform: translateY(-50%);
+        width: 80rpx;
+        padding-left: 10rpx;
+        height: 70rpx;
+        z-index: 2;
+    }
+}
+
+
+.item {
+    position: relative;
+    display: flex;
+    width: 95%;
+    box-shadow: 0rpx 4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+    border-radius: 10rpx;
+    box-sizing: border-box;
+    padding: 20rpx 30rpx;
+    overflow: hidden;
+    margin: 0 auto 20rpx;
+    background: #fff;
+
+    .image-box {
+        position: relative;
+
+        .tag {
+            position: absolute;
+            left: 0;
+            top: 0;
+            padding: 4rpx 14rpx;
+            padding-right: 20rpx;
+            text-align: center;
+            background: red;
+            font-size: 22rpx;
+            color: #fff;
+            border-radius: 0 0 8rpx 0;
+        }
+    }
+
+    .content {
+        margin-left: 20rpx;
+
+        .row {
+            display: flex;
+            line-height: 32rpx;
+            font-family: Microsoft YaHei, Microsoft YaHei;
+            font-size: 24rpx;
+            margin-top: 8rpx;
+
+            .label {
+                color: #666;
+                flex-shrink: 0;
+            }
+
+            .label::after {
+                content: ':';
+            }
+        }
+    }
+}
+</style>

+ 6 - 0
pages/workOrder/detail.vue

@@ -239,6 +239,12 @@ function getDetail() {
 
         }
 
+        try {
+            res.data.inqualityguaranteeperiod = new Date() >= new Date(res.data.cardbegdate) && new Date() <= new Date(res.data.cardenddate);
+        } catch (error) {
+            
+        }
+
         if (res.data.status == '进行中' && detail.servicetype == '') transition.value = false;
         time.value = new Date().getTime()
         detail = reactive(res.data);

+ 1 - 1
utils/Http.js

@@ -44,7 +44,7 @@ class HTTP {
         }
 
         if (process.env.NODE_ENV === 'development') {
-            this.baseUrl = this.urls[0].url;
+            this.baseUrl = this.urls[1].url;
         } else {
             this.baseUrl = this.urls[0].url;
         }