gaoluyang
6 天以前 adeb8b768926ed50a3fb0857f366d6a0308d2cc0
src/pages/sales/salesAccount/detail.vue
@@ -72,20 +72,31 @@
         <u-form-item label="录入日期" prop="entryDate" border-bottom>
            <u-input v-model="form.entryDate" placeholder="请输入" disabled />
         </u-form-item>
         <!-- 业务员选择弹窗 -->
         <u-popup v-model="showPicker" mode="bottom">
            <view class="picker-header">
               <view class="picker-cancel" @click="showPicker = false">取消</view>
               <view class="picker-title">选择业务员</view>
               <view class="picker-confirm" @click="confirmSalesman">确定</view>
            </view>
            <u-picker
               :columns="userList"
               v-model="pickerValue"
               @confirm="onConfirm"
               @cancel="showPicker = false"
               @change="onPickerChange"
            />
         </u-popup>
         <!-- 客户选择弹窗 -->
         <u-popup v-model="showCustomerPicker" mode="bottom">
            <view class="picker-header">
               <view class="picker-cancel" @click="showCustomerPicker = false">取消</view>
               <view class="picker-title">选择客户</view>
               <view class="picker-confirm" @click="confirmCustomer">确定</view>
            </view>
            <u-picker
               :columns="customerOption"
               v-model="pickerCustomerValue"
               @confirm="onCustomerConfirm"
               @cancel="showCustomerPicker = false"
               @change="onCustomerPickerChange"
            />
         </u-popup>
         
@@ -297,11 +308,16 @@
               </view>
            </view>
         </view>
         <view class="footer-btns" v-if="operationType !== 'view'">
            <u-button class="cancel-btn" @click="goBack">取消</u-button>
            <u-button class="save-btn" type="primary" @click="onSubmit">保存</u-button>
         </view>
      </u-form>
      <!-- 使用公共底部按钮组件 -->
      <FooterButtons
         :show="operationType !== 'view'"
         cancelText="取消"
         confirmText="保存"
         @cancel="goBack"
         @confirm="onSubmit"
      />
  </view>
</template>
@@ -318,6 +334,8 @@
} from "@/api/salesManagement/salesLedger";
import useUserStore from "@/store/modules/user";
import {calculateTaxExclusiveTotalPrice} from "@/utils/summarizeTable";
import PageHeader from '@/components/PageHeader.vue';
import FooterButtons from '@/components/FooterButtons.vue';
// 获取页面参数
const operationType = ref('');
@@ -356,6 +374,12 @@
const pickerSpecificationValue = ref(['']);
const pickerTaxRateValue = ref(['']);
const pickerInvoiceTypeValue = ref(['']);
// 临时存储选择器选中的值
const tempSalesmanValue = ref('');
const tempCustomerValue = ref('');
const selectedSalesman = ref(null);
const selectedCustomer = ref(null);
const currentProductIndex = ref(0);
// 选项数据
@@ -398,15 +422,58 @@
    invoiceType: ''
  });
};
const onConfirm = ({ selectedValues, selectedOptions }) => {
   form.value.salesman = selectedOptions[0]?.text;
   pickerValue.value = [selectedValues[0]];
// 业务员选择器变化事件
const onPickerChange = ({ selectedValues, selectedOptions }) => {
   selectedSalesman.value = selectedOptions[0];
   tempSalesmanValue.value = {
      text: selectedOptions[0]?.text,
      value: selectedOptions[0]?.value
   };
};
// 确认选择业务员
const confirmSalesman = () => {
   if (selectedSalesman.value) {
      form.value.salesman = selectedSalesman.value.text;
      pickerValue.value = [selectedSalesman.value.value];
   }
   showPicker.value = false;
};
// 客户选择器变化事件
const onCustomerPickerChange = ({ selectedValues, selectedOptions }) => {
   selectedCustomer.value = selectedOptions[0];
   tempCustomerValue.value = {
      text: selectedOptions[0]?.text,
      value: selectedOptions[0]?.value
   };
};
// 确认选择客户
const confirmCustomer = () => {
   if (selectedCustomer.value) {
      form.value.customerName = selectedCustomer.value.text;
      form.value.customerId = selectedCustomer.value.value;
      pickerCustomerValue.value = [selectedCustomer.value.value];
   }
   showCustomerPicker.value = false;
};
// 修改原有的确认方法(保持兼容性)
const onConfirm = ({ selectedValues, selectedOptions }) => {
   if (selectedOptions && selectedOptions[0]) {
      form.value.salesman = selectedOptions[0].text;
      pickerValue.value = [selectedValues[0]];
   }
   showPicker.value = false;
};
const onCustomerConfirm = ({ selectedValues, selectedOptions }) => {
   form.value.customerName = selectedOptions[0]?.text;
   form.value.customerId = selectedOptions[0]?.value;
   pickerCustomerValue.value = [selectedValues[0]];
   if (selectedOptions && selectedOptions[0]) {
      form.value.customerName = selectedOptions[0].text;
      form.value.customerId = selectedOptions[0].value;
      pickerCustomerValue.value = [selectedValues[0]];
   }
   showCustomerPicker.value = false;
};
const onDateConfirm = ({ selectedValues }) => {
@@ -706,20 +773,20 @@
};
const getUserList = () => {
   userListNoPage().then((res) => {
      // 将用户数据组装成 picker 需要的格式
      userList.value = res.data.map(user => ({
      // 确保数据格式正确
      userList.value = [res.data.map(user => ({
         text: user.nickName,
         value: user.nickName
      }));
      }))];
   })
}
const getCustomerList = () => {
   customerList().then((res) => {
      // 将用户数据组装成 picker 需要的格式
      customerOption.value = res.map(item => ({
      // 确保数据格式正确
      customerOption.value = [res.map(item => ({
         text: item.customerName,
         value: item.id
      }));
      }))];
   })
}
const convertIdToValue = (data) => {
@@ -787,6 +854,7 @@
  background: #f8f9fa;
  padding-bottom: 5rem;
}
.header {
  display: flex;
  align-items: center;
@@ -799,6 +867,7 @@
   /* 兼容 iOS 刘海/灵动岛安全区 */
   padding-top: env(safe-area-inset-top);
}
.title {
  flex: 1;
  text-align: center;
@@ -806,6 +875,7 @@
  font-weight: 600;
  color: #333;
}
.form-section {
   margin-top: 1rem;
}
@@ -821,17 +891,20 @@
  padding: 1rem;
  box-shadow: 0 0.125rem 0.5rem rgba(0,0,0,0.04);
}
.section-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1rem;
}
.section-title {
  font-size: 1rem;
  font-weight: 600;
  color: #333;
}
.product-card {
   background: #FFFFFF;
   box-shadow: 0 0 1.25rem 0 rgba(0,57,117,0.08);
@@ -839,6 +912,7 @@
  padding: 1rem 0.5rem 0 0.5rem;
  position: relative;
}
.product-header {
  display: flex;
  align-items: center;
@@ -846,70 +920,46 @@
  padding: 0 0.5rem 0.75rem 0.5rem;
  border-bottom: 0.0625rem solid #e8e8e8;
}
.product-productCategory {
  margin-left: 0.5rem;
  font-size: 0.875rem;
  font-weight: 500;
  color: #333;
}
.info-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.75rem;
  margin-bottom: 1rem;
}
.info-item {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.info-label {
  font-size: 0.75rem;
  color: #666;
  font-weight: 400;
}
.info-value {
  font-size: 0.875rem;
  color: #333;
  font-weight: 500;
}
.info-value.highlight {
  color: #2979ff;
  font-weight: 600;
}
.product-form {
  margin-bottom: 1rem;
}
.footer-btns {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  background: #fff;
  display: flex;
  justify-content: space-around;
  align-items: center;
  padding: 0.75rem 0;
  box-shadow: 0 -0.125rem 0.5rem rgba(0,0,0,0.05);
  z-index: 1000;
}
.cancel-btn {
   font-weight: 400;
   font-size: 1rem;
   color: #FFFFFF;
   width: 6.375rem;
   background: #C7C9CC;
   box-shadow: 0 0.25rem 0.625rem 0 rgba(3,88,185,0.2);
   border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
}
.save-btn {
   font-weight: 400;
   font-size: 1rem;
   color: #FFFFFF;
   width: 14rem;
   background: linear-gradient( 140deg, #00BAFF 0%, #006CFB 100%);
   box-shadow: 0 0.25rem 0.625rem 0 rgba(3,88,185,0.2);
   border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
}
.popup-header {
@@ -922,13 +972,102 @@
   top: 0;
   z-index: 10;
}
.cancelButton {
   color: #969799
}
.confirmButton {
   color: #1989FA
}
.u-tree {
   height: 13rem;
}
/* 移除 input 边框的样式 */
:deep(.u-input) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
}
:deep(.u-input__content) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
}
:deep(.u-input__content__field-wrapper) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
}
:deep(.u-input__content__field-wrapper__field) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
  outline: none !important;
}
/* 移除 textarea 边框的样式 */
:deep(.u-textarea) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
}
:deep(.u-textarea__content) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
}
:deep(.u-textarea__content__field) {
  border: none !important;
  box-shadow: none !important;
  background: transparent !important;
  outline: none !important;
}
/* 移除 form-item 的边框 */
:deep(.u-form-item) {
  border: none !important;
}
:deep(.u-form-item__body) {
  border: none !important;
}
/* 保持分割线样式 */
:deep(.u-form-item--border-bottom) {
  border-bottom: 1px solid #ebeef5 !important;
}
/* 选择器头部样式 */
.picker-header {
   display: flex;
   justify-content: space-between;
   align-items: center;
   padding: 15px 20px;
   background: #fff;
   border-bottom: 1px solid #ebeef5;
}
.picker-cancel {
   color: #909399;
   font-size: 16px;
}
.picker-title {
   color: #303133;
   font-size: 16px;
   font-weight: 500;
}
.picker-confirm {
   color: #2979ff;
   font-size: 16px;
}
</style>