From 94c29f755a210eb4967f3f286de00caa2b162f25 Mon Sep 17 00:00:00 2001
From: llj <132905093+newwwwwwtree@users.noreply.github.com>
Date: 星期一, 02 二月 2026 09:57:29 +0800
Subject: [PATCH] 客诉处理单
---
pages/CustomerComplaintsBill/CustomerComplaintsBillEdit.vue | 1093 ++++++++++++++++++++++++++
pages/CustomerComplaintsBill/CustomerComplaintsBillDetail.vue | 742 +++++++++++++++++
pages/CustomerComplaintsBill/CustomerComplaintsBillList.vue | 618 ++++++++++++++
pages.json | 21
pages/index/tab4.vue | 7
5 files changed, 2,481 insertions(+), 0 deletions(-)
diff --git a/pages.json b/pages.json
index ae32e70..6a34ef1 100644
--- a/pages.json
+++ b/pages.json
@@ -1723,6 +1723,27 @@
{
"navigationBarTitleText" : "鐗规壒鍗�"
}
+ },
+ {
+ "path" : "pages/CustomerComplaintsBill/CustomerComplaintsBillList",
+ "style" :
+ {
+ "navigationBarTitleText" : "瀹㈣瘔鍗曞垪琛�"
+ }
+ },
+ {
+ "path" : "pages/CustomerComplaintsBill/CustomerComplaintsBillDetail",
+ "style" :
+ {
+ "navigationBarTitleText" : "瀹㈣瘔鍗�"
+ }
+ },
+ {
+ "path" : "pages/CustomerComplaintsBill/CustomerComplaintsBillEdit",
+ "style" :
+ {
+ "navigationBarTitleText" : "瀹㈣瘔鍗曠紪杈�"
+ }
}
diff --git a/pages/CustomerComplaintsBill/CustomerComplaintsBillDetail.vue b/pages/CustomerComplaintsBill/CustomerComplaintsBillDetail.vue
new file mode 100644
index 0000000..8364894
--- /dev/null
+++ b/pages/CustomerComplaintsBill/CustomerComplaintsBillDetail.vue
@@ -0,0 +1,742 @@
+<template>
+ <view class="container">
+ <view class="header">
+ <view class="title">瀹㈣瘔澶勭悊鍗曟槑缁�</view>
+ <view class="sub-title">{{ HBillNo }}</view>
+ </view>
+ <!-- Tab鍒囨崲 -->
+ <view class="tab-container">
+ <view class="tabs">
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 0}"
+ @click="switchTab(0)"
+ >
+ 鍩烘湰淇℃伅
+ </view>
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 1}"
+ @click="switchTab(1)"
+ >
+ 瀹℃牳淇℃伅
+ </view>
+ <!-- <view
+ class="tab-item"
+ :class="{'active': currentTab === 2}"
+ @click="switchTab(2)"
+ >
+ 鐗╂枡淇℃伅
+ </view> -->
+ </view>
+ <view class="tab-indicator" :style="indicatorStyle"></view>
+ </view>
+
+ <scroll-view
+ scroll-y
+ class="content"
+ :style="{height: scrollHeight + 'px'}"
+ >
+ <!-- Tab 0: 鍩烘湰淇℃伅 -->
+ <view v-if="currentTab === 0" class="tab-content">
+ <view class="info-card">
+ <view class="card-title">璁㈠崟鍩烘湰淇℃伅</view>
+ <view class="info-grid">
+ <view class="info-item" v-if="orderInfo.鏃ユ湡">
+ <text class="label">鏃ユ湡锛�</text>
+ <text class="value">{{ orderInfo.鏃ユ湡 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍗曟嵁鍙�">
+ <text class="label">鍗曟嵁鍙凤細</text>
+ <text class="value">{{ orderInfo.鍗曟嵁鍙� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍗曟嵁鐘舵��">
+ <text class="label">鍗曟嵁鐘舵�侊細</text>
+ <text class="value">{{ orderInfo.鍗曟嵁鐘舵�� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓婚">
+ <text class="label">涓婚锛�</text>
+ <text class="value">{{ orderInfo.涓婚 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.璁㈠崟鍙�">
+ <text class="label">璁㈠崟鍙凤細</text>
+ <text class="value">{{ orderInfo.璁㈠崟鍙� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓诲浜�">
+ <text class="label">涓诲浜猴細</text>
+ <text class="value">{{ orderInfo.涓诲浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹㈡湇">
+ <text class="label">瀹㈡湇锛�</text>
+ <text class="value">{{ orderInfo.瀹㈡湇 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹㈡埛">
+ <text class="label">瀹㈡埛锛�</text>
+ <text class="value">{{ orderInfo.瀹㈡埛 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹㈡埛鑱旂郴浜�">
+ <text class="label">瀹㈡埛鑱旂郴浜猴細</text>
+ <text class="value">{{ orderInfo.瀹㈡埛鑱旂郴浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鎶曡瘔鍒嗙被">
+ <text class="label">鎶曡瘔鍒嗙被锛�</text>
+ <text class="value">{{ orderInfo.鎶曡瘔鍒嗙被 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鎶曡瘔鏃堕棿">
+ <text class="label">鎶曡瘔鏃堕棿锛�</text>
+ <text class="value">{{ orderInfo.鎶曡瘔鏃堕棿 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍙戠敓鏃堕棿">
+ <text class="label">鍙戠敓鏃堕棿锛�</text>
+ <text class="value">{{ orderInfo.鍙戠敓鏃堕棿 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.绱ф�ョ▼搴�">
+ <text class="label">绱ф�ョ▼搴︼細</text>
+ <text class="value">{{ orderInfo.绱ф�ョ▼搴� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.杞﹂棿">
+ <text class="label">杞﹂棿锛�</text>
+ <text class="value">{{ orderInfo.杞﹂棿 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹屾垚鏁伴噺">
+ <text class="label">瀹屾垚鏁伴噺锛�</text>
+ <text class="value">{{ orderInfo.瀹屾垚鏁伴噺 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓嶈壇鏁伴噺">
+ <text class="label">涓嶈壇鏁伴噺锛�</text>
+ <text class="value">{{ orderInfo.涓嶈壇鏁伴噺 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓嶈壇鍘熷洜">
+ <text class="label">涓嶈壇鍘熷洜锛�</text>
+ <text class="value">{{ orderInfo.涓嶈壇鍘熷洜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.闂鏉ユ簮">
+ <text class="label">闂鏉ユ簮锛�</text>
+ <text class="value">{{ orderInfo.闂鏉ユ簮 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍙戠敓宸ュ簭">
+ <text class="label">鍙戠敓宸ュ簭锛�</text>
+ <text class="value">{{ orderInfo.鍙戠敓宸ュ簭 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.澶勭悊缁撴灉">
+ <text class="label">澶勭悊缁撴灉锛�</text>
+ <text class="value">{{ orderInfo.澶勭悊缁撴灉 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鏄惁鍋滅嚎">
+ <text class="label">鏄惁鍋滅嚎锛�</text>
+ <text class="value">{{ orderInfo.鏄惁鍋滅嚎 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鏄惁閲嶅鍙戠敓">
+ <text class="label">鏄惁閲嶅鍙戠敓锛�</text>
+ <text class="value">{{ orderInfo.鏄惁閲嶅鍙戠敓 }}</text>
+ </view>
+ <view class="info-item full-width" v-if="orderInfo.鏄惁娑夊強鐗╂枡">
+ <text class="label">鏄惁娑夊強鐗╂枡锛�</text>
+ <text class="value">{{ orderInfo.鏄惁娑夊強鐗╂枡 }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- Tab 1: 瀹℃牳淇℃伅 -->
+ <view v-if="currentTab === 1" class="tab-content">
+ <view class="info-card">
+ <view class="card-title">瀹℃壒娴佺▼淇℃伅</view>
+ <view class="info-grid">
+ <view class="info-item" v-if="orderInfo.鍒跺崟浜�">
+ <text class="label">鍒跺崟浜猴細</text>
+ <text class="value">{{ orderInfo.鍒跺崟浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍒跺崟鏃ユ湡">
+ <text class="label">鍒跺崟鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.鍒跺崟鏃ユ湡) }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹℃牳浜�">
+ <text class="label">瀹℃牳浜猴細</text>
+ <text class="value">{{ orderInfo.瀹℃牳浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹℃牳鏃ユ湡">
+ <text class="label">瀹℃牳鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.瀹℃牳鏃ユ湡) }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.淇敼浜�">
+ <text class="label">淇敼浜猴細</text>
+ <text class="value">{{ orderInfo.淇敼浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.淇敼鏃ユ湡">
+ <text class="label">淇敼鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.淇敼鏃ユ湡) }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- Tab 2: 鐗╂枡淇℃伅 -->
+ <view v-if="currentTab === 2" class="tab-content">
+ <view class="material-list">
+ <view
+ v-for="(item, index) in materialList"
+ :key="index"
+ class="material-card"
+ >
+ <view class="material-header">
+ <text class="material-code">{{ item.鐗╂枡缂栫爜 || '鐗╂枡' + (index + 1) }}</text>
+ <text class="material-name">{{ item.鐗╂枡鍚嶇О }}</text>
+ </view>
+ <view class="material-info">
+ <view class="info-row">
+ <view class="info-col" v-if="item.瑙勬牸鍨嬪彿">
+ <text class="label">瑙勬牸鍨嬪彿锛�</text>
+ <text class="value">{{ item.瑙勬牸鍨嬪彿 }}</text>
+ </view>
+ <view class="info-col" v-if="item.璁¢噺鍗曚綅浠g爜">
+ <text class="label">鍗曚綅浠g爜锛�</text>
+ <text class="value">{{ item.璁¢噺鍗曚綅浠g爜 }}</text>
+ </view>
+ <view class="info-col" v-if="item.璁¢噺鍗曚綅鍚嶇О">
+ <text class="label">璁¢噺鍗曚綅鍚嶇О锛�</text>
+ <text class="value">{{ item.璁¢噺鍗曚綅鍚嶇О }}</text>
+ </view>
+ <view class="info-col" v-if="item.鐗╂枡鏂欏彿">
+ <text class="label">鐗╂枡鏂欏彿锛�</text>
+ <text class="value">{{ item.鐗╂枡鏂欏彿 }}</text>
+ </view>
+ <view class="info-col" v-if="item.涓嶈壇鍝丼N鐮�">
+ <text class="label">涓嶈壇鍝丼N鐮侊細</text>
+ <text class="value">{{ item.涓嶈壇鍝丼N鐮� }}</text>
+ </view>
+ <view class="info-col" v-if="闂鐜拌薄绠�杩�">
+ <text class="label">闂鐜拌薄绠�杩帮細</text>
+ <text class="value">{{ item.闂鐜拌薄绠�杩� }}</text>
+ </view>
+ <view class="info-col" v-if="闂璇︾粏鎻忚堪">
+ <text class="label">闂璇︾粏鎻忚堪锛�</text>
+ <text class="value">{{ item.闂璇︾粏鎻忚堪 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鎵瑰彿">
+ <text class="label">鎵瑰彿锛�</text>
+ <text class="value">{{ item.鎵瑰彿 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏁伴噺">
+ <text class="label">鏁伴噺锛�</text>
+ <text class="value">{{ item.鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鐢熶骇鍏ュ簱鏁伴噺">
+ <text class="label">鐢熶骇鍏ュ簱鏁伴噺锛�</text>
+ <text class="value">{{ item.鐢熶骇鍏ュ簱鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.寮�绁ㄦ暟閲�">
+ <text class="label">寮�绁ㄦ暟閲忥細</text>
+ <text class="value">{{ item.寮�绁ㄦ暟閲� }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍏宠仈鏁伴噺">
+ <text class="label">鍏宠仈鏁伴噺锛�</text>
+ <text class="value">{{ item.鍏宠仈鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏈叧鑱旀暟閲�">
+ <text class="label">鏈叧鑱旀暟閲忥細</text>
+ <text class="value">{{ item.鏈叧鑱旀暟閲� }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍚◣鍗曚环">
+ <text class="label">鍚◣鍗曚环锛�</text>
+ <text class="value">{{ item.鍚◣鍗曚环 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鎶樻墸鐜�">
+ <text class="label">鎶樻墸鐜囷細</text>
+ <text class="value">{{ item.鎶樻墸鐜� }}</text>
+ </view>
+ <view class="info-col" v-if="item.瀹為檯鍚◣鍗曚环">
+ <text class="label">瀹為檯鍗曚环锛�</text>
+ <text class="value">{{ item.瀹為檯鍚◣鍗曚环 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍗曚环">
+ <text class="label">鍗曚环锛�</text>
+ <text class="value">{{ item.鍗曚环 }}</text>
+ </view>
+ <view class="info-col" v-if="item.閲戦">
+ <text class="label">閲戦锛�</text>
+ <text class="value">{{ item.閲戦 }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞嚭搴撳鏍搁噾棰�">
+ <text class="label">閿�鍞嚭搴撳鏍搁噾棰濓細</text>
+ <text class="value">{{ item.閿�鍞嚭搴撳鏍搁噾棰� }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞嚭搴撳鏍搁噾棰�">
+ <text class="label">閿�鍞嚭搴撳鏍搁噾棰濓細</text>
+ <text class="value">{{ item.閿�鍞嚭搴撳鏍搁噾棰� }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞��搴撴暟閲�">
+ <text class="label">閿�鍞��搴撴暟閲忥細</text>
+ <text class="value">{{ item.閿�鍞��搴撴暟閲� }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞��搴撳鏍告暟閲�">
+ <text class="label">閿�鍞��搴撳鏍告暟閲忥細</text>
+ <text class="value">{{ item.閿�鍞��搴撳鏍告暟閲� }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏄惁涓嬫帹鐢熶骇璁㈠崟">
+ <text class="label">鏄惁涓嬫帹鐢熶骇璁㈠崟锛�</text>
+ <text class="value">{{ item.鏄惁涓嬫帹鐢熶骇璁㈠崟 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.瀹㈡埛鐗╂枡缂栫爜">
+ <text class="label">瀹㈡埛鐗╂枡缂栫爜锛�</text>
+ <text class="value">{{ item.瀹㈡埛鐗╂枡缂栫爜 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.瀹㈡埛瑙勬牸鍨嬪彿">
+ <text class="label">瀹㈡埛瑙勬牸鍨嬪彿锛�</text>
+ <text class="value">{{ item.瀹㈡埛瑙勬牸鍨嬪彿 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.瀹㈡埛鐗╂枡鍚嶇О">
+ <text class="label">瀹㈡埛鐗╂枡鍚嶇О锛�</text>
+ <text class="value">{{ item.瀹㈡埛鐗╂枡鍚嶇О }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鏄惁鍙栧簱瀛�">
+ <text class="label">鏄惁鍙栧簱瀛橈細</text>
+ <text class="value">{{ item.鏄惁鍙栧簱瀛� }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鍓╀綑璁㈤噾">
+ <text class="label">鍓╀綑璁㈤噾锛�</text>
+ <text class="value">{{ item.鍓╀綑璁㈤噾 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鎶ュ簾鏁伴噺">
+ <text class="label">鎶ュ簾鏁伴噺锛�</text>
+ <text class="value">{{ item.鎶ュ簾鏁伴噺 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鐢熶骇鍏ュ簱鏁伴噺">
+ <text class="label">鐢熶骇鍏ュ簱鏁伴噺锛�</text>
+ <text class="value">{{ item.鐢熶骇鍏ュ簱鏁伴噺 }}%</text>
+ </view>
+ <!-- -->
+ <view class="info-col" v-if="item.绋庣巼">
+ <text class="label">绋庣巼锛�</text>
+ <text class="value">{{ item.绋庣巼 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.绋庨">
+ <text class="label">绋庨锛�</text>
+ <text class="value">{{ item.绋庨 }}</text>
+ </view>
+ <view class="info-col" v-if="item.浠风◣鍚堣">
+ <text class="label">浠风◣鍚堣锛�</text>
+ <text class="value">{{ item.浠风◣鍚堣 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row" v-if="item.浜よ揣鏃ユ湡">
+ <view class="info-col full-width">
+ <text class="label">浜よ揣鏃ユ湡锛�</text>
+ <text class="value">{{ item.浜よ揣鏃ユ湡 }}</text>
+ </view>
+ </view>
+ <view class="info-row" v-if="item.鎶曟枡">
+ <view class="info-col full-width">
+ <text class="label">鎶曟枡锛�</text>
+ <text class="value">{{ item.鎶曟枡 }}</text>
+ </view>
+ </view>
+ <view class="info-row" v-if="item.娣卞姞宸�">
+ <view class="info-col full-width">
+ <text class="label">娣卞姞宸ワ細</text>
+ <text class="value">{{ item.娣卞姞宸� }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <view v-if="materialList.length === 0" class="empty-state">
+ <uni-icons type="list" size="50" color="#ccc"></uni-icons>
+ <text class="empty-text">鏆傛棤鐗╂枡淇℃伅</text>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+
+ <view class="footer">
+ <button class="back-btn" @click="goBack">杩斿洖</button>
+ </view>
+
+ <uni-load-more v-if="loading" status="loading" :content-text="loadingText"></uni-load-more>
+ </view>
+</template>
+
+<script>
+ import { CommonUtils } from '@/utils/common.js'
+ import { getUserInfo } from "../../utils/auth";
+
+ export default {
+ data() {
+ return {
+ // 鍙傛暟
+ linterid: '',
+ HBillNo: '',
+
+
+ currentTab: 0,
+ scrollHeight: 0,
+ loading: false,
+ loadingText: {
+ contentdown: '涓婃媺鏄剧ず鏇村',
+ contentrefresh: '姝e湪鍔犺浇...',
+ contentnomore: '娌℃湁鏇村鏁版嵁浜�'
+ },
+
+
+ orderInfo: {},
+ materialList: [],
+ allData: [],
+ }
+ },
+ computed: {
+ indicatorStyle() {
+ const tabWidth = 100 / 3;
+ return {
+ width: tabWidth + '%',
+ transform: `translateX(${this.currentTab * 100}%)`
+ };
+ }
+ },
+ onLoad(options) {
+ if (options.linterid && options.HBillNo) {
+ this.linterid = options.linterid;
+ this.HBillNo = options.HBillNo;
+ this.loadOrderDetail();
+ } else {
+ uni.showToast({
+ title: '鍙傛暟閿欒',
+ icon: 'error'
+ });
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 1500);
+ }
+
+ // 璁$畻婊氬姩鍖哄煙楂樺害
+ this.calcScrollHeight();
+ },
+ onReady() {
+
+ uni.onWindowResize(() => {
+ this.calcScrollHeight();
+ });
+ },
+ methods: {
+
+ calcScrollHeight() {
+ const systemInfo = uni.getSystemInfoSync();
+ const windowHeight = systemInfo.windowHeight;
+ const query = uni.createSelectorQuery().in(this);
+ query.select('.header').boundingClientRect();
+ query.select('.tab-container').boundingClientRect();
+ query.select('.footer').boundingClientRect();
+ query.exec((res) => {
+ if (res[0] && res[1] && res[2]) {
+ const headerHeight = res[0].height;
+ const tabHeight = res[1].height;
+ const footerHeight = res[2].height;
+ const margin = 5; // 瀹夊叏杈硅窛
+
+ this.scrollHeight = windowHeight - headerHeight - tabHeight - footerHeight - margin;
+ }
+ });
+ },
+
+
+ switchTab(index) {
+ this.currentTab = index;
+ },
+
+
+ loadOrderDetail() {
+ this.loading = true;
+
+
+ const sWhere = ` and HInterID = '${this.linterid}'`;
+
+ CommonUtils.doRequest2({
+ url: '/Crm_CustomerAppealBill/list',
+ data: {
+ sWhere: sWhere,
+ user: getUserInfo()["Czymc"],
+ // Organization:getUserInfo()["Organization"],
+ // page:1,
+ // size:50
+ },
+ resFunction: (res) => {
+ this.loading = false;
+
+ if (res.data.Message === "鏃犳煡鐪嬫潈闄愶紒") {
+ uni.showToast({
+ icon: 'none',
+ title: res.data.Message
+ });
+ return;
+ }
+
+ if (res.data.code === "1" && res.data.data && res.data.data.length > 0) {
+ this.allData = res.data.data;
+
+ this.orderInfo = { ...this.allData[0] };
+
+ this.materialList = this.allData;
+
+
+ if (!this.orderInfo.鍗曟嵁鍙� && this.HBillNo) {
+ this.orderInfo.鍗曟嵁鍙� = this.HBillNo;
+ }
+ } else {
+ uni.showToast({
+ title: '鏈壘鍒拌鍗曚俊鎭�',
+ icon: 'none'
+ });
+ }
+ },
+ errFunction: (err) => {
+ this.loading = false;
+ uni.showToast({
+ title: '鍔犺浇澶辫触',
+ icon: 'error'
+ });
+ console.error('鍔犺浇璁㈠崟璇︽儏澶辫触:', err);
+ }
+ });
+ },
+
+
+ formatDate(dateStr) {
+ if (!dateStr) return '';
+
+ if (dateStr.length >= 10) {
+ return dateStr.substr(0, 10);
+ }
+ return dateStr;
+ },
+
+ // 杩斿洖涓婁竴椤�
+ goBack() {
+ uni.navigateBack();
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .container {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ background-color: #f5f5f5;
+ }
+
+ .header {
+ padding: 30rpx;
+ background: linear-gradient(135deg, #3a78ff 0%, #5a9cff 100%);
+ color: white;
+ text-align: center;
+
+ .title {
+ font-size: 36rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ }
+
+ .sub-title {
+ font-size: 28rpx;
+ opacity: 0.9;
+ }
+ }
+
+ .tab-container {
+ background-color: white;
+ position: relative;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+
+ .tabs {
+ display: flex;
+
+ .tab-item {
+ flex: 1;
+ text-align: center;
+ padding: 25rpx 0;
+ font-size: 30rpx;
+ color: #666;
+ transition: all 0.3s;
+
+ &.active {
+ color: #3a78ff;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .tab-indicator {
+ height: 4rpx;
+ background-color: #3a78ff;
+ transition: transform 0.3s ease;
+ }
+ }
+
+ .content {
+ flex: 1;
+ }
+
+ .tab-content {
+ padding: 20rpx;
+ }
+
+ .info-card {
+ background-color: white;
+ border-radius: 16rpx;
+ padding: 30rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
+
+ .card-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ margin-bottom: 30rpx;
+ padding-bottom: 15rpx;
+ border-bottom: 1rpx solid #eee;
+ }
+
+ .info-grid {
+ display: flex;
+ flex-wrap: wrap;
+
+ .info-item {
+ width: 50%;
+ margin-bottom: 25rpx;
+
+ &.full-width {
+ width: 100%;
+ }
+
+ .label {
+ color: #666;
+ font-size: 28rpx;
+ margin-right: 10rpx;
+ }
+
+ .value {
+ color: #333;
+ font-size: 28rpx;
+ font-weight: 500;
+ word-break: break-all;
+ }
+ }
+ }
+ }
+
+ .material-list {
+ .material-card {
+ background-color: white;
+ border-radius: 16rpx;
+ margin-bottom: 20rpx;
+ padding: 30rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
+
+ .material-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 25rpx;
+ padding-bottom: 15rpx;
+ border-bottom: 1rpx solid #eee;
+
+ .material-code {
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #3a78ff;
+ margin-right: 20rpx;
+ background-color: #f0f7ff;
+ padding: 5rpx 15rpx;
+ border-radius: 8rpx;
+ }
+
+ .material-name {
+ font-size: 28rpx;
+ color: #333;
+ flex: 1;
+ }
+ }
+
+ .material-info {
+ .info-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 15rpx;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ .info-col {
+ width: 50%;
+ margin-bottom: 10rpx;
+
+ &.full-width {
+ width: 100%;
+ }
+
+ .label {
+ color: #888;
+ font-size: 26rpx;
+ margin-right: 8rpx;
+ }
+
+ .value {
+ color: #333;
+ font-size: 26rpx;
+ font-weight: 500;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .empty-state {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 100rpx 0;
+
+ .empty-text {
+ color: #999;
+ font-size: 28rpx;
+ margin-top: 20rpx;
+ }
+ }
+
+ .footer {
+ padding: 20rpx 30rpx;
+ background-color: white;
+ border-top: 1rpx solid #eee;
+
+ .back-btn {
+ background-color: #3a78ff;
+ color: white;
+ border-radius: 50rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 32rpx;
+
+ &:active {
+ background-color: #2c5fcc;
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/pages/CustomerComplaintsBill/CustomerComplaintsBillEdit.vue b/pages/CustomerComplaintsBill/CustomerComplaintsBillEdit.vue
new file mode 100644
index 0000000..cf182b6
--- /dev/null
+++ b/pages/CustomerComplaintsBill/CustomerComplaintsBillEdit.vue
@@ -0,0 +1,1093 @@
+<template>
+ <view>
+ <view class="form">
+ <view class="tabs">
+ <view :class="tabs == 0 ? 'on':''" @tap="() => { tabs = 0; }">鍗曟嵁淇℃伅</view>
+ <view :class="tabs == 1 ? 'on':''" @tap="() => { tabs = 1; }">鍏朵粬淇℃伅</view>
+ <view :class="tabs == 2 ? 'on':''" @tap="() => { tabs = 2; }">鍒跺崟淇℃伅</view>
+ </view>
+
+ <!-- 鍗曟嵁淇℃伅 -->
+ <view v-if="tabs == 0">
+ <view class="form-item">
+ <view class="title">鍗曟嵁鍙�:</view>
+ <view class="righton">
+ <input name="HBillNo" disabled v-model="hform.HBillNo" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鍗曟嵁鏃ユ湡:</view>
+ <view class="right">
+ <picker mode="date" v-model="hform.HDate" @change="HDateChange">
+ <input disabled v-model="hform.HDate" placeholder="璇烽�夋嫨鏃ユ湡" />
+ </picker>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">涓婚:</view>
+ <view class="righton">
+ <input name="HContext" v-model="hform.HContext" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">璁㈠崟鍙�:</view>
+ <view class="righton">
+ <input name="HOrderBillNo" v-model="hform.HOrderBillNo" />
+ </view>
+ </view>
+
+ <view class="form-item">
+ <view class="title"><text>*</text>涓诲浜�:</view>
+ <view class="right">
+ <uni-combox :candidates="arrayHEmpName" placeholder="璇烽�夋嫨涓诲浜�" v-model="hform.HManagerName"
+ @input="HManagerNameChange"></uni-combox>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title"><text>*</text>瀹㈡湇:</view>
+ <view class="right">
+ <uni-combox :candidates="arrayHEmpName" placeholder="璇烽�夋嫨瀹㈡湇" v-model="hform.HServiceManName"
+ @input="HEmpNameChange"></uni-combox>
+ </view>
+ </view>
+
+ <view class="form-item">
+ <view class="title">浜у搧浠g爜</view>
+ <view class="righton disabled">
+ <input type="text" disabled :value="hform.HMaterNumber" />
+ </view>
+ <view class="icon-wrapper-big">
+ <uni-icons type="search" size="20" @click="showSelectorModule(hform, 1)"></uni-icons>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">浜у搧鍚嶇О</view>
+ <view class="righton disabled">
+ <input type="text" disabled :value="hform.HMaterName" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">瀹㈡埛鑱旂郴浜�:</view>
+ <view class="righton">
+ <input name="HLinkMan" v-model="hform.HLinkMan" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鎶曡瘔鍒嗙被:</view>
+ <view class="righton">
+ <uni-combox :candidates="roleOptions" placeholder="璇烽�夋嫨婧愬崟绫诲瀷" v-model="hform.HAppealType"
+ @input="arrayOptionChange"></uni-combox>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鎶曡瘔鏃ユ湡:</view>
+ <view class="right">
+ <picker mode="date" v-model="hform.HAppealTime" @change="HDateChangeappeal">
+ <input v-model="hform.HAppealTime" placeholder="璇烽�夋嫨鏃ユ湡" />
+ </picker>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鍙戠敓鏃ユ湡:</view>
+ <view class="right">
+ <picker mode="date" v-model="hform.HHappenTime" @change="HDateChangeHappened">
+ <input v-model="hform.HHappenTime" placeholder="璇烽�夋嫨鏃ユ湡" />
+ </picker>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">绱ф�ョ▼搴�:</view>
+ <view class="righton">
+ <uni-combox :candidates="roleOptions_em" placeholder="璇烽�夋嫨" v-model="hform.HLevel"
+ @input="arrayOptionChange_em"></uni-combox>
+ </view>
+ </view>
+
+
+ <view class="form-item">
+ <view class="title">澶囨敞:</view>
+ <view class="right">
+ <textarea name="HRemark" v-model="hform.HRemark" auto-height placeholder="璇疯緭鍏ュ娉�"></textarea>
+ </view>
+ </view>
+
+ </view>
+ <view v-if="tabs == 1">
+ <view class="form-item">
+ <view class="title"><text>*</text>杞﹂棿:</view>
+ <view class="right">
+ <uni-combox :candidates="arrayHDeptName" placeholder="璇烽�夋嫨杞﹂棿" v-model="hform.HWorkShopName"
+ @input="HDeptNameChange"></uni-combox>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">璁¢噺鍗曚綅:</view>
+ <view class="righton">
+ <input v-model="hform.HUnitName" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">浜у搧绫诲瀷:</view>
+ <view class="righton">
+ <input v-model="hform.HMaterType" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">瀹屾垚鏁伴噺:</view>
+ <view class="righton">
+ <input v-model="hform.HQty" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">涓嶈壇鏁伴噺:</view>
+ <view class="righton">
+ <input v-model="hform.HBadQty" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">涓嶈壇鐜�:</view>
+ <view class="righton">
+ <input v-model="hform.HBadRate" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">闂鏉ユ簮 :</view>
+ <view class="righton">
+ <input v-model="hform.HBadSource" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鍙戠敓宸ュ簭:</view>
+ <view class="right">
+ <uni-combox :candidates="arrayHProcName" placeholder="璇烽�夋嫨宸ュ簭" v-model="hform.HProcName"
+ @input="HProcNameChange"></uni-combox>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">澶勭悊缁撴灉:</view>
+ <view class="right">
+ <uni-combox :candidates="roleOptions_dealresult" placeholder="璇烽�夋嫨澶勭悊缁撴灉" v-model="hform.HWorkedResult"
+ @input="HWorkedResultChange"></uni-combox>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鏄惁鍋滅嚎:</view>
+ <view class="right">
+ <uni-data-select v-model="hform.HIsStopLine" :localdata="arrayCheck" placeholder="璇烽�夋嫨" @change="onChange">
+ </uni-data-select>
+ <!-- <uni-combox :candidates="roleOptions_check" placeholder="璇烽�夋嫨" v-model="hform.HIsStopLine"
+ @input="HWorkedResultChange">
+
+ </uni-combox> -->
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鏄惁閲嶅鍙戠敓:</view>
+ <view class="right">
+ <uni-data-select v-model="hform.HIsRepeat" :localdata="arrayCheck" placeholder="璇烽�夋嫨" @change="onChange">
+ </uni-data-select>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鏄惁娑夊強鐗╂枡:</view>
+ <view class="right">
+ <uni-data-select v-model="hform.HIsMater" :localdata="arrayCheck" placeholder="璇烽�夋嫨" @change="onChange">
+ </uni-data-select>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">涓嶈壇鍝丼N鐮�:</view>
+ <view class="righton">
+ <input v-model="hform.HBarCode" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">闂鐜拌薄绠�杩�:</view>
+ <view class="righton">
+ <input v-model="hform.HBadNote" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">闂璇︾粏鎻忚堪:</view>
+ <view class="righton">
+ <input v-model="hform.HBadRemark" />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">澶囨敞:</view>
+ <view class="righton">
+ <input v-model="hform.HRemark" />
+ </view>
+ </view>
+ </view>
+ <view v-if="tabs == 2">
+ <view class="form-item">
+ <view class="title">鍒跺崟浜�:</view>
+ <view class="righton">
+ <input v-model="hform.HMaker" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鍒跺崟鏃ユ湡:</view>
+ <view class="righton">
+ <input v-if="hform.HMakeDate" v-model="hform.HMakeDate.substr(0,10)" disabled />
+ <input v-else v-model="hform.HMakeDate" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">淇敼浜�:</view>
+ <view class="righton">
+ <input v-model="hform.HUpDater" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">淇敼鏃ユ湡:</view>
+ <view class="righton">
+ <input v-if="hform.HUpDateDate" v-model="hform.HUpDateDate.substr(0,10)" disabled />
+ <input v-else v-model="hform.HUpDateDate" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">瀹℃牳浜�:</view>
+ <view class="righton">
+ <input v-model="hform.HChecker" disabled />
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">瀹℃牳鏃ユ湡:</view>
+ <view class="righton">
+ <input v-if="hform.HCheckDate" v-model="hform.HCheckDate.substr(0,10)" disabled />
+ <input v-else v-model="hform.HCheckDate" disabled />
+ </view>
+ </view>
+
+ </view>
+
+ <view class="bottom-btn">
+ <button v-if="btnType == 1 && !isEdit" class="btn-a" size="mini" @tap="submit">鎻愪氦</button>
+ <button v-if="btnType != 1 && !isEdit" class="btn-a" size="mini" @tap="ifEdit">淇敼</button>
+ <button v-if="btnType != 1 && isEdit" class="btn-a" size="mini" @tap="submit">鎻愪氦</button>
+ <button class="btn-c" size="mini" @tap="goBack">閫�鍑�</button>
+ </view>
+ </view>
+ <MaterialPopupVue v-if="enablePopupModule == PopupModuleNameList[1]" ref="listPopup" @update="MaterComplete"
+ :bindKey="0">
+ </MaterialPopupVue>
+ </view>
+
+</template>
+
+<script>
+ import dayjs from "dayjs";
+ import {
+ CommonUtils
+ } from "@/utils/common";
+ import getDateTime from '@/utils/getdateTime.js';
+ import MaterialPopupVue from "@/components/ZLGL/MaterialPopup.vue";
+ import {
+ getUserInfo
+ } from "@/utils/auth.js";
+ export default {
+ components: {
+ MaterialPopupVue,
+ },
+ data() {
+ return {
+ calcTimer: null,
+ operationType: 1,
+ // 鎺у埗褰撳墠鏄剧ず鐨勫脊绐楁ā鍧�
+ enablePopupModule: "",
+ PopupModuleNameList: [
+ "",
+ "Material",
+ "Process",
+ ],
+ // 璁$畻鍒楄〃楂樺害
+ bottomBtnTop: 0,
+ listTableTop: 0,
+ tabs: 0,
+
+ userInfo: getUserInfo(),
+ serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
+ linterid: '',
+ HBillNo: '',
+ btnType: 1, //1鏂板锛�3淇敼
+ showmore: false,
+ HBarCodeFocus: false,
+
+ arrayHDeptName: [], //閮ㄩ棬
+ HDeptNameList: [],
+ arrayHEmpName: [], //鍙戠幇浜�/璐熻矗浜�
+ HEmpNameList: [],
+ arrayHSourceName: [], //鐢熶骇璧勬簮
+ HSourceNameList: [],
+ //涓嬫媺妗�
+ roleOptions: ['浜у搧鎶曡瘔','鏈嶅姟鎶曡瘔','瀹㈡埛鎰忚','鍏跺畠'], // 涓嬫媺妗嗛�夐」
+ arrayOption:{浜у搧鎶曡瘔:"浜у搧鎶曡瘔",鏈嶅姟鎶曡瘔:'鏈嶅姟鎶曡瘔',瀹㈡埛鎰忚:'瀹㈡埛鎰忚',鍏跺畠:'鍏跺畠'},
+ roleOptions_em:['鏅��','绱ф��','闈炲父绱ф��'],
+ arrayOption_em:{鏅��:"鏅��",绱ф��:'绱ф��',闈炲父绱ф��:'闈炲父绱ф��'},
+ roleOptions_dealresult:['鏈鐞�','澶勭悊涓�','澶勭悊瀹屾垚'],
+ arrayOption_dealresult:{鏈鐞�:"鏈鐞�",澶勭悊涓�:'澶勭悊涓�',澶勭悊瀹屾垚:'澶勭悊瀹屾垚'},
+ arrayCheck:[{value:'鏄�',text:'鏄�'},{value:'鍚�',text:'鍚�'}],
+ isEdit: false,
+ listOption: [], // 鍒楄〃閫夐」
+ listData: [], // 琛ㄦ牸鏁版嵁
+ selectedRows: [], // 琛ㄦ牸閫変腑鐨勬暟鎹�
+ arrayHProcName: [], //宸ュ簭
+ HProcNameList: [],
+ hform: {
+
+ HContext: '', // 涓婚
+ HOrderBillNo: '', // 璁㈠崟鍙�
+ HLinkMan: '', // 瀹㈡埛鑱旂郴浜�
+ HHappenTime: '', // 鍙戠敓鏃ユ湡
+ HProcName: '', // 鍙戠敓宸ュ簭鍚嶇О
+ HProcID: '', // 鍙戠敓宸ュ簭ID
+ HUnitName: '', // 璁¢噺鍗曚綅
+ HMaterType: '', // 浜у搧绫诲瀷
+ HQty: '', // 瀹屾垚鏁伴噺
+ HBadQty: '', // 涓嶈壇鏁伴噺
+ HBadRate: '', // 涓嶈壇鐜�
+ HBadSource: '', // 闂鏉ユ簮
+ HWorkedResult: '', // 澶勭悊缁撴灉
+ HIsStopLine: '', // 鏄惁鍋滅嚎
+ HIsRepeat: '', // 鏄惁閲嶅鍙戠敓
+ HIsMater: '', // 鏄惁娑夊強鐗╂枡
+ HBarCode: '', // 涓嶈壇鍝丼N鐮�
+ HBadNote: '', // 闂鐜拌薄绠�杩�
+ HBadRemark: '', // 闂璇︾粏鎻忚堪
+ HUpdater: '', // 淇敼浜�
+ HUpDateDate: '', // 淇敼鏃ユ湡
+
+ // 鍘熸湁灞炴��
+ HAppealTime: '',
+ HAppealType: '',
+ HLevel: '',
+ HInterID: '',
+ HBillNo: '',
+ HDate: getDateTime.dateTimeStr('y-m-d'),
+ HWorkShopName: uni.getStorageSync('HDeptName'),
+ HWorkShopID: uni.getStorageSync('HDeptID'),
+ HServiceManName: uni.getStorageSync('HEmpName'),
+ HServiceMan: uni.getStorageSync('HEmpID'),
+ HManagerName: uni.getStorageSync('HMangerName'),
+ HMangerID: uni.getStorageSync('HMangerID'),
+ HSourceName: '',
+ HSourceID: '0',
+ HScanDate: getDateTime.dateTimeStr('y-m-d h:i:s'),
+ HMaterID: '0',
+ HMaterNumber: '',
+ HMaterName: '',
+ HICMOBillNo: '',
+ HICMOInterID: '0',
+ HICMOEntryID: '0',
+ HProcExchBillNo: '',
+ HProcExchInterID: '0',
+ HProcExchEntryID: '0',
+ HOrgID: uni.getStorageSync('OrganizationID'),
+ HMaker: '',
+ HMakeDate: '',
+ // HUpDater: '', // 宸插湪涓婃柟娣诲姞涓篐Updater
+ // HUpDateDate: '', // 宸插湪涓婃柟娣诲姞
+ HChecker: '',
+ HCheckDate: '',
+ HCloseMan: '',
+ HCloseDate: '',
+ HDeleteMan: '',
+ HDeleteDate: '',
+ HRemark: '', // 澶囨敞
+ eventType: 'Add'
+ }
+ }
+ },
+ onLoad(e) {
+ this.HBarCodeFocus = true
+ this.getHDeptList()
+ this.getHEmpList()
+ this.getHProcList()
+
+ this.hform.HMaker = uni.getStorageSync('HUserName')
+ console.log(e, this.userInfo)
+ if (e.linterid) {
+ this.btnType = 3
+ this.linterid = e.linterid
+ this.HBillNo = e.HBillNo
+ this.getEditData(e.linterid, e.HBillNo)
+ this.getMouldDetailData(e.linterid, e.HBillNo);
+ } else {
+ this.getNewData()
+ }
+ this.tabs = 0
+ },
+ // ==================== 璁$畻灞炴�� ====================
+ computed: {
+ // 璁$畻琛ㄦ牸楂樺害
+ listTableHeight: {
+ get() {
+ return this.bottomBtnTop - this.listTableTop - 10
+ }
+ },
+
+ },
+ watch: {
+ // 鐩戝惉瀹屾垚鏁伴噺鐨勫彉鍖�
+ 'hform.HQty': {
+ handler(newVal, oldVal) {
+ if (newVal !== oldVal) {
+ // 寤惰繜璁$畻锛岄伩鍏嶉绻佽绠�
+ clearTimeout(this.calcTimer);
+ this.calcTimer = setTimeout(() => {
+ this.calcBadRate();
+ }, 300);
+ }
+ },
+ immediate: true // 鍒濆鍖栨椂涔熻绠椾竴娆�
+ },
+
+ // 鐩戝惉涓嶈壇鏁伴噺鐨勫彉鍖�
+ 'hform.HBadQty': {
+ handler(newVal, oldVal) {
+ if (newVal !== oldVal) {
+ // 寤惰繜璁$畻锛岄伩鍏嶉绻佽绠�
+ clearTimeout(this.calcTimer);
+ this.calcTimer = setTimeout(() => {
+ this.calcBadRate();
+ }, 300);
+ }
+ },
+ immediate: true // 鍒濆鍖栨椂涔熻绠椾竴娆�
+ }
+ },
+ methods: {
+ calcBadRate() {
+ try {
+ const completeQty = parseFloat(this.hform.HQty) || 0;
+ const badQty = parseFloat(this.hform.HBadQty) || 0;
+
+ if (completeQty > 0) {
+ // 璁$畻涓嶈壇鐜囩櫨鍒嗘瘮锛屼繚鐣欎袱浣嶅皬鏁�
+ const badRate = (badQty / completeQty * 100).toFixed(2);
+ this.hform.HBadRate = `${badRate}%`;
+ } else {
+ this.hform.HBadRate = '0%';
+ }
+ } catch (error) {
+ console.error('璁$畻涓嶈壇鐜囧嚭閿�:', error);
+ this.hform.HBadRate = '0%';
+ }
+ },
+ onChange(e){
+ console.log("this",this.hform.HIsStopLine)
+ console.log("this",this.hform.HIsRepeat)
+ },
+ arrayOptionChange(e) {
+ console.log('閫変腑鐨勮鑹�:', this.hform.HAppealType);
+ this.hform.HAppealType=this.arrayOption[this.hform.HAppealType]
+ },
+ arrayOptionChange_em(e)
+ {
+ this.hform.HLevel=this.arrayOption_em[this.hform.HLevel]
+ },
+ HWorkedResultChange(d)
+ {
+ this.hform.HWorkedResult=this.arrayOption_dealresult[this.hform.HWorkedResult]
+ },
+ //鏃ユ湡
+ HDateChange(e) {
+ console.log(e.detail.value)
+ this.hform.HDate = e.detail.value
+ },
+ HDateChangeappeal(e)
+ {
+ this.hform.HAppealTime = e.detail.value
+ },
+ HDateChangeHappened(e)
+ {
+ this.hform.HHappenTime=e.detail.value
+ },
+ //鑾峰彇浣跨敤閮ㄩ棬鏁版嵁
+ getHDeptList() {
+ uni.request({
+ url: this.serverUrl + '/PublicPageMethod/DeptList',
+ data: {
+ sWhere: "where HStopFlag=0 and HEndFlag=1 and HUSEORGID = " + uni.getStorageSync(
+ 'OrganizationID') + ""
+ },
+ success: (res) => {
+ if (res.data.count == 1) {
+ this.HDeptNameList = res.data.data
+ for (var i = 0; i < res.data.data.length; i++) {
+ this.arrayHDeptName[i] = res.data.data[i].HName
+ }
+ this.$forceUpdate();
+ } else {
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ }
+ },
+ fail: (res) => {
+ console.log(res);
+ uni.showToast({
+ title: '鎺ュ彛璇锋眰澶辫触',
+ icon: 'none'
+ })
+ },
+ });
+ },
+ //閫夋嫨浣跨敤閮ㄩ棬
+ HDeptNameChange(e) {
+ for (var i = 0; i < this.HDeptNameList.length; i++) {
+ if (this.HDeptNameList[i].HName == e) {
+ this.hform.HWorkShopID = this.HDeptNameList[i].HItemID
+ }
+ }
+ },
+ //鎿嶄綔鍛樸�佽礋璐d汉
+ getHEmpList() {
+ uni.request({
+ url: this.serverUrl + '/Web/GetEmployeeList_Json',
+ data: {
+ Employee: '',
+ HGroupID: 0
+ },
+ success: (res) => {
+ if (res.data.count == 1) {
+ this.HEmpNameList = res.data.data
+ for (var i = 0; i < res.data.data.length; i++) {
+ this.arrayHEmpName[i] = res.data.data[i].HName
+ }
+ this.$forceUpdate();
+ } else {
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ }
+ },
+ fail: (res) => {
+ console.log(res);
+ uni.showToast({
+ title: '鎺ュ彛璇锋眰澶辫触',
+ icon: 'none'
+ })
+ },
+ });
+ },
+ //閫夋嫨鎿嶄綔鍛�
+ HEmpNameChange(e) {
+ for (var i = 0; i < this.HEmpNameList.length; i++) {
+ if (this.HEmpNameList[i].HName == e) {
+ this.hform.HServiceMan = this.HEmpNameList[i].HItemID
+ }
+ }
+ },
+ //閫夋嫨璐熻矗浜�
+ HManagerNameChange(e) {
+ for (var i = 0; i < this.HEmpNameList.length; i++) {
+ if (this.HEmpNameList[i].HName == e) {
+ this.hform.HMangerID = this.HEmpNameList[i].HItemID
+ }
+ }
+ },
+ //鐢熶骇璧勬簮
+ getHSourceList() {
+ uni.request({
+ url: this.serverUrl + '/api/newBill/getSourceList',
+ data: {
+ sWhere: " and HUSEORGID = " + uni.getStorageSync('OrganizationID') + ""
+ },
+ success: (res) => {
+ if (res.data.code == 1) {
+ this.HSourceNameList = res.data.data.Gy_Source
+ for (var i = 0; i < res.data.data.Gy_Source.length; i++) {
+ this.arrayHSourceName[i] = res.data.data.Gy_Source[i].鐢熶骇璧勬簮
+ }
+ this.$forceUpdate();
+ } else {
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ }
+ },
+ fail: (res) => {
+ console.log(res);
+ uni.showToast({
+ title: '鎺ュ彛璇锋眰澶辫触',
+ icon: 'none'
+ })
+ },
+ });
+ },
+ //閫夋嫨鐢熶骇璧勬簮
+ HSourceNameChange(e) {
+ for (var i = 0; i < this.HSourceNameList.length; i++) {
+ if (this.HSourceNameList[i].鐢熶骇璧勬簮 == e) {
+ this.hform.HSourceID = this.HSourceNameList[i].HItemID
+ }
+ }
+ },
+ ifEdit() {
+ this.isEdit = true
+ this.hform.eventType = 'Modify'
+ },
+ // 鏄剧ず寮圭獥
+ async showSelectorModule(item, index) {
+ // this.currentChechItemIDCache = item.num || 0; // 0 琛ㄧず娌℃湁浠讳綍瀛愯〃琚�変腑
+ this.enablePopupModule = this.PopupModuleNameList[index];
+ console.log("this.$refs: ", this.$refs);
+ console.log('listPopup鏄惁瀛樺湪:', !!this.$refs.listPopup);
+ await this.$nextTick();
+ this.$refs.listPopup.showPopup();
+ },
+ // 浜у搧浠g爜杩斿洖
+ async MaterComplete(e) {
+ console.log("MaterRet: ", e);
+ for (var key in e["retVal"]) {
+ let data = e["retVal"][key];
+ Object.assign(this.hform, {
+ HMaterNumber: data["鐗╂枡浠g爜"],
+ HMaterName: data["鐗╂枡鍚嶇О"],
+ HMaterID: data["HItemID"],
+ });
+ await this.$nextTick();
+ this.$refs.listPopup.exit();
+ // 纭繚鍦ㄥ脊绐楃粨鏉熷悗锛屽啀灏嗛〉闈笂鎸傚湪鐨勭粍浠剁疆绌�
+ await this.$nextTick();
+ this.enablePopupModule = this.PopupModuleNameList[0];
+
+ }
+ },
+ //宸ュ簭
+ async getHProcList() {
+ try {
+ let res = await CommonUtils.doRequest2Async({
+ url: '/Gy_Process/list',
+ data: {
+ sWhere: '',
+ user: getUserInfo()['Czymc'] || '',
+ },
+ })
+
+ console.log('宸ュ簭res: ', res);
+ if (res.data.count > 0) {
+ console.log('宸ュ簭res.data.data: ', res.data.data);
+ this.HProcNameList = res.data.data
+ this.arrayHProcName = res.data.data.map(item => item.宸ュ簭鍚嶇О)
+ this.$forceUpdate();
+ } else {
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ }
+ } catch (err) {
+ uni.showToast({
+ title: err,
+ icon: 'none'
+ })
+ }
+
+ },
+ //閫夋嫨Proc
+ HProcNameChange(e) {
+ for (var i = 0; i < this.HProcNameList.length; i++) {
+ if (this.HProcNameList[i].宸ュ簭鍚嶇О == e) {
+ this.hform.HProcID = this.HProcNameList[i].HItemID
+ }
+ }
+ },
+ //缂栬緫鍥炴樉
+ getEditData(linterid, HBillNo) {
+ //涓昏〃
+ uni.request({
+ url: this.serverUrl + '/Crm_CustomerAppealBill/editInit',
+ data: {
+ HInterID: linterid,
+ user: uni.getStorageSync('HUserName')
+ },
+ success: (res) => {
+ console.log(1, res.data.data[0]);
+ if (res.data.code == 1) {
+ var data = res.data.data[0]
+ this.btnType = 3
+ this.hform.HInterID = data.HInterID
+ this.hform.HBillNo = data.鍗曟嵁鍙�
+ this.hform.HDate = data.鏃ユ湡 ? data.鏃ユ湡.substr(0, 10) : ''
+ this.hform.HContext = data.涓婚 || ''
+ this.hform.HOrderBillNo = data.璁㈠崟鍙� || ''
+ this.hform.HMaterID = data.HMaterID || '0'
+ this.hform.HMaterNumber = data.鐗╂枡缂栫爜 || ''
+ this.hform.HMaterName = data.鐗╂枡鍚嶇О || ''
+ this.hform.HUnitName = data.璁¢噺鍗曚綅鍚嶇О || ''
+ this.hform.HMaterType = data.鐗╂枡绫诲瀷 || ''
+ this.hform.HManagerName = data.涓诲浜� || ''
+ this.hform.HMangerID = data.HManager || '0'
+ this.hform.HServiceManName = data.瀹㈡湇 || ''
+ this.hform.HServiceMan = data.HServiceMan || '0'
+ this.hform.HLinkMan = data.瀹㈡埛鑱旂郴浜� || ''
+ this.hform.HAppealType = data.鎶曡瘔鍒嗙被 || ''
+ this.hform.HAppealTime = data.鎶曡瘔鏃堕棿 ? data.鎶曡瘔鏃堕棿.substr(0, 10) : ''
+ this.hform.HHappenTime = data.鍙戠敓鏃堕棿 ? data.鍙戠敓鏃堕棿.substr(0, 10) : ''
+ this.hform.HLevel = data.绱ф�ョ▼搴� || ''
+ this.hform.HWorkShopName = data.杞﹂棿 || ''
+ this.hform.HWorkShopID = data.HWorkShopID || '0'
+ this.hform.HQty = data.瀹屾垚鏁伴噺 || '0'
+ this.hform.HBadQty = data.涓嶈壇鏁伴噺 || '0'
+ this.hform.HBadSource = data.闂鏉ユ簮 || ''
+ this.hform.HProcName = data.鍙戠敓宸ュ簭 || ''
+ this.hform.HProcID = data.HProcID || '0'
+ this.hform.HWorkedResult = data.澶勭悊缁撴灉 || ''
+ this.hform.HIsStopLine = data.鏄惁鍋滅嚎 || ''
+ this.hform.HIsRepeat = data.鏄惁閲嶅鍙戠敓 || ''
+ this.hform.HIsMater = data.鏄惁娑夊強鐗╂枡 || ''
+ this.hform.HBarCode = data.涓嶈壇鍝丼N鐮� || ''
+ this.hform.HBadNote = data.闂鐜拌薄绠�杩� || ''
+ this.hform.HBadRemark = data.闂璇︾粏鎻忚堪 || ''
+ this.hform.HRemark = data.澶囨敞 || ''
+
+ // 璁$畻涓嶈壇鐜�
+ this.calcBadRate();
+
+ // 绯荤粺瀛楁
+ this.hform.HMaker = data.鍒跺崟浜� || ''
+ this.hform.HMakeDate = data.鍒跺崟鏃堕棿 || ''
+ this.hform.HUpdater = data.淇敼浜� || ''
+ this.hform.HUpDateDate = data.淇敼鏃堕棿 || ''
+ this.hform.HChecker = data.瀹℃牳浜� || ''
+ this.hform.HCheckDate = data.瀹℃牳鏃堕棿 || ''
+
+ } else {
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ }
+ },
+ fail: (res) => {
+ console.log(res);
+ uni.showToast({
+ title: '鎺ュ彛璇锋眰澶辫触',
+ icon: 'none'
+ })
+ },
+ });
+ },
+
+
+ //鏂板
+ getNewData() {
+ uni.request({
+ url: this.serverUrl + '/Web/GetMAXNum',
+ data: {
+ HBillType: '3846'
+ },
+ success: (res) => {
+ console.log(res.data)
+ if (res.data.count == 1) {
+ this.hform.HInterID = res.data.data[0].HInterID
+ this.hform.HBillNo = res.data.data[0].HBillNo
+ this.hform.HMakeDate = getDateTime.dateTimeStr('y-m-d')
+ this.btnType = 1
+ } else {
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ }
+ },
+ fail: (res) => {
+ console.log(res);
+ uni.showToast({
+ title: '鎺ュ彛璇锋眰澶辫触',
+ icon: 'none'
+ })
+ },
+ });
+ },
+ submit() {
+ if (!this.hform.HServiceManName) {
+ uni.showToast({
+ title: '璇烽�夋嫨瀹㈡湇',
+ icon: 'none'
+ })
+ } else if (!this.hform.HManagerName) {
+ uni.showToast({
+ title: '璇烽�夋嫨璐熻矗浜�',
+ icon: 'none'
+ })
+ } else if (!this.hform.HMaterNumber) {
+ uni.showToast({
+ title: '璇烽�夋嫨浜у搧',
+ icon: 'none'
+ })
+ } else {
+ uni.showLoading({
+ title: '璇风◢鍊�'
+ })
+ // ========== 绗竴姝ワ細鏋勫缓涓昏〃鏁版嵁 ==========
+ const mainData = {
+ // 鍗曟嵁鍩烘湰淇℃伅
+ HBillNo: this.hform.HBillNo,
+ HInterID: this.hform.HInterID,
+ HDate: this.hform.HDate,
+ HContext: this.hform.HContext || "", // 涓婚
+ HOrderBillNo: this.hform.HOrderBillNo || "", // 璁㈠崟鍙�
+ HRemark: this.hform.HRemark || "", // 澶囨敞
+
+ // 浜哄憳淇℃伅
+ HManagerName: this.hform.HManagerName || "",
+ HMangerID: this.hform.HMangerID || "",
+ HServiceManName: this.hform.HServiceManName || "",
+ HServiceMan: this.hform.HServiceMan || "",
+ HLinkMan: this.hform.HLinkMan || "", // 瀹㈡埛鑱旂郴浜�
+
+ // 浜у搧淇℃伅
+ HMaterID: this.hform.HMaterID || "0",
+ HMaterNumber: this.hform.HMaterNumber || "",
+ HMaterName: this.hform.HMaterName || "",
+ HMaterType: this.hform.HMaterType || "", // 浜у搧绫诲瀷
+ HUnitName: this.hform.HUnitName || "", // 璁¢噺鍗曚綅
+
+ // 鎶曡瘔/闂淇℃伅
+ HAppealType: this.hform.HAppealType || "", // 鎶曡瘔鍒嗙被
+ HAppealTime: this.hform.HAppealTime || "", // 鎶曡瘔鏃ユ湡
+ HHappenTime: this.hform.HHappenTime || "", // 鍙戠敓鏃ユ湡
+ HLevel: this.hform.HLevel || "", // 绱ф�ョ▼搴�
+
+ // 杞﹂棿/宸ュ簭淇℃伅
+ HWorkShopName: this.hform.HWorkShopName || "",
+ HWorkShopID: this.hform.HWorkShopID || "",
+ HProcName: this.hform.HProcName || "", // 鍙戠敓宸ュ簭
+ HProcID: this.hform.HProcID || "", // 鍙戠敓宸ュ簭ID
+
+ // 鏁伴噺淇℃伅
+ HQty: this.hform.HQty || "0", // 瀹屾垚鏁伴噺
+ HBadQty: this.hform.HBadQty || "0", // 涓嶈壇鏁伴噺
+ HBadRate: this.hform.HBadRate || "0", // 涓嶈壇鐜�
+
+ // 闂璇︽儏
+ HBadSource: this.hform.HBadSource || "", // 闂鏉ユ簮
+ HWorkedResult: this.hform.HWorkedResult || "", // 澶勭悊缁撴灉
+ HIsStopLine: this.hform.HIsStopLine || "", // 鏄惁鍋滅嚎
+ HIsRepeat: this.hform.HIsRepeat || "", // 鏄惁閲嶅鍙戠敓
+ HIsMater: this.hform.HIsMater || "", // 鏄惁娑夊強鐗╂枡
+ HBarCode: this.hform.HBarCode || "", // 涓嶈壇鍝丼N鐮�
+ HBadNote: this.hform.HBadNote || "", // 闂鐜拌薄绠�杩�
+ HBadRemark: this.hform.HBadRemark || "", // 闂璇︾粏鎻忚堪
+
+ // 缁勭粐淇℃伅
+ HOrgID: this.hform.HOrgID || uni.getStorageSync('OrganizationID'),
+
+ // 绯荤粺瀛楁
+ HMaker: this.hform.HMaker || uni.getStorageSync('HUserName'),
+ HMakeDate: this.hform.HMakeDate || getDateTime.dateTimeStr('y-m-d'),
+ HUpdater: this.hform.HUpdater || uni.getStorageSync('HUserName'), // 淇敼浜�
+ HUpDateDate: this.hform.HUpDateDate || getDateTime.dateTimeStr('y-m-d'), // 淇敼鏃ユ湡
+ HChecker: this.hform.HChecker || "", // 瀹℃牳浜�
+ HCheckDate: this.hform.HCheckDate || "", // 瀹℃牳鏃ユ湡
+ // HCloseMan: this.hform.HCloseMan || "", // 鍏抽棴浜�
+ // HCloseDate: this.hform.HCloseDate || "", // 鍏抽棴鏃ユ湡
+ // HDeleteMan: this.hform.HDeleteMan || "", // 浣滃簾浜�
+ // HDeleteDate: this.hform.HDeleteDate || "", // 浣滃簾鏃ユ湡
+
+
+
+ eventType: this.hform.eventType || 'Add'
+ };
+
+
+
+ // ========== 绗笁姝ワ細鎷兼帴瀹屾暣鏁版嵁 ==========
+ const submitStr = JSON.stringify(mainData) + ";" + this.btnType +
+ ";" + uni.getStorageSync('HUserName');
+
+
+ console.log(submitStr);
+ uni.request({
+ url: this.serverUrl + '/Crm_CustomerAppealBill/SaveCustomerAppealBill',
+ method: 'POST',
+ dataType: "json",
+ data: {
+ msg: submitStr
+ },
+ success: (res) => {
+ console.log(1, res);
+ uni.hideLoading()
+ if (res.data.count == 1) {
+ let pages = getCurrentPages();
+ let prePage = pages[pages.length - 2];
+
+ if (this.isEdit) {
+ setTimeout(() => {
+ uni.redirectTo({
+ url: '/pages/shangmudan/MouldUpperBill?linterid=' +
+ this.linterid + '&HBillNo=' + this.HBillNo
+ })
+ }, 1000)
+ } else {
+ setTimeout(() => {
+ uni.navigateBack()
+ }, 1000)
+ }
+ }
+ uni.showToast({
+ title: res.data.Message,
+ icon: 'none'
+ })
+ },
+ fail: (res) => {
+ console.log(res);
+ uni.showToast({
+ title: '鎺ュ彛璇锋眰澶辫触',
+ icon: 'none'
+ })
+ },
+ });
+ }
+ },
+ goBack() {
+ uni.showModal({
+ title: '鎻愮ず',
+ content: '纭瑕侀��鍑哄綋鍓嶉〉闈㈠悧锛�',
+ success: (res) => {
+ if (res.confirm) {
+ console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+ uni.navigateBack()
+ } else if (res.cancel) {
+ console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+ }
+ }
+ });
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .form {
+ width: 668rpx;
+ margin: 20rpx auto;
+ padding-bottom: 240rpx;
+ }
+
+ .tab_area {
+ width: 100%;
+ height: 50rpx;
+ }
+
+ .other {
+ margin-top: 8rpx;
+ text-align: center;
+ font-size: 28rpx;
+ padding: 4rpx 18rpx;
+ color: #1890FF;
+ }
+
+ .form-item {
+ display: flex;
+ align-items: center;
+ font-size: 30rpx;
+ padding: 6rpx 0;
+
+ .title {
+ width: 208rpx;
+
+ text {
+ color: red;
+ font-weight: bold;
+ }
+ }
+
+ .right {
+ width: 450rpx;
+ border-radius: 22rpx;
+ border: 1px solid #acacac;
+ }
+
+ .righton {
+ width: 450rpx;
+ border-radius: 22rpx;
+ border: 1px solid #e4e4e4;
+ background-color: #e4e4e4;
+ }
+
+ input {
+ width: 100%;
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ }
+
+ textarea {
+ width: 98%;
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ }
+
+ }
+
+ .bottom-btn {
+ width: 100%;
+ // height: 120rpx;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ background-color: #fff;
+ box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
+ padding: 30rpx 40rpx 40rpx 40rpx;
+
+ button {
+ border-radius: 50rpx;
+ width: 180rpx;
+ height: 66rpx;
+ line-height: 66rpx;
+ font-size: 28rpx;
+ }
+
+ .btn-a {
+ background-color: #3A78FF;
+ color: #fff;
+ }
+
+ .btn-b {
+ background-color: #41a863;
+ color: #fff;
+ }
+
+ .btn-c {
+ background-color: #FFA500;
+ color: #fff;
+ position: absolute;
+ right: 120rpx;
+ }
+
+ .btn-d {
+ background-color: #ff8901;
+ color: #fff;
+ }
+ }
+
+ .tabs {
+ width: 100%;
+ display: flex;
+ border-bottom: 1px solid #ddd;
+ margin: 20rpx 0;
+
+ view {
+ width: 25%;
+ font-size: 30rpx;
+ color: #555;
+ text-align: center;
+ padding: 16rpx 0;
+ }
+
+ .on {
+ color: #3a78ff;
+ font-weight: bold;
+ border-bottom: 3px solid #3a78ff;
+ }
+ }
+
+</style>
\ No newline at end of file
diff --git a/pages/CustomerComplaintsBill/CustomerComplaintsBillList.vue b/pages/CustomerComplaintsBill/CustomerComplaintsBillList.vue
new file mode 100644
index 0000000..62a34e2
--- /dev/null
+++ b/pages/CustomerComplaintsBill/CustomerComplaintsBillList.vue
@@ -0,0 +1,618 @@
+<template>
+ <view>
+ <view class="page-header">
+ <view class="search-item">
+ <view class="left">鏃ユ湡闂撮殧</view>
+ <view class="right">
+ <picker mode="selector" :value="curDateGap" :range="dateRangePicker"
+ @change="onDateRangePickerChangeHandler">
+ <input disabled v-model="curDateGap" placeholder="璇烽�夋嫨鏃ユ湡闂撮殧" />
+ <view class="picker-overlay"></view>
+ </picker>
+ </view>
+ </view>
+ <view class="search-item">
+ <view class="left">寮�濮嬫棩鏈�</view>
+ <view class="right">
+ <uni-datetime-picker :clear-icon="false" type="date" v-model="startDate"
+ :disabled="!enableCustomDateRange">
+ <view class="datetime-picker-inner"
+ :class="enableCustomDateRange?'font__enable':'font__disable'">
+ <text>{{ startDate }}</text>
+ </view>
+ </uni-datetime-picker>
+ </view>
+ </view>
+ <view class="search-item">
+ <view class="left">缁撴潫鏃ユ湡</view>
+ <view class="right">
+ <uni-datetime-picker :clear-icon="false" type="date" v-model="endDate"
+ :disabled="!enableCustomDateRange">
+ <view class="datetime-picker-inner"
+ :class="enableCustomDateRange?'font__enable':'font__disable'">{{ endDate }}</view>
+ </uni-datetime-picker>
+ </view>
+ </view>
+ <view class="search-item">
+ <view class="left">鍗曟嵁鍙�</view>
+ <view class="right">
+ <input type="text" auto-focus v-model="HBillNo" />
+ </view>
+ </view>
+
+ <view class="button-groups">
+ <button type="default" size="mini" class="btn-b" @tap.stop="onAddClickHandler">鏂板</button>
+ <button type="default" size="mini" class="btn-c" @tap.stop="onSearchClickHandler">鏌ヨ</button>
+ <button type="default" size="mini" class="btn-a" @tap.stop="onResetClickHandler">閲嶇疆</button>
+ </view>
+ </view>
+ <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
+ <scroll-view id="pageContent" scroll-y class="page-content" :style="{height: pageContentHeight + 'px'}">
+ <view v-for="(item,index) in listData" :key="index">
+ <uni-card :title="item.璁㈠崟鍙�" :extra="item.鍗曟嵁鍙�" style="margin: 10px;"
+ @tap="showDetail = showDetail==index?-1:index">
+ <view class="card-detail">
+
+ <view class="detail" v-if="item.涓婚">
+ <text>涓婚锛�</text>{{item.涓婚}}
+ </view>
+ <view class="detail" v-if="item.鍗曟嵁鐘舵��">
+ <text>鍗曟嵁鐘舵�侊細</text>{{item.鍗曟嵁鐘舵�亇}
+ </view>
+ <view class="detail" v-if="item.鏃ユ湡">
+ <text>鏃ユ湡锛�</text>{{item.鏃ユ湡}}
+ </view>
+ <view class="detail" v-if="item.鐗╂枡缂栫爜">
+ <text>鐗╂枡缂栫爜锛�</text>{{item.鐗╂枡缂栫爜}}
+ </view>
+ <view class="detail" v-if="item.鐗╂枡鍚嶇О">
+ <text>鐗╂枡鍚嶇О锛�</text>{{item.鐗╂枡鍚嶇О}}
+ </view>
+ <view class="detail" v-if="item.瑙勬牸鍨嬪彿">
+ <text>瑙勬牸鍨嬪彿锛�</text>{{item.瑙勬牸鍨嬪彿}}
+ </view>
+ <view class="detail" v-if="item.璁¢噺鍗曚綅鍚嶇О">
+ <text>璁¢噺鍗曚綅鍚嶇О锛�</text>{{item.璁¢噺鍗曚綅鍚嶇О}}
+ </view>
+ <view class="detail" v-if="item.鐗╂枡绫诲瀷">
+ <text>鐗╂枡绫诲瀷锛�</text>{{item.鐗╂枡绫诲瀷}}
+ </view>
+ <view class="detail" v-if="item.涓诲浜�">
+ <text>涓诲浜猴細</text>{{item.涓诲浜簘}
+ </view>
+ <view class="detail" v-if="item.HServiceMan">
+ <text>HServiceMan锛�</text>{{item.HServiceMan}}
+ </view>
+ <!-- -->
+ <view class="detail" v-if="item.瀹㈡湇">
+ <text>瀹㈡湇锛�</text>{{item.瀹㈡湇}}
+ </view>
+ <view class="detail" v-if="item.瀹㈡埛">
+ <text>瀹㈡埛锛�</text>{{item.瀹㈡埛}}
+ </view>
+ <view class="detail" v-if="item.瀹㈡埛鑱旂郴浜�">
+ <text>瀹㈡埛鑱旂郴浜猴細</text>{{item.瀹㈡埛鑱旂郴浜簘}
+ </view>
+ <view class="detail" v-if="item.鎶曡瘔鍒嗙被">
+ <text>鎶曡瘔鍒嗙被锛�</text>{{item.鎶曡瘔鍒嗙被}}
+ </view>
+
+ <view class="detail" v-if="item.鎶曡瘔鏃堕棿">
+ <text>鎶曡瘔鏃堕棿锛�</text>{{item.鎶曡瘔鏃堕棿}}
+ </view>
+ <view class="detail" v-if="item.鍙戠敓鏃堕棿">
+ <text>鍙戠敓鏃堕棿锛�</text>{{item.鍙戠敓鏃堕棿}}
+ </view>
+ <view class="detail" v-if="item.绱ф�ョ▼搴�">
+ <text>绱ф�ョ▼搴︼細</text>{{item.绱ф�ョ▼搴}
+ </view>
+ <view class="detail" v-if="item.杞﹂棿">
+ <text>杞﹂棿锛�</text>{{item.杞﹂棿}}
+ </view>
+ <view class="detail" v-if="item.瀹屾垚鏁伴噺">
+ <text>瀹屾垚鏁伴噺锛�</text>{{item.瀹屾垚鏁伴噺}}
+ </view>
+ <view class="detail" v-if="item.涓嶈壇鍘熷洜">
+ <text>涓嶈壇鍘熷洜锛�</text>{{item.涓嶈壇鍘熷洜}}
+ </view>
+ <view class="detail" v-if="item.闂鏉ユ簮">
+ <text>闂鏉ユ簮锛�</text>{{item.闂鏉ユ簮}}
+ </view>
+ <view class="detail" v-if="item.鍙戠敓宸ュ簭">
+ <text>鍙戠敓宸ュ簭锛�</text>{{item.鍙戠敓宸ュ簭}}
+ </view>
+ </view>
+ <view class="card-detail" v-if="showDetail == index">
+ <view class="detail" v-if="item.鍒跺崟浜�">
+ <text>鍒跺崟浜猴細</text>{{item.鍒跺崟浜簘}
+ </view>
+ <view class="detail" v-if="item.鍒跺崟鏃ユ湡">
+ <text>鍒跺崟鏃ユ湡锛�</text>{{item.鍒跺崟鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.瀹℃牳浜�">
+ <text>瀹℃牳浜猴細</text>{{item.瀹℃牳浜簘}
+ </view>
+ <view class="detail" v-if="item.瀹℃牳鏃ユ湡">
+ <text>瀹℃牳鏃ユ湡锛�</text>{{item.瀹℃牳鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.淇敼浜�">
+ <text>淇敼浜猴細</text>{{item.淇敼浜簘}
+ </view>
+ <view class="detail" v-if="item.淇敼鏃ユ湡">
+ <text>淇敼鏃ユ湡锛�</text>{{item.淇敼鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.鍏抽棴浜�">
+ <text>鍏抽棴浜猴細</text>{{item.鍏抽棴浜簘}
+ </view>
+ <view class="detail" v-if="item.鍏抽棴鏃ユ湡">
+ <text>鍏抽棴鏃ユ湡锛�</text>{{item.鍏抽棴鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.浣滃簾浜�">
+ <text>浣滃簾浜猴細</text>{{item.浣滃簾浜簘}
+ </view>
+ <view class="detail" v-if="item.浣滃簾鏃ユ湡">
+ <text>浣滃簾鏃ユ湡锛�</text>{{item.浣滃簾鏃ユ湡.substr(0,10)}}
+ </view>
+ </view>
+
+
+ <view class="more" v-if="showDetail == index && operations != index">
+ <view class="part" style="border-right: 1px solid #eee;">
+ <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>鏀惰捣
+ </view>
+ <view class="part" @tap.stop="operations = operations==index?-1:index">
+ <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
+ size="14"></uni-icons>鎿嶄綔
+ </view>
+ </view>
+ <view class="more" v-if="showDetail != index && operations != index">
+ <view class="part" style="border-right: 1px solid #eee;">
+ <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>鏇村淇℃伅
+ </view>
+ <view class="part" @tap.stop="operations = operations==index?-1:index">
+ <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
+ size="14"></uni-icons>鎿嶄綔
+ </view>
+ </view>
+
+ <view class="op" v-if="operations == index">
+ <button class="op3" size="mini" plain @tap.stop="edit(item)">缂栬緫</button>
+ <button class="op6" size="mini" plain @tap.stop="Browse(item)">鏌ョ湅鏄庣粏</button>
+ <button class="op4" size="mini" plain @tap.stop="del(item)">鍒犻櫎</button>
+ <button class="op5" size="mini" plain @tap.stop="operations = -1">鍙栨秷鎿嶄綔</button>
+ </view>
+ </uni-card>
+ </view>
+ <view class="over" v-if="listData.length == 0">鏆傛棤鏁版嵁</view>
+ </scroll-view>
+ <!-- 鍒嗛〉鍣� -->
+ <view class="page-footer">
+ <uni-pagination id="pagination" title="鏍囬鏂囧瓧" v-model="pageMeta.curPage" :pageSize="pageMeta.size"
+ :total="pageMeta.total" @change="onPageChangeHandler"></uni-pagination>
+ </view>
+ </view>
+</template>
+
+<script>
+ import dayjs from 'dayjs'
+ import {
+ CommonUtils
+ } from '@/utils/common.js'
+ import {
+ getUserInfo
+ } from "../../utils/auth";
+ export default {
+ data() {
+ return {
+ // 璁$畻鍗$墖鍒楄〃楂樺害
+ pagination_top: 0,
+ pageContent_top: 0,
+ // 鍒嗛〉鎺у埗
+ pageMeta: {
+ curPage: 1,
+ size: 50,
+ total: 0,
+ },
+ // 婊氬姩鎺у埗
+ scrollTop: 0,
+ old: {
+ scrollTop: 0
+ },
+
+ dateRangePicker: ["浠绘剰闂撮殧", "浠婂ぉ", "杩戜袱澶�", "杩戜笁澶�", "杩戝洓澶�", "杩戜簲澶�", "杩戝叚澶�", "杩戜竷澶�", "杩�30澶�"],
+ curDateGap: "杩戜竷澶�",
+ enableCustomDateRange: false,
+ startDate: dayjs(new Date()).subtract(7, 'day').format('YYYY-MM-DD'),
+ endDate: dayjs(new Date()).format('YYYY-MM-DD'),
+ HBillNo: '',
+
+ listData: [],
+ showDetail: -1,
+ operations: -1,
+ }
+ },
+ computed: {
+ pageContentHeight: {
+ get() {
+ return (this.pagination_top - this.pageContent_top)
+ }
+ },
+ },
+ onLoad() {
+ this.onSearchClickHandler()
+ },
+ onPullDownRefresh() {
+ this.onSearchClickHandler()
+ },
+ async onReady() {
+ // #ifndef MP-WEIXIN
+ let query = uni.createSelectorQuery().in(this)
+ query.select("#pagination")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.pagination_top = data.top
+ } else {
+ console.log("鏈壘鍒�#pagination鑺傜偣");
+ }
+ })
+ .exec();
+ query.select("#pageContent")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.pageContent_top = data.top
+ } else {
+ console.log("鏈壘鍒�#pageContent鑺傜偣");
+ }
+ })
+ .exec();
+ // #endif
+
+ },
+ methods: {
+ goTop: function(e) {
+ // 瑙e喅view灞備笉鍚屾鐨勯棶棰�
+ this.scrollTop = this.old.scrollTop
+ this.$nextTick(function() {
+ this.scrollTop = 0
+ });
+ },
+ onDateRangePickerChangeHandler({
+ detail
+ }) {
+ this.enableCustomDateRange = false
+ this.curDateGap = this.dateRangePicker[detail.value]
+ let date = new Date()
+ switch (this.curDateGap) {
+ case "浠婂ぉ":
+ this.startDate = dayjs(date).format("YYYY-MM-DD")
+ break;
+ case "杩戜竴澶�":
+ this.startDate = dayjs(date).subtract(1, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜袱澶�":
+ this.startDate = dayjs(date).subtract(2, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜笁澶�":
+ this.startDate = dayjs(date).subtract(3, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戝洓澶�":
+ this.startDate = dayjs(date).subtract(4, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜簲澶�":
+ this.startDate = dayjs(date).subtract(5, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戝叚澶�":
+ this.startDate = dayjs(date).subtract(6, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜竷澶�":
+ this.startDate = dayjs(date).subtract(7, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩�30澶�":
+ this.startDate = dayjs(date).subtract(30, 'day').format("YYYY-MM-DD")
+ break;
+ }
+ if (this.curDateGap == '浠绘剰闂撮殧') {
+ this.enableCustomDateRange = true
+ }
+ },
+ onSearchClickHandler() {
+ let sWhere = ""
+ if (this.startDate) {
+ sWhere += " and CONVERT(varchar(100),鏃ユ湡, 23) >= '" + this.startDate + "'";
+ }
+ if (this.endDate) {
+ sWhere += " and CONVERT(varchar(100),鏃ユ湡, 23) <= '" + this.endDate + "'";
+ }
+ if (this.HBillNo) {
+ sWhere += " and 鍗曟嵁鍙� like '%" + this.HBillNo + "%'";
+ }
+ this.get_DisplayPage(sWhere);
+ },
+ clear() {
+ this.curDateGap = "杩戜竷澶�"
+ this.enableCustomDateRange = false
+ this.startDate = dayjs(new Date()).subtract(7, 'day').format('YYYY-MM-DD')
+ this.endDate = dayjs(new Date()).format('YYYY-MM-DD')
+ this.HBillNo = ''
+ },
+ async onResetClickHandler() {
+ this.clear()
+ await this.$nextTick()
+ this.onSearchClickHandler()
+ },
+ get_DisplayPage(sWhere) {
+ CommonUtils.doRequest2({
+ url: '/Crm_CustomerAppealBill/list',
+ data: {
+ "sWhere": sWhere,
+ "user": getUserInfo()["Czymc"],
+
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ Message,
+ count
+ } = res.data
+ console.log('res.data: ', res.data.data);
+ if(res.data.Message=="鏃犳煡鐪嬫潈闄愶紒")
+ {
+ uni.showToast({
+ icon: 'none',
+ title: res.data.Message
+ })
+ return;
+ }
+ this.listData = res.data.data;
+ this.pageMeta.total = count
+ uni.stopPullDownRefresh()
+ }
+ })
+ },
+ onPageChangeHandler() {
+ this.onSearchClickHandler()
+ this.goTop()
+ },
+ // 鏂板
+ onAddClickHandler() {
+ uni.navigateTo({
+ url: "/pages/CustomerComplaintsBill/CustomerComplaintsBillEdit?btnType=1"
+ })
+ },
+ //鍒犻櫎鐐规璁板綍鍗�
+ del(item) {
+ console.log(item);
+ uni.showModal({
+ title: '鍒犻櫎纭',
+ content: '纭瑕佸垹闄ゅ悧锛屽垹闄ゅ悗涓嶈兘鎭㈠',
+ success: (res) => {
+ if (res.confirm) {
+ console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+ CommonUtils.doRequest2({
+ url: '/Crm_CustomerAppealBill/delete',
+ data: {
+ HInterID: item['HInterID'],
+ user: getUserInfo()['Czymc']
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ uni.showToast({
+ icon: count === 1 ? 'success' : 'error',
+ title: Message,
+ duration: 2000
+ });
+
+ // 绛夊緟鎻愮ず鏄剧ず瀹屾垚鍐嶅埛鏂�
+ setTimeout(() => {
+ this.onSearchClickHandler();
+ }, 2000);
+ } else {
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ } else if (res.cancel) {
+ console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+ }
+ }
+ });
+ },
+ Browse(item)
+ {
+ console.log(item.HInterID)
+ uni.navigateTo({
+ url: '/pages/CustomerComplaintsBill/CustomerComplaintsBillDetail?linterid=' + item.HInterID + '&HBillNo=' + item.鍗曟嵁鍙�
+ })
+ },
+ edit(item)
+ {
+ console.log(item)
+ uni.navigateTo({
+ url: '/pages/CustomerComplaintsBill/CustomerComplaintsBillEdit?linterid=' + item.HInterID + '&btnType=' + 3
+ })
+ }
+ },
+ }
+</script>
+
+<style lang="scss">
+ .page-header {
+ display: flex;
+ box-sizing: border-box;
+ padding: 20rpx;
+ flex-direction: column;
+ gap: 10rpx;
+ font-size: 32rpx;
+
+ .search-item {
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+ justify-content: center;
+ align-items: center;
+
+ .left {
+ width: 4em;
+ }
+
+ .right {
+ flex: 1;
+ position: relative;
+ border-radius: 22rpx;
+ border: 1px solid #acacac;
+ display: flex;
+ padding: 4rpx 10rpx;
+
+ picker {
+ width: 100%;
+ }
+ }
+ }
+
+ input {
+ width: inherit;
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ }
+
+ .datetime-picker-inner {
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ }
+
+ .font__enable {
+ color: #000;
+ }
+
+ .font__disable {
+ color: #cccccc;
+ }
+ }
+
+ .button-groups {
+ box-sizing: border-box;
+ padding: 10rpx 0 0 0;
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+ justify-content: space-between;
+
+ button {
+ border-radius: 50rpx;
+ width: 180rpx;
+ height: 66rpx;
+ line-height: 66rpx;
+ font-size: 28rpx;
+ }
+
+ .btn-a {
+ background-color: #acacac;
+ color: #fff;
+ }
+
+ .btn-b {
+ background-color: #41a863;
+ color: #fff;
+ }
+
+ .btn-c {
+ background-color: #3a78ff;
+ color: #fff;
+ }
+ }
+
+ .page-content {
+ // height: 40vh;
+ box-sizing: border-box;
+ padding: 10rpx 0;
+
+ .card-detail {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ line-height: 120%;
+
+ .detail {
+ // width: 50%;
+ font-size: 26rpx;
+ margin-bottom: 12rpx;
+ color: #555;
+ margin-right: 20rpx;
+
+ text {
+ color: #999;
+ font-size: 26rpx;
+ }
+ }
+ }
+
+ .more {
+ color: #888;
+ font-size: 24rpx;
+ display: flex;
+ border-top: 1px solid #eee;
+ padding-top: 20rpx;
+
+ .part {
+ width: 50%;
+ text-align: center;
+ }
+ }
+
+ .op {
+ display: flex;
+ justify-content: space-around;
+ margin-top: 20rpx;
+
+ button {
+ padding: 0;
+ width: 150rpx;
+ font-size: 25rpx;
+ }
+
+ .op1 {
+ border: 1px solid #41a863;
+ color: #41a863;
+ }
+
+ .op2 {
+ border: 1px solid #d98d00;
+ color: #d98d00;
+ }
+
+ .op3 {
+ border: 1px solid #3a78ff;
+ color: #3a78ff;
+ }
+
+ .op4 {
+ border: 1px solid #da0000;
+ color: #da0000;
+ }
+
+ .op5 {
+ border: 1px solid #888;
+ color: #888;
+ }
+ }
+ }
+
+ .page-footer {
+ position: fixed;
+ bottom: 0;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 32rpx 40rpx;
+ }
+</style>
\ No newline at end of file
diff --git a/pages/index/tab4.vue b/pages/index/tab4.vue
index fbeebe6..bbd27cf 100644
--- a/pages/index/tab4.vue
+++ b/pages/index/tab4.vue
@@ -203,6 +203,13 @@
"id": 22,
"hidden": false
},
+ {
+ "img": "../../static/icon/icon15.png",
+ "text": "瀹㈣瘔澶勭悊鍗曞垪琛�",
+ "url": "/pages/CustomerComplaintsBill/CustomerComplaintsBillList",
+ "id": 23,
+ "hidden": false
+ },
]
}
},
--
Gitblit v1.9.1