xiaohaizhao 2 месяцев назад
Родитель
Сommit
c2d38c1495

+ 21 - 4
E-service/serviceBillList/detail.js

@@ -18,13 +18,11 @@ Page({
       },
     },
     tabsList: [{
-      label: "服务商品",
-    }, {
       label: "申请信息"
     }, {
       label: "受理信息"
     }],
-    tabsActive: 1
+    tabsActive: 0
   },
   onLoad(options) {
     console.log("options", options)
@@ -33,7 +31,7 @@ Page({
       sa_serviceorderid: options.id
     })
     this.getDetail()
-    getApp().globalData.Language.getLanguagePackage(this, 'E-订单');
+    getApp().globalData.Language.getLanguagePackage(this, '服务申请单详情');
   },
   getDetail() {
     _Http.basic({
@@ -47,10 +45,20 @@ Page({
         title: res.msg,
         icon: "none"
       })
+      if (['售中', "售后"].includes(res.data.servicetype)) {
+        this.data.tabsList.unshift({
+          label: "服务商品",
+          model: "#Product"
+        })
+        this.setData({
+          tabsList: this.data.tabsList
+        })
+      }
       this.setData({
         detail: res.data
       })
       this.setPreview(res);
+      this.partialRenewal();
     })
   },
   setPreview(res) {
@@ -181,6 +189,15 @@ Page({
       list4
     });
   },
+  //tabs 切换
+  tabsChange({
+    detail
+  }) {
+    this.setData({
+      tabsActive: detail
+    });
+    this.partialRenewal();
+  },
   //局部数据更新 tabs
   partialRenewal(init = false) {
     try {

+ 2 - 1
E-service/serviceBillList/detail.json

@@ -1,5 +1,6 @@
 {
   "usingComponents": {
-    "Preview": "../components/preview/index"
+    "Preview": "../components/preview/index",
+    "Product": "./product/index"
   }
 }

+ 1 - 1
E-service/serviceBillList/detail.scss

@@ -1,4 +1,4 @@
-.head {
+.head1 {
 	width: 100vw;
 	background: #fff;
 	box-sizing: border-box;

+ 2 - 1
E-service/serviceBillList/detail.wxml

@@ -1,4 +1,4 @@
-<view class="head">
+<view class="head1">
 	<view class="title">
 		{{detail.billno}}
 	</view>
@@ -41,6 +41,7 @@
 </view>
 <view style="height: 20rpx;" />
 <Yl_FunTabs list='{{tabsList}}' showIcon='{{false}}' active='{{tabsActive}}' bind:onChenge="tabsChange">
+	<Product slot='服务商品' id="Product" sa_orderid='{{detail.sa_orderid}}' disabled='{{detail.status!="新建"}}' />
 	<Preview slot='申请信息' list1='{{list1}}' list2='{{list2}}' />
 	<Preview slot='受理信息' title="确认信息" list1='{{list3}}' list2='{{list4}}' />
 	<view style="height: 150rpx;" />

+ 232 - 0
E-service/serviceBillList/product/index.js

@@ -0,0 +1,232 @@
+const _Http = getApp().globalData.http;
+
+Component({
+  properties: {
+    disabled: {
+      type: Boolean,
+      value: false
+    },
+    sa_orderid: {
+      type: [Number, String],
+      value: 0
+    }
+  },
+  options: {
+    addGlobalClass: true
+  },
+  lifetimes: {
+    attached: function () {
+      getApp().globalData.Language.getLanguagePackage(this)
+      this.setData({
+        siteid: wx.getStorageSync('userMsg').siteid
+      })
+    }
+  },
+  data: {
+    sa_serviceorderid: 0,
+    content: {
+      nocache: true,
+      pageNumber: 1,
+      pageSize: 10,
+      pageTotal: 1,
+      total: null,
+      where: {
+        condition: ""
+      }
+    },
+    list: [],
+    showSearch: false,
+    focus: false,
+    condition: ""
+  },
+  methods: {
+    getList(id, init = false) {
+      console.log("getList", id)
+      let content = {
+        ...this.data.content,
+        sa_serviceorderid: id || this.data.sa_serviceorderid
+      };
+      if (init) {
+        content.pageNumber = 1
+        content.pageTotal = 1
+      }
+      _Http.basic({
+        "id": 20230206161903,
+        content
+      }).then(res => {
+        console.log("服务产品", res)
+        if (res.code != '1') return wx.showToast({
+          title: res.data,
+          icon: "none"
+        });
+        let list = res.data.map(v => {
+          try {
+            v.cover = v.attinfos.length ? _Http.getSpecifiedImage(v.attinfos[0]) : ''
+          } catch (error) {
+
+          }
+          return v
+        })
+        this.setData({
+          "content.pageNumber": res.pageNumber + 1,
+          "content.pageTotal": res.pageTotal,
+          "content.total": res.total,
+          list: res.pageNumber == 1 ? list : this.data.list.concat(list),
+          sa_serviceorderid: content.sa_serviceorderid
+        })
+      })
+    },
+    /* 去添加产品 */
+    addProduct() {
+      wx.navigateTo({
+        url: `/E-service/serviceBillList/product/select?params=${JSON.stringify({
+          "id":"20230206161703",
+          "version":1,
+          "content":{
+            "pageSize":20,
+            "pageNumber":1,
+            "sa_serviceorderid":this.data.sa_serviceorderid,
+            "sa_orderid":this.data.sa_orderid,
+            "where":{"condition":""}
+          }})}`
+      });
+      getApp().globalData.handleSelect = this.handleSelect.bind(this)
+    },
+    /* 处理新增产品 */
+    handleSelect(detail) {
+      console.log(detail)
+      let that = this;
+      wx.showModal({
+        cancelText: getApp().globalData.Language.getMapText('取消'),
+        confirmText: getApp().globalData.Language.getMapText('确定'),
+        title: getApp().globalData.Language.getMapText('提示'),
+        content: getApp().globalData.Language.joint([{
+          v: '是否确认添加',
+          t: 1
+        }, {
+          v: detail.result.length,
+          t: 1,
+          r: ' ',
+          f: " "
+        }, {
+          v: '件商品',
+          t: 1,
+          r: '?',
+        }]),
+        complete: (res) => {
+          if (res.confirm) _Http.basic({
+            "id": "20230206161803",
+            "version": 1,
+            "content": {
+              sa_serviceorderid: this.data.sa_serviceorderid,
+              "iteminfos": detail.list.map(v => {
+                return {
+                  sa_serviceorderitemsid: 0,
+                  "itemid": v.itemid, //商品ID
+                  "qty": 1, //数量
+                  "reason": "",
+                  "traceabilitytype": "",
+                }
+              })
+            },
+          }).then(s => {
+            console.log('新增产品', s)
+            wx.showToast({
+              title: s.code == '1' ? getApp().globalData.Language.getMapText('添加成功') : s.msg,
+              icon: "none"
+            });
+            if (s.code == '1') setTimeout(() => {
+              that.getList('', true);
+              wx.navigateBack();
+            }, 300)
+          })
+        }
+      });
+    },
+    onBlur(e) {
+      const {
+        item
+      } = e.currentTarget.dataset, {
+        value
+      } = e.detail;
+      if (value != item.reason) {
+        item.reason = value
+        _Http.basic({
+          "id": "20230206161803",
+          "version": 1,
+          "content": {
+            sa_serviceorderid: item.sa_serviceorderid,
+            "iteminfos": [item]
+          },
+        }).then(res => {
+          if (res.code != '1') return wx.showToast({
+            title: res.msg,
+            icon: "none"
+          })
+          this.setData({
+            [`list[${this.data.list.findIndex(v=>v.sa_serviceorderitemsid==item.sa_serviceorderitemsid)}]`]: item
+          })
+        })
+      }
+    },
+    deleteItem(e) {
+      const {
+        item
+      } = e.currentTarget.dataset,
+        that = this;
+      console.log("item", item)
+      wx.showModal({
+        content: getApp().globalData.Language.getMapText(`是否确定删除该产品`),
+        complete: ({
+          confirm
+        }) => {
+          if (confirm) _Http.basic({
+            "id": "20230206162003",
+            "content": {
+              "sa_serviceorderitemsids": [item.sa_serviceorderitemsid]
+            },
+          }).then(res => {
+            wx.showToast({
+              title: res.code == 1 ? getApp().globalData.Language.getMapText(`删除成功`) : res.msg,
+              icon: "none"
+            })
+            if (res.code == 1) {
+              that.getList('', true)
+            }
+          })
+        }
+      })
+    },
+    toSearch() {
+      if (this.data.showSearch && this.data.content.where.condition) {
+        this.data.content.where.condition = '';
+        this.getList("", true);
+      } else if (this.data.condition) {
+        this.data.content.where.condition = this.data.condition;
+        this.setData({
+          condition: this.data.condition
+        })
+        this.getList("", true);
+      }
+      this.setData({
+        showSearch: !this.data.showSearch
+      })
+      setTimeout(() => {
+        this.setData({
+          focus: this.data.showSearch
+        })
+      }, 300)
+    },
+    onChange({
+      detail
+    }) {
+      this.data.condition = detail;
+    },
+    onSearch({
+      detail
+    }) {
+      this.data.content.where.condition = detail;
+      this.getList("", true)
+    },
+  }
+})

+ 4 - 0
E-service/serviceBillList/product/index.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 168 - 0
E-service/serviceBillList/product/index.scss

@@ -0,0 +1,168 @@
+.head {
+	display: flex;
+	align-items: center;
+	width: 100vw;
+	height: 120rpx;
+	padding: 0 20rpx 0 30rpx;
+	box-sizing: border-box;
+
+	.count {
+		font-size: 28rpx;
+		font-family: PingFang SC-Regular, PingFang SC;
+		color: #333333;
+	}
+
+	.expand {
+		flex: 1;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+
+		.but {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			flex-shrink: 0;
+			width: 80rpx;
+			height: 80rpx;
+			background: #FFFFFF;
+			border-radius: 8rpx;
+			border: 2rpx solid #CCCCCC;
+			margin-left: 20rpx;
+			color: #666666;
+		}
+	}
+}
+
+.custom-class {
+	--search-background-color: #fff !important;
+	padding-right: 10rpx !important;
+}
+
+.product-item {
+	box-sizing: border-box;
+
+	.product {
+
+		.mian {
+			position: relative;
+			display: flex;
+			width: 100%;
+			box-sizing: border-box;
+
+			.img {
+				position: relative;
+				flex-shrink: 0;
+				width: 112rpx;
+				height: 112rpx;
+				border-radius: 16rpx;
+				margin-right: 28rpx;
+
+				.err {
+					display: flex;
+					width: 100%;
+					height: 100%;
+					align-items: center;
+					justify-content: center;
+					font-size: 22rpx;
+					border: 1px solid #ddd;
+					box-sizing: border-box;
+					color: #666;
+					border-radius: 16rpx;
+				}
+
+			}
+
+			.dec {
+				flex: 1;
+				width: 0;
+				min-height: 128rpx;
+				height: 100%;
+				font-size: 24rpx;
+				font-family: PingFang SC-Regular, PingFang SC;
+				color: #999999;
+
+				.title {
+					display: flex;
+					width: 95%;
+					height: 40rpx;
+					font-size: 28rpx;
+					font-weight: 600;
+					color: #333333;
+
+					.line-1 {
+						max-width: 460rpx;
+					}
+
+					.tag {
+						display: inline-block;
+						color: #fff;
+						background-color: #F80700;
+						padding: 0 20rpx;
+						margin-left: 20rpx;
+						border-radius: 20rpx;
+						font-weight: normal;
+						font-size: 22rpx;
+						line-height: 40rpx;
+					}
+				}
+
+				.subfield {
+					display: flex;
+					margin-top: 8rpx;
+					height: 34rpx;
+					line-height: 34rpx;
+
+					text {
+						display: inline-block;
+						width: 48%;
+					}
+				}
+
+				.price {
+					font-size: 25rpx;
+					color: #FF3B30;
+				}
+
+				.old-price {
+					font-size: 24rpx;
+					font-family: PingFang SC-Regular, PingFang SC;
+					color: #999999;
+					margin-left: 8rpx;
+					text-decoration-line: line-through;
+				}
+
+				.bottom {
+					display: flex;
+					align-items: center;
+					height: 58rpx;
+					font-family: PingFang SC, PingFang SC;
+					font-size: 24rpx;
+					color: #333333;
+					margin-top: 24rpx;
+					margin-left: -130rpx;
+					padding-bottom: 2rpx;
+
+					textarea {
+						flex: 1;
+						height: 58rpx;
+						line-height: 58rpx;
+						background: #FFFFFF;
+						border-radius: 8rpx;
+						border: 1rpx solid #CCCCCC;
+						padding-left: 20rpx;
+					}
+
+				}
+
+			}
+
+			.iconfont-box {
+				position: absolute;
+				right: 0rpx;
+				color: #B5B5B5;
+				border-radius: 8rpx;
+			}
+		}
+	}
+}

+ 62 - 0
E-service/serviceBillList/product/index.wxml

@@ -0,0 +1,62 @@
+<view class="head">
+  <view class="count">
+    总共{{content.total}}个
+  </view>
+  <view class="expand">
+    <van-search wx:if="{{showSearch}}" custom-class='custom-class' focus='{{focus}}' value="{{ condition }}" shape="round" bind:change='onChange' bind:search='onSearch' bind:clear='onSearch' placeholder="搜索关键词" background='#F4F5F7' />
+    <navigator url="#" class="but" bindtap="toSearch">
+      <van-icon name="search" />
+    </navigator>
+    <navigator wx:if="{{!disabled}}" url="#" class="but" bindtap="addProduct">
+      <van-icon name="plus" />
+    </navigator>
+  </view>
+</view>
+
+<view class="product-item" wx:for="{{list}}" wx:key="itemid">
+  <view class="product global-card">
+    <view class="mian">
+      <view class="img" data-file="{{item.attinfos}}" catchtap="viewImage">
+        <van-image width="100%" height="100%" wx:if="{{item.cover}}" src="{{item.cover}}" use-loading-slot lazy-load>
+          <van-loading slot="loading" type="spinner" size="20" vertical />
+        </van-image>
+        <text wx:else class="err">{{language['暂无图片']||'暂无图片'}}</text>
+      </view>
+      <view class="dec">
+        <view class="title">
+          <text class="line-1">{{item.itemname}}</text>
+        </view>
+        <view class="subfield">
+          {{language['编号']||'编号'}}:{{item.itemno||' --'}}
+        </view>
+        <view class="subfield">
+          {{language['型号']||'型号'}}:{{language[item.model]||item.model||' --'}}
+        </view>
+        <view class="subfield">
+          {{language['规格']||'规格'}}:{{language[item.spec]||item.spec||' --'}}
+        </view>
+        <block wx:if="{{siteid=='HY'}}">
+          <view class="subfield">
+            {{language['公称通径']||'公称通径'}}:{{item.caliber||' --'}}
+          </view>
+          <view class="subfield">
+            {{language['公称压力']||'公称压力'}}:{{item.nominalpressure}}
+          </view>
+        </block>
+        <view class="subfield">
+          <text class="line-1" style="margin-right: 6rpx;">{{language['供应方']||'供应方'}}:{{language[item.spec]||item.spec||' --'}}</text>
+          <text class="line-1" style="margin-right: 6rpx;">{{language['数量']||'数量'}}:{{item.qty}}</text>
+        </view>
+        <view class="bottom">
+          <text style="color: #666;">{{language['问题描述']||'问题描述'}}:</text>
+          <textarea auto-focus placeholder-style='line-height:58rpx;' value='{{item.reason}}' placeholder="{{language['问题描述']||'问题描述'}}" disabled="{{disabled}}" data-item="{{item}}" bindblur="onBlur" />
+        </view>
+      </view>
+      <navigator wx:if="{{!disabled}}" url="#" class="iconfont-box" data-item="{{item}}" bind:tap="deleteItem">
+        <view class="iconfont icon-guanlian-shanchu" />
+      </navigator>
+    </view>
+  </view>
+</view>
+
+<My_empty wx:if="{{list.length==0}}" />

+ 184 - 0
E-service/serviceBillList/product/select.js

@@ -0,0 +1,184 @@
+const _Http = getApp().globalData.http,
+    file = require("../../../utils/FormatTheAttachment");
+import currency from "../../../utils/currency";
+Page({
+    data: {
+        loading: true,
+        params: {}, //请求体
+        result: [], //返回结果
+        radio: false, //是否为单选
+        idname: "itemid", //idkey
+        showName: "itemname",
+    },
+    onLoad(options) {
+        this.setData({
+            siteid: wx.getStorageSync('userMsg').siteid
+        })
+        if (options.params) {
+            let params = JSON.parse(options.params);
+            if (!params.content.pageNumber || !params.content.pageTotal) {
+                params.content.pageNumber = 1;
+                params.content.pageTotal = 1;
+            }
+            this.setData({
+                params
+            });
+        };
+        this.setData({
+            radio: options.radio ? true : false,
+            idname: options.idname || this.data.idname,
+            showName: options.showName || this.data.showName,
+            oldPrice: options.oldprice || "oldprice" //对比老价格
+        });
+        this.getList()
+        getApp().globalData.Language.getLanguagePackage(this, '添加商品');
+    },
+    getList(init = false) {
+        //init 用于初始化分页
+        if (init.detail != undefined) init = init.detail;
+        let params = this.data.params;
+        if (init) params.content.pageNumber = 1
+        if (params.content.pageNumber > params.content.pageTotal) return;
+        for (const key in params.content.where) {
+            if (String(params.content.where[key]).length == 0) delete(params.content.where[key])
+        }
+        _Http.basic(params).then(res => {
+            console.log("选择产品列表", res)
+            this.selectComponent('#ListBox').RefreshToComplete();
+            if (res.code != '1') return wx.showToast({
+                title: res.msg,
+                icon: "none"
+            })
+            const CNY = num => currency(num, {
+                symbol: "¥",
+                precision: 2
+            }).format();
+            res.data = res.data.map(value => {
+                if (value.attinfos.length != 0) {
+                    value.attinfos = file.fileList(value.attinfos)
+                    let image = value.attinfos.find(v => v.fileType == "image");
+                    value.cover = image ? image.cover : "";
+                }
+                return value;
+            })
+            this.setData({
+                'params.content.pageNumber': res.pageNumber + 1,
+                'params.content.pageTotal': res.pageTotal,
+                'params.content.total': res.total,
+                list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
+                loading: false
+            })
+        })
+    },
+    /* 选中 */
+    changeResult(e) {
+        let {
+            id
+        } = e.currentTarget.dataset, result = this.data.result;
+        if (this.data.radio) {
+            result = [id];
+        } else {
+            result.some(v => v == id) ? result = result.filter(v => v != id) : result.push(id)
+        }
+        this.setData({
+            result
+        });
+        if (this.data.radio) this.submit();
+    },
+    /* 提交 */
+    submit() {
+        let result = this.data.result,
+            obj = this.data.radio ? {
+                id: result,
+                item: this.data.list.find(value => value[this.data.idname] == result),
+                value: [this.data.list.find(value => value[this.data.idname] == result)[this.data.showName], result]
+            } : {
+                result,
+                list: result.map(v => this.data.list.find(value => value[this.data.idname] == v)),
+                value: [result.map(v => {
+                    let data = this.data.list.find(value => value[this.data.idname] == v);
+                    return data ? data[this.data.showName] : ""
+                }), result]
+            }
+        getApp().globalData.handleSelect && getApp().globalData.handleSelect(obj)
+    },
+    /* 预览图片 */
+    viewImage(e) {
+        const {
+            file
+        } = e.currentTarget.dataset;
+        if (file.length) wx.previewMedia({
+            sources: file.filter(value => ['image', 'vadio'].includes(value.fileType)).map(v => {
+                return {
+                    url: v.url,
+                    type: v.fileType
+                }
+            }),
+            current: 0,
+            showmenu: true
+        })
+    },
+    /* 开始搜索 */
+    startSearch({
+        detail
+    }) {
+        let condition = this.data.content ? this.data.content.where.condition : this.data.params.content.where.condition;
+        if (detail == condition) return;
+        this.setData({
+            'content.where.condition': detail,
+            'params.content.where.condition': detail
+        });
+        this.getList(true);
+    },
+    /* 取消搜索 */
+    onClear() {
+        this.setData({
+            'content.where.condition': "",
+            'params.content.where.condition': ""
+        });
+        this.getList(true);
+    },
+    onReady() {
+        this.selectComponent("#ListBox").setHeight(".total", this);
+    },
+    onUnload() {
+        //回收数据
+        getApp().globalData.handleSelect = null;
+    },
+    /* 打断 */
+    interrupt(e) {
+        let {
+            name,
+            index,
+            item,
+            list
+        } = e.detail;
+        if (name == "sa_brandid") _Http.basic({
+            "id": "20220922110403",
+            "content": {
+                nocache: true,
+                "sa_brandid": item.sa_brandid,
+            }
+        }).then(res => {
+            console.log("分类列表", res)
+            if (res.code != '1') return wx.showToast({
+                title: res.msg,
+                icon: "none"
+            })
+            if (!res.data[0].ttemclass) return;
+            list[4] = {
+                label: "分类",
+                index: null,
+                type: "multilevelClass",
+                showName: "itemclassname", //显示字段
+                valueKey: "itemclassid", //返回Key
+                selectKey: "itemclassid", //传参 代表选着字段 不传参返回整个选择对象
+                value: "", //选中值
+                list: res.data[0].ttemclass
+            }
+            this.setData({
+                filtratelist: list
+            })
+        })
+    },
+})

+ 3 - 0
E-service/serviceBillList/product/select.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 144 - 0
E-service/serviceBillList/product/select.scss

@@ -0,0 +1,144 @@
+page {
+	height: 100vh;
+	overflow: hidden;
+}
+
+.total {
+	height: 60rpx;
+	line-height: 60rpx;
+	font-size: 24rpx;
+	font-family: PingFang SC-Regular, PingFang SC;
+	color: #666666;
+	padding-left: 30rpx;
+}
+
+.setclient-list-item {
+	width: 100vw;
+	padding: 0 30rpx;
+	background-color: #FFFFFF;
+	box-sizing: border-box;
+	border-bottom: 1rpx solid #DDDDDD;
+
+	.mian {
+		display: flex;
+		align-items: center;
+		width: 100%;
+		box-sizing: border-box;
+		padding: 20rpx 0;
+
+		.img {
+			flex-shrink: 0;
+			width: 128rpx;
+			height: 128rpx;
+			border-radius: 16rpx;
+			margin-right: 30rpx;
+			overflow: hidden;
+
+			.err {
+				display: flex;
+				width: 100%;
+				height: 100%;
+				align-items: center;
+				justify-content: center;
+				font-size: 22rpx;
+				border: 1px solid #ddd;
+				box-sizing: border-box;
+				color: #666;
+			}
+		}
+
+		.dec {
+			flex: 1;
+			width: 0;
+			min-height: 128rpx;
+			height: 100%;
+			font-size: 24rpx;
+			font-family: PingFang SC-Regular, PingFang SC;
+			color: #999999;
+
+			.title {
+				height: 40rpx;
+				line-height: 40rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC-Semibold, PingFang SC;
+				font-weight: 600;
+				color: #333333;
+			}
+
+			.subfield {
+				margin-top: 6rpx;
+				height: 34rpx;
+				line-height: 34rpx;
+
+
+				text {
+					display: inline-block;
+					max-width: 250rpx;
+					min-width: 150rpx;
+				}
+			}
+
+			.price {
+				height: 40rpx;
+				line-height: 40rpx;
+				margin-top: 8rpx;
+
+				.num {
+					font-size: 28rpx;
+					color: #FF3B30;
+					font-weight: 600;
+				}
+
+				text {
+					color: #333333;
+				}
+			}
+		}
+	}
+
+	.bot {
+		font-size: 24rpx;
+		font-family: PingFang SC-Regular, PingFang SC;
+		color: #999999;
+		height: 72rpx;
+		line-height: 72rpx;
+
+		text {
+			width: 50%;
+			display: inline-block;
+			box-sizing: border-box;
+			padding: 4rpx;
+		}
+	}
+}
+
+.footer {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 0 30rpx;
+	position: fixed;
+	width: 100vw;
+	height: 130rpx;
+	background: #FFFFFF;
+	box-shadow: 0px -4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+	bottom: 0;
+	box-sizing: border-box;
+
+	.count {
+		font-size: 28rpx;
+		font-family: PingFang SC-Regular, PingFang SC;
+		color: #333333;
+	}
+
+	.but {
+		width: 156rpx;
+		height: 90rpx;
+		background: #3874F6;
+		border-radius: 8rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC-Bold, PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+}

+ 63 - 0
E-service/serviceBillList/product/select.wxml

@@ -0,0 +1,63 @@
+<van-search class="search" value="{{ params.content.where.condition }}" shape="round" placeholder="{{language['关键字']||'请输入搜索关键词'}}" bind:search='startSearch' bind:clear='onClear' use-action-slot>
+</van-search>
+<view class="total">{{language['共']||'共'}}{{params.content.total}}{{language['个']||'个'}}</view>
+
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+    <navigator class="setclient-list-item" url="#" wx:for="{{list}}" wx:key="itemno" data-id="{{item[idname]}}" bindtap="changeResult">
+        <view class="mian">
+            <van-checkbox wx:if="{{!radio}}" value="{{ handle.isCheck(item[idname],result) }}" shape="square" icon-size='28rpx' />
+            <view class="img" data-file="{{item.attinfos}}" catchtap="viewImage">
+                <van-image width="100%" height="100%" wx:if="{{item.cover}}" src="{{item.cover}}" use-loading-slot use-error-slot lazy-load>
+                    <van-loading slot="loading" type="spinner" size="20" vertical />
+                    <text slot="error" style="font-size: 24rpx;">{{language['暂无图片']||'暂无图片'}}</text>
+                </van-image>
+                <text wx:else class="err">{{language['暂无图片']||'暂无图片'}}</text>
+            </view>
+            <view class="dec">
+                <view class="title line-1">
+                    {{item.itemname}}
+                </view>
+                <view class="subfield line-1">
+                    {{language['编号']||'编号'}}:{{item.itemno}}
+                </view>
+                <view class="subfield line-1">
+                    {{language['型号']||'型号'}}:{{language[item.model]||item.model||' --'}}
+                </view>
+                <view class="subfield line-1">
+                    {{language['规格']||'规格'}}:{{language[item.spec]||item.spec||' --'}}
+                </view>
+                <block wx:if="{{siteid=='HY'}}">
+                    <view class="subfield">
+                        {{language['公称通径']||'公称通径'}}:{{item.caliber||' --'}}
+                    </view>
+                    <view class="subfield">
+                        {{language['公称压力']||'公称压力'}}:{{item.nominalpressure}}
+                    </view>
+                </block>
+            </view>
+        </view>
+    </navigator>
+    <view wx:if="{{!radio}}" style="height: 130rpx;" />
+    <Yl_Empty wx:if="{{list.length==0}}" />
+</Yl_ListBox>
+
+<block wx:if="{{!radio}}">
+    <view class="footer">
+        <view class="count">
+            {{language['已选']||'已选'}}:{{result.length}}
+        </view>
+        <view class="buts">
+            <van-button custom-class='but' disabled='{{result.length==0}}' bind:click="submit">{{language['确定']||'确定'}}</van-button>
+        </view>
+    </view>
+    <wxs module="handle">
+        module.exports = {
+            isCheck: function (id, list) {
+                return list.some(function (v) {
+                    return v == id
+                });
+            },
+        }
+    </wxs>
+</block>
+<wxs src="../../../utils/nominalpressure.wxs" module="join"></wxs>

+ 2 - 1
app.json

@@ -93,7 +93,8 @@
         "serviceImprovement/detail",
         "workOrder/index",
         "workOrder/insert",
-        "workOrder/detail"
+        "workOrder/detail",
+        "serviceBillList/product/select"
       ]
     },
     {

+ 19 - 0
app.wxss

@@ -84,4 +84,23 @@ navigator {
 
 .stopClick {
     pointer-events: none;
+}
+
+.global-total {
+    height: 64rpx;
+    line-height: 64rpx;
+    font-size: 24rpx;
+    font-family: PingFang SC-Regular, PingFang SC;
+    color: #666666;
+    background: #F4F5F7;
+    padding-left: 30rpx;
+}
+
+.global-card {
+    width: 690rpx;
+    background: #FFFFFF;
+    box-sizing: border-box;
+    padding: 20rpx;
+    border-radius: 8rpx;
+    margin: 0 auto 20rpx;
 }

+ 9 - 2
project.private.config.json

@@ -24,12 +24,19 @@
   "condition": {
     "miniprogram": {
       "list": [
+        {
+          "name": "老申请单详情",
+          "pathName": "/Eservice/workerLeader/serviceBillDetail/index",
+          "query": "id=1524",
+          "scene": null,
+          "launchMode": "default"
+        },
         {
           "name": "工单详情",
           "pathName": "E-service/workOrder/detail",
           "query": "id=1382",
-          "scene": null,
-          "launchMode": "default"
+          "launchMode": "default",
+          "scene": null
         },
         {
           "name": "新工单",