浏览代码

feat:小程序所有页面UI

颜琼丽 1 天之前
父节点
当前提交
1dd93aa672
共有 100 个文件被更改,包括 4825 次插入0 次删除
  1. 26 0
      jd_logistics-app/api/agreement.js
  2. 25 0
      jd_logistics-app/api/ai.js
  3. 39 0
      jd_logistics-app/api/home.js
  4. 17 0
      jd_logistics-app/api/message.js
  5. 44 0
      jd_logistics-app/api/order.js
  6. 67 0
      jd_logistics-app/api/user.js
  7. 217 0
      jd_logistics-app/components/AreaPickerCustommer.vue
  8. 220 0
      jd_logistics-app/components/TimelineItem.vue
  9. 66 0
      jd_logistics-app/components/agreeRecharge.vue
  10. 66 0
      jd_logistics-app/components/agreeVip.vue
  11. 52 0
      jd_logistics-app/components/headerInfo.vue
  12. 80 0
      jd_logistics-app/components/paymentCommon.vue
  13. 27 0
      jd_logistics-app/config/app.js
  14. 3 0
      jd_logistics-app/config/cache.js
  15. 46 0
      jd_logistics-app/config/env.js
  16. 112 0
      jd_logistics-app/hooks/useToast.js
  17. 40 0
      jd_logistics-app/libs/login.js
  18. 538 0
      jd_logistics-app/static/css/base.scss
  19. 二进制
      jd_logistics-app/static/img/addHuiHua.png
  20. 二进制
      jd_logistics-app/static/img/arrow-right.png
  21. 二进制
      jd_logistics-app/static/img/check.png
  22. 二进制
      jd_logistics-app/static/img/copy.png
  23. 二进制
      jd_logistics-app/static/img/home/tool.png
  24. 二进制
      jd_logistics-app/static/img/icon-logo-jd.png
  25. 二进制
      jd_logistics-app/static/img/icon-logo-sf.png
  26. 二进制
      jd_logistics-app/static/img/index-bg.png
  27. 二进制
      jd_logistics-app/static/img/index-personal.png
  28. 二进制
      jd_logistics-app/static/img/index-time.png
  29. 二进制
      jd_logistics-app/static/img/index-un-time.png
  30. 二进制
      jd_logistics-app/static/img/logo.png
  31. 二进制
      jd_logistics-app/static/img/mine/Logout.png
  32. 二进制
      jd_logistics-app/static/img/mine/chongzhijulu.png
  33. 二进制
      jd_logistics-app/static/img/mine/icon-mine-about.png
  34. 二进制
      jd_logistics-app/static/img/mine/icon-mine-address.png
  35. 二进制
      jd_logistics-app/static/img/mine/icon-mine-order.png
  36. 二进制
      jd_logistics-app/static/img/mine/icon-mine-policy.png
  37. 二进制
      jd_logistics-app/static/img/mine/icon-mine-server.png
  38. 二进制
      jd_logistics-app/static/img/mine/kefu.png
  39. 二进制
      jd_logistics-app/static/img/mine/money.png
  40. 二进制
      jd_logistics-app/static/img/mine/order.png
  41. 二进制
      jd_logistics-app/static/img/mine/vip.png
  42. 二进制
      jd_logistics-app/static/img/mine/vipcard.png
  43. 二进制
      jd_logistics-app/static/img/qianbao.png
  44. 二进制
      jd_logistics-app/static/img/search.png
  45. 二进制
      jd_logistics-app/static/img/service/aijiqiren.png
  46. 二进制
      jd_logistics-app/static/img/service/assistant-avatar.png
  47. 二进制
      jd_logistics-app/static/img/service/maikefengyuyin.png
  48. 二进制
      jd_logistics-app/static/img/service/send-icon.png
  49. 二进制
      jd_logistics-app/static/img/service/tupian.png
  50. 二进制
      jd_logistics-app/static/img/service/user-avatar.png
  51. 二进制
      jd_logistics-app/static/img/service/xiaoxi.png
  52. 二进制
      jd_logistics-app/static/img/shuaxin.png
  53. 二进制
      jd_logistics-app/static/img/tabs/home.png
  54. 二进制
      jd_logistics-app/static/img/tabs/home_active.png
  55. 二进制
      jd_logistics-app/static/img/tabs/search.png
  56. 二进制
      jd_logistics-app/static/img/tabs/search_active.png
  57. 二进制
      jd_logistics-app/static/img/tabs/user.png
  58. 二进制
      jd_logistics-app/static/img/tabs/user_active.png
  59. 二进制
      jd_logistics-app/static/img/translte-1.png
  60. 二进制
      jd_logistics-app/static/img/translte-2.png
  61. 二进制
      jd_logistics-app/static/img/vip/fire.png
  62. 二进制
      jd_logistics-app/static/img/vip/question.png
  63. 二进制
      jd_logistics-app/static/img/vip/siren.png
  64. 二进制
      jd_logistics-app/static/img/vip/vip.png
  65. 二进制
      jd_logistics-app/static/img/vip/xuexi.png
  66. 二进制
      jd_logistics-app/static/img/vip/yiwen.png
  67. 二进制
      jd_logistics-app/static/img/voice/cancel.png
  68. 二进制
      jd_logistics-app/static/img/voice/recording.gif
  69. 二进制
      jd_logistics-app/static/img/voice/recording.png
  70. 二进制
      jd_logistics-app/static/img/weixin.png
  71. 二进制
      jd_logistics-app/static/img/wenhua.png
  72. 二进制
      jd_logistics-app/static/success_card.png
  73. 68 0
      jd_logistics-app/stores/app.js
  74. 3 0
      jd_logistics-app/stores/pinia.js
  75. 42 0
      jd_logistics-app/uni_modules/uni-icons/changelog.md
  76. 91 0
      jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
  77. 110 0
      jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  78. 664 0
      jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons.css
  79. 二进制
      jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons.ttf
  80. 664 0
      jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts
  81. 649 0
      jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
  82. 89 0
      jd_logistics-app/uni_modules/uni-icons/package.json
  83. 8 0
      jd_logistics-app/uni_modules/uni-icons/readme.md
  84. 8 0
      jd_logistics-app/uni_modules/uni-scss/changelog.md
  85. 1 0
      jd_logistics-app/uni_modules/uni-scss/index.scss
  86. 82 0
      jd_logistics-app/uni_modules/uni-scss/package.json
  87. 4 0
      jd_logistics-app/uni_modules/uni-scss/readme.md
  88. 7 0
      jd_logistics-app/uni_modules/uni-scss/styles/index.scss
  89. 3 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_border.scss
  90. 66 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_color.scss
  91. 55 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_radius.scss
  92. 56 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_space.scss
  93. 167 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_styles.scss
  94. 24 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_text.scss
  95. 146 0
      jd_logistics-app/uni_modules/uni-scss/styles/setting/_variables.scss
  96. 19 0
      jd_logistics-app/uni_modules/uni-scss/styles/tools/functions.scss
  97. 31 0
      jd_logistics-app/uni_modules/uni-scss/theme.scss
  98. 62 0
      jd_logistics-app/uni_modules/uni-scss/variables.scss
  99. 21 0
      jd_logistics-app/uni_modules/uview-plus/LICENSE
  100. 0 0
      jd_logistics-app/uni_modules/uview-plus/README.md

+ 26 - 0
jd_logistics-app/api/agreement.js

@@ -0,0 +1,26 @@
+import request from "@/utils/request.js";
+
+
+/**
+ * VIP会员开通协议
+ * 
+ */
+export function agreementMember(data) {
+  return request.get('mini/agreement/member', data);
+}
+/**
+ * 充值协议
+ * 
+ */
+export function agreementRecharge(data) {
+  return request.get('mini/agreement/recharge', data);
+}
+/**
+ * 充值活动规则
+ * 
+ */
+export function agreementRechargeRule(data) {
+  return request.get('mini/agreement/recharge_rule', data);
+}
+
+

+ 25 - 0
jd_logistics-app/api/ai.js

@@ -0,0 +1,25 @@
+import request from "@/utils/request.js";
+
+
+/**
+ * 智能体聊天记录列表
+ * 
+ */
+export function chatHistoryList(data) {
+  return request.get('mini/ai/chatHistoryList', data);
+}
+/**
+ * 批量删除会话
+ * 
+ */
+export function delChatHistoryList(data) {
+  return request.delete('mini/ai/delete', data);
+}
+/**
+ * 智能体聊天记录详情
+ * 
+ */
+export function chatHistoryDetails(data) {
+  return request.get('mini/ai/chatHistoryDetails', data);
+}
+

+ 39 - 0
jd_logistics-app/api/home.js

@@ -0,0 +1,39 @@
+import request from "@/utils/request.js";
+
+
+/**
+ * 广告轮播图
+ * 
+ */
+export function adList(data) {
+  return request.get('mini/ad/list', data, {noAuth:true});
+}
+/**
+ * 广告轮播图
+ * 
+ */
+export function getAgentList(data) {
+  return request.get('mini/agent/list', data, {noAuth:true});
+}
+/**
+ * 热搜
+ * 
+ */
+export function getAdSearch(id='') {
+  return request.get(`mini/ad/search/${id}`, {}, {noAuth:true});
+}
+/**
+ * 获取客服电话
+ * 
+ */
+export function getAdServicePhone() {
+  return request.get(`mini/ad/servicePhone`, {}, {noAuth:true});
+}
+/**
+ * 广告详情
+ * 
+ */
+export function getAdDetails({dictCode}) {
+  return request.get(`mini/ad/details/${dictCode}`, {}, {noAuth:true});
+}
+

+ 17 - 0
jd_logistics-app/api/message.js

@@ -0,0 +1,17 @@
+import request from "@/utils/request.js";
+
+/**
+ * 新增订单留言
+ */
+export function addMessage(data) {
+  return request.post('mini/message', data);
+}
+/**
+ * 订单留言列表
+ */
+export function getMessageList(data) {
+  return request.get('mini/message/list', data);
+}
+
+
+

+ 44 - 0
jd_logistics-app/api/order.js

@@ -0,0 +1,44 @@
+import request from "@/utils/request.js";
+
+/**
+ * 创建订单
+ * "payMethod":"1",  //支付方式 0微信 1余额
+    "productType":"1",//商品类型 0购买会员 1充值
+    "productId":2,//充值规则id
+    "orderNum":1,//订单数量
+    "orderAmt":1000//订单金额
+ * 
+ */
+export function createOrder(data) {
+  return request.post('mini/order/createOrder', data);
+}
+/**
+ * 支付结果
+ * 
+ */
+export function payResult(data) {
+  return request.post('mini/order/payResult/'+data.orderId, data);
+}
+/**
+ * 查询订单列表
+ * 
+ */
+export function getOrderListApi(data) {
+  return request.get('mini/order/list', data);
+}
+/**
+ * 查询订单列表
+ * 
+ */
+export function getOrderList(data) {
+  return request.get('mini/order/list', data);
+}
+/**
+ * 查询订单详情
+ * 
+ */
+export function getOrderDetail({id=''}) {
+  return request.get('mini/order/'+id, {});
+}
+
+

+ 67 - 0
jd_logistics-app/api/user.js

@@ -0,0 +1,67 @@
+import request from "@/utils/request.js";
+
+
+/**
+ * 更新用户openid
+ * 
+ */
+export function bannerList(data) {
+  return request.get('system/front/banner/listByType', data);
+}
+
+/**
+ * 更新用户openid
+ * 
+ */
+export function updateOpenId(data) {
+  return request.post('mini/user/openId', data, {noAuth:true},{});
+}
+/**
+ * 微信登录
+ * 
+ */
+export function wxLogin(data) {
+  return request.post('auth/wxmini/login', data, {noAuth:true});
+}
+/**
+ * 退出登录
+ * 
+ */
+export function userLogout(data) {
+  return request.post('mini/user/userLogout', data);
+}
+/**
+ * 根据token获取用户信息
+ * 
+ */
+export function getUserInfo(data) {
+  return request.get('system/front/wxmini/getInfo', data);
+}
+/**
+ * 修改用户信息
+ * 
+ */
+export function userEdit(data) {
+  return request.put('mini/user/userEdit', data);
+}
+/**
+ * 会员套餐列表
+ * 
+ */
+export function getPlanList(data) {
+  return request.get('mini/plan/list', data);
+}
+/**
+ * 查询充值规则列表
+ * 
+ */
+export function getRuleList(data) {
+  return request.get('mini/rule/list', data);
+}
+/**
+ * 钱包流水记录
+ * 
+ */
+export function getRecordList(data) {
+  return request.get('mini/record/list', data);
+}

+ 217 - 0
jd_logistics-app/components/AreaPickerCustommer.vue

@@ -0,0 +1,217 @@
+<!-- components/AreaPicker.vue -->
+<template>
+  <view>
+    <!-- 地区选择器 -->
+    <u-picker 
+      :show="show" 
+      :columns="areaColumns"
+      keyName="label"
+      @confirm="handleConfirm"
+      @cancel="handleCancel"
+      @change="handleChange"
+      ref="pickerRef"
+    ></u-picker>
+  </view>
+</template>
+
+<script setup>
+import { ref, watch, nextTick, onMounted, reactive, defineProps, defineEmits } from 'vue';
+import { getProvinces, getCities, getDistricts } from '@/utils/area-data.js';
+
+// 定义props
+const props = defineProps({
+  show: {
+    type: Boolean,
+    default: false
+  }
+});
+
+// 定义emits
+const emit = defineEmits(['update:show', 'confirm']);
+
+// 响应式数据
+const areaColumns = reactive([[], [], []]);
+const pickerRef = ref(null);
+const isUpdating = ref(false); // 防止重复更新
+
+// 初始化数据
+const initAreaData = () => {
+  // 获取省份数据
+  const provinces = getProvinces();
+  areaColumns[0] = provinces;
+  
+  // 获取第一个省份的城市
+  if (provinces.length > 0) {
+    const cities = getCities(provinces[0].value);
+    areaColumns[1] = cities;
+    
+    // 获取第一个城市的区县
+    if (cities.length > 0) {
+      const districts = getDistricts(cities[0].value);
+      areaColumns[2] = districts;
+    }
+  }
+};
+
+// 处理选择器变化
+const handleChange = (e) => {
+  if (isUpdating.value) return; // 防止重复更新
+  
+  const valueIndex = e.indexs; // 获取索引数组
+  
+  console.log('选择器变化 - 索引:', valueIndex);
+  
+  // 省份变化 (第一列)
+  if (valueIndex[0] !== undefined) {
+    isUpdating.value = true;
+    
+    // 通过索引获取省份对象
+    const province = areaColumns[0][valueIndex[0]];
+    console.log('选择了省份:', province);
+    
+    if (province) {
+      // 获取城市数据
+      const cities = getCities(province.value);
+      areaColumns[1] = cities;
+      
+      // 检查城市索引是否超出范围
+      let cityIndex = valueIndex[1] || 0;
+      if (cityIndex >= cities.length) {
+        cityIndex = 0; // 超出范围则重置为0
+      }
+      
+      // 获取区县数据
+      let districts = [];
+      if (cities.length > 0) {
+        // 使用调整后的城市索引获取区县数据
+        const selectedCity = cities[cityIndex];
+        if (selectedCity) {
+          districts = getDistricts(selectedCity.value);
+        } else if (cities.length > 0) {
+          // 如果选中的城市不存在,使用第一个城市
+          districts = getDistricts(cities[0].value);
+        }
+      } else {
+        // 直辖市情况:直接使用省份code获取区县
+        districts = getDistricts(province.value);
+      }
+      areaColumns[2] = districts;
+      
+      // 检查区县索引是否超出范围
+      let districtIndex = valueIndex[2] || 0;
+      if (districtIndex >= districts.length) {
+        districtIndex = 0; // 超出范围则重置为0
+      }
+      
+      // 更新选择器位置
+      nextTick(() => {
+        if (pickerRef.value && pickerRef.value.setIndexes) {
+          // 重置城市和区县索引(市超出则重置为0,区超出也重置为0)
+          pickerRef.value.setIndexes([valueIndex[0], cityIndex, districtIndex]);
+        }
+        isUpdating.value = false;
+      });
+    } else {
+      isUpdating.value = false;
+    }
+    return; // 省份变化处理后直接返回,避免城市变化逻辑执行
+  }
+  
+  // 城市变化 (第二列)
+  if (valueIndex[1] !== undefined && areaColumns[1].length > 0) {
+    isUpdating.value = true;
+    
+    // 检查城市索引是否超出范围
+    let cityIndex = valueIndex[1];
+    if (cityIndex >= areaColumns[1].length) {
+      cityIndex = 0; // 超出范围则重置为0
+    }
+    
+    // 通过索引获取城市对象
+    const city = areaColumns[1][cityIndex];
+    if (city) {
+      // 获取区县数据
+      const districts = getDistricts(city.value);
+      areaColumns[2] = districts;
+      
+      // 检查区县索引是否超出范围
+      let districtIndex = valueIndex[2] || 0;
+      if (districtIndex >= districts.length) {
+        districtIndex = 0; // 超出范围则重置为0
+      }
+      
+      // 更新选择器位置
+      nextTick(() => {
+        if (pickerRef.value && pickerRef.value.setIndexes) {
+          // 获取当前的省份索引
+          const currentIndexes = pickerRef.value.getIndexes ? pickerRef.value.getIndexes() : [0, 0, 0];
+          const provinceIndex = currentIndexes[0];
+          
+          // 设置索引:省份保持当前,城市使用调整后的索引,区县使用调整后的索引
+          pickerRef.value.setIndexes([provinceIndex, cityIndex, districtIndex]);
+        }
+        isUpdating.value = false;
+      });
+    } else {
+      isUpdating.value = false;
+    }
+  }
+};
+
+// 确认选择
+const handleConfirm = (e) => {
+  const areaData = e.value;
+  
+  // 根据选中的对象获取值
+  const province = areaData[0];
+  const city = areaData[1] !== undefined ? areaData[1] : { label: '', value: '' };
+  const district = areaData[2] !== undefined ? areaData[2] : { label: '', value: '' };
+  
+  const result = {
+    province: {
+      name: province.label,
+      code: province.value
+    },
+    city: city.label ? {
+      name: city.label,
+      code: city.value
+    } : null,
+    district: district.label ? {
+      name: district.label,
+      code: district.value
+    } : null,
+    fullAddress: province.label + (city.label ? ' ' + city.label : '') + (district.label ? ' ' + district.label : '')
+  };
+  
+  console.log('确认选择:', result);
+  emit('confirm', result);
+  emit('update:show', false);
+};
+
+// 取消选择
+const handleCancel = () => {
+  emit('update:show', false);
+};
+
+// 组件挂载时初始化数据
+onMounted(() => {
+  console.log('AreaPicker 组件已挂载');
+  initAreaData();
+});
+
+// 监听显示状态
+watch(() => props.show, (newVal) => {
+  console.log('show 状态变化:', newVal);
+  if (newVal) {
+    // 每次显示时重新初始化数据
+    initAreaData();
+    
+    // 延迟设置选择器位置,确保DOM已更新
+    setTimeout(() => {
+      if (pickerRef.value && pickerRef.value.setIndexes) {
+        pickerRef.value.setIndexes([0, 0, 0]);
+      }
+    }, 100);
+  }
+});
+</script>

+ 220 - 0
jd_logistics-app/components/TimelineItem.vue

@@ -0,0 +1,220 @@
+<template>
+	<view class="timeline-item">
+		<!-- 左侧时间线 -->
+		<view class="timeline-left">
+			<view class="timeline">
+				<view class="dot" :class="{'dot-choose-bg': showDotBg}">
+					<view class="timeline-dot" :class="{
+              'dot-active': isActive,
+              'dot-passed': !isActive
+            }"></view>
+				</view>
+				<view 
+					v-if="showLine" 
+					class="timeline-line " 
+					:class="{
+					  'line-active': isActive,
+					  'line-passed': !isActive
+					}"
+				></view>
+			</view>
+		</view>
+
+
+		<!-- 右侧状态内容 -->
+		<view class="status-section">
+			<!-- 状态标签 -->
+			<view 
+				v-if="title" 
+				class="status-badge" 
+				:class="{
+					'status-collected': title === '已代收',
+					'status-title-active': isActive
+				}"
+			>
+				{{ title }}
+			</view>
+
+			<!-- 状态详情 -->
+			<view v-if="desc" class="status-detail">
+				{{ desc }}
+			</view>
+
+			<!-- 状态时间 -->
+			<view v-if="time" class="status-time">
+				{{ time }}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script setup>
+	defineProps({
+		// 是否激活状态(即当前状态)
+		isActive: {
+			type: Boolean,
+			default: false
+		},
+		// 标题,例如:已代收、派送中
+		title: {
+			type: String,
+			default: ''
+		},
+		// 状态描述
+		desc: {
+			type: String,
+			default: ''
+		},
+		// 时间
+		time: {
+			type: String,
+			default: ''
+		},
+		// 是否显示连接线(最后一个节点不显示)
+		showLine: {
+			type: Boolean,
+			default: true
+		},
+		// 是否显示连接线(第一个节点显示  后边不显示)
+		showDotBg: {
+			type: Boolean,
+			default: true
+		}
+	})
+</script>
+
+<style scoped lang="less">
+	.timeline-item {
+		display: flex;
+		// background-color: #F5F7FA;
+		// border-radius: 16rpx;
+		min-height: 120rpx; /* 确保最小高度 */
+
+		&:last-child {
+			margin-bottom: 0;
+		}
+
+		.timeline-left {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			width: 54rpx; /* 增加宽度确保有足够空间 */
+			margin-right: 20rpx;
+			flex-shrink: 0;
+		}
+
+		.timeline {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			height: 100%; /* 确保时间线占满整个高度 */
+			
+			/* 修复 dot 样式 */
+			.dot {
+				width: 34rpx;
+				height: 34rpx;
+				border-radius: 50%;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				flex-shrink: 0;
+				position: relative;
+				z-index: 2; /* 确保圆点在最上层 */
+				
+				&.dot-choose-bg {
+					background-color: #C1D5FF;
+				}
+			}
+
+			.timeline-dot {
+				width: 18rpx;
+				height: 18rpx;
+				border-radius: 50%;
+				position: relative;
+				z-index: 3;
+
+				&.dot-active {
+					background-color: #1B64F0;
+				}
+
+				&.dot-passed {
+					background-color: #CCCCCC;
+				}
+			}
+
+			.timeline-line {
+				flex: 1; /* 关键:使用flex:1让连接线自适应高度 */
+				width: 4rpx;
+				min-height: 40rpx; /* 确保最小高度 */
+				margin-top: 10rpx;
+				
+				&.line-active {
+					border-left: 4rpx dashed #1B64F0;
+				}
+
+				&.line-passed {
+					border-left: 4rpx dashed #CCCCCC;
+				}
+			}
+		}
+
+		.status-section {
+			flex: 1;
+			min-width: 0;
+			display: flex;
+			margin-bottom: 20rpx;
+			flex-direction: column;
+			justify-content: center; /* 垂直居中内容 */
+
+			.status-badge {
+				margin-bottom: 8rpx;
+				height: 48rpx;
+				font-weight: 400;
+				font-size: 32rpx;
+				line-height: 48rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+
+				&.status-collected {
+					color: #333333;
+				}
+
+				&.status-title-active {
+					color: #1B64F0;
+					font-weight: 600;
+				}
+				
+				/* 默认颜色 */
+				&:not(.status-title-active) {
+					color: #333333;
+				}
+			}
+
+			.status-detail {
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #333333;
+				line-height: 44rpx;
+				margin-top: 8rpx;
+				word-break: break-all;
+				display: -webkit-box;
+				// -webkit-line-clamp: 4; /* 限制最多显示2行 */
+				// -webkit-box-orient: vertical;
+				overflow: hidden;
+			}
+
+			.status-time {
+				margin-top: 8rpx;
+				height: 40rpx;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #999999;
+				line-height: 40rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+			}
+		}
+	}
+</style>

+ 66 - 0
jd_logistics-app/components/agreeRecharge.vue

@@ -0,0 +1,66 @@
+<template>
+  <!-- 用户协议勾选 -->
+  <view class="agree-row mt30">
+    <u-checkbox
+      :customStyle="{marginBottom: '8px'}"
+      label="请阅读并同意"
+      name="agree"
+      usedAlone
+      v-model:checked="aloneChecked"
+      labelSize="12"
+      @change="checkboxChange"
+    >
+    </u-checkbox>
+    <text class="agree-text">
+      <text class="protocol-link" @click="openProtocol()">《充值协议》</text> 
+    </text>
+  </view>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { useToast } from "@/hooks/useToast";
+const { Toast } = useToast();
+
+const emit = defineEmits(['setAloneChecked']);
+
+// 协议勾选状态
+const aloneChecked = ref(false);
+
+function checkboxChange(e){
+  emit('setAloneChecked', e);
+}
+
+// 模拟打开协议逻辑(实际可跳转 webview 或弹窗展示)
+const openProtocol = (type) => {
+  uni.navigateTo({
+		url: '/pages/policy/recharge_policy'
+	});
+};
+</script>
+
+<style scoped lang="scss">
+
+/* 协议勾选行 */
+.agree-row {
+  display: flex;
+  align-items: center;
+  margin-bottom: 40rpx;
+  width: 100%;
+  box-sizing: border-box;
+}
+.agree-checkbox {
+  transform: scale(0.8);
+  margin-right: 10rpx;
+}
+.agree-text {
+  font-size: 24rpx;
+  color: #666;
+  line-height: 36rpx;
+}
+.protocol-link {
+  color: $theme-color;
+  /* text-decoration: underline; */
+}
+
+</style>

+ 66 - 0
jd_logistics-app/components/agreeVip.vue

@@ -0,0 +1,66 @@
+<template>
+  <!-- 用户协议勾选 -->
+  <view class="agree-row mt30">
+    <u-checkbox
+      :customStyle="{marginBottom: '8px'}"
+      label="请阅读并同意"
+      name="agree"
+      usedAlone
+      v-model:checked="aloneChecked"
+      labelSize="12"
+      @change="checkboxChange"
+    >
+    </u-checkbox>
+    <text class="agree-text">
+      <text class="protocol-link" @click="openProtocol()">《VIP会员开通协议》</text> 
+    </text>
+  </view>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { useToast } from "@/hooks/useToast";
+const { Toast } = useToast();
+
+const emit = defineEmits(['setAloneChecked']);
+
+// 协议勾选状态
+const aloneChecked = ref(false);
+
+function checkboxChange(e){
+  emit('setAloneChecked', e);
+}
+
+// 模拟打开协议逻辑(实际可跳转 webview 或弹窗展示)
+const openProtocol = (type) => {
+  uni.navigateTo({
+		url: '/pages/policy/vip_policy'
+	});
+};
+</script>
+
+<style scoped lang="scss">
+
+/* 协议勾选行 */
+.agree-row {
+  display: flex;
+  align-items: center;
+  margin-bottom: 40rpx;
+  width: 100%;
+  box-sizing: border-box;
+}
+.agree-checkbox {
+  transform: scale(0.8);
+  margin-right: 10rpx;
+}
+.agree-text {
+  font-size: 24rpx;
+  color: #666;
+  line-height: 36rpx;
+}
+.protocol-link {
+  color: $theme-color;
+  /* text-decoration: underline; */
+}
+
+</style>

+ 52 - 0
jd_logistics-app/components/headerInfo.vue

@@ -0,0 +1,52 @@
+<template>
+<view :class="props.class" class="header_info"
+:style="{ height: appStore.navbarHeight + 'px',paddingTop: appStore.statusBarHeight + 'px'}"
+>
+  <view class="isBack" >
+    <u-icon name="arrow-left" :color="color" size="24"  v-if="isBack" @click="goBack"></u-icon>
+    <slot name="right"></slot>
+  </view>
+  <text class="font_size35 bold color_fff flex_1 text_align_center">{{title}}</text>
+</view>
+</template>
+
+<script setup>
+const props = defineProps({
+  title: {
+    type: String,
+    default: "建材信息平台",
+  },
+  class: {
+    type: String,
+    default: 'flex-center',
+  },
+  isBack: {
+    type: Boolean,
+    default: false,
+  },
+  color: {
+    type: String,
+    default: '#ffffff',
+  },
+});
+
+import { useAppStore } from "@/stores/app";
+const appStore = useAppStore();
+
+const goBack = () => {
+  uni.navigateBack({
+    delta: 1,
+  });
+}
+</script>
+
+<style scoped lang="scss">
+.header_info{
+  position: relative;
+  .isBack{
+    position: absolute;
+    left: 0;
+    bottom: 10px;
+  }
+}
+</style>

+ 80 - 0
jd_logistics-app/components/paymentCommon.vue

@@ -0,0 +1,80 @@
+<template>
+  <u-popup :show="popupShow" mode="bottom" @close="popupShow = false" class="u_popup_bottom">
+    <view class="bg_color_fff u_popup_bottom">
+      <view class="u_popup_bottom_desc border-bottom gray font_size25 text_align_center">请选择付款方式</view>
+      <view class="padding30 border-bottom text_align_center" @click="popupShow = false;pay(0)">微信支付</view>
+      <!-- <view class="padding30 border-bottom text_align_center" @click="popupShow = false;pay(1)">
+        余额支付
+        <text class="color_price"> ( {{appStore.userInfo?.rechargeBalance}} {{appStore.moneyUnit}} )</text>
+      </view> -->
+      <view class="padding30 text_align_center" @click="popupShow = false">取消</view>
+    </view>
+  </u-popup>
+</template>
+<script setup>
+import { ref } from 'vue'
+import { createOrder } from "@/api/order.js";
+import { wxPay } from "@/utils/util.js";
+import { useAppStore } from "@/stores/app";
+const appStore = useAppStore();
+defineExpose({
+  open
+});
+const emit = defineEmits(['reloadList']);
+const popupShow = ref(false);
+const orderId = ref(null);
+const payType = ref('');//支付方式 0微信 1余额
+function open(e) {
+  popupShow.value = true;
+  orderId.value = e.orderId;
+}
+
+async function pay(payMethod){
+  console.log('pay',payMethod,orderId.value);
+  payType.value = payMethod;
+  const res = await createOrder({
+    payMethod:payType.value,//支付方式 0微信 1余额
+    orderId:orderId.value
+  });
+  orderId.value = res.data.orderId;
+  // 余额支付
+  if(payType.value==1){
+    //1成功 0失败;
+    const paySuccess = res.data.paySuccess;
+    orderStatusQuery({isSuccess:paySuccess?1:0});
+  }else{ 
+    const payInfo = res.data.payData.prepayWithRequestPaymentResponse;
+    wxPay({
+      timeStamp:payInfo.timeStamp,
+      nonceStr:payInfo.nonceStr,
+      packageVal:payInfo.packageVal,
+      signType:payInfo.signType,
+      paySign:payInfo.paySign,
+    },orderStatusQuery);
+  }
+}
+function orderStatusQuery({isSuccess}){
+ emit('reloadList');
+ to_success_pay({isSuccess});
+}
+function to_success_pay({isSuccess}){
+	console.log('to_success_pay',isSuccess);
+	uni.navigateTo({
+    url: `/pages/recharge/success_pay?orderId=${orderId.value}&isSuccess=${isSuccess}&payMethod=${payType.value}`
+  })
+}
+</script>
+<style lang="scss">
+.u_popup_bottom{
+	.u-popup__content{
+		border-radius: 30rpx 30rpx 0 0;
+	}
+  .u_popup_bottom_desc{
+		padding: 50rpx 50rpx 30rpx;
+	}
+}
+</style>
+<style lang="scss" scoped>
+.u_popup_bottom{
+}
+</style>

+ 27 - 0
jd_logistics-app/config/app.js

@@ -0,0 +1,27 @@
+
+import { domainInfo } from './env.js';
+
+export const HTTP_REQUEST_URL = domainInfo.domain
+export const HTTP_REQUEST_URL_WS = domainInfo.domainWS
+
+// PC 后台 API 地址(用于上传图片)
+export const HTTP_ADMIN_URL = domainInfo.domain
+
+// 请求头
+export const HEADER = {
+  'content-type': 'application/json'
+}
+
+// 表单提交头
+export const HEADERPARAMS = {
+  'content-type': 'application/x-www-form-urlencoded'
+}
+
+// token 名称
+export const TOKENNAME = 'Authorization'
+
+// 缓存时间,0 为永久
+export const EXPIRE = 0
+
+// 分页默认限制条数
+export const LIMIT = 10

+ 3 - 0
jd_logistics-app/config/cache.js

@@ -0,0 +1,3 @@
+export const USER_INFO = "USER_INFO"
+export const CITYINFO = "CITYINFO"
+export const TOKEN = "TOKEN"

+ 46 - 0
jd_logistics-app/config/env.js

@@ -0,0 +1,46 @@
+// 根据微信小程序环境版本设置 baseUrl
+// let domain = 'http://192.168.100.254:8024/front-api' // 内网IP
+// let domain = 'http://192.168.100.199:8081' // 晋守桦IP
+// let domain = 'http://192.168.100.14:8081' // 赵乔功IP
+// let domain = 'http://192.168.100.146:8079' // 马二勇
+ let domain = 'http://192.168.100.92:8080' // 朝龙
+// let domain = 'https://www.bjwdys.com/prod-api' //线上环境
+
+const getBaseUrl = () => {
+  // 获取小程序账户信息(包含环境版本)
+  const accountInfo = uni.getAccountInfoSync()||{};
+  const envVersion = accountInfo.miniProgram.envVersion;
+  console.log('环境版本-getBaseUrl:', envVersion);
+  switch (envVersion) {
+    case 'develop': // 开发版
+      return {
+        // domain:'https://www.bjwdys.com/prod-api',
+        // domainWS:'wss://www.bjwdys.com/prod-api',
+        domain:domain,
+        domainWS:domain,
+      };
+    case 'trial':   // 这边分为测试版本和预生产,根据开发注释掉
+      // 测试 -对应LS体验版
+      return  {
+        // domain:'https://www.bjwdys.com/prod-api',
+        // domainWS:'wss://www.bjwdys.com/prod-api',
+        domain:domain,
+        domainWS:domain,
+      };;
+      // 预生产 - 对应壹加体验版
+      // return 'https://wxmp-pre.equah.com.cn';
+    case 'release': // 正式版
+      return  {
+        domain:domain,
+        domainWS:domain,
+		
+      };;
+    default:
+      return  {
+        domain:'https://www.bjwdys.com/prod-api',
+        domainWS:'wss://www.bjwdys.com/prod-api',
+      };;
+  }
+};
+
+export const domainInfo = getBaseUrl();

+ 112 - 0
jd_logistics-app/hooks/useToast.js

@@ -0,0 +1,112 @@
+import { ref } from "vue";
+
+	/**
+	 * opt  object | string
+	 * to_url object | string
+	 * 例:
+	 * this.Tips('/pages/test/test'); 跳转不提示
+	 * this.Tips({title:'提示'},'/pages/test/test'); 提示并跳转
+	 * this.Tips({title:'提示'},{tab:1,url:'/pages/index/index'}); 提示并跳转值table上
+	 * tab=1 一定时间后跳转至 table上
+	 * tab=2 一定时间后跳转至非 table上
+	 * tab=3 一定时间后返回上页面
+	 * tab=4 关闭所有页面跳转至非table上
+	 * tab=5 关闭当前页面跳转至table上
+	 */
+
+export function useToast() {
+  // 提示标题
+  const tipTitle = ref("");
+  // 提示图标
+  const tipIcon = ref("none");
+  // 提示持续时间
+  const tipEndtime = ref(2000);
+
+  /**
+   * Tips - 显示提示并可按需跳转页面
+   * @param {Object|string} opt 提示配置或直接为跳转路径
+   * @param {Object|string|Function} to_url 跳转配置、路径或回调
+   */
+  function Toast(opt, to_url) {
+    console.log("Toast", opt, to_url);
+    // 如果第一个参数是字符串,视为跳转路径
+    if (typeof opt == "string") {
+      to_url = opt;
+      opt = {};
+    }
+    // 提示内容
+    tipTitle.value = opt.title || "";
+    // 图标
+    tipIcon.value = opt.icon || "none";
+    // 持续时间
+    tipEndtime.value = opt.endtime || 2000;
+    // 接口调用成功的回调函数
+    let success = opt.success;
+    // 显示提示
+    if (tipTitle.value)
+      uni.showToast({
+        title: tipTitle.value,
+        icon: tipIcon.value,
+        duration: tipEndtime.value,
+        success,
+      });
+    // 跳转逻辑
+    if (to_url != undefined) {
+      if (typeof to_url == "object") {
+        // 对象方式配置跳转
+        let tab = to_url.tab || 1,
+          url = to_url.url || "";
+        console.log('tab', tab)
+        switch (tab) {
+          case 1:
+            // 一定时间后跳转至 table
+            setTimeout(() => uni.switchTab({ url }), tipEndtime.value);
+            break;
+          case 2:
+            // 跳转至非table页面
+            setTimeout(() => uni.navigateTo({ url }), tipEndtime.value);
+            break;
+          case 3:
+            // 返回上一个页面
+            setTimeout(() => {
+
+              // #ifndef H5
+              uni.navigateBack({ delta: 1 });
+              // #endif
+
+              // #ifdef H5
+              history.back();
+              // #endif
+
+            }, tipEndtime.value);
+            break;
+          case 4:
+            // 关闭所有页面跳转到非 tab 页面
+            setTimeout(() => uni.reLaunch({ url }), tipEndtime.value);
+            break;
+          case 5:
+            // 关闭当前页面跳转到非 tab 页面
+            setTimeout(() => uni.redirectTo({ url }), tipEndtime.value);
+            break;
+        }
+      } else if (typeof to_url == "function") {
+        // 回调函数
+        setTimeout(() => to_url && to_url(), tipEndtime.value);
+      } else {
+        // 普通路径跳转
+        setTimeout(
+          () => uni.navigateTo({ url: to_url }),
+          tipTitle.value ? tipEndtime.value : 0
+        );
+      }
+    }
+  }
+
+  // 导出响应式数据和方法
+  return {
+    tipTitle,
+    tipIcon,
+    tipEndtime,
+    Toast
+  };
+}

+ 40 - 0
jd_logistics-app/libs/login.js

@@ -0,0 +1,40 @@
+import { useAppStore } from "@/stores/app.js";
+import Cache from "../utils/cache";
+// import { Debounce } from "@/utils/validate.js";
+
+import {
+  USER_INFO,TOKEN,CITYINFO
+} from "@/config/cache";
+
+function prePage() {
+  let pages = getCurrentPages();
+  let prePage = pages[pages.length - 1];
+  return prePage.route;
+}
+
+// export const toLogin = Debounce(_toLogin, 800);
+
+export function toLogin(push, pathLogin) {
+  const appStore = useAppStore();
+  // appStore.LOGOUT();
+  // let path = prePage();
+  // let login_back_url = Cache.get(BACK_URL);
+
+
+  uni.navigateTo({
+    url: "/pages/login/login",
+  });
+}
+
+export function checkLogin() {
+  let userInfo = Cache.get(USER_INFO) ? JSON.parse(Cache.get(USER_INFO)) : null;
+  let token = Cache.get(TOKEN);
+  const appStore = useAppStore();
+  if (userInfo && userInfo.userPhone && token) {
+    return true;
+  } else {
+    Cache.clear(TOKEN);
+    Cache.clear(USER_INFO);
+    return false;
+  }
+}

+ 538 - 0
jd_logistics-app/static/css/base.scss

@@ -0,0 +1,538 @@
+@charset "UTF-8";
+wx-image{
+	height: auto;
+}
+.padding20 {
+	padding: 20rpx
+}
+.paddingTB20 {
+	padding: 20rpx 0
+}
+.paddingTB30 {
+	padding: 30rpx 0
+}
+.paddingTB10 {
+	padding: 10rpx 0
+}
+
+.pad20 {
+	padding: 0 20rpx
+}
+
+.padding15 {
+	padding: 15rpx
+}
+.padding30 {
+	padding: 30rpx
+}
+
+.pad30 {
+	padding: 0 30rpx
+}
+.pt20 {
+	padding-top: 20rpx
+}
+.pb15 {
+	padding-bottom: 15rpx
+}
+.pb20 {
+	padding-bottom: 20rpx
+}
+.pb30 {
+	padding-bottom: 30rpx
+}
+
+.mb30 {
+	margin-bottom: 30rpx;
+}
+.mr20 {
+	margin-right: 20rpx;
+}
+.mr10 {
+	margin-right: 10rpx;
+}
+.ml20 {
+	margin-left: 20rpx;
+}
+.mt20 {
+	margin-top: 20rpx;
+}
+.mt30 {
+	margin-top: 30rpx;
+}
+.mt10 {
+	margin-top: 10rpx;
+}
+.mb20 {
+	margin-bottom: 20rpx;
+}
+
+page, view, text, image, button, input, scroll-view, swiper{
+	box-sizing: border-box
+}
+
+page {
+	font-size: 28rpx;
+	background-color: #f5f5f5 !important;
+	/* background-color: #ffffff !important; */
+	color: #333;
+	/* height: 100%; */
+}
+
+body,html {
+	background-color: #f5f5f5 !important;
+	/* background-color: #ffffff !important; */
+/* 	height: unset */
+}
+
+button {
+	padding: 0;
+	margin: 0;
+	line-height: normal;
+	background-color: #fff
+}
+
+button::after {
+	border: 0
+}
+
+
+
+radio .wx-radio-input.wx-radio-input-checked {
+	border: 1px solid #E93323 !important;
+	background-color: #E93323 !important
+}
+
+radio .uni-radio-input {
+	border-radius: 50%;
+	width: 38rpx;
+	height: 38rpx
+}
+
+radio .uni-radio-input.uni-radio-input-checked {
+	border: 1px solid #E93323 !important;
+	background-color: #E93323 !important
+}
+
+checkbox .wx-checkbox-input {
+	border-radius: 50%;
+	width: 38rpx;
+	height: 38rpx;
+	margin-right: 0 !important;
+}
+
+checkbox .wx-checkbox-input.wx-checkbox-input-checked {
+	border: 1px solid #E93323 !important;
+	background-color: #E93323 !important;
+	color: #fff!important;
+	margin-right: 0 !important;
+}
+
+checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
+	font-size: 35rpx
+}
+
+checkbox .uni-checkbox-input {
+	border-radius: 50%;
+	width: 38rpx;
+	height: 38rpx
+}
+
+checkbox .uni-checkbox-input.uni-checkbox-input-checked {
+	border: 1px solid #E93323 !important;
+	background-color: #E93323 !important;
+	color: #fff!important
+}
+
+checkbox .uni-checkbox-input.uni-checkbox-input-checked::before {
+	font-size: 35rpx
+}
+
+.line1 {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap
+}
+
+.line2 {
+	word-break: break-all;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+	overflow: hidden;
+	/* height: 84rpx; */
+}
+
+.mask {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background-color: #000;
+	opacity: .5;
+	z-index: 5
+}
+
+@keyframes load {
+	from {
+		transform: rotate(0)
+	}
+
+	to {
+		transform: rotate(360deg)
+	}
+}
+
+@-webkit-keyframes load {
+	from {
+		transform: rotate(0)
+	}
+
+	to {
+		transform: rotate(360deg)
+	}
+}
+
+.loadingpic {
+	animation: load 3s linear 1s infinite;
+	--webkit-animation: load 3s linear 1s infinite
+}
+
+.loading-list {
+	animation: load linear 1s infinite;
+	-webkit-animation: load linear 1s infinite;
+	font-size: 40rpx;
+	margin-right: 22rpx
+}
+
+.loading {
+	width: 100%;
+	height: 100rpx;
+	line-height: 100rpx;
+	align-items: center;
+	justify-content: center;
+	position: relative;
+	text-align: center
+}
+
+.loading .line {
+	position: absolute;
+	width: 450rpx;
+	left: 150rpx;
+	top: 50rpx;
+	height: 1px;
+	border-top: 1px solid #eee
+}
+
+.loading .text {
+	position: relative;
+	display: inline-block;
+	padding: 0 20rpx;
+	background: #fff;
+	z-index: 2;
+	color: #777
+}
+
+.loadingicon .loading {
+	animation: load linear 1s infinite;
+	font-size: 45rpx;
+	color: #000
+}
+
+.loadingicon {
+	width: 100%;
+	height: 80rpx;
+	overflow: hidden
+}
+.bg-color-huic{
+	background: #F1F1F1!important;
+	border: 1px solid #ccc!important;
+	color: #ccc!important;
+}
+.nowrap{
+	white-space: nowrap;
+}
+/*flex样式*/
+.flex_1{
+  flex:1;
+}
+.flex{
+  display: flex;
+}
+.flex_2{
+  flex: 2;
+}
+.flex-between{/*两边对齐*/
+  display: flex;
+  justify-content: space-between;
+}
+.flex-align-center{/*垂直居中*/
+  display: flex !important;
+  align-items: center;
+}
+.flex-center{/*水平垂直居中*/
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.flex-center-flex-end{/*水平垂直居中-尾部对齐*/
+  display: flex;
+  justify-content: flex-end;
+  align-items: center;
+}
+.flex-center-box-end{/*水平垂直居中-铺满盒内*/
+  display: -webkit-inline-box;
+  justify-content: flex-end;
+  align-items: center;
+}
+.flex-center-flex-start{/*水平垂直居中-首部对齐*/
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+}
+.flex-center-around{/*水平垂直居中-平均对齐*/
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.flex-center-between{/*水平垂直居中-两边对齐*/
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.flex-column{/*竖直方向*/
+  display: flex;
+  flex-direction: column;
+}
+.flex-column-center{/*竖直方向水平居中 两端对齐*/
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-items: center;
+}
+.flex-column-start{/*竖直方向水平居中 首部对齐*/
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+  align-items: self-start;
+}
+.flex-column-end{/*竖直方向水平居中 尾部部对齐*/
+  display: flex;
+  flex-direction: column;
+	align-items: flex-end;
+}
+.flex-column-start-between{/*竖直方向-首部对齐-两端对齐*/
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-items: self-start;
+}
+.flex-column-align{/*竖直方向水平居中*/
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.flex-center-flex-start-warp{/*水平垂直居中-首部对齐*/
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+   flex-wrap:wrap ;
+}
+.grid-container {
+	display: grid;
+	grid-template-columns: repeat(2, 1fr);
+	gap: 30rpx;
+}
+.grid-container3 {
+	display: grid;
+	grid-template-columns: repeat(3, 1fr);
+	gap: 30rpx;
+}
+.order_btn{
+	font-size: 25rpx;
+	color: #ffffff;
+	border-radius:10rpx;
+	background-color: $theme-color;
+	&.error{
+		background-color: #E93323;
+	}
+	&.plain{
+		border:1px solid #cccccc;
+		color: #000000;
+		background-color: #ffffff;
+	}
+}
+.border{
+	border: 1px solid #eeeeee;
+}
+.border-bottom{
+	border-bottom: 1px solid #eeeeee;
+}
+.gray{
+	color: #666666;
+}
+.link{
+	color: #007aff;
+}
+.bg_color_f5{
+	background-color: #f5f5f5;
+}
+.bg_color_fff{
+	background-color: #ffffff;
+}
+.bg_color_primary{
+	background-color: $theme-color;
+}
+.border_radius_10{
+	border-radius: 10rpx;
+}
+.border_radius_20{
+	border-radius: 20rpx;
+}
+.border_radius_30{
+	border-radius: 30rpx;
+}
+.bold{
+	font-weight: bold;
+}
+.font_size60{
+	font-size: 60rpx;
+}
+.font_size40{
+	font-size: 40rpx;
+}
+.font_size35{
+	font-size: 36rpx;
+}
+.font_size30{
+	font-size: 30rpx;
+}
+.font_size32{
+	font-size: 32rpx;
+}
+.font_size20{
+	font-size: 20rpx;
+}
+.font_size24{
+	font-size: 24rpx;
+}
+.font_size28{
+	font-size: 28rpx;
+}
+.font_size25{
+	font-size: 25rpx;
+}
+.line_vertical{
+	width: 8rpx;
+	height: 30rpx;
+	background-color: $theme-color;
+	border-radius: 4rpx;
+}
+.color_price{
+	color: #fc4f1d;
+}
+.color_vip{
+	color: #fee189;
+}
+.color_fff{
+	color: #333;
+}
+.color_000{
+	color: #000000;
+}
+.color_theme{
+	color: $theme-color;
+}
+
+.text_align_center{
+	text-align: center;
+}
+.text_align_right{
+	text-align: right;
+}
+.foot{
+	width: 100%;
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	box-shadow: 0 -4px 6px -1px rgba(0, 0, 0, 0.1);
+	z-index: 10;
+	padding: 20rpx 30rpx;
+}
+.footplaceholder{
+	height: 100rpx;
+}
+.ellipsis{
+	overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.bg_img{
+	width: 100%;
+	position: absolute;
+	top: 0;
+	left: 0;;
+	z-index: -1;
+}
+.line_through{
+	text-decoration: line-through;
+}
+
+.required{
+	color: #E93323;
+}
+.u_popup_bottom{
+	border-radius: 30rpx 30rpx 0 0;
+}
+.overflow_hidden{
+	overflow: hidden;
+}
+
+
+.payment-radio {
+  width: 40rpx;
+  height: 40rpx;
+
+  .radio-circle {
+    width: 100%;
+    height: 100%;
+    border: 3rpx solid #ddd;
+    border-radius: 50%;
+    position: relative;
+    transition: all 0.3s;
+
+    &.checked {
+      border-color: $theme-color;
+
+      &::after {
+        content: "";
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%, -50%);
+        width: 20rpx;
+        height: 20rpx;
+        background: $theme-color;
+        border-radius: 50%;
+      }
+    }
+  }
+}
+.noData{
+	text-align: center;
+	padding: 30rpx 0;
+	color: #c8c7cc;
+}
+.serviceLabel{
+	background-color: #ffe8e6;
+	font-size: 25rpx;
+	color: #E93323;
+	border-radius: 10rpx;
+	padding: 5rpx 10rpx;
+	display: inline-block;
+	// margin-top: 20rpx;
+	&:not(:last-child){ 
+		margin-right: 10rpx;
+	}
+}

二进制
jd_logistics-app/static/img/addHuiHua.png


二进制
jd_logistics-app/static/img/arrow-right.png


二进制
jd_logistics-app/static/img/check.png


二进制
jd_logistics-app/static/img/copy.png


二进制
jd_logistics-app/static/img/home/tool.png


二进制
jd_logistics-app/static/img/icon-logo-jd.png


二进制
jd_logistics-app/static/img/icon-logo-sf.png


二进制
jd_logistics-app/static/img/index-bg.png


二进制
jd_logistics-app/static/img/index-personal.png


二进制
jd_logistics-app/static/img/index-time.png


二进制
jd_logistics-app/static/img/index-un-time.png


二进制
jd_logistics-app/static/img/logo.png


二进制
jd_logistics-app/static/img/mine/Logout.png


二进制
jd_logistics-app/static/img/mine/chongzhijulu.png


二进制
jd_logistics-app/static/img/mine/icon-mine-about.png


二进制
jd_logistics-app/static/img/mine/icon-mine-address.png


二进制
jd_logistics-app/static/img/mine/icon-mine-order.png


二进制
jd_logistics-app/static/img/mine/icon-mine-policy.png


二进制
jd_logistics-app/static/img/mine/icon-mine-server.png


二进制
jd_logistics-app/static/img/mine/kefu.png


二进制
jd_logistics-app/static/img/mine/money.png


二进制
jd_logistics-app/static/img/mine/order.png


二进制
jd_logistics-app/static/img/mine/vip.png


二进制
jd_logistics-app/static/img/mine/vipcard.png


二进制
jd_logistics-app/static/img/qianbao.png


二进制
jd_logistics-app/static/img/search.png


二进制
jd_logistics-app/static/img/service/aijiqiren.png


二进制
jd_logistics-app/static/img/service/assistant-avatar.png


二进制
jd_logistics-app/static/img/service/maikefengyuyin.png


二进制
jd_logistics-app/static/img/service/send-icon.png


二进制
jd_logistics-app/static/img/service/tupian.png


二进制
jd_logistics-app/static/img/service/user-avatar.png


二进制
jd_logistics-app/static/img/service/xiaoxi.png


二进制
jd_logistics-app/static/img/shuaxin.png


二进制
jd_logistics-app/static/img/tabs/home.png


二进制
jd_logistics-app/static/img/tabs/home_active.png


二进制
jd_logistics-app/static/img/tabs/search.png


二进制
jd_logistics-app/static/img/tabs/search_active.png


二进制
jd_logistics-app/static/img/tabs/user.png


二进制
jd_logistics-app/static/img/tabs/user_active.png


二进制
jd_logistics-app/static/img/translte-1.png


二进制
jd_logistics-app/static/img/translte-2.png


二进制
jd_logistics-app/static/img/vip/fire.png


二进制
jd_logistics-app/static/img/vip/question.png


二进制
jd_logistics-app/static/img/vip/siren.png


二进制
jd_logistics-app/static/img/vip/vip.png


二进制
jd_logistics-app/static/img/vip/xuexi.png


二进制
jd_logistics-app/static/img/vip/yiwen.png


二进制
jd_logistics-app/static/img/voice/cancel.png


二进制
jd_logistics-app/static/img/voice/recording.gif


二进制
jd_logistics-app/static/img/voice/recording.png


二进制
jd_logistics-app/static/img/weixin.png


二进制
jd_logistics-app/static/img/wenhua.png


二进制
jd_logistics-app/static/success_card.png


+ 68 - 0
jd_logistics-app/stores/app.js

@@ -0,0 +1,68 @@
+import { defineStore } from "pinia";
+import { getUserInfo } from "@/api/user.js";
+import Cache from "@/utils/cache.js";
+import { USER_INFO,CITYINFO,TOKEN} from "@/config/cache.js";
+import { uniLogin } from "@/utils/util.js";
+export const useAppStore = defineStore("app", {
+  state: () => {
+    return {
+      userInfo: Cache.get(USER_INFO) ? JSON.parse(Cache.get(USER_INFO)) : null,
+      token: Cache.get(TOKEN) || null,
+      agentId: '',//当前选择的智能体ID
+      useBalance:false,//是否使用晓豆
+      msgContent:'',//当前跳转过来带的问题
+      moneyUnit:'AI豆',//默认晓豆
+      title: "财税知识平台",//小程序名字
+      statusBarHeight: 0,//状态栏高度
+      navbarHeight: 0,//导航栏总高度
+      bgDefaultImage:"https://fs.bjwdys.com/miniapp/bg-default.png?time="+Date.now(),//纯色背景图,带时间戳防止缓存
+    };
+  },
+  getters: {
+    $userInfo: (state) => state.userInfo,
+    onShareAppMessageObj:(state) =>({
+      title: "财税知识平台",
+      path: `/pages/index/index?scene=inviteCode=${state.userInfo?.inviteCode || ''}`, // 分享路径
+    })
+  },
+  // 也可以这样定义
+  // state: () => ({ count: 0 })
+  actions: {
+    UPDATE_agentId(agentId) {
+      this.agentId = agentId
+    },
+    UPDATE_msgContent(msgContent) {
+      this.msgContent = msgContent
+    },
+    UPDATE_TOKEN(token) {
+      this.token = token
+      Cache.set(TOKEN, token);
+    },
+   
+    LOGOUT() {
+      this.token = undefined;
+      this.userInfo = undefined;
+      Cache.clear(USER_INFO);
+      Cache.clear(TOKEN);
+    },
+    UPDATE_USERINFO(userInfo) {
+      this.userInfo = userInfo;
+      Cache.set(USER_INFO, userInfo);
+      uniLogin();
+    },
+    async USERINFO(force) {
+      try {
+        const res = await getUserInfo();
+        this.UPDATE_USERINFO(res.data);
+        return res.data;
+      } catch (e) {
+        // 可以处理异常
+      }
+    },
+    UPDATE_statusBarHeight(statusBarHeight) {
+      this.statusBarHeight = statusBarHeight;
+      // 导航栏总高度 = 状态栏高度 + 自定义导航内容高度(通常 44px)
+      this.navbarHeight = statusBarHeight + 44;
+    },
+  }
+});

+ 3 - 0
jd_logistics-app/stores/pinia.js

@@ -0,0 +1,3 @@
+import { createPinia } from 'pinia';
+const pinia = createPinia();
+export default pinia;

+ 42 - 0
jd_logistics-app/uni_modules/uni-icons/changelog.md

@@ -0,0 +1,42 @@
+## 2.0.10(2024-06-07)
+- 优化 uni-app x 中,size 属性的类型
+## 2.0.9(2024-01-12)
+fix: 修复图标大小默认值错误的问题
+## 2.0.8(2023-12-14)
+- 修复 项目未使用 ts 情况下,打包报错的bug
+## 2.0.7(2023-12-14)
+- 修复 size 属性为 string 时,不加单位导致尺寸异常的bug
+## 2.0.6(2023-12-11)
+- 优化 兼容老版本icon类型,如 top ,bottom 等
+## 2.0.5(2023-12-11)
+- 优化 兼容老版本icon类型,如 top ,bottom 等
+## 2.0.4(2023-12-06)
+- 优化 uni-app x 下示例项目图标排序
+## 2.0.3(2023-12-06)
+- 修复 nvue下引入组件报错的bug
+## 2.0.2(2023-12-05)
+-优化 size 属性支持单位
+## 2.0.1(2023-12-05)
+- 新增 uni-app x 支持定义图标
+## 1.3.5(2022-01-24)
+- 优化 size 属性可以传入不带单位的字符串数值
+## 1.3.4(2022-01-24)
+- 优化 size 支持其他单位
+## 1.3.3(2022-01-17)
+- 修复 nvue 有些图标不显示的bug,兼容老版本图标
+## 1.3.2(2021-12-01)
+- 优化 示例可复制图标名称
+## 1.3.1(2021-11-23)
+- 优化 兼容旧组件 type 值
+## 1.3.0(2021-11-19)
+- 新增 更多图标
+- 优化 自定义图标使用方式
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
+## 1.1.7(2021-11-08)
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.5(2021-05-12)
+- 新增 组件示例地址
+## 1.1.4(2021-02-05)
+- 调整为uni_modules目录规范

+ 91 - 0
jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue

@@ -0,0 +1,91 @@
+<template>
+  <text class="uni-icons" :style="styleObj">
+    <slot>{{unicode}}</slot>
+  </text>
+</template>
+
+<script>
+  import { fontData, IconsDataItem } from './uniicons_file'
+
+  /**
+   * Icons 图标
+   * @description 用于展示 icon 图标
+   * @tutorial https://ext.dcloud.net.cn/plugin?id=28
+   * @property {Number,String} size 图标大小
+   * @property {String} type 图标图案,参考示例
+   * @property {String} color 图标颜色
+   * @property {String} customPrefix 自定义图标
+   * @event {Function} click 点击 Icon 触发事件
+   */
+  export default {
+    name: "uni-icons",
+    props: {
+      type: {
+        type: String,
+        default: ''
+      },
+      color: {
+        type: String,
+        default: '#333333'
+      },
+      size: {
+        type: [Number, String],
+        default: 16
+      },
+      fontFamily: {
+        type: String,
+        default: ''
+      }
+    },
+    data() {
+      return {};
+    },
+    computed: {
+      unicode() : string {
+        let codes = fontData.find((item : IconsDataItem) : boolean => { return item.font_class == this.type })
+        if (codes !== null) {
+          return codes.unicode
+        }
+        return ''
+      },
+      iconSize() : string {
+        const size = this.size
+        if (typeof size == 'string') {
+          const reg = /^[0-9]*$/g
+          return reg.test(size as string) ? '' + size + 'px' : '' + size;
+          // return '' + this.size
+        }
+        return this.getFontSize(size as number)
+      },
+      styleObj() : UTSJSONObject {
+        if (this.fontFamily !== '') {
+          return { color: this.color, fontSize: this.iconSize, fontFamily: this.fontFamily }
+        }
+        return { color: this.color, fontSize: this.iconSize }
+      }
+    },
+    created() { },
+    methods: {
+      /**
+       * 字体大小
+       */
+      getFontSize(size : number) : string {
+        return size + 'px';
+      },
+    },
+  }
+</script>
+
+<style scoped>
+  @font-face {
+    font-family: UniIconsFontFamily;
+    src: url('./uniicons.ttf');
+  }
+
+  .uni-icons {
+    font-family: UniIconsFontFamily;
+    font-size: 18px;
+    font-style: normal;
+    color: #333;
+  }
+</style>

+ 110 - 0
jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uni-icons.vue

@@ -0,0 +1,110 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<text :style="styleObj" class="uni-icons" @click="_onClick">{{unicode}}</text>
+	<!-- #endif -->
+	<!-- #ifndef APP-NVUE -->
+	<text :style="styleObj" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick">
+		<slot></slot>
+	</text>
+	<!-- #endif -->
+</template>
+
+<script>
+	import { fontData } from './uniicons_file_vue.js';
+
+	const getVal = (val) => {
+		const reg = /^[0-9]*$/g
+		return (typeof val === 'number' || reg.test(val)) ? val + 'px' : val;
+	}
+
+	// #ifdef APP-NVUE
+	var domModule = weex.requireModule('dom');
+	import iconUrl from './uniicons.ttf'
+	domModule.addRule('fontFace', {
+		'fontFamily': "uniicons",
+		'src': "url('" + iconUrl + "')"
+	});
+	// #endif
+
+	/**
+	 * Icons 图标
+	 * @description 用于展示 icons 图标
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=28
+	 * @property {Number} size 图标大小
+	 * @property {String} type 图标图案,参考示例
+	 * @property {String} color 图标颜色
+	 * @property {String} customPrefix 自定义图标
+	 * @event {Function} click 点击 Icon 触发事件
+	 */
+	export default {
+		name: 'UniIcons',
+		emits: ['click'],
+		props: {
+			type: {
+				type: String,
+				default: ''
+			},
+			color: {
+				type: String,
+				default: '#333333'
+			},
+			size: {
+				type: [Number, String],
+				default: 16
+			},
+			customPrefix: {
+				type: String,
+				default: ''
+			},
+			fontFamily: {
+				type: String,
+				default: ''
+			}
+		},
+		data() {
+			return {
+				icons: fontData
+			}
+		},
+		computed: {
+			unicode() {
+				let code = this.icons.find(v => v.font_class === this.type)
+				if (code) {
+					return code.unicode
+				}
+				return ''
+			},
+			iconSize() {
+				return getVal(this.size)
+			},
+			styleObj() {
+				if (this.fontFamily !== '') {
+					return `color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`
+				}
+				return `color: ${this.color}; font-size: ${this.iconSize};`
+			}
+		},
+		methods: {
+			_onClick() {
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	/* #ifndef APP-NVUE */
+	@import './uniicons.css';
+
+	@font-face {
+		font-family: uniicons;
+		src: url('./uniicons.ttf');
+	}
+
+	/* #endif */
+	.uni-icons {
+		font-family: uniicons;
+		text-decoration: none;
+		text-align: center;
+	}
+</style>

+ 664 - 0
jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons.css

@@ -0,0 +1,664 @@
+
+.uniui-cart-filled:before {
+  content: "\e6d0";
+}
+
+.uniui-gift-filled:before {
+  content: "\e6c4";
+}
+
+.uniui-color:before {
+  content: "\e6cf";
+}
+
+.uniui-wallet:before {
+  content: "\e6b1";
+}
+
+.uniui-settings-filled:before {
+  content: "\e6ce";
+}
+
+.uniui-auth-filled:before {
+  content: "\e6cc";
+}
+
+.uniui-shop-filled:before {
+  content: "\e6cd";
+}
+
+.uniui-staff-filled:before {
+  content: "\e6cb";
+}
+
+.uniui-vip-filled:before {
+  content: "\e6c6";
+}
+
+.uniui-plus-filled:before {
+  content: "\e6c7";
+}
+
+.uniui-folder-add-filled:before {
+  content: "\e6c8";
+}
+
+.uniui-color-filled:before {
+  content: "\e6c9";
+}
+
+.uniui-tune-filled:before {
+  content: "\e6ca";
+}
+
+.uniui-calendar-filled:before {
+  content: "\e6c0";
+}
+
+.uniui-notification-filled:before {
+  content: "\e6c1";
+}
+
+.uniui-wallet-filled:before {
+  content: "\e6c2";
+}
+
+.uniui-medal-filled:before {
+  content: "\e6c3";
+}
+
+.uniui-fire-filled:before {
+  content: "\e6c5";
+}
+
+.uniui-refreshempty:before {
+  content: "\e6bf";
+}
+
+.uniui-location-filled:before {
+  content: "\e6af";
+}
+
+.uniui-person-filled:before {
+  content: "\e69d";
+}
+
+.uniui-personadd-filled:before {
+  content: "\e698";
+}
+
+.uniui-arrowthinleft:before {
+  content: "\e6d2";
+}
+
+.uniui-arrowthinup:before {
+  content: "\e6d3";
+}
+
+.uniui-arrowthindown:before {
+  content: "\e6d4";
+}
+
+.uniui-back:before {
+  content: "\e6b9";
+}
+
+.uniui-forward:before {
+  content: "\e6ba";
+}
+
+.uniui-arrow-right:before {
+  content: "\e6bb";
+}
+
+.uniui-arrow-left:before {
+  content: "\e6bc";
+}
+
+.uniui-arrow-up:before {
+  content: "\e6bd";
+}
+
+.uniui-arrow-down:before {
+  content: "\e6be";
+}
+
+.uniui-arrowthinright:before {
+  content: "\e6d1";
+}
+
+.uniui-down:before {
+  content: "\e6b8";
+}
+
+.uniui-bottom:before {
+  content: "\e6b8";
+}
+
+.uniui-arrowright:before {
+  content: "\e6d5";
+}
+
+.uniui-right:before {
+  content: "\e6b5";
+}
+
+.uniui-up:before {
+  content: "\e6b6";
+}
+
+.uniui-top:before {
+  content: "\e6b6";
+}
+
+.uniui-left:before {
+  content: "\e6b7";
+}
+
+.uniui-arrowup:before {
+  content: "\e6d6";
+}
+
+.uniui-eye:before {
+  content: "\e651";
+}
+
+.uniui-eye-filled:before {
+  content: "\e66a";
+}
+
+.uniui-eye-slash:before {
+  content: "\e6b3";
+}
+
+.uniui-eye-slash-filled:before {
+  content: "\e6b4";
+}
+
+.uniui-info-filled:before {
+  content: "\e649";
+}
+
+.uniui-reload:before {
+  content: "\e6b2";
+}
+
+.uniui-micoff-filled:before {
+  content: "\e6b0";
+}
+
+.uniui-map-pin-ellipse:before {
+  content: "\e6ac";
+}
+
+.uniui-map-pin:before {
+  content: "\e6ad";
+}
+
+.uniui-location:before {
+  content: "\e6ae";
+}
+
+.uniui-starhalf:before {
+  content: "\e683";
+}
+
+.uniui-star:before {
+  content: "\e688";
+}
+
+.uniui-star-filled:before {
+  content: "\e68f";
+}
+
+.uniui-calendar:before {
+  content: "\e6a0";
+}
+
+.uniui-fire:before {
+  content: "\e6a1";
+}
+
+.uniui-medal:before {
+  content: "\e6a2";
+}
+
+.uniui-font:before {
+  content: "\e6a3";
+}
+
+.uniui-gift:before {
+  content: "\e6a4";
+}
+
+.uniui-link:before {
+  content: "\e6a5";
+}
+
+.uniui-notification:before {
+  content: "\e6a6";
+}
+
+.uniui-staff:before {
+  content: "\e6a7";
+}
+
+.uniui-vip:before {
+  content: "\e6a8";
+}
+
+.uniui-folder-add:before {
+  content: "\e6a9";
+}
+
+.uniui-tune:before {
+  content: "\e6aa";
+}
+
+.uniui-auth:before {
+  content: "\e6ab";
+}
+
+.uniui-person:before {
+  content: "\e699";
+}
+
+.uniui-email-filled:before {
+  content: "\e69a";
+}
+
+.uniui-phone-filled:before {
+  content: "\e69b";
+}
+
+.uniui-phone:before {
+  content: "\e69c";
+}
+
+.uniui-email:before {
+  content: "\e69e";
+}
+
+.uniui-personadd:before {
+  content: "\e69f";
+}
+
+.uniui-chatboxes-filled:before {
+  content: "\e692";
+}
+
+.uniui-contact:before {
+  content: "\e693";
+}
+
+.uniui-chatbubble-filled:before {
+  content: "\e694";
+}
+
+.uniui-contact-filled:before {
+  content: "\e695";
+}
+
+.uniui-chatboxes:before {
+  content: "\e696";
+}
+
+.uniui-chatbubble:before {
+  content: "\e697";
+}
+
+.uniui-upload-filled:before {
+  content: "\e68e";
+}
+
+.uniui-upload:before {
+  content: "\e690";
+}
+
+.uniui-weixin:before {
+  content: "\e691";
+}
+
+.uniui-compose:before {
+  content: "\e67f";
+}
+
+.uniui-qq:before {
+  content: "\e680";
+}
+
+.uniui-download-filled:before {
+  content: "\e681";
+}
+
+.uniui-pyq:before {
+  content: "\e682";
+}
+
+.uniui-sound:before {
+  content: "\e684";
+}
+
+.uniui-trash-filled:before {
+  content: "\e685";
+}
+
+.uniui-sound-filled:before {
+  content: "\e686";
+}
+
+.uniui-trash:before {
+  content: "\e687";
+}
+
+.uniui-videocam-filled:before {
+  content: "\e689";
+}
+
+.uniui-spinner-cycle:before {
+  content: "\e68a";
+}
+
+.uniui-weibo:before {
+  content: "\e68b";
+}
+
+.uniui-videocam:before {
+  content: "\e68c";
+}
+
+.uniui-download:before {
+  content: "\e68d";
+}
+
+.uniui-help:before {
+  content: "\e679";
+}
+
+.uniui-navigate-filled:before {
+  content: "\e67a";
+}
+
+.uniui-plusempty:before {
+  content: "\e67b";
+}
+
+.uniui-smallcircle:before {
+  content: "\e67c";
+}
+
+.uniui-minus-filled:before {
+  content: "\e67d";
+}
+
+.uniui-micoff:before {
+  content: "\e67e";
+}
+
+.uniui-closeempty:before {
+  content: "\e66c";
+}
+
+.uniui-clear:before {
+  content: "\e66d";
+}
+
+.uniui-navigate:before {
+  content: "\e66e";
+}
+
+.uniui-minus:before {
+  content: "\e66f";
+}
+
+.uniui-image:before {
+  content: "\e670";
+}
+
+.uniui-mic:before {
+  content: "\e671";
+}
+
+.uniui-paperplane:before {
+  content: "\e672";
+}
+
+.uniui-close:before {
+  content: "\e673";
+}
+
+.uniui-help-filled:before {
+  content: "\e674";
+}
+
+.uniui-paperplane-filled:before {
+  content: "\e675";
+}
+
+.uniui-plus:before {
+  content: "\e676";
+}
+
+.uniui-mic-filled:before {
+  content: "\e677";
+}
+
+.uniui-image-filled:before {
+  content: "\e678";
+}
+
+.uniui-locked-filled:before {
+  content: "\e668";
+}
+
+.uniui-info:before {
+  content: "\e669";
+}
+
+.uniui-locked:before {
+  content: "\e66b";
+}
+
+.uniui-camera-filled:before {
+  content: "\e658";
+}
+
+.uniui-chat-filled:before {
+  content: "\e659";
+}
+
+.uniui-camera:before {
+  content: "\e65a";
+}
+
+.uniui-circle:before {
+  content: "\e65b";
+}
+
+.uniui-checkmarkempty:before {
+  content: "\e65c";
+}
+
+.uniui-chat:before {
+  content: "\e65d";
+}
+
+.uniui-circle-filled:before {
+  content: "\e65e";
+}
+
+.uniui-flag:before {
+  content: "\e65f";
+}
+
+.uniui-flag-filled:before {
+  content: "\e660";
+}
+
+.uniui-gear-filled:before {
+  content: "\e661";
+}
+
+.uniui-home:before {
+  content: "\e662";
+}
+
+.uniui-home-filled:before {
+  content: "\e663";
+}
+
+.uniui-gear:before {
+  content: "\e664";
+}
+
+.uniui-smallcircle-filled:before {
+  content: "\e665";
+}
+
+.uniui-map-filled:before {
+  content: "\e666";
+}
+
+.uniui-map:before {
+  content: "\e667";
+}
+
+.uniui-refresh-filled:before {
+  content: "\e656";
+}
+
+.uniui-refresh:before {
+  content: "\e657";
+}
+
+.uniui-cloud-upload:before {
+  content: "\e645";
+}
+
+.uniui-cloud-download-filled:before {
+  content: "\e646";
+}
+
+.uniui-cloud-download:before {
+  content: "\e647";
+}
+
+.uniui-cloud-upload-filled:before {
+  content: "\e648";
+}
+
+.uniui-redo:before {
+  content: "\e64a";
+}
+
+.uniui-images-filled:before {
+  content: "\e64b";
+}
+
+.uniui-undo-filled:before {
+  content: "\e64c";
+}
+
+.uniui-more:before {
+  content: "\e64d";
+}
+
+.uniui-more-filled:before {
+  content: "\e64e";
+}
+
+.uniui-undo:before {
+  content: "\e64f";
+}
+
+.uniui-images:before {
+  content: "\e650";
+}
+
+.uniui-paperclip:before {
+  content: "\e652";
+}
+
+.uniui-settings:before {
+  content: "\e653";
+}
+
+.uniui-search:before {
+  content: "\e654";
+}
+
+.uniui-redo-filled:before {
+  content: "\e655";
+}
+
+.uniui-list:before {
+  content: "\e644";
+}
+
+.uniui-mail-open-filled:before {
+  content: "\e63a";
+}
+
+.uniui-hand-down-filled:before {
+  content: "\e63c";
+}
+
+.uniui-hand-down:before {
+  content: "\e63d";
+}
+
+.uniui-hand-up-filled:before {
+  content: "\e63e";
+}
+
+.uniui-hand-up:before {
+  content: "\e63f";
+}
+
+.uniui-heart-filled:before {
+  content: "\e641";
+}
+
+.uniui-mail-open:before {
+  content: "\e643";
+}
+
+.uniui-heart:before {
+  content: "\e639";
+}
+
+.uniui-loop:before {
+  content: "\e633";
+}
+
+.uniui-pulldown:before {
+  content: "\e632";
+}
+
+.uniui-scan:before {
+  content: "\e62a";
+}
+
+.uniui-bars:before {
+  content: "\e627";
+}
+
+.uniui-checkbox:before {
+  content: "\e62b";
+}
+
+.uniui-checkbox-filled:before {
+  content: "\e62c";
+}
+
+.uniui-shop:before {
+  content: "\e62f";
+}
+
+.uniui-headphones:before {
+  content: "\e630";
+}
+
+.uniui-cart:before {
+  content: "\e631";
+}

二进制
jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons.ttf


+ 664 - 0
jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts

@@ -0,0 +1,664 @@
+
+export type IconsData = {
+	id : string
+	name : string
+	font_family : string
+	css_prefix_text : string
+	description : string
+	glyphs : Array<IconsDataItem>
+}
+
+export type IconsDataItem = {
+	font_class : string
+	unicode : string
+}
+
+
+export const fontData = [
+  {
+    "font_class": "arrow-down",
+    "unicode": "\ue6be"
+  },
+  {
+    "font_class": "arrow-left",
+    "unicode": "\ue6bc"
+  },
+  {
+    "font_class": "arrow-right",
+    "unicode": "\ue6bb"
+  },
+  {
+    "font_class": "arrow-up",
+    "unicode": "\ue6bd"
+  },
+  {
+    "font_class": "auth",
+    "unicode": "\ue6ab"
+  },
+  {
+    "font_class": "auth-filled",
+    "unicode": "\ue6cc"
+  },
+  {
+    "font_class": "back",
+    "unicode": "\ue6b9"
+  },
+  {
+    "font_class": "bars",
+    "unicode": "\ue627"
+  },
+  {
+    "font_class": "calendar",
+    "unicode": "\ue6a0"
+  },
+  {
+    "font_class": "calendar-filled",
+    "unicode": "\ue6c0"
+  },
+  {
+    "font_class": "camera",
+    "unicode": "\ue65a"
+  },
+  {
+    "font_class": "camera-filled",
+    "unicode": "\ue658"
+  },
+  {
+    "font_class": "cart",
+    "unicode": "\ue631"
+  },
+  {
+    "font_class": "cart-filled",
+    "unicode": "\ue6d0"
+  },
+  {
+    "font_class": "chat",
+    "unicode": "\ue65d"
+  },
+  {
+    "font_class": "chat-filled",
+    "unicode": "\ue659"
+  },
+  {
+    "font_class": "chatboxes",
+    "unicode": "\ue696"
+  },
+  {
+    "font_class": "chatboxes-filled",
+    "unicode": "\ue692"
+  },
+  {
+    "font_class": "chatbubble",
+    "unicode": "\ue697"
+  },
+  {
+    "font_class": "chatbubble-filled",
+    "unicode": "\ue694"
+  },
+  {
+    "font_class": "checkbox",
+    "unicode": "\ue62b"
+  },
+  {
+    "font_class": "checkbox-filled",
+    "unicode": "\ue62c"
+  },
+  {
+    "font_class": "checkmarkempty",
+    "unicode": "\ue65c"
+  },
+  {
+    "font_class": "circle",
+    "unicode": "\ue65b"
+  },
+  {
+    "font_class": "circle-filled",
+    "unicode": "\ue65e"
+  },
+  {
+    "font_class": "clear",
+    "unicode": "\ue66d"
+  },
+  {
+    "font_class": "close",
+    "unicode": "\ue673"
+  },
+  {
+    "font_class": "closeempty",
+    "unicode": "\ue66c"
+  },
+  {
+    "font_class": "cloud-download",
+    "unicode": "\ue647"
+  },
+  {
+    "font_class": "cloud-download-filled",
+    "unicode": "\ue646"
+  },
+  {
+    "font_class": "cloud-upload",
+    "unicode": "\ue645"
+  },
+  {
+    "font_class": "cloud-upload-filled",
+    "unicode": "\ue648"
+  },
+  {
+    "font_class": "color",
+    "unicode": "\ue6cf"
+  },
+  {
+    "font_class": "color-filled",
+    "unicode": "\ue6c9"
+  },
+  {
+    "font_class": "compose",
+    "unicode": "\ue67f"
+  },
+  {
+    "font_class": "contact",
+    "unicode": "\ue693"
+  },
+  {
+    "font_class": "contact-filled",
+    "unicode": "\ue695"
+  },
+  {
+    "font_class": "down",
+    "unicode": "\ue6b8"
+  },
+	{
+	  "font_class": "bottom",
+	  "unicode": "\ue6b8"
+	},
+  {
+    "font_class": "download",
+    "unicode": "\ue68d"
+  },
+  {
+    "font_class": "download-filled",
+    "unicode": "\ue681"
+  },
+  {
+    "font_class": "email",
+    "unicode": "\ue69e"
+  },
+  {
+    "font_class": "email-filled",
+    "unicode": "\ue69a"
+  },
+  {
+    "font_class": "eye",
+    "unicode": "\ue651"
+  },
+  {
+    "font_class": "eye-filled",
+    "unicode": "\ue66a"
+  },
+  {
+    "font_class": "eye-slash",
+    "unicode": "\ue6b3"
+  },
+  {
+    "font_class": "eye-slash-filled",
+    "unicode": "\ue6b4"
+  },
+  {
+    "font_class": "fire",
+    "unicode": "\ue6a1"
+  },
+  {
+    "font_class": "fire-filled",
+    "unicode": "\ue6c5"
+  },
+  {
+    "font_class": "flag",
+    "unicode": "\ue65f"
+  },
+  {
+    "font_class": "flag-filled",
+    "unicode": "\ue660"
+  },
+  {
+    "font_class": "folder-add",
+    "unicode": "\ue6a9"
+  },
+  {
+    "font_class": "folder-add-filled",
+    "unicode": "\ue6c8"
+  },
+  {
+    "font_class": "font",
+    "unicode": "\ue6a3"
+  },
+  {
+    "font_class": "forward",
+    "unicode": "\ue6ba"
+  },
+  {
+    "font_class": "gear",
+    "unicode": "\ue664"
+  },
+  {
+    "font_class": "gear-filled",
+    "unicode": "\ue661"
+  },
+  {
+    "font_class": "gift",
+    "unicode": "\ue6a4"
+  },
+  {
+    "font_class": "gift-filled",
+    "unicode": "\ue6c4"
+  },
+  {
+    "font_class": "hand-down",
+    "unicode": "\ue63d"
+  },
+  {
+    "font_class": "hand-down-filled",
+    "unicode": "\ue63c"
+  },
+  {
+    "font_class": "hand-up",
+    "unicode": "\ue63f"
+  },
+  {
+    "font_class": "hand-up-filled",
+    "unicode": "\ue63e"
+  },
+  {
+    "font_class": "headphones",
+    "unicode": "\ue630"
+  },
+  {
+    "font_class": "heart",
+    "unicode": "\ue639"
+  },
+  {
+    "font_class": "heart-filled",
+    "unicode": "\ue641"
+  },
+  {
+    "font_class": "help",
+    "unicode": "\ue679"
+  },
+  {
+    "font_class": "help-filled",
+    "unicode": "\ue674"
+  },
+  {
+    "font_class": "home",
+    "unicode": "\ue662"
+  },
+  {
+    "font_class": "home-filled",
+    "unicode": "\ue663"
+  },
+  {
+    "font_class": "image",
+    "unicode": "\ue670"
+  },
+  {
+    "font_class": "image-filled",
+    "unicode": "\ue678"
+  },
+  {
+    "font_class": "images",
+    "unicode": "\ue650"
+  },
+  {
+    "font_class": "images-filled",
+    "unicode": "\ue64b"
+  },
+  {
+    "font_class": "info",
+    "unicode": "\ue669"
+  },
+  {
+    "font_class": "info-filled",
+    "unicode": "\ue649"
+  },
+  {
+    "font_class": "left",
+    "unicode": "\ue6b7"
+  },
+  {
+    "font_class": "link",
+    "unicode": "\ue6a5"
+  },
+  {
+    "font_class": "list",
+    "unicode": "\ue644"
+  },
+  {
+    "font_class": "location",
+    "unicode": "\ue6ae"
+  },
+  {
+    "font_class": "location-filled",
+    "unicode": "\ue6af"
+  },
+  {
+    "font_class": "locked",
+    "unicode": "\ue66b"
+  },
+  {
+    "font_class": "locked-filled",
+    "unicode": "\ue668"
+  },
+  {
+    "font_class": "loop",
+    "unicode": "\ue633"
+  },
+  {
+    "font_class": "mail-open",
+    "unicode": "\ue643"
+  },
+  {
+    "font_class": "mail-open-filled",
+    "unicode": "\ue63a"
+  },
+  {
+    "font_class": "map",
+    "unicode": "\ue667"
+  },
+  {
+    "font_class": "map-filled",
+    "unicode": "\ue666"
+  },
+  {
+    "font_class": "map-pin",
+    "unicode": "\ue6ad"
+  },
+  {
+    "font_class": "map-pin-ellipse",
+    "unicode": "\ue6ac"
+  },
+  {
+    "font_class": "medal",
+    "unicode": "\ue6a2"
+  },
+  {
+    "font_class": "medal-filled",
+    "unicode": "\ue6c3"
+  },
+  {
+    "font_class": "mic",
+    "unicode": "\ue671"
+  },
+  {
+    "font_class": "mic-filled",
+    "unicode": "\ue677"
+  },
+  {
+    "font_class": "micoff",
+    "unicode": "\ue67e"
+  },
+  {
+    "font_class": "micoff-filled",
+    "unicode": "\ue6b0"
+  },
+  {
+    "font_class": "minus",
+    "unicode": "\ue66f"
+  },
+  {
+    "font_class": "minus-filled",
+    "unicode": "\ue67d"
+  },
+  {
+    "font_class": "more",
+    "unicode": "\ue64d"
+  },
+  {
+    "font_class": "more-filled",
+    "unicode": "\ue64e"
+  },
+  {
+    "font_class": "navigate",
+    "unicode": "\ue66e"
+  },
+  {
+    "font_class": "navigate-filled",
+    "unicode": "\ue67a"
+  },
+  {
+    "font_class": "notification",
+    "unicode": "\ue6a6"
+  },
+  {
+    "font_class": "notification-filled",
+    "unicode": "\ue6c1"
+  },
+  {
+    "font_class": "paperclip",
+    "unicode": "\ue652"
+  },
+  {
+    "font_class": "paperplane",
+    "unicode": "\ue672"
+  },
+  {
+    "font_class": "paperplane-filled",
+    "unicode": "\ue675"
+  },
+  {
+    "font_class": "person",
+    "unicode": "\ue699"
+  },
+  {
+    "font_class": "person-filled",
+    "unicode": "\ue69d"
+  },
+  {
+    "font_class": "personadd",
+    "unicode": "\ue69f"
+  },
+  {
+    "font_class": "personadd-filled",
+    "unicode": "\ue698"
+  },
+  {
+    "font_class": "personadd-filled-copy",
+    "unicode": "\ue6d1"
+  },
+  {
+    "font_class": "phone",
+    "unicode": "\ue69c"
+  },
+  {
+    "font_class": "phone-filled",
+    "unicode": "\ue69b"
+  },
+  {
+    "font_class": "plus",
+    "unicode": "\ue676"
+  },
+  {
+    "font_class": "plus-filled",
+    "unicode": "\ue6c7"
+  },
+  {
+    "font_class": "plusempty",
+    "unicode": "\ue67b"
+  },
+  {
+    "font_class": "pulldown",
+    "unicode": "\ue632"
+  },
+  {
+    "font_class": "pyq",
+    "unicode": "\ue682"
+  },
+  {
+    "font_class": "qq",
+    "unicode": "\ue680"
+  },
+  {
+    "font_class": "redo",
+    "unicode": "\ue64a"
+  },
+  {
+    "font_class": "redo-filled",
+    "unicode": "\ue655"
+  },
+  {
+    "font_class": "refresh",
+    "unicode": "\ue657"
+  },
+  {
+    "font_class": "refresh-filled",
+    "unicode": "\ue656"
+  },
+  {
+    "font_class": "refreshempty",
+    "unicode": "\ue6bf"
+  },
+  {
+    "font_class": "reload",
+    "unicode": "\ue6b2"
+  },
+  {
+    "font_class": "right",
+    "unicode": "\ue6b5"
+  },
+  {
+    "font_class": "scan",
+    "unicode": "\ue62a"
+  },
+  {
+    "font_class": "search",
+    "unicode": "\ue654"
+  },
+  {
+    "font_class": "settings",
+    "unicode": "\ue653"
+  },
+  {
+    "font_class": "settings-filled",
+    "unicode": "\ue6ce"
+  },
+  {
+    "font_class": "shop",
+    "unicode": "\ue62f"
+  },
+  {
+    "font_class": "shop-filled",
+    "unicode": "\ue6cd"
+  },
+  {
+    "font_class": "smallcircle",
+    "unicode": "\ue67c"
+  },
+  {
+    "font_class": "smallcircle-filled",
+    "unicode": "\ue665"
+  },
+  {
+    "font_class": "sound",
+    "unicode": "\ue684"
+  },
+  {
+    "font_class": "sound-filled",
+    "unicode": "\ue686"
+  },
+  {
+    "font_class": "spinner-cycle",
+    "unicode": "\ue68a"
+  },
+  {
+    "font_class": "staff",
+    "unicode": "\ue6a7"
+  },
+  {
+    "font_class": "staff-filled",
+    "unicode": "\ue6cb"
+  },
+  {
+    "font_class": "star",
+    "unicode": "\ue688"
+  },
+  {
+    "font_class": "star-filled",
+    "unicode": "\ue68f"
+  },
+  {
+    "font_class": "starhalf",
+    "unicode": "\ue683"
+  },
+  {
+    "font_class": "trash",
+    "unicode": "\ue687"
+  },
+  {
+    "font_class": "trash-filled",
+    "unicode": "\ue685"
+  },
+  {
+    "font_class": "tune",
+    "unicode": "\ue6aa"
+  },
+  {
+    "font_class": "tune-filled",
+    "unicode": "\ue6ca"
+  },
+  {
+    "font_class": "undo",
+    "unicode": "\ue64f"
+  },
+  {
+    "font_class": "undo-filled",
+    "unicode": "\ue64c"
+  },
+  {
+    "font_class": "up",
+    "unicode": "\ue6b6"
+  },
+	{
+	  "font_class": "top",
+	  "unicode": "\ue6b6"
+	},
+  {
+    "font_class": "upload",
+    "unicode": "\ue690"
+  },
+  {
+    "font_class": "upload-filled",
+    "unicode": "\ue68e"
+  },
+  {
+    "font_class": "videocam",
+    "unicode": "\ue68c"
+  },
+  {
+    "font_class": "videocam-filled",
+    "unicode": "\ue689"
+  },
+  {
+    "font_class": "vip",
+    "unicode": "\ue6a8"
+  },
+  {
+    "font_class": "vip-filled",
+    "unicode": "\ue6c6"
+  },
+  {
+    "font_class": "wallet",
+    "unicode": "\ue6b1"
+  },
+  {
+    "font_class": "wallet-filled",
+    "unicode": "\ue6c2"
+  },
+  {
+    "font_class": "weibo",
+    "unicode": "\ue68b"
+  },
+  {
+    "font_class": "weixin",
+    "unicode": "\ue691"
+  }
+] as IconsDataItem[]
+
+// export const fontData = JSON.parse<IconsDataItem>(fontDataJson)

+ 649 - 0
jd_logistics-app/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js

@@ -0,0 +1,649 @@
+
+export const fontData = [
+  {
+    "font_class": "arrow-down",
+    "unicode": "\ue6be"
+  },
+  {
+    "font_class": "arrow-left",
+    "unicode": "\ue6bc"
+  },
+  {
+    "font_class": "arrow-right",
+    "unicode": "\ue6bb"
+  },
+  {
+    "font_class": "arrow-up",
+    "unicode": "\ue6bd"
+  },
+  {
+    "font_class": "auth",
+    "unicode": "\ue6ab"
+  },
+  {
+    "font_class": "auth-filled",
+    "unicode": "\ue6cc"
+  },
+  {
+    "font_class": "back",
+    "unicode": "\ue6b9"
+  },
+  {
+    "font_class": "bars",
+    "unicode": "\ue627"
+  },
+  {
+    "font_class": "calendar",
+    "unicode": "\ue6a0"
+  },
+  {
+    "font_class": "calendar-filled",
+    "unicode": "\ue6c0"
+  },
+  {
+    "font_class": "camera",
+    "unicode": "\ue65a"
+  },
+  {
+    "font_class": "camera-filled",
+    "unicode": "\ue658"
+  },
+  {
+    "font_class": "cart",
+    "unicode": "\ue631"
+  },
+  {
+    "font_class": "cart-filled",
+    "unicode": "\ue6d0"
+  },
+  {
+    "font_class": "chat",
+    "unicode": "\ue65d"
+  },
+  {
+    "font_class": "chat-filled",
+    "unicode": "\ue659"
+  },
+  {
+    "font_class": "chatboxes",
+    "unicode": "\ue696"
+  },
+  {
+    "font_class": "chatboxes-filled",
+    "unicode": "\ue692"
+  },
+  {
+    "font_class": "chatbubble",
+    "unicode": "\ue697"
+  },
+  {
+    "font_class": "chatbubble-filled",
+    "unicode": "\ue694"
+  },
+  {
+    "font_class": "checkbox",
+    "unicode": "\ue62b"
+  },
+  {
+    "font_class": "checkbox-filled",
+    "unicode": "\ue62c"
+  },
+  {
+    "font_class": "checkmarkempty",
+    "unicode": "\ue65c"
+  },
+  {
+    "font_class": "circle",
+    "unicode": "\ue65b"
+  },
+  {
+    "font_class": "circle-filled",
+    "unicode": "\ue65e"
+  },
+  {
+    "font_class": "clear",
+    "unicode": "\ue66d"
+  },
+  {
+    "font_class": "close",
+    "unicode": "\ue673"
+  },
+  {
+    "font_class": "closeempty",
+    "unicode": "\ue66c"
+  },
+  {
+    "font_class": "cloud-download",
+    "unicode": "\ue647"
+  },
+  {
+    "font_class": "cloud-download-filled",
+    "unicode": "\ue646"
+  },
+  {
+    "font_class": "cloud-upload",
+    "unicode": "\ue645"
+  },
+  {
+    "font_class": "cloud-upload-filled",
+    "unicode": "\ue648"
+  },
+  {
+    "font_class": "color",
+    "unicode": "\ue6cf"
+  },
+  {
+    "font_class": "color-filled",
+    "unicode": "\ue6c9"
+  },
+  {
+    "font_class": "compose",
+    "unicode": "\ue67f"
+  },
+  {
+    "font_class": "contact",
+    "unicode": "\ue693"
+  },
+  {
+    "font_class": "contact-filled",
+    "unicode": "\ue695"
+  },
+  {
+    "font_class": "down",
+    "unicode": "\ue6b8"
+  },
+	{
+	  "font_class": "bottom",
+	  "unicode": "\ue6b8"
+	},
+  {
+    "font_class": "download",
+    "unicode": "\ue68d"
+  },
+  {
+    "font_class": "download-filled",
+    "unicode": "\ue681"
+  },
+  {
+    "font_class": "email",
+    "unicode": "\ue69e"
+  },
+  {
+    "font_class": "email-filled",
+    "unicode": "\ue69a"
+  },
+  {
+    "font_class": "eye",
+    "unicode": "\ue651"
+  },
+  {
+    "font_class": "eye-filled",
+    "unicode": "\ue66a"
+  },
+  {
+    "font_class": "eye-slash",
+    "unicode": "\ue6b3"
+  },
+  {
+    "font_class": "eye-slash-filled",
+    "unicode": "\ue6b4"
+  },
+  {
+    "font_class": "fire",
+    "unicode": "\ue6a1"
+  },
+  {
+    "font_class": "fire-filled",
+    "unicode": "\ue6c5"
+  },
+  {
+    "font_class": "flag",
+    "unicode": "\ue65f"
+  },
+  {
+    "font_class": "flag-filled",
+    "unicode": "\ue660"
+  },
+  {
+    "font_class": "folder-add",
+    "unicode": "\ue6a9"
+  },
+  {
+    "font_class": "folder-add-filled",
+    "unicode": "\ue6c8"
+  },
+  {
+    "font_class": "font",
+    "unicode": "\ue6a3"
+  },
+  {
+    "font_class": "forward",
+    "unicode": "\ue6ba"
+  },
+  {
+    "font_class": "gear",
+    "unicode": "\ue664"
+  },
+  {
+    "font_class": "gear-filled",
+    "unicode": "\ue661"
+  },
+  {
+    "font_class": "gift",
+    "unicode": "\ue6a4"
+  },
+  {
+    "font_class": "gift-filled",
+    "unicode": "\ue6c4"
+  },
+  {
+    "font_class": "hand-down",
+    "unicode": "\ue63d"
+  },
+  {
+    "font_class": "hand-down-filled",
+    "unicode": "\ue63c"
+  },
+  {
+    "font_class": "hand-up",
+    "unicode": "\ue63f"
+  },
+  {
+    "font_class": "hand-up-filled",
+    "unicode": "\ue63e"
+  },
+  {
+    "font_class": "headphones",
+    "unicode": "\ue630"
+  },
+  {
+    "font_class": "heart",
+    "unicode": "\ue639"
+  },
+  {
+    "font_class": "heart-filled",
+    "unicode": "\ue641"
+  },
+  {
+    "font_class": "help",
+    "unicode": "\ue679"
+  },
+  {
+    "font_class": "help-filled",
+    "unicode": "\ue674"
+  },
+  {
+    "font_class": "home",
+    "unicode": "\ue662"
+  },
+  {
+    "font_class": "home-filled",
+    "unicode": "\ue663"
+  },
+  {
+    "font_class": "image",
+    "unicode": "\ue670"
+  },
+  {
+    "font_class": "image-filled",
+    "unicode": "\ue678"
+  },
+  {
+    "font_class": "images",
+    "unicode": "\ue650"
+  },
+  {
+    "font_class": "images-filled",
+    "unicode": "\ue64b"
+  },
+  {
+    "font_class": "info",
+    "unicode": "\ue669"
+  },
+  {
+    "font_class": "info-filled",
+    "unicode": "\ue649"
+  },
+  {
+    "font_class": "left",
+    "unicode": "\ue6b7"
+  },
+  {
+    "font_class": "link",
+    "unicode": "\ue6a5"
+  },
+  {
+    "font_class": "list",
+    "unicode": "\ue644"
+  },
+  {
+    "font_class": "location",
+    "unicode": "\ue6ae"
+  },
+  {
+    "font_class": "location-filled",
+    "unicode": "\ue6af"
+  },
+  {
+    "font_class": "locked",
+    "unicode": "\ue66b"
+  },
+  {
+    "font_class": "locked-filled",
+    "unicode": "\ue668"
+  },
+  {
+    "font_class": "loop",
+    "unicode": "\ue633"
+  },
+  {
+    "font_class": "mail-open",
+    "unicode": "\ue643"
+  },
+  {
+    "font_class": "mail-open-filled",
+    "unicode": "\ue63a"
+  },
+  {
+    "font_class": "map",
+    "unicode": "\ue667"
+  },
+  {
+    "font_class": "map-filled",
+    "unicode": "\ue666"
+  },
+  {
+    "font_class": "map-pin",
+    "unicode": "\ue6ad"
+  },
+  {
+    "font_class": "map-pin-ellipse",
+    "unicode": "\ue6ac"
+  },
+  {
+    "font_class": "medal",
+    "unicode": "\ue6a2"
+  },
+  {
+    "font_class": "medal-filled",
+    "unicode": "\ue6c3"
+  },
+  {
+    "font_class": "mic",
+    "unicode": "\ue671"
+  },
+  {
+    "font_class": "mic-filled",
+    "unicode": "\ue677"
+  },
+  {
+    "font_class": "micoff",
+    "unicode": "\ue67e"
+  },
+  {
+    "font_class": "micoff-filled",
+    "unicode": "\ue6b0"
+  },
+  {
+    "font_class": "minus",
+    "unicode": "\ue66f"
+  },
+  {
+    "font_class": "minus-filled",
+    "unicode": "\ue67d"
+  },
+  {
+    "font_class": "more",
+    "unicode": "\ue64d"
+  },
+  {
+    "font_class": "more-filled",
+    "unicode": "\ue64e"
+  },
+  {
+    "font_class": "navigate",
+    "unicode": "\ue66e"
+  },
+  {
+    "font_class": "navigate-filled",
+    "unicode": "\ue67a"
+  },
+  {
+    "font_class": "notification",
+    "unicode": "\ue6a6"
+  },
+  {
+    "font_class": "notification-filled",
+    "unicode": "\ue6c1"
+  },
+  {
+    "font_class": "paperclip",
+    "unicode": "\ue652"
+  },
+  {
+    "font_class": "paperplane",
+    "unicode": "\ue672"
+  },
+  {
+    "font_class": "paperplane-filled",
+    "unicode": "\ue675"
+  },
+  {
+    "font_class": "person",
+    "unicode": "\ue699"
+  },
+  {
+    "font_class": "person-filled",
+    "unicode": "\ue69d"
+  },
+  {
+    "font_class": "personadd",
+    "unicode": "\ue69f"
+  },
+  {
+    "font_class": "personadd-filled",
+    "unicode": "\ue698"
+  },
+  {
+    "font_class": "personadd-filled-copy",
+    "unicode": "\ue6d1"
+  },
+  {
+    "font_class": "phone",
+    "unicode": "\ue69c"
+  },
+  {
+    "font_class": "phone-filled",
+    "unicode": "\ue69b"
+  },
+  {
+    "font_class": "plus",
+    "unicode": "\ue676"
+  },
+  {
+    "font_class": "plus-filled",
+    "unicode": "\ue6c7"
+  },
+  {
+    "font_class": "plusempty",
+    "unicode": "\ue67b"
+  },
+  {
+    "font_class": "pulldown",
+    "unicode": "\ue632"
+  },
+  {
+    "font_class": "pyq",
+    "unicode": "\ue682"
+  },
+  {
+    "font_class": "qq",
+    "unicode": "\ue680"
+  },
+  {
+    "font_class": "redo",
+    "unicode": "\ue64a"
+  },
+  {
+    "font_class": "redo-filled",
+    "unicode": "\ue655"
+  },
+  {
+    "font_class": "refresh",
+    "unicode": "\ue657"
+  },
+  {
+    "font_class": "refresh-filled",
+    "unicode": "\ue656"
+  },
+  {
+    "font_class": "refreshempty",
+    "unicode": "\ue6bf"
+  },
+  {
+    "font_class": "reload",
+    "unicode": "\ue6b2"
+  },
+  {
+    "font_class": "right",
+    "unicode": "\ue6b5"
+  },
+  {
+    "font_class": "scan",
+    "unicode": "\ue62a"
+  },
+  {
+    "font_class": "search",
+    "unicode": "\ue654"
+  },
+  {
+    "font_class": "settings",
+    "unicode": "\ue653"
+  },
+  {
+    "font_class": "settings-filled",
+    "unicode": "\ue6ce"
+  },
+  {
+    "font_class": "shop",
+    "unicode": "\ue62f"
+  },
+  {
+    "font_class": "shop-filled",
+    "unicode": "\ue6cd"
+  },
+  {
+    "font_class": "smallcircle",
+    "unicode": "\ue67c"
+  },
+  {
+    "font_class": "smallcircle-filled",
+    "unicode": "\ue665"
+  },
+  {
+    "font_class": "sound",
+    "unicode": "\ue684"
+  },
+  {
+    "font_class": "sound-filled",
+    "unicode": "\ue686"
+  },
+  {
+    "font_class": "spinner-cycle",
+    "unicode": "\ue68a"
+  },
+  {
+    "font_class": "staff",
+    "unicode": "\ue6a7"
+  },
+  {
+    "font_class": "staff-filled",
+    "unicode": "\ue6cb"
+  },
+  {
+    "font_class": "star",
+    "unicode": "\ue688"
+  },
+  {
+    "font_class": "star-filled",
+    "unicode": "\ue68f"
+  },
+  {
+    "font_class": "starhalf",
+    "unicode": "\ue683"
+  },
+  {
+    "font_class": "trash",
+    "unicode": "\ue687"
+  },
+  {
+    "font_class": "trash-filled",
+    "unicode": "\ue685"
+  },
+  {
+    "font_class": "tune",
+    "unicode": "\ue6aa"
+  },
+  {
+    "font_class": "tune-filled",
+    "unicode": "\ue6ca"
+  },
+  {
+    "font_class": "undo",
+    "unicode": "\ue64f"
+  },
+  {
+    "font_class": "undo-filled",
+    "unicode": "\ue64c"
+  },
+  {
+    "font_class": "up",
+    "unicode": "\ue6b6"
+  },
+	{
+	  "font_class": "top",
+	  "unicode": "\ue6b6"
+	},
+  {
+    "font_class": "upload",
+    "unicode": "\ue690"
+  },
+  {
+    "font_class": "upload-filled",
+    "unicode": "\ue68e"
+  },
+  {
+    "font_class": "videocam",
+    "unicode": "\ue68c"
+  },
+  {
+    "font_class": "videocam-filled",
+    "unicode": "\ue689"
+  },
+  {
+    "font_class": "vip",
+    "unicode": "\ue6a8"
+  },
+  {
+    "font_class": "vip-filled",
+    "unicode": "\ue6c6"
+  },
+  {
+    "font_class": "wallet",
+    "unicode": "\ue6b1"
+  },
+  {
+    "font_class": "wallet-filled",
+    "unicode": "\ue6c2"
+  },
+  {
+    "font_class": "weibo",
+    "unicode": "\ue68b"
+  },
+  {
+    "font_class": "weixin",
+    "unicode": "\ue691"
+  }
+]
+
+// export const fontData = JSON.parse<IconsDataItem>(fontDataJson)

+ 89 - 0
jd_logistics-app/uni_modules/uni-icons/package.json

@@ -0,0 +1,89 @@
+{
+  "id": "uni-icons",
+  "displayName": "uni-icons 图标",
+  "version": "2.0.10",
+  "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "icon",
+    "图标"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.2.14"
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y",
+        "alipay": "n"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y",
+          "app-uvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y",
+					"钉钉": "y",
+					"快手": "y",
+					"飞书": "y",
+					"京东": "y"
+        },
+        "快应用": {
+          "华为": "y",
+          "联盟": "y"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 8 - 0
jd_logistics-app/uni_modules/uni-icons/readme.md

@@ -0,0 +1,8 @@
+## Icons 图标
+> **组件名:uni-icons**
+> 代码块: `uIcons`
+
+用于展示 icons 图标 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 8 - 0
jd_logistics-app/uni_modules/uni-scss/changelog.md

@@ -0,0 +1,8 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
+## 1.0.2(2021-11-22)
+- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
+## 1.0.1(2021-11-22)
+- 修复 vue3中scss语法兼容问题
+## 1.0.0(2021-11-18)
+- init

+ 1 - 0
jd_logistics-app/uni_modules/uni-scss/index.scss

@@ -0,0 +1 @@
+@import './styles/index.scss';

+ 82 - 0
jd_logistics-app/uni_modules/uni-scss/package.json

@@ -0,0 +1,82 @@
+{
+  "id": "uni-scss",
+  "displayName": "uni-scss 辅助样式",
+  "version": "1.0.3",
+  "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
+  "keywords": [
+    "uni-scss",
+    "uni-ui",
+    "辅助样式"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "category": [
+        "JS SDK",
+        "通用 SDK"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "n",
+          "联盟": "n"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 4 - 0
jd_logistics-app/uni_modules/uni-scss/readme.md

@@ -0,0 +1,4 @@
+`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 7 - 0
jd_logistics-app/uni_modules/uni-scss/styles/index.scss

@@ -0,0 +1,7 @@
+@import './setting/_variables.scss';
+@import './setting/_border.scss';
+@import './setting/_color.scss';
+@import './setting/_space.scss';
+@import './setting/_radius.scss';
+@import './setting/_text.scss';
+@import './setting/_styles.scss';

+ 3 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_border.scss

@@ -0,0 +1,3 @@
+.uni-border {
+	border: 1px $uni-border-1 solid;
+}

+ 66 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_color.scss

@@ -0,0 +1,66 @@
+
+// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐
+// @mixin get-styles($k,$c) {
+// 	@if $k == size or $k == weight{
+// 		font-#{$k}:#{$c}
+// 	}@else{
+// 		#{$k}:#{$c}
+// 	}
+// }
+$uni-ui-color:(
+	// 主色
+	primary: $uni-primary,
+	primary-disable: $uni-primary-disable,
+	primary-light: $uni-primary-light,
+	// 辅助色
+	success: $uni-success,
+	success-disable: $uni-success-disable,
+	success-light: $uni-success-light,
+	warning: $uni-warning,
+	warning-disable: $uni-warning-disable,
+	warning-light: $uni-warning-light,
+	error: $uni-error,
+	error-disable: $uni-error-disable,
+	error-light: $uni-error-light,
+	info: $uni-info,
+	info-disable: $uni-info-disable,
+	info-light: $uni-info-light,
+	// 中性色
+	main-color: $uni-main-color,
+	base-color: $uni-base-color,
+	secondary-color: $uni-secondary-color,
+	extra-color: $uni-extra-color,
+	// 背景色
+	bg-color: $uni-bg-color,
+	// 边框颜色
+	border-1: $uni-border-1,
+	border-2: $uni-border-2,
+	border-3: $uni-border-3,
+	border-4: $uni-border-4,
+	// 黑色
+	black:$uni-black,
+	// 白色
+	white:$uni-white,
+	// 透明
+	transparent:$uni-transparent
+) !default;
+@each $key, $child in $uni-ui-color {
+	.uni-#{"" + $key} {
+		color: $child;
+	}
+	.uni-#{"" + $key}-bg {
+		background-color: $child;
+	}
+}
+.uni-shadow-sm {
+	box-shadow: $uni-shadow-sm;
+}
+.uni-shadow-base {
+	box-shadow: $uni-shadow-base;
+}
+.uni-shadow-lg {
+	box-shadow: $uni-shadow-lg;
+}
+.uni-mask {
+	background-color:$uni-mask;
+}

+ 55 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_radius.scss

@@ -0,0 +1,55 @@
+@mixin radius($r,$d:null ,$important: false){
+  $radius-value:map-get($uni-radius, $r) if($important, !important, null);
+  // Key exists within the $uni-radius variable
+  @if (map-has-key($uni-radius, $r) and  $d){
+		@if $d == t {
+				border-top-left-radius:$radius-value;
+				border-top-right-radius:$radius-value;
+		}@else if $d == r {
+				border-top-right-radius:$radius-value;
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == b {
+				border-bottom-left-radius:$radius-value;
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == l {
+				border-top-left-radius:$radius-value;
+				border-bottom-left-radius:$radius-value;
+		}@else if $d == tl {
+				border-top-left-radius:$radius-value;
+		}@else if $d == tr {
+				border-top-right-radius:$radius-value;
+		}@else if $d == br {
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == bl {
+				border-bottom-left-radius:$radius-value;
+		}
+  }@else{
+		border-radius:$radius-value;
+  }
+}
+
+@each $key, $child in $uni-radius {
+	@if($key){
+		.uni-radius-#{"" + $key} {
+				@include radius($key)
+		}
+	}@else{
+		.uni-radius {
+				@include radius($key)
+		}
+	}
+}
+
+@each $direction in t, r, b, l,tl, tr, br, bl {
+	@each $key, $child in $uni-radius {
+		@if($key){
+			.uni-radius-#{"" + $direction}-#{"" + $key} {
+				@include radius($key,$direction,false)
+			}
+		}@else{
+			.uni-radius-#{$direction} {
+				@include radius($key,$direction,false)
+			}
+		}
+	}
+}

+ 56 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_space.scss

@@ -0,0 +1,56 @@
+
+@mixin fn($space,$direction,$size,$n) {
+	@if $n {
+		#{$space}-#{$direction}: #{$size*$uni-space-root}px
+	} @else {
+		 #{$space}-#{$direction}: #{-$size*$uni-space-root}px
+	}
+}
+@mixin get-styles($direction,$i,$space,$n){
+	@if $direction == t {
+		@include fn($space, top,$i,$n);
+	} 
+	@if $direction == r {
+		@include fn($space, right,$i,$n);
+	} 
+	@if $direction == b {
+		@include fn($space, bottom,$i,$n);
+	} 
+	@if $direction == l {
+	 @include fn($space, left,$i,$n);
+	} 
+	@if $direction == x {
+		@include fn($space, left,$i,$n);
+		@include fn($space, right,$i,$n);
+	} 
+	@if $direction == y {
+		@include fn($space, top,$i,$n);
+		@include fn($space, bottom,$i,$n);
+	} 
+	@if $direction == a {
+		@if $n {
+			#{$space}:#{$i*$uni-space-root}px;
+		} @else {
+			#{$space}:#{-$i*$uni-space-root}px;
+		}
+	} 
+}
+
+@each $orientation in m,p {
+	$space: margin;
+	@if $orientation == m {
+		$space: margin;
+	} @else {
+		$space: padding;
+	}
+	@for $i from 0 through 16 {
+		@each $direction in t, r, b, l, x, y, a {
+			.uni-#{$orientation}#{$direction}-#{$i} { 
+				@include  get-styles($direction,$i,$space,true);
+			} 
+			.uni-#{$orientation}#{$direction}-n#{$i} { 
+				@include  get-styles($direction,$i,$space,false);
+			}
+		}
+	}
+}

+ 167 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_styles.scss

@@ -0,0 +1,167 @@
+/* #ifndef APP-NVUE */
+
+$-color-white:#fff;
+$-color-black:#000;
+@mixin base-style($color) {
+	color: #fff;
+	background-color: $color;
+	border-color: mix($-color-black, $color, 8%);
+	&:not([hover-class]):active {
+		background: mix($-color-black, $color, 10%);
+		border-color: mix($-color-black, $color, 20%);
+		color: $-color-white;
+		outline: none;
+	}
+}
+@mixin is-color($color) {
+	@include base-style($color);
+	&[loading] {
+		@include base-style($color);
+		&::before {
+			margin-right:5px;
+		}
+	}
+	&[disabled] {
+	  &,
+		&[loading],
+	  &:not([hover-class]):active {
+	    color: $-color-white;
+			border-color: mix(darken($color,10%), $-color-white);
+	    background-color: mix($color, $-color-white);
+	  }
+	}
+
+}
+@mixin base-plain-style($color) {
+	color:$color;
+	background-color: mix($-color-white, $color, 90%);
+	border-color: mix($-color-white, $color, 70%);
+	&:not([hover-class]):active {
+	  background: mix($-color-white, $color, 80%);
+	  color: $color;
+	  outline: none;
+		border-color: mix($-color-white, $color, 50%);
+	}
+}
+@mixin is-plain($color){
+	&[plain] {
+		@include base-plain-style($color);
+		&[loading] {
+			@include base-plain-style($color);
+			&::before {
+				margin-right:5px;
+			}
+		}
+		&[disabled] {
+		  &,
+		  &:active {
+		    color: mix($-color-white, $color, 40%);
+		    background-color: mix($-color-white, $color, 90%);
+				border-color: mix($-color-white, $color, 80%);
+		  }
+		}
+	}
+}
+
+
+.uni-btn {
+	margin: 5px;
+	color: #393939;
+	border:1px solid #ccc;
+	font-size: 16px;
+	font-weight: 200;
+	background-color: #F9F9F9;
+	// TODO 暂时处理边框隐藏一边的问题
+	overflow: visible;
+	&::after{
+		border: none;
+	}
+
+	&:not([type]),&[type=default] {
+		color: #999;
+		&[loading] {
+			background: none;
+			&::before {
+				margin-right:5px;
+			}
+		}
+
+
+
+		&[disabled]{
+			color: mix($-color-white, #999, 60%);
+		  &,
+			&[loading],
+		  &:active {
+				color: mix($-color-white, #999, 60%);
+		    background-color: mix($-color-white,$-color-black , 98%);
+				border-color: mix($-color-white,  #999, 85%);
+		  }
+		}
+
+		&[plain] {
+			color: #999;
+			background: none;
+			border-color: $uni-border-1;
+			&:not([hover-class]):active {
+				background: none;
+			  color: mix($-color-white, $-color-black, 80%);
+				border-color: mix($-color-white, $-color-black, 90%);
+			  outline: none;
+			}
+			&[disabled]{
+			  &,
+				&[loading],
+			  &:active {
+			    background: none;
+					color: mix($-color-white, #999, 60%);
+					border-color: mix($-color-white,  #999, 85%);
+			  }
+			}
+		}
+	}
+
+	&:not([hover-class]):active {
+	  color: mix($-color-white, $-color-black, 50%);
+	}
+
+	&[size=mini] {
+		font-size: 16px;
+		font-weight: 200;
+		border-radius: 8px;
+	}
+
+
+
+	&.uni-btn-small {
+		font-size: 14px;
+	}
+	&.uni-btn-mini {
+		font-size: 12px;
+	}
+
+	&.uni-btn-radius {
+		border-radius: 999px;
+	}
+	&[type=primary] {
+		@include is-color($uni-primary);
+		@include is-plain($uni-primary)
+	}
+	&[type=success] {
+		@include is-color($uni-success);
+		@include is-plain($uni-success)
+	}
+	&[type=error] {
+		@include is-color($uni-error);
+		@include is-plain($uni-error)
+	}
+	&[type=warning] {
+		@include is-color($uni-warning);
+		@include is-plain($uni-warning)
+	}
+	&[type=info] {
+		@include is-color($uni-info);
+		@include is-plain($uni-info)
+	}
+}
+/* #endif */

+ 24 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_text.scss

@@ -0,0 +1,24 @@
+@mixin get-styles($k,$c) {
+	@if $k == size or $k == weight{
+		font-#{$k}:#{$c}
+	}@else{
+		#{$k}:#{$c}
+	}
+}
+
+@each $key, $child in $uni-headings {
+	/* #ifndef APP-NVUE */
+	.uni-#{$key} {
+		@each $k, $c in $child {
+			@include get-styles($k,$c)
+		}
+	}
+	/* #endif */
+	/* #ifdef APP-NVUE */
+	.container .uni-#{$key} {
+		@each $k, $c in $child {
+			@include get-styles($k,$c)
+		}
+	}
+	/* #endif */
+}

+ 146 - 0
jd_logistics-app/uni_modules/uni-scss/styles/setting/_variables.scss

@@ -0,0 +1,146 @@
+// @use "sass:math";
+@import  '../tools/functions.scss';
+// 间距基础倍数
+$uni-space-root: 2 !default;
+// 边框半径默认值
+$uni-radius-root:5px !default;
+$uni-radius: () !default;
+// 边框半径断点
+$uni-radius: map-deep-merge(
+  (
+    0: 0,
+		// TODO 当前版本暂时不支持 sm 属性
+    // 'sm': math.div($uni-radius-root, 2),
+    null: $uni-radius-root,
+    'lg': $uni-radius-root * 2,
+    'xl': $uni-radius-root * 6,
+    'pill': 9999px,
+    'circle': 50%
+  ),
+  $uni-radius
+);
+// 字体家族
+$body-font-family: 'Roboto', sans-serif !default;
+// 文本
+$heading-font-family: $body-font-family !default;
+$uni-headings: () !default;
+$letterSpacing: -0.01562em;
+$uni-headings: map-deep-merge(
+  (
+    'h1': (
+      size: 32px,
+			weight: 300,
+			line-height: 50px,
+			// letter-spacing:-0.01562em
+    ),
+    'h2': (
+      size: 28px,
+      weight: 300,
+      line-height: 40px,
+      // letter-spacing: -0.00833em
+    ),
+    'h3': (
+      size: 24px,
+      weight: 400,
+      line-height: 32px,
+      // letter-spacing: normal
+    ),
+    'h4': (
+      size: 20px,
+      weight: 400,
+      line-height: 30px,
+      // letter-spacing: 0.00735em
+    ),
+    'h5': (
+      size: 16px,
+      weight: 400,
+      line-height: 24px,
+      // letter-spacing: normal
+    ),
+    'h6': (
+      size: 14px,
+      weight: 500,
+      line-height: 18px,
+      // letter-spacing: 0.0125em
+    ),
+    'subtitle': (
+      size: 12px,
+      weight: 400,
+      line-height: 20px,
+      // letter-spacing: 0.00937em
+    ),
+    'body': (
+      font-size: 14px,
+			font-weight: 400,
+			line-height: 22px,
+			// letter-spacing: 0.03125em
+    ),
+    'caption': (
+      'size': 12px,
+      'weight': 400,
+      'line-height': 20px,
+      // 'letter-spacing': 0.03333em,
+      // 'text-transform': false
+    )
+  ),
+  $uni-headings
+);
+
+
+
+// 主色
+$uni-primary: #2979ff !default;
+$uni-primary-disable:lighten($uni-primary,20%) !default;
+$uni-primary-light: lighten($uni-primary,25%) !default;
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37 !default;
+$uni-success-disable:lighten($uni-success,20%) !default;
+$uni-success-light: lighten($uni-success,25%) !default;
+
+$uni-warning: #f3a73f !default;
+$uni-warning-disable:lighten($uni-warning,20%) !default;
+$uni-warning-light: lighten($uni-warning,25%) !default;
+
+$uni-error: #e43d33 !default;
+$uni-error-disable:lighten($uni-error,20%) !default;
+$uni-error-light: lighten($uni-error,25%) !default;
+
+$uni-info: #8f939c !default;
+$uni-info-disable:lighten($uni-info,20%) !default;
+$uni-info-light: lighten($uni-info,25%) !default;
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a !default; 			// 主要文字
+$uni-base-color: #6a6a6a !default;			// 常规文字
+$uni-secondary-color: #909399 !default;	// 次要文字
+$uni-extra-color: #c7c7c7 !default;			// 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0 !default;
+$uni-border-2: #EDEDED !default;
+$uni-border-3: #DCDCDC !default;
+$uni-border-4: #B9B9B9 !default;
+
+// 常规色
+$uni-black: #000000 !default;
+$uni-white: #ffffff !default;
+$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
+
+// 背景色
+$uni-bg-color: #f7f7f7 !default;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px !default;
+$uni-spacing-base: 15px !default;
+$uni-spacing-lg: 30px !default;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;

+ 19 - 0
jd_logistics-app/uni_modules/uni-scss/styles/tools/functions.scss

@@ -0,0 +1,19 @@
+// 合并 map
+@function map-deep-merge($parent-map, $child-map){
+	$result: $parent-map;
+	@each $key, $child in $child-map {
+		$parent-has-key: map-has-key($result, $key);
+		$parent-value: map-get($result, $key);
+		$parent-type: type-of($parent-value);
+		$child-type: type-of($child);
+		$parent-is-map: $parent-type == map;
+		$child-is-map: $child-type == map;
+			
+		@if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){
+			$result: map-merge($result, ( $key: $child ));
+		}@else {
+			$result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ));
+		}
+	}
+	@return $result;
+};

+ 31 - 0
jd_logistics-app/uni_modules/uni-scss/theme.scss

@@ -0,0 +1,31 @@
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+// 主色
+$uni-primary: #2979ff;
+// 辅助色
+$uni-success: #4cd964;
+// 警告色
+$uni-warning: #f0ad4e;
+// 错误色
+$uni-error: #dd524d;
+// 描述色
+$uni-info: #909399;
+// 中性色
+$uni-main-color: #303133;
+$uni-base-color: #606266;
+$uni-secondary-color: #909399;
+$uni-extra-color: #C0C4CC;
+// 背景色
+$uni-bg-color: #f5f5f5;
+// 边框颜色
+$uni-border-1: #DCDFE6;
+$uni-border-2: #E4E7ED;
+$uni-border-3: #EBEEF5;
+$uni-border-4: #F2F6FC;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);

+ 62 - 0
jd_logistics-app/uni_modules/uni-scss/variables.scss

@@ -0,0 +1,62 @@
+@import './styles/setting/_variables.scss';
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+
+// 主色
+$uni-primary: #2979ff;
+$uni-primary-disable:mix(#fff,$uni-primary,50%);
+$uni-primary-light: mix(#fff,$uni-primary,80%);
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37;
+$uni-success-disable:mix(#fff,$uni-success,50%);
+$uni-success-light: mix(#fff,$uni-success,80%);
+
+$uni-warning: #f3a73f;
+$uni-warning-disable:mix(#fff,$uni-warning,50%);
+$uni-warning-light: mix(#fff,$uni-warning,80%);
+
+$uni-error: #e43d33;
+$uni-error-disable:mix(#fff,$uni-error,50%);
+$uni-error-light: mix(#fff,$uni-error,80%);
+
+$uni-info: #8f939c;
+$uni-info-disable:mix(#fff,$uni-info,50%);
+$uni-info-light: mix(#fff,$uni-info,80%);
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a; 			// 主要文字
+$uni-base-color: #6a6a6a;			// 常规文字
+$uni-secondary-color: #909399;	// 次要文字
+$uni-extra-color: #c7c7c7;			// 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0;
+$uni-border-2: #EDEDED;
+$uni-border-3: #DCDCDC;
+$uni-border-4: #B9B9B9;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
+
+// 背景色
+$uni-bg-color: #f7f7f7;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px;
+$uni-spacing-base: 15px;
+$uni-spacing-lg: 30px;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5);
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2);
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5);
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4);

+ 21 - 0
jd_logistics-app/uni_modules/uview-plus/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 https://uiadmin.net/uview-plus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 0 - 0
jd_logistics-app/uni_modules/uview-plus/README.md


部分文件因为文件数量过多而无法显示