xiaohaizhao преди 8 месеца
родител
ревизия
6b1bdacf47
променени са 3 файла, в които са добавени 193 реда и са изтрити 69 реда
  1. 6 0
      pages.json
  2. 34 69
      pages/bookingService/index.vue
  3. 153 0
      pages/select/product.vue

+ 6 - 0
pages.json

@@ -20,6 +20,12 @@
 			"style": {
 				"navigationBarTitleText": "预约服务"
 			}
+		},
+		{
+			"path": "pages/select/product",
+			"style": {
+				"navigationBarTitleText": "选择产品"
+			}
 		}
 	],
 	"globalStyle": {

+ 34 - 69
pages/bookingService/index.vue

@@ -47,11 +47,11 @@
                 </up-input>
             </up-form-item>
 
-            <up-form-item label="产品名称" prop="itemname">
+            <up-form-item label="产品名称" prop="itemname" :required="rules.itemname[0].required">
                 <up-input v-model="form.itemname" disabled placeholder="请输入序列号或选择产品">
                     <template #suffix>
                         <view style="display: flex;align-items: center;">
-                            <view class="my-but" hover-class="navigator-hover">
+                            <view class="my-but" hover-class="navigator-hover" @click="toSelectProduct">
                                 选择产品
                             </view>
                         </view>
@@ -90,10 +90,14 @@
                 </My_region>
             </up-form-item>
 
-            <up-form-item label="详细地址" prop="address">
+            <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" />
@@ -135,36 +139,41 @@ import { ref, reactive, getCurrentInstance } from 'vue';
 const { $Http } = getCurrentInstance().proxy;
 import { onShow } from '@dcloudio/uni-app';
 
+const userMsg = uni.getStorageSync('userMsg')
 const uFormRef = ref(null);
 const form = reactive({
     sa_serviceorderid: 0,
+    sa_orderid: 0,
+    sys_enterpriseid: 0,
+    sa_customersid: uni.getStorageSync("userRecord").sa_customersid || 0,
     servicetype: '', // 服务类型
     class1: '', // 产品品类
     class2: '', // 故障类型
     sku: '', // 序列号
+    itemid: '', // 产品ID
     itemname: '', // 产品名称
     itemno: '', // 产品编号
     model: '', // 产品型号
     cardno: '', // 保修卡号
 
-    scenecontact: '', // 联系人
-    scenecontactphonenumber: '', // 联系人电话
+    scenecontact: userMsg.name, // 联系人
+    scenecontactphonenumber: userMsg.phonenumber, // 联系人电话
 
     province: '', // 省
     city: '', // 市
     county: '', // 县
 
     address: '', // 详细地址
+    remarks: ''
 });
 
-
 const rules = reactive({
     servicetype: [{ required: true, message: '请选择服务类型', trigger: 'change' }],
     class1: [{ required: true, message: '请选择产品品类', trigger: 'change' }],
     class2: [{ required: false, message: "请选择故障类型", trigger: 'change' }],
     sku: [{ required: false, message: '请输入序列号', trigger: 'blur' }],
     itemno: [{ required: false, message: '请输入产品编号', trigger: 'blur' }],
-    itemname: [{ required: true, 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' }],
@@ -173,12 +182,18 @@ const rules = reactive({
     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 servicetypeChange(type) {
+    rules.class2[0].required = type == '维修';
+    rules.sku[0].required = type == '安装';
+    uFormRef.value.setRules(rules);
+}
+
+
 const class1 = ref(''),
     servertypes = ref(['安装', '维修', '清洗']),
     class2 = ref('');
 
-let sa_workorderid = 0;
-
 onShow(() => {
     $Http.getClass('servertype').then(res => {
         servertypes.value = res.data.map(v => v.value);
@@ -192,16 +207,11 @@ onShow(() => {
 
     $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 servicetypeChange(type) {
-    rules.class2[0].required = type == '维修';
-    rules.sku[0].required = type == '安装';
-    uFormRef.value.setRules(rules);
-}
-
 // 保存
 let loading = ref(false);
 
@@ -211,17 +221,15 @@ function save() {
     uFormRef.value.validate().then(valid => {
         if (valid) {
             let content = {
-                "sa_workorderid": sa_workorderid,
-                sa_serviceorderid: detail.sa_serviceorderid,
                 ...form
             };
             loading.value = true;
             $Http.basic({
-                "id": "20230208140003",
+                "id": "20230206091403",
                 content
             }).then(res => {
                 loading.value = false;
-                console.log("保存工单", res);
+                console.log("提交申请单", res);
                 uni.showToast({ title: res.code !== 1 ? res.msg : "保存成功", icon: 'none', mask: res.code == 1 });
                 if (res.code == 1) setTimeout(() => {
                     uni.navigateBack();
@@ -284,56 +292,13 @@ function closePopup() {
 }
 function changeItem(item) {
     item.contact = item.name;
-
-    if (item.itemid == detail.itemid) {
-        handle();
-    } else {
-        uni.showModal({
-            title: '提示',
-            content: `当前选择的产品与工单中的产品不一致,是否继续?`,
-            success: function ({ confirm }) {
-                if (confirm) handle()
-            }
-        });
-    }
-
-    function handle() {
-        item.serviceenterprisename = item.serviceenterprisename || item.enterprisename;
-        ['contact', 'serviceenterprisename', 'sku', 'cardno', 'itemid', 'itemname', 'itemno', 'model', 'phonenumber', 'unitname', 'spec'].forEach(key => {
-            form[key] = item[key] || '';
-        });
-        uni.showToast({ title: '已填充表单', icon: 'none' });
-        querySku.value = true;
-        closePopup();
-    }
-}
-
-function phonenumberConfirm() {
-    // 校验手机号
-    let reg = /^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 (!reg.test(form.phonenumber)) {
-        return uni.showToast({ title: '请输入正确的手机号', icon: 'none' });
-    }
-    $Http.basic({
-        "id": 2025080813465203,
-        "content": {
-            "pageNumber": 1,
-            "pageSize": 50,
-            phonenumber: form.phonenumber,
-            "where": {
-                // phonenumber: form.phonenumber,
-            }
-        }
-    }).then(res => {
-        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;
-        }
-    })
+    item.serviceenterprisename = item.serviceenterprisename || item.enterprisename;
+    ['contact', 'serviceenterprisename', 'sku', 'cardno', 'itemid', 'itemname', 'itemno', 'model', 'phonenumber', 'unitname', 'spec'].forEach(key => {
+        form[key] = item[key] || '';
+    });
+    uni.showToast({ title: '已填充表单', icon: 'none' });
+    querySku.value = true;
+    closePopup();
 }
 
 function openScan() {

+ 153 - 0
pages/select/product.vue

@@ -0,0 +1,153 @@
+<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="itemname">{{ item.itemname }}</view>
+            <view class="row">
+                <view class="label">
+                    产品编号:
+                </view>
+                <view class="value">
+                    {{ item.itemno || '--' }}
+                </view>
+            </view>
+            <view class="row">
+                <view class="label">
+                    型号/规格:
+                </view>
+                <view class="value">
+                    {{ item.model }}/{{ item.spec || '--' }}
+                </view>
+            </view>
+            <view class="row">
+                <view class="label">
+                    计量单位:
+                </view>
+                <view class="value">
+                    {{ item.unitname || '--' }}
+                </view>
+            </view>
+        </view>
+    </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,
+    "where": {
+        "status": '',
+        "condition": ""
+    }
+});
+
+function onSearch(e) {
+    if (content.where.condition == e) return;
+    content.where.condition = e;
+    keyword.value = e;
+    getList(true);
+}
+const list = ref([])
+
+onLoad(() => {
+    getList();
+});
+
+function getList(init = false) {
+    if (content.loading) return;
+    content.loading = true;
+    if (init) content.pageNumber = 1;
+    $Http.basic({
+        "id": "20220923140602",
+        content
+    }).then(res => {
+        content.loading = false;
+        console.log("获取产品列表", res)
+        listBox.value.refreshToComplete();
+        listBox.value.setHeight();
+        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 {
+    width: 690rpx;
+    background: #FFFFFF;
+    box-shadow: 0rpx 4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+    border-radius: 10rpx;
+    padding: 40rpx;
+    box-sizing: border-box;
+    margin: 0 auto 20rpx;
+
+    .itemname {
+        line-height: 38rpx;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-size: 32rpx;
+        color: #333333;
+    }
+
+    .row {
+        display: flex;
+        line-height: 32rpx;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-size: 28rpx;
+        margin-top: 20rpx;
+
+        .label {
+            color: #999999;
+        }
+
+        .value {
+            color: #333333;
+        }
+    }
+}
+</style>