commit 82b8d215065646cb89f8c99f025577ec3a42724d
Author: lnljyang <506960565@qq.com>
Date: Tue Dec 30 09:44:46 2025 +0800
Initial commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a42e93e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+/.idea/
+/.hbuilderx/
+/unpackage/dist/dev/
+/unpackage/dist/build/
+/node_modules/
\ No newline at end of file
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..9b68f21
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,65 @@
+
+
+
+
\ No newline at end of file
diff --git a/README.en.md b/README.en.md
new file mode 100644
index 0000000..420805b
--- /dev/null
+++ b/README.en.md
@@ -0,0 +1,36 @@
+# 资产管理平台小程序
+
+#### Description
+{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Instructions
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Contribution
+
+1. Fork the repository
+2. Create Feat_xxx branch
+3. Commit your code
+4. Create Pull Request
+
+
+#### Gitee Feature
+
+1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4. The most valuable open source project [GVP](https://gitee.com/gvp)
+5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f2fb07f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,39 @@
+# 资产管理平台小程序
+
+#### 介绍
+{**以下是 Gitee 平台说明,您可以替换此简介**
+Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
+无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
+
+#### 软件架构
+软件架构说明
+
+
+#### 安装教程
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### 使用说明
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### 参与贡献
+
+1. Fork 本仓库
+2. 新建 Feat_xxx 分支
+3. 提交代码
+4. 新建 Pull Request
+
+
+#### 特技
+
+1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
+2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
+3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
+4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
+5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
+6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/api/annualReview.js b/api/annualReview.js
new file mode 100644
index 0000000..2a72a76
--- /dev/null
+++ b/api/annualReview.js
@@ -0,0 +1,31 @@
+import axios from "@/utils/request";
+
+export default {
+ queryTakePageList(params) {
+ return axios.post(`/vehicle/vehicleAnnualInspection/queryPageList`, params); // 年审列表
+ },
+ getTakeId(params) {
+ return axios.get(`/vehicle/vehicleAnnualInspection/getVoById`, params); // 年审详情
+ },
+ getAnnualInspectionStatusName(params) {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "dic_annual_inspection_status",
+ }); // 字典数据
+ },
+ save(params) {
+ return axios.post(`/vehicle/vehicleAnnualInspection/save`, params); // add edit
+ },
+ queryIdNames(params) {
+ return axios.get(`/annualReviewServiceStation/queryIdNames`, params); // 年检服务站名称
+ },
+ getToDo(params) {
+ return axios.get(`/vehicle/vehicleAnnualInspection/getToDo`, params); // 年检服务站名称
+ },
+ //获取年审服务站列表
+ // queryStationPageList(params) {
+ // return axios.post(
+ // `/vehicle/annualInspectionServiceStation/queryPageList`,
+ // params
+ // ); // 年审列表
+ // },
+};
diff --git a/api/audit.js b/api/audit.js
new file mode 100644
index 0000000..6e30066
--- /dev/null
+++ b/api/audit.js
@@ -0,0 +1,47 @@
+import axios from "@/utils/request";
+
+export default {
+ // queryAuditList(params) {
+ // return axios.post(`/truckRentTask/queryTakePageList`, params);
+ // },
+ //获取待我审批/getWaitApprovePageList
+ queryAuditList(params) {
+ return axios.get(`/contract/getWaitApprovePageList`, params);
+ },
+ //获取已审批
+ queryAuditedList(params) {
+ return axios.get(`/contract/getApprovedPageList`, params);
+ },
+ //审批历史记录
+ getFlowTaskHistoryList(params) {
+ return axios.get(`/flow/getFlowTaskHistoryList`, params);
+ },
+ getAuditId(params) {
+ return axios.get(`/contract/getById`, params);
+ },
+
+ //审批通过
+ approve(params) {
+ return axios.post(`/flow/approve`, params);
+ },
+ //审批驳回
+ reject(params) {
+ return axios.post(`/flow/reject`, params);
+ },
+ //审批流程回调业务
+ changeStatusByFlowTask(params) {
+ return axios.post(`/contract/changeStatusByFlowTask`, params);
+ },
+
+ //生成提车前应收款 ==yongyin
+ makeContractBill(params) {
+ return axios.post(`/contract/makeContractBill`, params);
+ },
+
+ getSalesManagerDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "sales_manager" });
+ },
+ getAddress(params) {
+ return axios.post(`/baidumap/getAddress`, params);
+ },
+};
diff --git a/api/dic.js b/api/dic.js
new file mode 100644
index 0000000..e69de29
diff --git a/api/examination.js b/api/examination.js
new file mode 100644
index 0000000..80afbf3
--- /dev/null
+++ b/api/examination.js
@@ -0,0 +1,23 @@
+import axios from "@/utils/request";
+
+export default {
+ //考场
+ queryPage(params) {
+ return axios.get("/trainExam/queryPageListForCurrentUser",params);
+ },
+ //考试记录
+ examRecords(params) {
+ return axios.get("/trainExamRecord/queryPageListForDriver",params);
+ },
+ getExamPaper(params){
+ return axios.get("/trainExam/getVoById",params);
+ },
+ //获取考试后的试卷
+ getDoneExamPaper(params){
+ return axios.get("/trainExamRecord/queryVoById",params);
+ },
+ //提交交卷
+ rollIn(params){
+ return axios.post("/trainExamRecord/submitExam",params);
+ }
+}
\ No newline at end of file
diff --git a/api/failure.js b/api/failure.js
new file mode 100644
index 0000000..1b6cc5a
--- /dev/null
+++ b/api/failure.js
@@ -0,0 +1,25 @@
+import axios from "@/utils/request";
+
+export default {
+ queryPageList(params) {
+ return axios.get(`/run/failure/queryPageForWeixin`, params);
+ },
+ getTakeId(params) {
+ return axios.get(`/run/failure/getById`, params);
+ },
+ getMaintain(params) {
+ return axios.get(`/maintain/queryPage`, params); // 维修站信息
+ },
+ add(params){
+ return axios.post(`/run/failure/add`, params); // 添加
+ },
+ edit(params){
+ return axios.put(`/run/failure/edit`, params); // 修改
+ },
+ queryTruckRentInfo(params) {
+ return axios.get(`/contractRentTruck/queryTruckRentInfo`, params); // 查询单个车辆租赁信息
+ },
+ getMaintainanceList(params) {
+ return axios.get(`/maintain/queryPage`, params) // 查询维修站点分页
+ }
+}
\ No newline at end of file
diff --git a/api/fault.js b/api/fault.js
new file mode 100644
index 0000000..92f780d
--- /dev/null
+++ b/api/fault.js
@@ -0,0 +1,10 @@
+import axios from "@/utils/request";
+
+export default {
+ addById(params) {
+ return axios.put(`/run/failure/mobileReport`, params);
+ },
+ queryPageList(params){
+ return axios.get("/run/failure/queryPage",params);
+ }
+}
\ No newline at end of file
diff --git a/api/index.js b/api/index.js
new file mode 100644
index 0000000..d36e65e
--- /dev/null
+++ b/api/index.js
@@ -0,0 +1,16 @@
+/**
+ * url 映射
+ * @author WangLongFei/Alisdon <920124512@qq.com>
+ */
+const files = require.context('../api', false, /\.js$/);
+const modules = {};
+
+files.keys().forEach(key => {
+ if (key !== './index.js') {
+ modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default;
+ }
+});
+
+export default {
+ ...modules
+};
diff --git a/api/login.js b/api/login.js
new file mode 100644
index 0000000..915abd4
--- /dev/null
+++ b/api/login.js
@@ -0,0 +1,22 @@
+import axios from "@/utils/request";
+
+export default {
+ loginByPhoneForDriver(params) {
+ return axios.post(`/auth/loginByPhoneForDriver`, params);
+ },
+ loginDriver(params) {
+ return axios.post(`/auth/loginForDriver`, params);
+ },
+ loginUser(params) {
+ return axios.post(`/auth/login`, params);
+ },
+ logout() {
+ return axios.get(`/auth/logout`);
+ },
+ getUserInfo() {
+ return axios.get(`/auth/getLoginUserInfo`);
+ },
+ getUserMenu() {
+ return axios.get(`/menu/userMenu`);
+ },
+};
\ No newline at end of file
diff --git a/api/maintainTodo.js b/api/maintainTodo.js
new file mode 100644
index 0000000..7bd95ec
--- /dev/null
+++ b/api/maintainTodo.js
@@ -0,0 +1,32 @@
+import axios from "@/utils/request";
+//保养待办接口
+export default {
+ queryPageList(params) {
+ return axios.get(`/maintenanceAgent/queryPageList`, params);
+ },
+ add(params) {
+ return axios.put(`/maintenanceAgent/add`, params); //接口在车辆整备那边调用
+ },
+ edit(params) {
+ return axios.put(`/maintenanceAgent/edit`, params);
+ },
+ getById(params) {
+ return axios.get(`/maintenanceAgent/getAgentInfoById`, params);
+ },
+ //获取保养记录列表
+ getMaintainInfoByCarId(params) {
+ return axios.get(`/maintenanceAgent/getNewAgentItemInfoById`, params);
+ },
+ //查看保养记录
+ getRecords(params) {
+ return axios.get(`/maintenanceAgent/getAgentItemListByIds`, params);
+ },
+ getCostInfoByIds(params) {
+ return axios.post(`/maintenanceAgent/getAgentItemListByIdss`, params);
+ },
+ getPayeeType() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "dic_maintenance_payee_type",
+ }); // 字典数据 收款方类型
+ },
+};
diff --git a/api/map.js b/api/map.js
new file mode 100644
index 0000000..82b03bd
--- /dev/null
+++ b/api/map.js
@@ -0,0 +1,48 @@
+import axios from "@/utils/request";
+
+export default {
+ getHydrogenList(params) {
+ return axios.get(`/WechatLiteApp/Station/search`, params);
+ },
+ getVehicleMarkers(params) {
+ return axios.post(`/WechatLiteApp/Truck/list`, params);
+ },
+ getHydrogenStationMarkers(params) {
+ return axios.post(`/WechatLiteApp/Station/list`, params);
+ },
+ //车辆详情
+ getVehicleDetail(params) {
+ return axios.get(`/WechatLiteApp/Truck/info`, params);
+ },
+ //氢站详情
+ getHydrogenDetail(params) {
+ return axios.get(`/WechatLiteApp/Station/info`, params);
+ },
+ //获取下拉查询车牌号列表
+ getAllplateNumbere(params) {
+ return axios.get(`/WechatLiteApp/Truck/search`, params);
+ },
+ getAddress(params) {
+ return axios.post(`/baidumap/getAddress`, params);
+ },
+ getTruckInfoTree(params) {
+ return axios.get(`/WechatLiteApp/Truck/infoTree`, params);
+ },
+ getStationInfoTree() {
+ return axios.get(`/WechatLiteApp/Station/infoTree`);
+ },
+ getOrgsList() {
+ return axios.get(`/org/queryListByPid`);
+ },
+ getPlateAreaDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_plateArea" }); // 付款状态
+ },
+ getOwnDepartDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "businessDepartment" }); // 业务部门
+ },
+ getHydrogenCoopDic() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "weappMap_cooperation",
+ }); // 合作状态
+ },
+};
diff --git a/api/returnCar.js b/api/returnCar.js
new file mode 100644
index 0000000..0b67e85
--- /dev/null
+++ b/api/returnCar.js
@@ -0,0 +1,93 @@
+import axios from "@/utils/request";
+
+export default {
+ queryTakePageList(params) {
+ return axios.post(`/truckRentTask/queryReturnPageList`, params); // 还车单列表
+ },
+ getTakeId(params) {
+ return axios.get(`/truckRentTask/getReturn`, params); // 还车单详情
+ },
+ getSalesManagerDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "sales_manager" }); // 字典数据
+ },
+ getAddress(params) {
+ return axios.post(`/baidumap/getAddress`, params); // 百度地图 获取当前位置
+ },
+ addTake(params) {
+ return axios.post(`/truckRentTask/addReturn`, params); // 添加还车单
+ },
+ generateWordforReturn(params) {
+ return axios.post(`/truckRentTask/generateWordforReturn`, params); // 生成交车单确认文档
+ },
+ validateTruckByIds(params) {
+ return axios.get(`/contractRentTruck/validateTruckByIds`, params); // 验证车辆是否可用
+ },
+ getFormDataTemplate(params) {
+ return axios.get(`/truckRentTask/getFormDataTemplate`, params); // 获取表单数据模版
+ },
+ initiateSignature(params) {
+ return axios.post(`/truckRentTask/initiateSignature`, params); // 发起电子签章
+ },
+ getSignatureUrl(params) {
+ return axios.post(`/truckRentTask/getSignatureUrl`, params); // 获取电子签章签署链接
+ },
+ fileDownloadUrl(params) {
+ return axios.post(`/truckRentTask/fileDownloadUrl`, params); // 下载已签署文件
+ },
+ //查询二级科目id和名称列表
+ getQuerySubjectTowNames(params) {
+ return axios.get(`/finance/financeCostType/querySubjectTowNames`, params);
+ // return axios.get(`/dic/queryByDicType`, {
+ // dicType: "dic_returncar_money_item",
+ // }); // 字典数据
+ },
+ // 还车
+ startReturn(params) {
+ return axios.post(`/truckRentTask/startReturn`, params);
+ },
+ // 撤销还车
+ cancelReturn(params) {
+ return axios.post(`/truckRentTask/repealReturn`, params);
+ },
+ // 还车到达
+ sureReturn(params) {
+ return axios.post(`/truckRentTask/vehicleArrival`, params);
+ },
+ // 财务费用结算
+ financeCost(params) {
+ return axios.post(`/truckRentReturnCost/checkCostInfo`, params);
+ },
+ // 编辑费用核算信息
+ editCostInfo(params) {
+ return axios.post(`/truckRentReturnCost/editCostInfo`, params);
+ },
+ // 获取费用核算信息
+ getCostInfo(params) {
+ return axios.get(`/truckRentReturnCost/getCostInfoById`, params);
+ },
+ getCostDeps() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "settlement_department",
+ }); // 字典数据
+ },
+ // 停车场列表
+ getParkingPageList(params) {
+ return axios.get(`/parking/queryPageList`, params);
+ },
+ // 维修站列表
+ getFixPageList(params) {
+ return axios.get(`/maintain/getNames`, { params });
+ },
+ updateParking(params) {
+ return axios.post(`/truckRentTask/updateParkingInfo`, params); // 更新停车场信息
+ },
+
+ getLocationTypeList() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "return_location_type",
+ });
+ }, // 获取还车地点类型
+ clearSignInfo(params) {
+ return axios.post(`/truckRentTask/clearSignInfo`, params); // 清除签名信息
+ },
+};
diff --git a/api/returnCost.js b/api/returnCost.js
new file mode 100644
index 0000000..a29a848
--- /dev/null
+++ b/api/returnCost.js
@@ -0,0 +1,63 @@
+import axios from "@/utils/request";
+
+export default {
+ queryPageList(params) {
+ return axios.post(`/truckRentReturnCost/getCostPageList`, params); // 还车单列表
+ },
+ getTakeId(params) {
+ return axios.get(`/truckRentTask/getReturn`, params); // 还车单详情
+ },
+ //查询二级科目id和名称列表
+ getQuerySubjectTowNames(params) {
+ return axios.get(`/finance/financeCostType/querySubjectTowNames`, params);
+ // return axios.get(`/dic/queryByDicType`, {
+ // dicType: "dic_returncar_money_item",
+ // }); // 字典数据
+ },
+ // 财务费用结算
+ financeCost(params) {
+ return axios.post(`/truckRentReturnCost/checkCostInfo`, params);
+ },
+ // 编辑费用核算信息
+ editCostInfo(params) {
+ return axios.post(`/truckRentReturnCost/editCostInfo`, params);
+ },
+ // 获取费用核算信息
+ getCostInfo(params) {
+ return axios.get(`/truckRentReturnCost/getCheckingCostInfoById`, params);
+ },
+ getCostDeps() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "settlement_department",
+ }); // 字典数据
+ },
+ //审批流程回调业务
+ changeStatusByFlowTask(params) {
+ return axios.post(`/truckRentReturnCost/changeStatusByFlowTask`, params);
+ },
+ //还车费用核算 财务费用结算(新)
+ financeSettleAccounts(params) {
+ return axios.post(`/truckRentReturnCost/financeSettleAccounts`, params);
+ },
+ // 获取待办数量
+ getCostToDo() {
+ return axios.get(`/truckRentReturnCost/getTodoCount`);
+ },
+
+ // 还车费用核算 车辆是否含有无忧包服务
+ getIsHasOKPack(params) {
+ return axios.get(`/truckRentReturnCost/hasOKPack`, params);
+ },
+ //审批通过后付款确认:记录当前人、状态和时间
+ paymentConfirm(params) {
+ // {
+ // "id": 0,
+ // "status": 0
+ // }
+ return axios.post(`/truckRentReturnCost/paymentConfirm`, params);
+ },
+ // 还车费用核算 能源部门获取客户能源余额
+ // getEnergyBalance(params) {
+ // return axios.get(`/truckRentReturnCost/getEnergyBalance`, params);
+ // },
+};
diff --git a/api/standbyVehicle.js b/api/standbyVehicle.js
new file mode 100644
index 0000000..45be20e
--- /dev/null
+++ b/api/standbyVehicle.js
@@ -0,0 +1,67 @@
+import axios from "@/utils/request";
+
+export default {
+ queryPageList(params) {
+ return axios.post(`/standbyVehicleMain/queryPageList`, params);
+ },
+ getTodo(params) {
+ return axios.get(`/standbyVehicleMain/getTodo`, params)
+ },
+ getById(params) {
+ return axios.get(`/standbyVehicleMain/getById`, params)
+ },
+ saveStandbyVehicleDetail(params) {
+ return axios.post(`/standbyVehicleMain/saveStandbyVehicleDetail`, params)
+ },
+ getVehicleBrand() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_vehicle_brand" })
+ },
+ getBrandListByMode(params) {
+ return axios.get(`/truck/getBrandListByMode`, params)
+ },
+ getTruckType() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_truck_type" })
+ },
+ getYesNoDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_yes_no" })
+ },
+ getTypeName() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_failure_type" })// 故障类型
+ },
+ getFailureStatusName() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_is_settle_status" })// 故障状态
+ },
+ getFaultSourceName() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_fault_source" })// 故障来源
+ },
+ getCityName() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_unusual_action_apply_city_code" })// 城市
+ },
+ getCostTypeName() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_fault_cost_type" })// 费用类型
+ },
+ getPayerName() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_fault_payer" })// 付款方
+ },
+ getPaymentStatusDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "dic_pub_payment_status" })// 付款状态
+ },
+ saveCache(params) {
+ return axios.post(`/standbyVehicleMain/saveCache`, params);
+ },
+ getCache(params) {
+ return axios.get(`/standbyVehicleMain/getCache`, params)
+ },
+ delCache(params) {
+ return axios.get(`/standbyVehicleMain/delCache`, params);
+ },
+ getOpManagerPhone(params) {
+ return axios.get(`/standbyVehicleMain/getOperationsManagerByRegion`, params)
+ },
+ edit(params) {
+ return axios.put(`/standbyVehicleMain/edit`, params)
+ },
+ getFormDataListByTruckId(params) {
+ return axios.get(`/standbyVehicleMain/getFormDataListByTruckId`, params)
+ }
+}
\ No newline at end of file
diff --git a/api/truck.js b/api/truck.js
new file mode 100644
index 0000000..8375b19
--- /dev/null
+++ b/api/truck.js
@@ -0,0 +1,33 @@
+import axios from "@/utils/request";
+
+export default {
+ queryInStoreList(params) {
+ return axios.get(`/truck/queryInStoreList`, params);
+ },
+ queryAuthListByPlateNumber(params) {
+ return axios.get(`/truck/queryAuthListByPlateNumber`, params);
+ },
+ getTruckPageList(params) {
+ return axios.get(`/truck/queryList`, params);
+ },
+ // 用户权限范围的车辆
+ queryAuthList(params) {
+ return axios.get(`/truck/queryAuthList`, params);
+ },
+ //2025.4 hefei新增列表查询所有车辆接口 只返回ID NUMBER 后增加品牌,车型
+ getAllTruckList(params) {
+ return axios.get(`/truck/getAllTruckList`, params);
+ },
+ //2025.4 hefei新增列表查询实时数据接口
+ getActualDataByVin(params) {
+ return axios.get(`/truck/getActualDataByVin`, params);
+ },
+ //用来查询车辆状态的接口,judgementTruckRentStatus,Swagger为“根据车牌号判断该车状态”,返回出具体车辆的状态,例如在库,自营或者租赁状态。
+ getTruckRentStatus(params) {
+ return axios.get(`/truck/judgementTruckRentStatus`, params);
+ },
+ queryInStoreListWithStatus(params) {
+ //queryInStoreList的全车辆版本,备车那边有需求25.9.26 任政
+ return axios.get(`/truck/queryInStoreListWithStatus`, params);
+ },
+};
diff --git a/api/truckPreparation.js b/api/truckPreparation.js
new file mode 100644
index 0000000..79ca732
--- /dev/null
+++ b/api/truckPreparation.js
@@ -0,0 +1,20 @@
+import axios from "@/utils/request";
+
+export default {
+ queryPageList(params) {
+ return axios.post(`/vehiclePreparation/queryPageList`, params); // 车辆整备列表
+ },
+ getById(params) {
+ return axios.get(`/vehiclePreparation/getInfoById`, params); // 车辆整备详情
+ },
+ editTruckPreparation(params) {
+ return axios.put(`/vehiclePreparation/edit`, params); // 添加车辆整备
+ },
+ getPreTypeList() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "preparation_type" });
+ }, // 获取整备类型
+ getPreFormDataListByTruckId(params) {
+ //车辆整备新检查单
+ return axios.get(`/vehiclePreparation/getFormDataListByTruckId`, params);
+ },
+};
diff --git a/api/truckRent.js b/api/truckRent.js
new file mode 100644
index 0000000..2b497b5
--- /dev/null
+++ b/api/truckRent.js
@@ -0,0 +1,44 @@
+import axios from "@/utils/request";
+
+export default {
+ queryTakePageList(params) {
+ return axios.post(`/truckRentTask/queryTakePageList`, params);
+ },
+ getTakeId(params) {
+ return axios.get(`/truckRentTask/getTakeId`, params);
+ },
+ getSalesManagerDic() {
+ return axios.get(`/dic/queryByDicType`, { dicType: "sales_manager" });
+ },
+ getAddress(params) {
+ return axios.post(`/baidumap/getAddress`, params);
+ },
+ addTake(params) {
+ return axios.post(`/truckRentTask/addTake`, params);
+ },
+ generateWord(params) {
+ return axios.post(`/truckRentTask/generateWord`, params);
+ },
+ validateTruckByIds(params) {
+ return axios.get(`/contractRentTruck/validateTruckByIds`, params);
+ },
+ getFormDataTemplate(params) {
+ return axios.get(`/truckRentTask/getFormDataTemplate`, params);
+ },
+ initiateSignature(params) {
+ return axios.post(`/truckRentTask/initiateSignature`, params);
+ },
+ getSignatureUrl(params) {
+ return axios.post(`/truckRentTask/getSignatureUrl`, params);
+ },
+ generateWord(params) {
+ return axios.post(`/truckRentTask/generateWord`, params);
+ },
+ fileDownloadUrl(params) {
+ return axios.post(`/truckRentTask/fileDownloadUrl`, params);
+ },
+ // 交车单-安全审批
+ safeAudit(params) {
+ return axios.post(`/truckRentTask/safetyAuditing`, params);
+ },
+};
diff --git a/api/unusualActionApply.js b/api/unusualActionApply.js
new file mode 100644
index 0000000..f1f90c6
--- /dev/null
+++ b/api/unusualActionApply.js
@@ -0,0 +1,54 @@
+import axios from "@/utils/request";
+
+export default {
+ queryPageList(params) {
+ return axios.post(`/unusualAction/queryPageList`, params); // 分页
+ },
+ getTakeId(params) {
+ return axios.get(`/unusualAction/getInfoById`, params); // 根据id查找详情
+ },
+ //审批
+ auditTransaction(params) {
+ return axios.post(`/unusualAction/approve`, params);
+ },
+ //撤销
+ revokeTransaction(params) {
+ return axios.post(`/unusualAction/revoke`, params);
+ },
+ getRoleList(params) {
+ return axios.get(`/unusualActionApply/queryApproveUserList`, params); // 查询可审批的用户列表
+ },
+ edit(params) {
+ return axios.post(`/unusualAction/edit`, params); // 修改
+ },
+ add(params) {
+ return axios.post(`/unusualAction/add`, params); // 添加
+ },
+ approveAfterEdit(params) {
+ return axios.put(`/unusualActionApply/approveAfterEdit`, params); // 审批后修改
+ },
+ //根据id查询车辆异动信息
+ getUnusualInfoById(params) {
+ return axios.get(`/truck/getUnusualInfoById`, params);
+ },
+ //根据车牌查询是否已经存在异动
+ getExistResult(params) {
+ return axios.get(`/unusualAction/checkTruckInUnusual`, params);
+ },
+ // 获取异动目的地类型
+ getTransactionAddressType() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "transaction_address_type",
+ });
+ },
+ // 获取异动类型
+ getTransactionType() {
+ return axios.get(`/dic/queryByDicType`, {
+ dicType: "transaction_type",
+ });
+ },
+ //在保养待办那边有一个按钮,根据车牌新增异动
+ addByTruckId(params) {
+ return axios.post(`/unusualAction/addByTruckId`, params);
+ },
+};
diff --git a/components/ba-tree-picker/README.md b/components/ba-tree-picker/README.md
new file mode 100644
index 0000000..59d99f9
--- /dev/null
+++ b/components/ba-tree-picker/README.md
@@ -0,0 +1,124 @@
+## 树形层级选择器
+### 简介
+为统一样式而生,树形层级选择器,picker弹窗形式的,样式和比例参照uniapp的picker和uni-data-picker组件
+* 支持单选、多选、父级选择,当然也支持单层选择
+* 支持Object对象属性自定义映射
+* 支持显示全部选中、部分选中、未选中三种状态
+* 支持快速自定义简单样式(分割线、按钮、标题、对齐等),深入样式可复写css
+
+### 使用方法
+在 `script` 中引入组件
+``` javascript
+ import baTreePicker from "@/components/ba-tree-picker/ba-tree-picker.vue"
+ export default {
+ components: {
+ baTreePicker
+ }
+```
+在 `template` 中使用组件
+``` javascript
+
+```
+在 `script` 中定义打开方法,和选择监听
+``` javascript
+ methods: {
+ // 显示选择器
+ showPicker() {
+ this.$refs.treePicker._show();
+ },
+ //监听选择(ids为数组)
+ selectChange(ids, names) {
+ console.log(ids, names)
+ }
+ }
+```
+在 `template` 中调用打开
+``` javascript
+ 调用选择器
+```
+
+### 属性
+|属性名|类型|默认值|说明|
+|:-|:-:|:--:|-:|
+|localdata|Array|[]|源数据,目前支持tree结构,后续会考虑支持扁平化结构|
+|valueKey|String|id|指定 Object 中 key 的值作为节点数据id|
+|textKey|String|name|指定 Object 中 key 的值作为节点显示内容|
+|childrenKey|String|children|指定 Object 中 key 的值作为节点子集|
+|multiple|Boolean|false|是否多选,默认单选|
+|selectParent|Boolean|true|是否可以选父级,默认可以|
+|title|String| |标题|
+|titleColor|String||标题颜色|
+|confirmColor|String|#0055ff|确定按钮颜色|
+|cancelColor|String|#757575|取消按钮颜色|
+|switchColor|String|#666|节点切换图标颜色|
+|border|Boolean|false|是否有分割线,默认无|
+
+
+
+### 数据格式
+
+注意:必须有id、name(id可通过valueKey来配置为其它键值,如value)字段,且唯一
+
+``` json
+[
+ {
+ id: 1,
+ name: '公司1',
+ children: [{
+ id: 11,
+ name: '研发部',
+ children: [{
+ id: 111,
+ name: '张三',
+
+ },{
+ id: 112,
+ name: '李四',
+
+ }]
+ },{
+ id: 12,
+ name: '综合部',
+
+ } ]
+ },
+ {
+ id: 2,
+ name: '公司2',
+ children: [{
+ id: 21,
+ name: '研发部',
+
+ },{
+ id: 22,
+ name: '综合部',
+
+ },{
+ id: 23,
+ name: '财务部',
+
+ }, ]
+ },
+ {
+ id: 3,
+ name: '公司3'
+ },
+ {
+ id: 4,
+ name: '公司4',
+ children: [{
+ id: 41,
+ name: '研发部',
+
+ }]
+ }
+]
+```
+
+
+### 方法
+|方法名|参数|默认值|说明|
+|:-|:-:|:--:|-:|
+|_show()| | |显示选择器|
+|_hide()| | |隐藏选择器|
diff --git a/components/ba-tree-picker/ba-tree-picker.vue b/components/ba-tree-picker/ba-tree-picker.vue
new file mode 100644
index 0000000..bd82515
--- /dev/null
+++ b/components/ba-tree-picker/ba-tree-picker.vue
@@ -0,0 +1,775 @@
+
+
+
+
+
+
+
+ 取消
+
+ {{
+ title
+ }}
+
+ {{ multiple ? "确定" : "" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name + (item.num ? "(" + item.num + ")" : "") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/dic-select/dic-select.vue b/components/dic-select/dic-select.vue
new file mode 100644
index 0000000..11ecaab
--- /dev/null
+++ b/components/dic-select/dic-select.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/dic-select/select-show.vue b/components/dic-select/select-show.vue
new file mode 100644
index 0000000..6c79d50
--- /dev/null
+++ b/components/dic-select/select-show.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/multiple-picker/multiple-picker.vue b/components/multiple-picker/multiple-picker.vue
new file mode 100644
index 0000000..4c2d2a6
--- /dev/null
+++ b/components/multiple-picker/multiple-picker.vue
@@ -0,0 +1,262 @@
+
+
+
+
+
+
+
diff --git a/components/no-bad-table/loading.vue b/components/no-bad-table/loading.vue
new file mode 100644
index 0000000..c9d1842
--- /dev/null
+++ b/components/no-bad-table/loading.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/no-bad-table/table.scss b/components/no-bad-table/table.scss
new file mode 100644
index 0000000..5cba4bb
--- /dev/null
+++ b/components/no-bad-table/table.scss
@@ -0,0 +1,293 @@
+$div-table-border-color: #666;
+$div-table-border-width: 1upx;
+@mixin fixBorderWidth($dir:none) {
+ @if $dir==none{
+
+ @media screen and (-webkit-device-pixel-ratio: 1) {
+ border-width: 1px;
+ }
+ @media screen and (-webkit-device-pixel-ratio: 2) {
+ border-width: .5px;
+ }
+ @media screen and (-webkit-device-pixel-ratio: 3) {
+ border-width: .5px;
+ }
+ }
+ @else{
+ @media screen and (-webkit-device-pixel-ratio: 1) {
+ border-#{$dir}-width: 1px;
+ }
+ @media screen and (-webkit-device-pixel-ratio: 2) {
+ border-#{$dir}-width: .5px;
+ }
+ @media screen and (-webkit-device-pixel-ratio: 3) {
+ border-#{$dir}-width: .5px;
+ }
+ }
+
+}
+.no-bad-table-wrap {
+ position: relative;
+ overflow: hidden;
+//外层容器
+ .table_box_big {
+ overflow: auto;
+ width: 100%;
+ position: relative;
+ // height: 350px;
+ }
+ //工具类
+ .verticalV{
+ position: absolute;
+ width: 100%;
+ text-align: center;
+ left:50%;
+ top:50%;
+ transform: translateY(-50%);
+ }
+
+ .table_box {
+ overflow: auto;
+ // position: absolute;
+ }
+
+ .table_tbody_box {
+ // height: 300px;
+ // overflow: scroll;
+ }
+
+ //没有任何数据
+ .empty-data-body-box {
+ min-height: 100px;
+ line-height: 100px;
+ text-align: center;
+ color: #666;
+ border: 1px solid $div-table-border-color;
+ @include fixBorderWidth;
+ border-top: 0;
+
+ }
+
+ &.fix-height {
+
+ .table_box_big {
+ overflow-x: scroll;
+ overflow-y: hidden;
+ position: relative;
+
+ // height: 350px;
+ }
+
+ .table_box {
+ overflow: hidden;
+ position: absolute;
+ }
+
+ .table_tbody_box {
+ // height: 300px;
+ overflow: scroll;
+ border-bottom: 1px solid $div-table-border-color;
+ @include fixBorderWidth(bottom);
+ }
+
+ //固定高低里面的内容表格底部不要边框
+ .div-table-body {
+ border-top: 0;
+ border-bottom:0;
+ //固定高度,数据为空
+ &.empty-data-body-box{
+ border-bottom: $div-table-border-width solid $div-table-border-color;
+ @include fixBorderWidth(bottom);
+ }
+ }
+ }
+
+ //头部表格
+ .th,
+ .thead .tr,
+ .fixed-thead-tr {
+ .td {
+ background-color: #e0e0ea;
+
+ .td_wrap {
+ background-color: #e0e0ea;
+ }
+
+ }
+ }
+
+ //固定右边一列
+ .fixed-right {
+ position: absolute;
+ top: 0upx;
+ right: 0px;
+ z-index: 100;
+ // border-right: $div-table-border-width solid $div-table-border-color;
+ // border-left: $div-table-border-width solid $div-table-border-color;
+ box-shadow: -2px 0 5px rgba(0, 0, 0, .5);
+ }
+
+ //固定左边一列
+ .fixed-left {
+ position: absolute;
+ top: 0upx;
+ left: -1px;
+ z-index: 100;
+ border-right: $div-table-border-width solid $div-table-border-color;
+ border-left: $div-table-border-width solid $div-table-border-color;
+ @include fixBorderWidth(right);
+ @include fixBorderWidth(left);
+ box-shadow: 2px 0 5px rgba(0, 0, 0, .5);
+ }
+
+ .tr,
+ .th {
+ display: table-row;
+
+ &+.tr,
+ &+.th {
+
+ .td,
+ .th {
+ border-top: $div-table-border-width solid $div-table-border-color;
+ @include fixBorderWidth(top);
+ word-break: break-word;
+ }
+ }
+ }
+ //外层容器控制td左右居中
+ &.td-center{
+ .td {
+ .td_wrap{
+ text-align: center;
+ }
+ }
+ }
+ .td {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+ box-sizing: border-box;
+ z-index: 1;
+ position: relative;
+ overflow: hidden;
+
+ .td_wrap {
+ position: relative;
+ padding: 10upx;
+ box-sizing: border-box;
+ overflow: hidden;
+ line-height: 20px;
+ font-size: 12px;
+ background: #fff;
+ text-align: left;
+ }
+
+ &.colspan {
+ z-index: 10;
+ position: absolute;
+ .td_wrap {
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ position: absolute;
+ }
+ }
+
+ &.rowspan {
+ position: absolute;
+ z-index: 10;
+ }
+
+ &.empty-cells-for-celspan {
+ border-left: none !important;
+
+ .td_wrap {
+ opacity: 0;
+ }
+ }
+
+ &.empty-cells-for-rowspan {
+ border-top: none !important;
+
+ .td_wrap {
+ opacity: 0;
+ }
+ }
+
+ &.noPadding {
+ padding: 0;
+ }
+
+ &+.td {
+ border-left: $div-table-border-width solid $div-table-border-color;
+ @include fixBorderWidth(left);
+ }
+ }
+
+ .th .td {
+ font-weight: bold;
+ }
+ //单选样式========》选中
+ .selected {
+ .td {
+ background-color: #d3e3ef;
+
+ .td_wrap {
+ background-color: #d3e3ef;
+ }
+ }
+ }
+
+ //单选样式===》禁用
+ .disabled {
+ .td {
+ background-color: #f8f8f9;
+ opacity: .6;
+ }
+ }
+
+ .div-table {
+ display: table;
+ border: $div-table-border-width solid $div-table-border-color;
+ @include fixBorderWidth;
+ box-sizing: border-box;
+ table-layout: fixed;
+ position: relative;
+
+ &.div-table-body {
+ border-top: 0;
+ }
+ .tbody {
+ display: table-row-group;
+ }
+
+ .thead {
+ display: table-header-group;
+
+// .tr,
+// .th {
+//
+// .td,
+// .th {
+// width: 120upx;
+// height: 75px;
+// }
+// }
+ }
+
+ .colgroup {
+ display: table-column-group;
+ }
+
+ .col {
+ display: table-column;
+ }
+
+ .caption {
+ display: table-caption;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/components/no-bad-table/table.vue b/components/no-bad-table/table.vue
new file mode 100644
index 0000000..c21ce56
--- /dev/null
+++ b/components/no-bad-table/table.vue
@@ -0,0 +1,841 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item[tdItem.key] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ emptyText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ columnsFixedLeft[0].title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item[columnsFixedLeft[0].key] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ columnsFixedRight[0].title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item[columnsFixedRight[0].key] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/tabBar/tabBar.vue b/components/tabBar/tabBar.vue
new file mode 100644
index 0000000..00c3b17
--- /dev/null
+++ b/components/tabBar/tabBar.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/upload_img_video.vue b/components/upload_img_video.vue
new file mode 100644
index 0000000..99d80d8
--- /dev/null
+++ b/components/upload_img_video.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c3ff205
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..8f461a0
--- /dev/null
+++ b/main.js
@@ -0,0 +1,90 @@
+import App from "./App";
+
+// #ifndef VUE3
+import Vue from "vue";
+import "./uni.promisify.adaptor";
+
+import store from "./store";
+import { v1 as uuidv1 } from "uuid";
+
+// main.js,注意要在use方法之后执行
+import uView from "uview-ui";
+import tabBar from "components/tabBar/tabBar.vue"; //引入我们自己定义的tabBar组件
+import noBadTable from "components/no-bad-table/table.vue";
+
+Vue.use(uView);
+
+// 调用setConfig方法,方法内部会进行对象属性深度合并,可以放心嵌套配置
+// 需要在Vue.use(uView)之后执行
+uni.$u.setConfig({
+ // 修改$u.config对象的属性
+ config: {
+ // 修改默认单位为rpx,相当于执行 uni.$u.config.unit = 'rpx'
+ unit: "rpx",
+ },
+ // 修改$u.props对象的属性
+ props: {
+ // 修改radio组件的size参数的默认值,相当于执行 uni.$u.props.radio.size = 30
+ radio: {
+ size: 30,
+ },
+ text: {
+ size: 30,
+ },
+ search: {
+ height: 60,
+ },
+ form: {
+ labelWidth: 160,
+ },
+ actionSheet: {
+ round: 40,
+ },
+ datetimePicker: {
+ value: Number(new Date()),
+ },
+ checkbox: {
+ labelSize: 24,
+ },
+ // badge: {
+ // bgColor: "#c2d10a",
+ // },
+ subsection: {
+ activeColor: "#687379",
+ },
+ loadingPage: {
+ loadingColor: "#c2d10a",
+ color: "#c2d10a",
+ iconSize: 112,
+ fontSize: 38,
+ },
+ // 其他组件属性配置
+ // ......
+ },
+});
+
+// 全局方法挂载
+Vue.prototype.uuidv1 = uuidv1;
+Vue.prototype.$store = store;
+Vue.component("tab-bar", tabBar); //使用tabBar组件
+Vue.component("no-bad-table", noBadTable); //使用tabBar组件
+import Api from "./api";
+Vue.prototype.$api = Api;
+Vue.config.productionTip = false;
+App.mpType = "app";
+const app = new Vue({
+ store,
+ ...App,
+});
+app.$mount();
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from "vue";
+export function createApp() {
+ const app = createSSRApp(App);
+ return {
+ app,
+ };
+}
+// #endif
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..bfbcd78
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,98 @@
+{
+ "name" : "gjt_mini",
+ "appid" : "__UNI__CAF3DD8",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /*设置ios底部导航栏安全区域*/
+ "safearea" : {
+ "background" : "#FFFFFF",
+ "bottom" : {
+ "offset" : "auto"
+ }
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {},
+ /* SDK配置 */
+ "sdkConfigs" : {
+ "oauth" : {}
+ }
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "wx4438f1a71e030de0",
+ "setting" : {
+ "urlCheck" : false,
+ "postcss" : true,
+ "minified" : true
+ },
+ "usingComponents" : true,
+ "lazyCodeLoading" : "requiredComponents",
+ "permission" : {
+ "scope.userLocation" : {
+ "desc" : "初始化时获取用户的位置信息用于交车定位确认"
+ },
+ "scope.camera" : {
+ "desc" : "获取用户的拍照和相册权限用于拍摄交车、还车照片"
+ }
+ },
+ "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ]
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "2",
+ "fallbackLocale" : "zh-Hans",
+ "locale" : "zh-Hans",
+ "h5" : {
+ "template" : "template.html"
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..4ed0154
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,954 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@parcel/watcher": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.0.tgz",
+ "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@parcel/watcher-android-arm64": "2.5.0",
+ "@parcel/watcher-darwin-arm64": "2.5.0",
+ "@parcel/watcher-darwin-x64": "2.5.0",
+ "@parcel/watcher-freebsd-x64": "2.5.0",
+ "@parcel/watcher-linux-arm-glibc": "2.5.0",
+ "@parcel/watcher-linux-arm-musl": "2.5.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.0",
+ "@parcel/watcher-linux-arm64-musl": "2.5.0",
+ "@parcel/watcher-linux-x64-glibc": "2.5.0",
+ "@parcel/watcher-linux-x64-musl": "2.5.0",
+ "@parcel/watcher-win32-arm64": "2.5.0",
+ "@parcel/watcher-win32-ia32": "2.5.0",
+ "@parcel/watcher-win32-x64": "2.5.0",
+ "detect-libc": "^1.0.3",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.5",
+ "node-addon-api": "^7.0.0"
+ }
+ },
+ "@parcel/watcher-android-arm64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz",
+ "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-arm64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz",
+ "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-x64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz",
+ "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-freebsd-x64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz",
+ "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm-glibc": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz",
+ "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm-musl": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz",
+ "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz",
+ "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-musl": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz",
+ "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-glibc": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz",
+ "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-musl": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz",
+ "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-arm64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz",
+ "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-ia32": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz",
+ "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-x64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz",
+ "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "@yarnpkg/lockfile": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true
+ },
+ "axios": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.7.tgz",
+ "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
+ "requires": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "bignumber.js": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.1.2.tgz",
+ "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "requires": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.1.tgz",
+ "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+ "dev": true,
+ "requires": {
+ "readdirp": "^4.0.1"
+ }
+ },
+ "ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.5.tgz",
+ "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
+ },
+ "define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "requires": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "dev": true,
+ "optional": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.4"
+ }
+ },
+ "es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-yarn-workspace-root": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
+ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^4.0.2"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
+ },
+ "form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "requires": {
+ "es-define-property": "^1.0.0"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.2"
+ }
+ },
+ "immutable": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "optional": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.7.tgz",
+ "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw=="
+ },
+ "json-bigint": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "requires": {
+ "bignumber.js": "^9.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz",
+ "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.5",
+ "isarray": "^2.0.5",
+ "jsonify": "^0.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmmirror.com/jsonify/-/jsonify-0.0.1.tgz",
+ "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
+ "dev": true
+ },
+ "klaw-sync": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/klaw-sync/-/klaw-sync-6.0.0.tgz",
+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11"
+ }
+ },
+ "klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "optional": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "open": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmmirror.com/open/-/open-7.4.2.tgz",
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true
+ },
+ "patch-package": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmmirror.com/patch-package/-/patch-package-8.0.0.tgz",
+ "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==",
+ "dev": true,
+ "requires": {
+ "@yarnpkg/lockfile": "^1.1.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^3.7.0",
+ "cross-spawn": "^7.0.3",
+ "find-yarn-workspace-root": "^2.0.0",
+ "fs-extra": "^9.0.0",
+ "json-stable-stringify": "^1.0.2",
+ "klaw-sync": "^6.0.0",
+ "minimist": "^1.2.6",
+ "open": "^7.4.2",
+ "rimraf": "^2.6.3",
+ "semver": "^7.5.3",
+ "slash": "^2.0.0",
+ "tmp": "^0.0.33",
+ "yaml": "^2.2.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.0.2.tgz",
+ "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "sass": {
+ "version": "1.80.6",
+ "resolved": "https://registry.npmmirror.com/sass/-/sass-1.80.6.tgz",
+ "integrity": "sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==",
+ "dev": true,
+ "requires": {
+ "@parcel/watcher": "^2.4.1",
+ "chokidar": "^4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ }
+ },
+ "sass-loader": {
+ "version": "10.5.2",
+ "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-10.5.2.tgz",
+ "integrity": "sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==",
+ "dev": true,
+ "requires": {
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.2"
+ }
+ },
+ "schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true
+ },
+ "set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "uni-uploadfile": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/uni-uploadfile/-/uni-uploadfile-1.1.4.tgz",
+ "integrity": "sha512-2WO01OVT8hqXoBO8M6cyE2bOFC6cW+RXrbRvDR+tUXqUR/aDbYeJ31lE1/5xeMlm3TNJpfTZWvTUyiIzhGmd7g=="
+ },
+ "universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
+ },
+ "uview-ui": {
+ "version": "2.0.38",
+ "resolved": "https://registry.npmmirror.com/uview-ui/-/uview-ui-2.0.38.tgz",
+ "integrity": "sha512-6egHDf9lXHKpG3hEjRE0vMx4+VWwKk/ReTf5x18KrIKqdvdPRqO3+B8Unh7vYYwrIxzAWIlmhZ9RJpKI/4UqPQ=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.6.0.tgz",
+ "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..31e2372
--- /dev/null
+++ b/package.json
@@ -0,0 +1,19 @@
+{
+ "dependencies": {
+ "axios": "^1.5.0",
+ "crypto-js": "^4.1.1",
+ "js-base64": "^3.7.5",
+ "json-bigint": "^1.0.0",
+ "uni-uploadfile": "^1.1.4",
+ "uuid": "^9.0.1",
+ "uview-ui": "^2.0.38"
+ },
+ "devDependencies": {
+ "patch-package": "^8.0.0",
+ "sass": "^1.66.1",
+ "sass-loader": "^10.4.1"
+ },
+ "scripts": {
+ "postinstall": "patch-package"
+ }
+}
diff --git a/pageSub/annualReview/detail.vue b/pageSub/annualReview/detail.vue
new file mode 100644
index 0000000..2b5fb72
--- /dev/null
+++ b/pageSub/annualReview/detail.vue
@@ -0,0 +1,1831 @@
+
+
+
+
+
+
+ 车牌号
+
+
+
+
+
+ 车辆品牌
+
+
+
+ 车辆型号
+
+
+
+ 资产运营城市
+
+
+
+ 资产状态
+
+
+
+ 客户
+
+
+
+
+ 年审到期时间
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 检测服务站
+
+
+
+
+
+
+ 检测服务站费用
+
+
+
+
+ 检测付款状态
+
+
+
+
+
+
+
+ 二保服务站
+
+
+
+
+
+
+ 二保服务站费用
+
+
+
+
+ 二保付款状态
+
+
+
+
+
+
+
+ 整备服务站
+
+
+
+
+
+
+ 整备服务站费用
+
+
+
+
+ 整备付款状态
+
+
+
+
+
+
+
+ 行驶证出证日期
+
+
+
+
+
+ 行驶证更新
+
+
+
+
+ 营运证出证日期
+
+
+
+
+
+ 营运证更新
+
+
+
+ 历史营运证查看
+
+
+
+
+ {{ item.fileName }}
+ 预览
+
+
+
+ 二保照片
+
+
+
+ 整备照片
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageSub/annualReview/index.vue b/pageSub/annualReview/index.vue
new file mode 100644
index 0000000..ebfb72e
--- /dev/null
+++ b/pageSub/annualReview/index.vue
@@ -0,0 +1,294 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 年审中
+
+
+
+ 未通过
+
+
+
+ 待年审
+
+
+
+ 已通过
+
+
+ 车牌号: {{ item.plateNumber }}
+
+
+ 资产状态: {{ item.truckRentStatusName }}
+
+
+ 年审到期时间:
+ {{
+ formatDateTime(item.annualInspectionExpireDate, "minute")
+ }}
+ 负责人: {{ item.submitterName || "--" }}
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageSub/failure/detail.vue b/pageSub/failure/detail.vue
new file mode 100644
index 0000000..757841a
--- /dev/null
+++ b/pageSub/failure/detail.vue
@@ -0,0 +1,1832 @@
+
+
+
+
+
+ 序号
+
+
+
+ 车牌号
+
+
+
+
+
+
+ 车辆型号
+
+
+
+ 车辆品牌
+
+
+
+ 故障来源
+
+
+
+
+
+
+ 故障状态
+
+
+
+
+
+
+ 故障描述
+
+
+
+
+
+
+ 故障类型
+
+
+
+
+
+
+
+
+
+ 解决方案 (详细)
+
+
+
+ 公里数 (km)
+
+
+
+ 保修开始时间
+
+
+
+
+
+ 保修结束时间
+
+
+
+
+
+ 费用类型
+
+
+
+
+
+
+ 工时费(元)
+
+
+
+ 配件费(元)
+
+
+
+ 付款方
+
+
+
+
+
+
+ 收款方
+
+
+
+
+
+
+ 故障上报时间
+
+
+
+
+
+ 故障解决时间
+
+
+
+
+
+ 维修效率 (小时)
+
+
+
+ 解决路径
+
+
+
+
+ 是否停运
+
+
+
+
+
+
+ 停运时长 (小时)
+
+
+
+ 客户需求
+
+
+
+ 是否拖车
+
+
+
+
+
+
+ 拖车费用 (元)
+
+
+
+ 客户名称
+
+
+
+ 付款状态
+
+
+
+
+
+
+ 执行人
+
+
+
+ 附件上传
+
+
+
+
+
+ 零部件更换照片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageSub/failure/index.vue b/pageSub/failure/index.vue
new file mode 100644
index 0000000..d78161c
--- /dev/null
+++ b/pageSub/failure/index.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+ 已解决
+
+
+
+ 未解决
+
+
+ 上报人: {{ item.implementerName || "" }}
+
+
+ 上报时间: {{ formatDateTime(item.failureTime, "minute") }}
+
+
+ 解决时间: {{ formatDateTime(item.solutionTime, "minute") }}
+
+
+ 维修效率(时长): {{ item.timeConsuming || "" }}
+
+
+ 故障来源: {{ item.faultSourceName }}
+
+
+ 故障状态: {{ item.failureStatusName }}
+
+
+ 故障类型: {{ item.typeName || item.type }}
+ 车牌号: {{ item.plateNumber }}
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
diff --git a/pageSub/returnCarCost/detail.vue b/pageSub/returnCarCost/detail.vue
new file mode 100644
index 0000000..0deb742
--- /dev/null
+++ b/pageSub/returnCarCost/detail.vue
@@ -0,0 +1,1669 @@
+
+
+
+
+
+
+
+ 车牌号
+
+
+
+ 客户名称
+
+
+
+ 项目名称
+
+
+
+ 交车时间
+
+
+
+
+ 还车时间
+
+
+
+
+ 账单状态
+
+
+
+ 有无无忧包
+
+
+
+
+
+
+
+
+
+ {{ t.depName }}
+
+
+
+
+
+
+
+ 未处理违章信息-暂无数据
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ row.unlawfulAct }}
+
+
+ {{ row.penaltyAmount || "" }}
+
+
+ {{ row.remark || "" }}
+
+
+
+
+
+
+ 事故信息-暂无数据
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ row.accidentTypeDicName }}
+
+
+ {{ row.responsibilityDicName || "" }}
+
+
+ {{ row.remark || "" }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ row.costSubjectName }}
+
+
+ {{ row.amount || "" }}
+
+
+
+
+
+
+
+ 说明
+
+
+
+
+
+
+
+
+
+
+ 保证金
+
+
+
+ 待结算费用
+
+
+
+ 退回客户费用
+
+
+
+ 客户应补缴费用
+
+
+
+
+
+ 账单状态
+
+
+
+
+
+
+ 押金条是否收回
+
+
+
+
+
+
+ 押金条照片
+
+
+
+ 支付凭证
+
+
+
+
+ {{ item.fileName }}
+ 预览
+
+
+
+
+
+ 审批意见
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 审批信息
+
+
+
+
+
+ 执行人:{{ item.auditorName }}
+ 审批结果:{{ item.auditStatusName }}
+
+ 审批意见:{{ item.auditOpinion }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageSub/returnCarCost/index.vue b/pageSub/returnCarCost/index.vue
new file mode 100644
index 0000000..a5a7ba1
--- /dev/null
+++ b/pageSub/returnCarCost/index.vue
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 待审批
+
+
+
+ 已通过
+
+
+
+ 驳回
+
+
+ 车牌号: {{ item.plateNumber || "--" }}
+
+
+ 项目名称: {{ item.projectName || "--" }}
+
+
+ 还车时间: {{ formatDateTime(item.returnDate) }}
+
+
+ 当前审批人: {{ item.approvalName }}
+
+
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pageSub/truckPreparation/detail.vue b/pageSub/truckPreparation/detail.vue
new file mode 100644
index 0000000..338b341
--- /dev/null
+++ b/pageSub/truckPreparation/detail.vue
@@ -0,0 +1,1600 @@
+
+
+
+
+
+
+ 车牌号
+
+
+
+ 车型
+
+
+
+
+ 资产运营城市
+
+
+
+ 停车场
+
+
+
+
+
+
+ 仪表盘里程
+
+
+
+
+ 剩余氢量
+
+
+
+
+
+
+
+
+
+
+ 剩余电量
+
+
+
+
+
+ 整备类型
+
+
+
+
+
+
+ 在库时长(天)
+
+
+
+
+ 试车时间
+
+
+ confirmTestTime(e)"
+ @cancel="lastTestRunDatePicker = false"
+ >
+
+
+
+
+
+
+
+
+
+
+ 商业险到期时间
+
+
+
+
+ 交强险到期时间
+
+
+
+
+
+
+
+
+
+
+ {{ `序号${index + 1}` }}
+ 查看历史记录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 瑕疵照片
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.dataCategory }}
+
+
+ {{ row.dataName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ item.maintainItem + "保养"
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageSub/truckPreparation/index.vue b/pageSub/truckPreparation/index.vue
new file mode 100644
index 0000000..d6a387b
--- /dev/null
+++ b/pageSub/truckPreparation/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 未整备
+
+
+
+ 整备过期
+
+
+
+ 已整备
+
+
+
+ 品牌: {{ item.brandName }}
+
+
+ 车型: {{ item.modelName }}
+
+
+ 停车场: {{ item.parkingName }}
+
+
+ 整备类型: {{ item.preparationTypeName }}
+
+
+ 备车完成时间:
+ {{ formatDateTime(item.preparationCompletionTime) }}
+
+
+ 下次整备时间: {{ formatDateTime(item.nextPreparationDate) }}
+ 车牌号: {{ item.plateNumber }}
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..3aaf5c5
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,277 @@
+{
+ "easycom": {
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+ },
+ "pages": [
+ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "首页",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/login/login",
+ "style": {
+ "navigationBarTitleText": "广交投氢能",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/map/index",
+ "style": {
+ "navigationBarTitleText": "地图",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/my/my",
+ "style": {
+ "navigationBarTitleText": "我的",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "components/tabBar/tabBar",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/standbyVehicle/index",
+ "style": {
+ "navigationBarTitleText": "备车管理",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/standbyVehicle/detail",
+ "style": {
+ "navigationBarTitleText": "备车单",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/standbyVehicle/detailInfo",
+ "style": {
+ "navigationBarTitleText": "备车信息",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/truckRent/index",
+ "style": {
+ "navigationBarTitleText": "交车管理",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/truckRent/detail",
+ "style": {
+ "navigationBarTitleText": "交车单",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/webview/index",
+ "style": {
+ "navigationBarTitleText": "webview",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/face/index",
+ "style": {
+ "navigationBarTitleText": "e签宝人脸验证",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/returnCar/index",
+ "style": {
+ "navigationBarTitleText": "还车管理",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/returnCar/detail",
+ "style": {
+ "navigationBarTitleText": "还车单",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/returnCar/cost",
+ "style": {
+ "navigationBarTitleText": "费用核算",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/audit/index",
+ "style": {
+ "navigationBarTitleText": "在线审批",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/audit/detail",
+ "style": {
+ "navigationBarTitleText": "合同审批详情",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/unusualActionApply/index",
+ "style": {
+ "navigationBarTitleText": "异动管理",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/unusualActionApply/detail",
+ "style": {
+ "navigationBarTitleText": "异动申请",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/maintain/index",
+ "style": {
+ "navigationBarTitleText": "保养待办",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "pages/maintain/detail",
+ "style": {
+ "navigationBarTitleText": "保养信息",
+ "enablePullDownRefresh": true
+ }
+ }
+ ],
+ "subPackages": [
+ {
+ "root": "pageSub",
+ "pages": [
+ {
+ "path": "failure/index",
+ "style": {
+ "navigationBarTitleText": "故障台账",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "failure/detail",
+ "style": {
+ "navigationBarTitleText": "故障上报",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "returnCarCost/index",
+ "style": {
+ "navigationBarTitleText": "还车费用核算",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "returnCarCost/detail",
+ "style": {
+ "navigationBarTitleText": "还车费用核算",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "truckPreparation/index",
+ "style": {
+ "navigationBarTitleText": "车辆整备",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "truckPreparation/detail",
+ "style": {
+ "navigationBarTitleText": "备车信息",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "annualReview/index",
+ "style": {
+ "navigationBarTitleText": "年审待办",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ },
+ {
+ "path": "annualReview/detail",
+ "style": {
+ "navigationBarTitleText": "年审",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 50
+ }
+ }
+ ]
+ }
+ ],
+ "tabBar": {
+ "color": "#7A7E83",
+ "selectedColor": "#3cc51f",
+ "borderStyle": "white",
+ "backgroundColor": "#f4f5f7",
+ "custom": true,
+ "list": [
+ {
+ "pagePath": "pages/index/index",
+ // "iconPath": "home",
+ // "selectedIconPath": "home-fill",
+ "text": "首页"
+ // "customIcon": false
+ },
+ {
+ "pagePath": "pages/map/index",
+ // "iconPath": "home",
+ // "selectedIconPath": "home-fill",
+ "text": "地图"
+ // "customIcon": false
+ },
+ {
+ "pagePath": "pages/my/my",
+ // "iconPath": "account",
+ // "selectedIconPath": "account-fill",
+ "text": "我的"
+ // "customIcon": false
+ }
+ ],
+ "current": 0
+ },
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "广交投",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "uniIdRouter": {}
+}
diff --git a/pages/audit/detail.vue b/pages/audit/detail.vue
new file mode 100644
index 0000000..d1ab081
--- /dev/null
+++ b/pages/audit/detail.vue
@@ -0,0 +1,1052 @@
+
+
+
+ {{ datas.customerName }}
+
+
+ {{ datas.templateName }}
+
+
+
+ 销售经理
+
+ {{ datas.bdName }}
+
+
+
+ 经办人
+
+ {{ datas.createrName }}
+
+
+
+ 项目名称
+
+ {{ datas.projectName }}
+
+
+
+ 合同金额
+
+ {{ _contractAmount }}
+
+
+
+ 付款方式
+
+ {{
+ `${datas.payWayName + datas.payPeriodName},租金及服务费:${
+ datas.contractRentOrder.contractTotal
+ } 押金:${datas.contractRentOrder.guarantee} 共计${_totalCost},${
+ datas.contractRentOrder.truckQuantity
+ }台车`
+ }}
+
+
+
+
+ 合同生效日期
+
+ {{ formatDateTime(datas.signingDate) }}
+
+
+
+
+ 合同失效日期
+
+ {{ formatDateTime(datas.expireDate) }}
+
+
+
+
+ 签约公司
+
+ {{ datas.orgName || "" }}
+
+
+
+ 备注
+
+ {{ datas.remark || "" }}
+
+
+
+
+ 文件
+
+
+
+
+ {{ item.name }}
+ 预览
+
+
+
+
+
+
+ 用印合同
+
+
+
+
+
+
+ {{ item.name }}
+ 预览
+
+
+
+
+
+
+ 审批信息
+
+
+
+
+
+
+ 执行人:{{ item.auditorName }}
+ 审批结果:{{ item.auditStatusName }}
+ 审批意见:{{ item.auditOpinion }}
+
+
+
+
+
+ 审批意见:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/audit/index.vue b/pages/audit/index.vue
new file mode 100644
index 0000000..da66e06
--- /dev/null
+++ b/pages/audit/index.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ @{{ item.approvalName }},请处理待处理审批单:
+
+
+
+
+
+ {{ item.createName }}提交的{{ item.contractTypeName }}申请
+
+
+
+ {{ item.customerName }}
+
+
+ 等待
+ {{ item.waitTime || "--" }}
+ 小时
+
+
+
+
+
+
+
+
+
+
+
+ 合同提交时间: {{ formatDateTime(item.createTime) }}
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/face/index.vue b/pages/face/index.vue
new file mode 100644
index 0000000..ac96dea
--- /dev/null
+++ b/pages/face/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+ 中间页唤起上链公证签刷脸小程序
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..e729822
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,673 @@
+
+
+
+ 业务菜单{{ _isOnline ? "" : "(当前接口为测试环境)" }}
+
+ BI报表
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/login/login.vue b/pages/login/login.vue
new file mode 100644
index 0000000..8839a2b
--- /dev/null
+++ b/pages/login/login.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+ Hello!
+ 欢迎使用广交投氢能车辆运营监控
+
+
+
+
+
+
+ 欢 迎 登 录
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/login/user-login/index.vue b/pages/login/user-login/index.vue
new file mode 100644
index 0000000..226f7b5
--- /dev/null
+++ b/pages/login/user-login/index.vue
@@ -0,0 +1,372 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 阅读并同意
+ 《用户服务协议》和《隐私政策》
+
+
+
+
+
+
+
+
+
+ {{ `登 录` }}
+
+
+
+
+
+ 隐私协议
+
+ 一、概述
+ 本小程序是由羚牛氢能科技(上海)有限公司开发运营的一款产品(以下简称我们),帮助解决用户开通搭建小程序公众号网站方面遇到的问题,可以达到快速上线的目的。我们深知个人信息对您而言的重要性,也感谢您对我们的信任。我们将通过本政策向您说明互助文档会如何收集、存储、保护、使用及对外提供您的信息,并说明您享有的权利,其中要点如下:
+
+ 1.
+ 为了便于您了解您在使用我们的服务时,我们需要收集的信息类型与用途,我们将结合具体服务向您逐一说明。
+
+
+ 2.
+ 为了向您提供服务所需,我们会按照合法、正当、必要的原则收集您的信息。
+
+
+ 3.
+ 如果为了向您提供服务而需要将您的信息共享至第三方,我们将评估该第三方收集信息的合法性、正当性、必要性。我们将要求第三方对您的信息采取保护措施并严格遵守相关法律法规与监管要求。另外,我们会按照法律法规及国家标准的要求以确认协议、具体场景下的文案确认、弹窗提示等形式征得您的同意或确认第三方已经征得您的同意。
+
+
+
+
+ 二、我们如何收集信息:
+ 在您使用互助文档以下各项业务功能(以下简称“服务”)的过程中,我们需要收集您的一些信息,用以向您提供服务、提升我们的服务质量、保障您的账户和资金安全以及符合国家法律法规及监管规定:
+
+ 1.
+ 依据法律法规及监管规定进行实名制管理在您注册互助文档账户或使用互助文档服务时,您需提供手机号码或者第三方账号登陆信息作为账户登录名。
+
+
+ 2. 身份验证
+
+ (1)登录验证
+ 为了让您更安全、便捷地登录互助文档,我们提供自动登陆服务,您也可以选择密码登录、短信验证码登录等其他方式;
+
+
+ (2)重要操作行为验证
+ 为了保障您的账户安全,在您进行一些重要的账户操作时(例如:查看、收藏、下载应用内资料内容时),我们需要验证您的身份,为此您可能需向第三方安全服务提供商提交身份验证信息;如您不同意提供前述信息,您将无法完成特定操作,但不影响您使用我们提供的其他服务;
+
+
+
+
+
+ 3. 获取外部存储权限,获取设备ID, MAC地址
+ 获取外部存储权限用于:记录登录同意的信息,下次登录不用重新选择。获取设备ID,MAC地址,设备ID用于记录用户的唯一性,MAC地址获取是用于确定用户是属于真实用户。
+ 本程序嵌入了百度插移动统计分析sdk,百度移动SDK隐私政策说明,具体隐私政策准则按百度移动SDK隐私为准
+
+
+ 4. 其他
+ 请您理解,我们向您提供的服务是不断更新和发展的。如您选择使用了前述说明当中尚未涵盖的其他服务,基于该服务我们需要收集您的信息的,我们会通过页面提示、交互流程、协议约定的方式另行向您说明信息收集的范围与目的,并征得您的同意。我们会按照本政策以及相应的用户协议约定使用、存储、对外提供及保护您的信息;如您选择不提供前述信息,您可能无法使用某项或某部分服务,但不影响您使用我们提供的其他服务。此外,第三方主体可能会通过互助文档APP向您提供服务。当您进入第三方主体运营的服务页面时,请注意相关服务由第三方主体向您提供。涉及到第三方主体向您收集个人信息的,建议您仔细查看第三方主体的隐私政策或协议约定。
+
+
+
+ 三、我们如何存储和保护信息
+
+ 1.
+ 我们在中华人民共和国境内收集和产生的个人信息将存储在中华人民共和国境内。如部分服务涉及跨境业务,我们需要向境外机构传输境内收集的相关个人信息的,我们会按照法律法规和相关监管部门的规定执行,向您说明个人信息出境的目的以及涉及的个人信息类型,征得您的同意,并通过签订协议、现场核查等有效措施,要求境外机构为所获得的您的个人信息保密。我们仅在本政策所述目的所必需期间和法律法规及监管规定的时限内保存您的个人信息。
+
+
+ 2.
+ 为了保障您的信息安全,我们在收集您的信息后,将采取各种合理必要的措施保护您的信息。例如,在技术开发环境当中,我们仅使用经过去标识化处理的信息进行统计分析;对外提供研究报告时,我们将对报告中所包含的信息进行去标识化处理。我们会将去标识化后的信息与可用于恢复识别个人的信息分开存储,确保在针对去标识化信息的后续处理中不重新识别个人。
+
+
+ 3.
+ 我们承诺我们将使信息安全保护达到业界领先的安全水平。为保障您的信息安全,我们致力于使用各种安全技术及配套的管理体系来尽量降低您的信息被泄露、毁损、误用、非授权访问、非授权披露和更改的风险。例如:通过网络安全层软件(SSL)进行加密传输、信息加密存储、严格限制数据中心的访问。传输和存储个人敏感信息时,我们将采用加密、权限控制、去标识化等安全措施。
+
+
+ 4.
+ 请您务必妥善保管好您的互助文档登录名及其他身份要素。您在使用互助文档服务时,我们会通过您的登录名及其他身份要素来识别您的身份。一旦您泄漏了前述信息,您可能会蒙受损失,并可能对您产生不利。如您发现互助文档登录名及/或其他身份要素可能或已经泄露时,请您立即和我们取得联系,以便我们及时采取相应措施以避免或降低相关损失。
+
+
+ 5.
+ 在您终止使用互助文档服务后,我们会停止对您的信息的收集和使用,法律法规或监管部门另有规定的除外。如我们停止运营,我们将及时停止收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/maintain/detail.vue b/pages/maintain/detail.vue
new file mode 100644
index 0000000..44d07c9
--- /dev/null
+++ b/pages/maintain/detail.vue
@@ -0,0 +1,2060 @@
+
+
+
+
+
+
+
+
+
+
+
+ 车牌号
+
+
+
+ 资产状态
+
+
+
+
+ 车辆型号
+
+
+
+
+ 公告车型
+
+
+
+
+ 所属公司
+
+
+
+
+ 项目名称
+
+
+
+
+ 仪表盘里程
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ row.maintainItem }}
+
+
+ {{ row.maintenanceDueTime || "" }}
+
+
+ {{ row.maintenanceDueMileage || 0 }}
+
+
+ 查看
+
+
+
+
+
+
+
+
+
+
+
+ 维修站
+
+
+
+
+
+
+ 实际保养日期
+ confirmRealDate(e)"
+ @cancel="showRealDatePicker = false"
+ >
+
+
+
+
+ 实际保养里程
+
+
+
+
+
+
+ 保养项目{{ index + 1 }}
+
+
+
+
+
+
+
+
+
+ 工时费
+
+
+
+
+ 材料费
+
+
+
+
+ 材料费(公司自采)
+
+
+
+
+
+
+
+ 超出费用
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公司应支付
+
+
+
+
+ 公司已支付
+
+
+ 收款方:维修站
+
+
+ 公司支付凭证
+
+
+
+
+ {{ item.fileName }}
+ 预览
+
+
+
+ 客户应支付
+
+
+
+
+ 客户已支付
+
+
+
+
+ 收款方
+
+
+
+
+
+
+ 客户支付凭证
+
+
+
+
+ {{ t.fileName }}
+ 预览
+
+
+
+ 超出费用(总计)
+
+
+
+
+ 保养单据
+
+
+
+
+ {{ t.fileName }}
+ 预览
+
+
+
+ 保养照片
+
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ item.maintainItem + "保养"
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/maintain/index.vue b/pages/maintain/index.vue
new file mode 100644
index 0000000..33378ba
--- /dev/null
+++ b/pages/maintain/index.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 未保养
+
+
+
+ 已保养
+
+
+
+ 项目名称: {{ item.projectName || "--" }}
+
+
+ 资产状态: {{ item.truckRentStatusName }}
+
+
+ 维修站: {{ item.maintainSiteName || "--" }}
+
+
+ 负责人: {{ item.handlerName || "--" }}
+
+
+ 公司应支付: {{ item.companyPayable || 0 }}
+ 公司已支付: {{ item.companyPayed || 0 }}
+
+
+ 客户应支付: {{ item.customerPayable || 0 }}
+ 客户已支付: {{ item.customerPayed || 0 }}
+
+
+ 车牌号: {{ item.plateNumber }}
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/map/index.vue b/pages/map/index.vue
new file mode 100644
index 0000000..e942e49
--- /dev/null
+++ b/pages/map/index.vue
@@ -0,0 +1,1639 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 里程单位(km)
+
+
+ 表示未对接车机数据
+
+
+
+ 车牌
+
+
+
+ 行驶里程
+ {{
+ mileageSortOrder === "desc" ? "↓" : "↑"
+ }}
+
+
+
+ 仪表盘
+
+
+ 部门
+
+
+
+
+
+
+ {{
+ current === 0 ? item.plateNumber : item.stationName
+ }}
+ {{
+ item.dayMileage || 0
+ }}
+
+ {{
+ item.totalMileage
+ }}
+
+
+
+ {{
+ item.shortDepName || "--"
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/my/my.vue b/pages/my/my.vue
new file mode 100644
index 0000000..c40fb22
--- /dev/null
+++ b/pages/my/my.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+ 退出登录
+
+
+ 退出账号
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/returnCar/cost.vue b/pages/returnCar/cost.vue
new file mode 100644
index 0000000..cacf59b
--- /dev/null
+++ b/pages/returnCar/cost.vue
@@ -0,0 +1,1917 @@
+
+
+
+
+
+
+
+ 车牌号
+
+
+
+ 客户名称
+
+
+
+ 交车时间
+
+
+
+
+ 还车时间
+
+
+
+
+
+
+
+
+
+
+ {{ t.depName }}
+
+
+
+
+ 金额
+
+
+
+
+
+
+ {{ t.costStatus == 1 ? "已提交" : "未提交" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 说明
+
+
+
+
+
+
+
+
+
+ 项目
+
+
+
+
+
+
+
+
+ 金额
+
+
+
+
+
+ 备注
+
+
+
+
+ 照片
+
+
+
+
+ 附件
+
+
+
+
+
+
+ {{ t.fileName }}
+ 预览
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保证金
+
+
+
+ 待结算费用
+
+
+
+ 总计
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/returnCar/detail.vue b/pages/returnCar/detail.vue
new file mode 100644
index 0000000..7e1c4cd
--- /dev/null
+++ b/pages/returnCar/detail.vue
@@ -0,0 +1,3869 @@
+
+
+
+
+
+
+
+
+
+
+ 合同编号
+
+
+
+ 项目名称
+
+
+
+ 客户名称
+
+
+
+ 客户联系人
+
+
+
+ 客户联系人手机
+
+
+
+ 销售经理
+
+
+
+ 车牌号
+
+
+
+ 品牌
+
+
+
+ 车型
+
+
+
+
+
+ 还车人
+ 授权人:{{ datas.take.takeName || "" }}
+
+
+
+ 还车人电话
+ 授权人联系电话:{{ datas.take.takePhone || "" }}
+
+
+
+
+ 还车人身份证
+ 授权人身份证:{{ datas.take.takeIdNo || "" }}
+
+
+
+
+ 还车里程
+ 交车里程:{{ datas.take.takeMileage || "" }}
+ km
+
+
+
+ km
+
+
+
+
+ 还车电量
+ 交车电量:{{ datas.take.electricity || "" }}
+ %
+
+
+
+ %
+
+
+
+
+ 还车氢量
+ 交车氢量:{{ datas.take.hydrogenMeasure || ""
+ }}{{ datas.take.hydrogenUnitName || "" }}
+
+
+
+ {{ datas.take.hydrogenUnitName || "" }}
+
+
+
+
+
+
+ 还车时间
+ 交车时间:{{
+ formatDateTime(
+ datas.take && datas.take.handoverDate,
+ "hour"
+ ) || ""
+ }}
+
+
+
+
+
+
+ 还车地点
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 接车服务费
+
+
+ 元
+
+
+
+
+
+
+
+
+
+
+
+ 仪表盘照片
+
+
+
+ 正面照片
+
+
+
+ 左前方照片
+
+
+
+ 右前方照片
+
+
+
+ 左后方照片
+
+
+
+ 右后方照片
+
+
+
+ 瑕疵照片
+
+
+
+ 轮胎照片
+
+
+
+ 轮胎照片
+
+
+
+ 左前轮
+
+
+
+ 左后轮(内)
+
+
+
+ 左后轮(外)
+
+
+
+ 右前轮
+
+
+
+ 右后轮(内)
+
+
+
+ 右后轮(外)
+
+
+
+ 备胎
+
+
+
+
+
+
+ 左前轮
+
+
+
+ 右前轮
+
+
+
+
+
+ 左前外
+
+
+
+ 左前内
+
+
+
+ 右前外
+
+
+
+ 右前内
+
+
+
+
+ 左中内
+
+
+
+ 左中外
+
+
+
+ 左后内
+
+
+
+ 左后外
+
+
+
+ 右中内
+
+
+
+ 右中外
+
+
+
+ 右后内
+
+
+
+ 右后外
+
+
+
+ 备胎
+
+
+
+
+ 底盘照片
+
+
+
+ 正前方底部
+
+
+
+ 左侧前部底部
+
+
+
+ 左侧后方底部
+
+
+
+ 右侧前方底部
+
+
+
+ 右侧后方底部
+
+
+
+ 正后方底部
+
+
+
+
+ 其它
+
+
+
+
+
+
+ 备注
+
+
+
+ 相关材料
+
+
+
+ 司机证件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.dataCategory }}
+
+
+ {{ row.dataName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/returnCar/index.vue b/pages/returnCar/index.vue
new file mode 100644
index 0000000..6517068
--- /dev/null
+++ b/pages/returnCar/index.vue
@@ -0,0 +1,582 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 合同编号: {{ item.contractNo }}
+
+
+ 项目名称: {{ item.projectName }}
+
+
+ 客户名称: {{ item.customerName }}
+
+
+
+ 交车地点: {{ item.handoverAddressName }}
+
+
+ 还车地点: {{ item.returnLocationName }}
+
+
+ 还车时间: {{ formatDateTime(item.returnDate) }}
+ 车牌号: {{ item.plateNumber }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+ 停车场确认
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/standbyVehicle/detail.vue b/pages/standbyVehicle/detail.vue
new file mode 100644
index 0000000..79a26f9
--- /dev/null
+++ b/pages/standbyVehicle/detail.vue
@@ -0,0 +1,591 @@
+
+
+
+
+ 合同编号
+
+
+
+ 项目名称
+
+
+
+ 客户名称
+
+
+
+ 备车数量
+
+
+
+ 交车区域
+
+
+
+ 交车地点
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+ 品牌
+
+
+
+ 车型
+
+
+
+ 车牌
+
+
+
+ 约定交车日期
+
+
+
+
+ 状态
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/standbyVehicle/detailInfo.vue b/pages/standbyVehicle/detailInfo.vue
new file mode 100644
index 0000000..d4765a9
--- /dev/null
+++ b/pages/standbyVehicle/detailInfo.vue
@@ -0,0 +1,1031 @@
+
+
+
+ 品牌
+
+
+
+
+
+
+ 型号
+
+
+
+ 车牌号
+
+
+
+
+
+
+ 车架号
+
+
+
+ 车身广告
+
+
+
+
+
+
+ 尾板
+
+
+
+
+
+
+ 是否有挂
+
+
+
+
+
+
+ 挂车牌号
+
+
+
+ 合同交车日期
+
+
+
+ 约定交车日期
+
+
+
+ 运维预计交车日期
+
+
+
+
+
+ 是否一致
+
+
+
+
+ 备注
+
+
+
+
+
+
+ 备车完成
+
+
+
+
+ 备车完成时间
+
+
+
+
+ 瑕疵照片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.dataCategory }}
+
+
+ {{ row.dataName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/standbyVehicle/index.vue b/pages/standbyVehicle/index.vue
new file mode 100644
index 0000000..174a2e9
--- /dev/null
+++ b/pages/standbyVehicle/index.vue
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 合同编号: {{ item.contractNo }}
+
+
+ 客户名称: {{ item.customerName }}
+
+
+ 合同约定数量: {{ item.contractVehicleQuantity }}
+
+
+ 待备车数量: {{ item.standbyVehicleQuantity }}
+
+
+ 合同签订时间: {{ formatDateTime(item.signingDate) }}
+ 约定交车时间: {{ formatDateTime(item.appointedDate) }}
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
diff --git a/pages/truckRent/detail.vue b/pages/truckRent/detail.vue
new file mode 100644
index 0000000..030c92c
--- /dev/null
+++ b/pages/truckRent/detail.vue
@@ -0,0 +1,3331 @@
+
+
+
+
+
+
+
+
+
+
+ 合同编号
+
+
+
+ 项目名称
+
+
+
+ 客户名称
+
+
+
+ 客户联系人
+
+
+
+ 客户联系人手机
+
+
+
+ 销售经理
+
+
+
+ 授权人
+
+
+
+
+
+
+ 授权人联系电话
+
+
+
+ 授权人身份证
+
+
+
+ 交车区域
+
+
+
+ 驾驶培训
+
+
+
+
+
+
+
+
+ 车牌号
+
+
+
+
+
+
+
+
+
+ 品牌
+
+
+
+ 车型
+
+
+
+ 换车备注
+
+
+
+ 交车里程
+
+
+ km
+
+
+
+
+ 交车电量
+
+
+ %
+
+
+
+
+ 交车氢量
+
+
+
+
+
+
+
+
+
+ 交车地点
+
+
+
+ 交车时间
+
+
+
+
+
+ 送车服务费
+
+
+ 元
+
+
+
+
+
+
+
+
+
+ 仪表盘照片
+
+
+
+ 正面照片
+
+
+
+ 左前方照片
+
+
+
+ 右前方照片
+
+
+
+ 左后方照片
+
+
+
+ 右后方照片
+
+
+
+ 瑕疵照片
+
+
+
+
+ 轮胎照片
+
+
+
+ 轮胎照片
+
+
+
+ 左前轮
+
+
+
+ 左后轮(内)
+
+
+
+ 左后轮(外)
+
+
+
+ 右前轮
+
+
+
+ 右后轮(内)
+
+
+
+ 右后轮(外)
+
+
+
+ 备胎
+
+
+
+
+
+
+ 左前轮
+
+
+
+ 右前轮
+
+
+
+
+
+ 左前外
+
+
+
+ 左前内
+
+
+
+ 右前外
+
+
+
+ 右前内
+
+
+
+
+ 左中内
+
+
+
+ 左中外
+
+
+
+ 左后内
+
+
+
+ 左后外
+
+
+
+ 右中内
+
+
+
+ 右中外
+
+
+
+ 右后内
+
+
+
+ 右后外
+
+
+
+ 备胎
+
+
+
+
+ 底盘照片
+
+
+
+ 正前方底部
+
+
+
+ 左侧前部底部
+
+
+
+ 左侧后方底部
+
+
+
+ 右侧前方底部
+
+
+
+ 右侧后方底部
+
+
+
+ 正后方底部
+
+
+
+
+ 其它
+
+
+
+
+
+ 备注
+
+
+
+ 培训文件签字照片
+
+
+
+ 司机证件
+
+
+
+ 安全培训照片
+
+
+
+
+ 安全培训附件
+
+
+
+
+
+
+ {{ item.name }}
+ 预览
+
+
+
+
+
+ 审批意见
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.dataCategory }}
+
+
+ {{ row.dataName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/truckRent/detailInfo.vue b/pages/truckRent/detailInfo.vue
new file mode 100644
index 0000000..2f03b65
--- /dev/null
+++ b/pages/truckRent/detailInfo.vue
@@ -0,0 +1,625 @@
+
+
+
+ 品牌
+
+
+
+
+
+
+ 型号
+
+
+
+ 车牌号
+
+
+
+
+
+
+ 车架号
+
+
+
+ 车身广告
+
+
+
+
+
+
+ 尾板
+
+
+
+
+
+
+ 是否有挂
+
+
+
+
+
+
+ 挂车牌号
+
+
+
+ 合同交车日期
+
+
+
+ 约定交车日期
+
+
+
+ 运维预计交车日期
+
+
+
+
+
+ 是否一致
+
+
+
+
+ 备注
+
+
+
+
+
+
+ 备车完成
+
+
+
+
+ 备车完成时间
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.dataCategory }}
+
+
+ {{ row.dataName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/truckRent/index.vue b/pages/truckRent/index.vue
new file mode 100644
index 0000000..f0b0ba8
--- /dev/null
+++ b/pages/truckRent/index.vue
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 待安检
+
+
+
+ 驳回
+
+
+
+ 已通过
+
+
+
+ 待审批
+
+
+ 合同编号: {{ item.contractNo }}
+
+
+ 项目名称: {{ item.projectName }}
+
+
+ 客户名称: {{ item.customerName }}
+
+
+ 交车区域: {{ item.deliveryAreaName }}
+
+
+ 交车地点: {{ item.handoverAddress }}
+
+
+ 交车时间: {{ formatDateTime(item.handoverDate) }}
+ 车牌号: {{ item.plateNumber }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/truckRent/modal.vue b/pages/truckRent/modal.vue
new file mode 100644
index 0000000..709c77f
--- /dev/null
+++ b/pages/truckRent/modal.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+ 请确认退还车辆有无无忧包?
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/unusualActionApply/detail.vue b/pages/unusualActionApply/detail.vue
new file mode 100644
index 0000000..e8c6597
--- /dev/null
+++ b/pages/unusualActionApply/detail.vue
@@ -0,0 +1,1896 @@
+
+
+
+
+
+ 车牌号
+
+
+
+
+
+
+
+ 异动驶出停车场
+
+
+
+
+
+
+ 异动城市
+
+
+
+
+
+
+ 异动开始里程
+
+
+ Km
+
+
+
+
+
+ 异动结束里程
+
+
+ Km
+
+
+
+
+ 异动里程
+
+
+ Km
+
+
+
+
+ 异动开始氢量
+
+
+
+
+
+
+
+
+
+ 异动结束氢量
+
+
+
+
+
+
+
+
+
+ 异动开始电量
+
+
+ %
+
+
+
+
+ 异动结束电量
+
+
+ %
+
+
+
+
+
+
+ 异动类型
+
+
+
+
+
+
+ 异动原因
+
+
+
+ 预计异动里程
+
+
+ Km
+
+
+
+
+ 异动开始时间
+ confirmStartTime(e)"
+ @cancel="showStartTimePicker = false"
+ >
+
+
+
+
+ 预计异动结束时间
+ confirmPlanEndTime(e)"
+ @cancel="showPlanEndTimePicker = false"
+ >
+
+
+
+
+ 异动结束时间
+ confirmEndTime(e)"
+ @cancel="showEndTimePicker = false"
+ >
+
+
+
+
+
+ 异动目的地
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 异动结束停车场
+
+
+
+
+
+
+ 备注
+
+
+
+ 审批意见
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unusualActionApply/index.vue b/pages/unusualActionApply/index.vue
new file mode 100644
index 0000000..2575d67
--- /dev/null
+++ b/pages/unusualActionApply/index.vue
@@ -0,0 +1,416 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 待审批
+
+
+
+ 待提交
+
+
+
+ 驳回
+
+
+
+ 异动超时
+
+
+
+ 已撤销
+
+
+
+ 进行中
+
+
+
+ 异动完成
+
+
+
+ 车牌号: {{ item.plateNumber || "" }}
+
+
+ 申请人: {{ item.applyUserName || "" }}
+
+
+ 审批人: {{ item.approvalName || "" }}
+
+
+ 开始时间:
+ {{ formatDateTime(item.transactionStartTime, "minute") }}
+
+
+ 异动目的地: {{ item.transactionAddressName || "" }}
+
+
+
+
+
+
+
+
+
+
+ 没有更多数据了
+
+
+
+
+
+
+
+
diff --git a/pages/webview/index.vue b/pages/webview/index.vue
new file mode 100644
index 0000000..1e79b71
--- /dev/null
+++ b/pages/webview/index.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/patches/uview-ui+2.0.38.patch b/patches/uview-ui+2.0.38.patch
new file mode 100644
index 0000000..b9446b5
--- /dev/null
+++ b/patches/uview-ui+2.0.38.patch
@@ -0,0 +1,32 @@
+diff --git a/node_modules/uview-ui/components/u-upload/u-upload.vue b/node_modules/uview-ui/components/u-upload/u-upload.vue
+index eb55854..ad84c0e 100644
+--- a/node_modules/uview-ui/components/u-upload/u-upload.vue
++++ b/node_modules/uview-ui/components/u-upload/u-upload.vue
+@@ -20,14 +20,15 @@
+ />
+
+
+- {{item.isVideo || (item.type && item.type === 'video') ? '视频' : '文件'}}
++ {{ item.name || '文件' }}
+
+
\ No newline at end of file
diff --git a/static/online.png b/static/online.png
new file mode 100644
index 0000000..468c33a
Binary files /dev/null and b/static/online.png differ
diff --git a/static/pdf.png b/static/pdf.png
new file mode 100644
index 0000000..6f0bdcb
Binary files /dev/null and b/static/pdf.png differ
diff --git a/static/reset.png b/static/reset.png
new file mode 100644
index 0000000..b2ff9be
Binary files /dev/null and b/static/reset.png differ
diff --git a/static/yidong.png b/static/yidong.png
new file mode 100644
index 0000000..91ae059
Binary files /dev/null and b/static/yidong.png differ
diff --git a/static/zhengbei.png b/static/zhengbei.png
new file mode 100644
index 0000000..18ab5be
Binary files /dev/null and b/static/zhengbei.png differ
diff --git a/static/附件上传.png b/static/附件上传.png
new file mode 100644
index 0000000..f6ce930
Binary files /dev/null and b/static/附件上传.png differ
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..c4a7feb
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,24 @@
+import Vue from "vue";
+import Vuex from "vuex";
+
+Vue.use(Vuex); //vue的插件机制
+
+//Vuex.Store 构造器选项
+const store = new Vuex.Store({
+ state: {
+ current: 0,
+ resources: [],
+ },
+ mutations: {
+ SET_RESOURCES(state, data) {
+ state.resources = data;
+ },
+ },
+ actions: {
+ setResources({ commit }, data) {
+ commit("SET_RESOURCES", data);
+ },
+ },
+});
+
+export default store;
\ No newline at end of file
diff --git a/template.html b/template.html
new file mode 100644
index 0000000..96c1660
--- /dev/null
+++ b/template.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js
new file mode 100644
index 0000000..ad24a33
--- /dev/null
+++ b/uni.promisify.adaptor.js
@@ -0,0 +1,11 @@
+uni.addInterceptor({
+ returnValue(res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then ===
+ "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
+ });
+ },
+});
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..4bb9cc9
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,82 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+// $uni-color-primary: #007aff;
+$uni-color-primary: #4cd964;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:16px;
+$uni-font-size-base:16px;
+$uni-font-size-lg:18;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;
+
+@import 'uview-ui/theme.scss';
+
+$u-primary: #687379;
+$u-success: #687379;
diff --git a/uni_modules/curry-multi-select/components/curry-multi-select/curry-multi-select.vue b/uni_modules/curry-multi-select/components/curry-multi-select/curry-multi-select.vue
new file mode 100644
index 0000000..2971047
--- /dev/null
+++ b/uni_modules/curry-multi-select/components/curry-multi-select/curry-multi-select.vue
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/curry-multi-select/package.json b/uni_modules/curry-multi-select/package.json
new file mode 100644
index 0000000..7154e89
--- /dev/null
+++ b/uni_modules/curry-multi-select/package.json
@@ -0,0 +1,29 @@
+{
+ "id": "curry-multi-select",
+ "name": "下拉多选组件(支持可搜索并兼容单选)",
+ "displayName": "下拉多选组件(支持可搜索、一键清除并兼容单选)",
+ "version": "V1.0.0",
+ "description": "uni-app下拉框: 支持可搜索、多选、单选、一键清除、异步数据响应式更新. 简单好用无bug(有问题评论)(借鉴的: multiple-picker 在其基础上优化了一下)",
+ "keywords": [
+ "uni-app下拉多选",
+ "可搜索",
+ "一键清除",
+ "多选组件"
+ ],
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无 ",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "repository": "https://gitee.com/huhuyy/plugins-demo.git"
+}
\ No newline at end of file
diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md
new file mode 100644
index 0000000..016e3d2
--- /dev/null
+++ b/uni_modules/uni-data-select/changelog.md
@@ -0,0 +1,39 @@
+## 1.0.8(2024-03-28)
+- 修复 在vue2下:style动态绑定导致编译失败的bug
+## 1.0.7(2024-01-20)
+- 修复 长文本回显超过容器的bug,超过容器部分显示省略号
+## 1.0.6(2023-04-12)
+- 修复 微信小程序点击时会改变背景颜色的 bug
+## 1.0.5(2023-02-03)
+- 修复 禁用时会显示清空按钮
+## 1.0.4(2023-02-02)
+- 优化 查询条件短期内多次变更只查询最后一次变更后的结果
+- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue
+## 1.0.3(2023-01-16)
+- 修复 不关联服务空间报错的问题
+## 1.0.2(2023-01-14)
+- 新增 属性 `format` 可用于格式化显示选项内容
+## 1.0.1(2022-12-06)
+- 修复 当where变化时,数据不会自动更新的问题
+## 0.1.9(2022-09-05)
+- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框
+## 0.1.8(2022-08-29)
+- 修复 点击的位置不准确
+## 0.1.7(2022-08-12)
+- 新增 支持 disabled 属性
+## 0.1.6(2022-07-06)
+- 修复 pc端宽度异常的bug
+## 0.1.5
+- 修复 pc端宽度异常的bug
+## 0.1.4(2022-07-05)
+- 优化 显示样式
+## 0.1.3(2022-06-02)
+- 修复 localdata 赋值不生效的 bug
+- 新增 支持 uni.scss 修改颜色
+- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用)
+## 0.1.2(2022-05-08)
+- 修复 当 value 为 0 时选择不生效的 bug
+## 0.1.1(2022-05-07)
+- 新增 记住上次的选项(仅 collection 存在时有效)
+## 0.1.0(2022-04-22)
+- 初始化
diff --git a/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
new file mode 100644
index 0000000..edab65a
--- /dev/null
+++ b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
@@ -0,0 +1,562 @@
+
+
+ {{label + ':'}}
+
+
+
+ {{textShow}}
+ {{typePlaceholder}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{emptyTips}}
+
+
+ {{formatItemName(item)}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json
new file mode 100644
index 0000000..5864594
--- /dev/null
+++ b/uni_modules/uni-data-select/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-data-select",
+ "displayName": "uni-data-select 下拉框选择器",
+ "version": "1.0.8",
+ "description": "通过数据驱动的下拉框选择器",
+ "keywords": [
+ "uni-ui",
+ "select",
+ "uni-data-select",
+ "下拉框",
+ "下拉选"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.1"
+ },
+ "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-load-more"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "u",
+ "app-nvue": "n"
+ },
+ "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",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-data-select/readme.md b/uni_modules/uni-data-select/readme.md
new file mode 100644
index 0000000..eb58de3
--- /dev/null
+++ b/uni_modules/uni-data-select/readme.md
@@ -0,0 +1,8 @@
+## DataSelect 下拉框选择器
+> **组件名:uni-data-select**
+> 代码块: `uDataSelect`
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md
new file mode 100644
index 0000000..667abdb
--- /dev/null
+++ b/uni_modules/uni-load-more/changelog.md
@@ -0,0 +1,25 @@
+## 1.3.6(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.5(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.4(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 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-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
new file mode 100644
index 0000000..a4f14a5
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "Pull up to show more",
+ "uni-load-more.contentrefresh": "loading...",
+ "uni-load-more.contentnomore": "No more data"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
new file mode 100644
index 0000000..f15d510
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉显示更多",
+ "uni-load-more.contentrefresh": "正在加载...",
+ "uni-load-more.contentnomore": "没有更多数据了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
new file mode 100644
index 0000000..a255c6d
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉顯示更多",
+ "uni-load-more.contentrefresh": "正在加載...",
+ "uni-load-more.contentnomore": "沒有更多數據了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
new file mode 100644
index 0000000..a203417
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ status === 'more' ? contentdownText : status === 'loading' ? contentrefreshText : contentnomoreText }}
+
+
+
+
+
+
diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json
new file mode 100644
index 0000000..cf44bff
--- /dev/null
+++ b/uni_modules/uni-load-more/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "uni-load-more",
+ "displayName": "uni-load-more 加载更多",
+ "version": "1.3.6",
+ "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "加载更多",
+ "load-more"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "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"
+ },
+ "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"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md
new file mode 100644
index 0000000..54dc1fa
--- /dev/null
+++ b/uni_modules/uni-load-more/readme.md
@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md
new file mode 100644
index 0000000..b863bb0
--- /dev/null
+++ b/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
diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss
new file mode 100644
index 0000000..1744a5f
--- /dev/null
+++ b/uni_modules/uni-scss/index.scss
@@ -0,0 +1 @@
+@import './styles/index.scss';
diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json
new file mode 100644
index 0000000..7cc0ccb
--- /dev/null
+++ b/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"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md
new file mode 100644
index 0000000..b7d1c25
--- /dev/null
+++ b/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
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss
new file mode 100644
index 0000000..ffac4fe
--- /dev/null
+++ b/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';
diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss
new file mode 100644
index 0000000..12a11c3
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_border.scss
@@ -0,0 +1,3 @@
+.uni-border {
+ border: 1px $uni-border-1 solid;
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss
new file mode 100644
index 0000000..1ededd9
--- /dev/null
+++ b/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;
+}
diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss
new file mode 100644
index 0000000..9a0428b
--- /dev/null
+++ b/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)
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss
new file mode 100644
index 0000000..3c89528
--- /dev/null
+++ b/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);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss
new file mode 100644
index 0000000..689afec
--- /dev/null
+++ b/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 */
diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss
new file mode 100644
index 0000000..a34d08f
--- /dev/null
+++ b/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 */
+}
diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss
new file mode 100644
index 0000000..557d3d7
--- /dev/null
+++ b/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;
diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss
new file mode 100644
index 0000000..ac6f63e
--- /dev/null
+++ b/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;
+};
diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss
new file mode 100644
index 0000000..80ee62f
--- /dev/null
+++ b/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);
diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss
new file mode 100644
index 0000000..1c062d4
--- /dev/null
+++ b/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);
diff --git a/utils/auth.js b/utils/auth.js
new file mode 100644
index 0000000..b7c8a50
--- /dev/null
+++ b/utils/auth.js
@@ -0,0 +1,26 @@
+import store from './storage';
+
+export const getToken = () => store.get('token');
+export const setToken = (token) => {
+ try {
+ store.set('token', token);
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+export const removeToken = () => {
+ store.remove("token")
+}
+export const setUser = (userInof) => {
+ try {
+ store.set("userInfo", userInof);
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+export const getUser = () => store.get('userInfo');
+export const removeUser = () =>
+ store.remove("userInfo");
\ No newline at end of file
diff --git a/utils/fileManager.js b/utils/fileManager.js
new file mode 100644
index 0000000..26e11cb
--- /dev/null
+++ b/utils/fileManager.js
@@ -0,0 +1,623 @@
+/**
+ * 文件管理工具类
+ * 用于统一处理文件列表操作,包括添加、删除、解析等
+ */
+class FileManager {
+ constructor() {
+ // 文件类型配置映射
+ this.fileTypeConfig = {
+ // 仪表盘照片
+ 1: {
+ dataKey: "dashboardPic",
+ dataKey2: "dashboard2Pic",
+ isArray: false,
+ hasMultiple: true,
+ isPathOnly: true,
+ },
+ // 正面照片
+ 2: {
+ dataKey: "frontPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 左前方照片
+ 3: {
+ dataKey: "leftFrontPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 右前方照片
+ 4: {
+ dataKey: "rightFrontPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 左后方照片
+ 5: {
+ dataKey: "leftRearPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 右后方照片
+ 6: {
+ dataKey: "rightRearPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 瑕疵照片
+ 7: {
+ dataKey: "blemish",
+ isArray: true,
+ isPathOnly: true,
+ },
+ // 轮胎照片
+ 8: {
+ dataKey: "tirePic",
+ isArray: true,
+ isPathOnly: true,
+ },
+ // 其它
+ 9: {
+ dataKey: "otherPic",
+ isArray: true,
+ isPathOnly: true,
+ },
+ // 司机证件
+ 10: {
+ dataKey: "documents",
+ isArray: true,
+ isPathOnly: true,
+ },
+ // 电子文档
+ 11: {
+ dataKey: "esignatureAttachment",
+ isArray: true,
+ isPathOnly: false,
+ },
+ // 培训文件签字照片
+ 12: {
+ dataKey: "signAttachment",
+ isArray: true,
+ isPathOnly: false,
+ },
+ // 安全培训照片
+ 13: {
+ dataKey: "safetyTrainingPicture",
+ isArray: true,
+ isPathOnly: false,
+ },
+ // 安全培训附件
+ 14: {
+ dataKey: "safetyTrainingAttachment",
+ isArray: true,
+ isPathOnly: false,
+ },
+ // 轮胎照片 - 左前轮
+ 15: {
+ dataKey: "leftFrontTirePic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 左后轮(内)
+ 16: {
+ dataKey: "leftRearTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 左后轮(外)
+ 17: {
+ dataKey: "leftRearTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右前轮
+ 18: {
+ dataKey: "rightFrontTirePic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右后轮(内)
+ 19: {
+ dataKey: "rightRearTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右后轮(外)
+ 20: {
+ dataKey: "rightRearTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 备胎
+ 21: {
+ dataKey: "spareTirePic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 左中内
+ 22: {
+ dataKey: "leftMiddleTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 左中外
+ 23: {
+ dataKey: "leftMiddleTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 左后内
+ 24: {
+ dataKey: "leftRearMiddleTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 左后外
+ 25: {
+ dataKey: "leftRearMiddleTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右中内
+ 26: {
+ dataKey: "rightMiddleTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右中外
+ 27: {
+ dataKey: "rightMiddleTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右后内
+ 28: {
+ dataKey: "rightRearMiddleTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 轮胎照片 - 右后外
+ 29: {
+ dataKey: "rightRearMiddleTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 底盘照片 - 正前方底部照片
+ 30: {
+ dataKey: "frontBottomPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 底盘照片 - 左侧前部底部照片
+ 31: {
+ dataKey: "leftFrontBottomPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 底盘照片 - 左侧后方底部照片
+ 32: {
+ dataKey: "leftRearBottomPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 底盘照片 - 右侧前方底部照片
+ 33: {
+ dataKey: "rightFrontBottomPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 底盘照片 - 右侧后方底部照片
+ 34: {
+ dataKey: "rightRearBottomPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 底盘照片 - 正后方底部照片
+ 35: {
+ dataKey: "rearBottomPic",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 12轮胎车辆 - 左前外
+ 36: {
+ dataKey: "leftFrontTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 12轮胎车辆 - 左前内
+ 37: {
+ dataKey: "leftFrontTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 12轮胎车辆 - 右前外
+ 38: {
+ dataKey: "rightFrontTirePicOut",
+ isArray: false,
+ isPathOnly: true,
+ },
+ // 12轮胎车辆 - 右前内
+ 39: {
+ dataKey: "rightFrontTirePicIn",
+ isArray: false,
+ isPathOnly: true,
+ },
+ };
+ }
+
+ /**
+ * 添加文件到数据对象
+ * @param {Object} data - 数据对象
+ * @param {string} fileTypeId - 文件类型ID
+ * @param {string} imgUrl - 图片URL
+ * @param {Object} extraData - 额外数据(如文件名等)
+ */
+ addFileToData(data, fileTypeId, imgUrl, extraData = {}) {
+ const config = this.fileTypeConfig[fileTypeId];
+ if (!config) return;
+
+ // 仪表盘照片特殊处理,有两个字段
+ if (fileTypeId === "1") {
+ if (!data.dashboardPic || data.dashboardPic === "") {
+ data.dashboardPic = imgUrl;
+ } else {
+ data.dashboard2Pic = imgUrl;
+ }
+ return;
+ }
+
+ // 数组类型处理
+ if (config.isArray) {
+ if (!data[config.dataKey]) {
+ data[config.dataKey] = [];
+ }
+
+ if (config.isPathOnly) {
+ // 只保存路径
+ data[config.dataKey].push(imgUrl);
+ } else {
+ // 保存对象
+ data[config.dataKey].push({
+ path: imgUrl,
+ fileName: extraData.fileName || "",
+ thumb: extraData.thumb || "",
+ });
+ }
+ } else {
+ // 单个字段处理
+ if (config.isPathOnly) {
+ data[config.dataKey] = imgUrl;
+ } else {
+ data[config.dataKey] = {
+ path: imgUrl,
+ fileName: extraData.fileName || "",
+ thumb: extraData.thumb || "",
+ };
+ }
+ }
+ }
+
+ /**
+ * 从数据对象中删除文件
+ * @param {Object} data - 数据对象
+ * @param {string} fileTypeId - 文件类型ID
+ * @param {number} index - 要删除的索引
+ * @param {Array} fileList - 当前的文件列表(用于仪表盘照片特殊处理)
+ */
+ removeFileFromData(data, fileTypeId, index, fileList) {
+ const config = this.fileTypeConfig[fileTypeId];
+ if (!config) return;
+
+ // 仪表盘照片特殊处理
+ if (fileTypeId === "1") {
+ if (fileList && fileList.length === 0) {
+ data.dashboardPic = "";
+ data.dashboard2Pic = "";
+ } else {
+ if (index === 0) {
+ data.dashboardPic = data.dashboard2Pic || "";
+ data.dashboard2Pic = "";
+ } else {
+ data.dashboard2Pic = "";
+ }
+ }
+ return;
+ }
+
+ // 数组类型处理
+ if (config.isArray) {
+ if (data[config.dataKey] && data[config.dataKey].length > index) {
+ data[config.dataKey].splice(index, 1);
+ }
+ } else {
+ // 单个字段处理
+ data[config.dataKey] = "";
+ }
+ }
+
+ /**
+ * 从后端数据解析文件列表
+ * @param {Object} data - 数据对象
+ * @param {Object} compressPicMap - 压缩图片映射
+ */
+ parseFileListFromData(data, compressPicMap) {
+ const result = {};
+
+ // 处理仪表盘照片
+ result.fileList1 = [];
+ if (data.dashboardPicData?.path) {
+ result.fileList1.push({
+ url: data.dashboardPicData.path,
+ thumb:
+ data.dashboardPicData.compressedImagePath ||
+ data.dashboardPicData.path,
+ });
+ compressPicMap.set(
+ data.dashboardPicData.path,
+ data.dashboardPicData.compressedImagePath || data.dashboardPicData.path
+ );
+ }
+ data.dashboardPic = data.dashboardPicData?.path ?? "";
+
+ // 仪表盘第二张照片
+ if (data.dashboard2PicData?.path) {
+ result.fileList1.push({
+ url: data.dashboard2PicData.path,
+ thumb:
+ data.dashboard2PicData.compressedImagePath ||
+ data.dashboard2PicData.path,
+ });
+ compressPicMap.set(
+ data.dashboard2PicData.path,
+ data.dashboard2PicData.compressedImagePath ||
+ data.dashboard2PicData.path
+ );
+ }
+ data.dashboard2Pic = data.dashboard2PicData?.path ?? "";
+
+ // 处理其他类型的文件
+ const singlePicTypes = [
+ { id: "2", dataKey: "frontPic", dataKeyData: "frontPicData" },
+ { id: "3", dataKey: "leftFrontPic", dataKeyData: "leftFrontPicData" },
+ { id: "4", dataKey: "rightFrontPic", dataKeyData: "rightFrontPicData" },
+ { id: "5", dataKey: "leftRearPic", dataKeyData: "leftRearPicData" },
+ { id: "6", dataKey: "rightRearPic", dataKeyData: "rightRearPicData" },
+ ];
+
+ singlePicTypes.forEach((type) => {
+ result[`fileList${type.id}`] = [];
+ if (data[`${type.dataKeyData}`]?.path) {
+ result[`fileList${type.id}`] = [
+ {
+ url: data[`${type.dataKeyData}`].path,
+ thumb:
+ data[`${type.dataKeyData}`].compressedImagePath ||
+ data[`${type.dataKeyData}`].path,
+ },
+ ];
+ compressPicMap.set(
+ data[`${type.dataKeyData}`].path,
+ data[`${type.dataKeyData}`].compressedImagePath ||
+ data[`${type.dataKeyData}`].path
+ );
+ }
+ data[type.dataKey] = data[`${type.dataKeyData}`]?.path ?? "";
+ });
+
+ // 处理数组类型的文件
+ const arrayPicTypes = [
+ { id: "7", dataKey: "blemish" },
+ { id: "8", dataKey: "tirePic" },
+ { id: "9", dataKey: "otherPic" },
+ { id: "10", dataKey: "documents" },
+ ];
+
+ arrayPicTypes.forEach((type) => {
+ result[`fileList${type.id}`] = data[type.dataKey].map((x) => ({
+ url: x.path,
+ thumb: x.compressedImagePath || x.path,
+ }));
+
+ data[type.dataKey].forEach((x) => {
+ compressPicMap.set(x.path, x.compressedImagePath || x.path);
+ });
+ data[type.dataKey] = data[type.dataKey].map((x) => x.path);
+ // 交车页面的"其它"文件是对象数组,需要保持原结构
+ // if (type.id === "9") {
+ // // 交车页面的otherPic是对象数组,不需要转换 将错就错了 在交车save/submit的时候会处理 正常这里改了 那边就可以不处理了
+ // } else {
+ // data[type.dataKey] = data[type.dataKey].map((x) => x.path);
+ // }
+ });
+
+ // 处理电子文档
+ if (data.esignatureAttachment && data.esignatureAttachment.length >= 1) {
+ result.fileList11 = [
+ {
+ url: data.esignatureAttachment[0].path,
+ thumb: "/static/pdf.png",
+ },
+ ];
+ }
+
+ // 处理培训文件签字照片
+ result.fileList12 = data.signAttachment.map((x) => ({
+ url: x.path,
+ thumb: x.compressedImagePath || x.path,
+ }));
+
+ data.signAttachment.forEach((x) => {
+ compressPicMap.set(x.path, x.compressedImagePath || x.path);
+ });
+
+ // 处理安全培训照片
+ result.fileList13 =
+ data?.safetyTrainingPicture?.map((x) => ({
+ url: x.path,
+ thumb: x.compressedImagePath || x.path,
+ })) || [];
+
+ data?.safetyTrainingPicture?.forEach((x) => {
+ compressPicMap.set(x.path, x.compressedImagePath || x.path);
+ });
+
+ data.safetyTrainingPicture =
+ data?.safetyTrainingPicture?.map((x) => ({
+ path: x.path,
+ })) || [];
+
+ // 处理安全培训附件
+ result.fileList14 =
+ data?.safetyTrainingAttachment?.map((x) => ({
+ url: x.path,
+ name: x.fileName,
+ type: x.fileName.substring(x.fileName.lastIndexOf(".") + 1) || "",
+ thumb: x.compressedImagePath || x.path,
+ })) || [];
+
+ data.safetyTrainingAttachment =
+ data?.safetyTrainingAttachment?.map((x) => ({
+ path: x.path,
+ fileName: x.fileName,
+ })) || [];
+
+ // 处理轮胎照片
+ const tireKeys1 = [
+ "leftFrontTirePic",
+ "leftRearTirePicIn",
+ "leftRearTirePicOut",
+ "rightFrontTirePic",
+ "rightRearTirePicIn",
+ "rightRearTirePicOut",
+ "spareTirePic",
+ ];
+
+ let tireIndex = 15;
+ tireKeys1.forEach((key) => {
+ if (data[key]) {
+ const picData = data[key];
+ if (picData?.path) {
+ result[`fileList${tireIndex}`] = [
+ {
+ url: picData.path,
+ thumb: picData.compressedImagePath || picData.path,
+ },
+ ];
+ compressPicMap.set(
+ picData.path,
+ picData.compressedImagePath || picData.path
+ );
+ }
+ data[key] = picData?.path ?? "";
+ }
+ tireIndex++;
+ });
+
+ // 处理49吨轮胎照片
+ const tireKeys2 = [
+ "leftMiddleTirePicIn",
+ "leftMiddleTirePicOut",
+ "leftRearMiddleTirePicIn",
+ "leftRearMiddleTirePicOut",
+ "rightMiddleTirePicIn",
+ "rightMiddleTirePicOut",
+ "rightRearMiddleTirePicIn",
+ "rightRearMiddleTirePicOut",
+ ];
+
+ tireIndex = 22;
+ tireKeys2.forEach((key) => {
+ if (data[key]) {
+ const picData = data[key];
+ if (picData?.path) {
+ result[`fileList${tireIndex}`] = [
+ {
+ url: picData.path,
+ thumb: picData.compressedImagePath || picData.path,
+ },
+ ];
+ compressPicMap.set(
+ picData.path,
+ picData.compressedImagePath || picData.path
+ );
+ }
+ data[key] = picData?.path ?? "";
+ }
+ tireIndex++;
+ });
+
+ // 处理底盘照片
+ const bottomKeys = [
+ "frontBottomPic",
+ "leftFrontBottomPic",
+ "leftRearBottomPic",
+ "rightFrontBottomPic",
+ "rightRearBottomPic",
+ "rearBottomPic",
+ ];
+
+ let bottomIndex = 30;
+ bottomKeys.forEach((key) => {
+ if (data[key]) {
+ const picData = data[key];
+ if (picData?.path) {
+ // 对象格式 {path:"",compressedImagePath:""}
+ result[`fileList${bottomIndex}`] = [
+ {
+ url: picData.path,
+ thumb: picData.compressedImagePath || picData.path,
+ },
+ ];
+ compressPicMap.set(
+ picData.path,
+ picData.compressedImagePath || picData.path
+ );
+ data[key] = picData.path; // 转换为字符串格式
+ } else if (typeof picData === "string") {
+ // 字符串格式
+ result[`fileList${bottomIndex}`] = [
+ {
+ url: picData,
+ thumb: picData,
+ },
+ ];
+ compressPicMap.set(picData, picData);
+ }
+ }
+ bottomIndex++;
+ });
+
+ // 处理12轮胎车辆的新增轮胎字段
+ const twelveTireKeys = [
+ "leftFrontTirePicOut",
+ "leftFrontTirePicIn",
+ "rightFrontTirePicOut",
+ "rightFrontTirePicIn",
+ ];
+
+ let twelveTireIndex = 36;
+ twelveTireKeys.forEach((key) => {
+ if (data[key]) {
+ const picData = data[key];
+ if (picData?.path) {
+ result[`fileList${twelveTireIndex}`] = [
+ {
+ url: picData.path,
+ thumb: picData.compressedImagePath || picData.path,
+ },
+ ];
+ compressPicMap.set(
+ picData.path,
+ picData.compressedImagePath || picData.path
+ );
+ }
+ data[key] = picData?.path ?? "";
+ }
+ twelveTireIndex++;
+ });
+
+ return result;
+ }
+}
+
+export default FileManager;
diff --git a/utils/init.js b/utils/init.js
new file mode 100644
index 0000000..7fa7a1f
--- /dev/null
+++ b/utils/init.js
@@ -0,0 +1,50 @@
+import {
+ getToken
+} from "./auth"
+export default function initApp() {
+ /**
+ * 页面跳转拦截器
+ */
+ let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
+ list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
+ uni.addInterceptor(item, {
+ invoke(e) { // 调用前拦截
+ //获取用户的token
+ const token = getToken();
+
+ const url = e.url.split('?')[0];
+ let notNeed = ["/pages/login/login"].includes(url)
+ // 如果在whiteList里面就不需要登录
+ if (notNeed) {
+ return e
+ } else {
+ //需要登录
+ if (token == undefined || token == '') {
+ uni.showToast({
+ title: '请先登录',
+ icon: 'none'
+ })
+ uni.reLaunch({
+ url: "/pages/login/login"
+ })
+ return false
+ } else {
+ return e
+ }
+ }
+
+
+ },
+ fail(err) { // 失败回调拦截
+ console.log(err);
+ // uni.showModal({
+ // content: JSON.stringify(err),
+ // showCancel: false
+ // });
+
+ }
+ })
+ })
+
+
+}
\ No newline at end of file
diff --git a/utils/key.js b/utils/key.js
new file mode 100644
index 0000000..d0ed97c
--- /dev/null
+++ b/utils/key.js
@@ -0,0 +1,26 @@
+import CryptoJS from "crypto-js";
+
+export default {
+ //加密
+ encrypt(data, keyStr) {
+ keyStr = keyStr ? keyStr : "5a261be5eda9445099bef50a5f8df559";
+ var key = CryptoJS.enc.Utf8.parse(keyStr);
+ var ivs = CryptoJS.enc.Utf8.parse(keyStr);
+ var encrypted = CryptoJS.AES.encrypt(data, key, {
+ iv: ivs,
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7,
+ });
+ return CryptoJS.enc.Hex.stringify(encrypted.ciphertext);
+ },
+ //解密
+ decrypt(word, keyStr) {
+ keyStr = keyStr ? keyStr : "5a261be5eda9445099bef50a5f8df559";
+ var key = CryptoJS.enc.Utf8.parse(keyStr); //Latin1 w8m31+Yy/Nw6thPsMpO5fg==
+ var decrypt = CryptoJS.AES.decrypt(word, key, {
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7,
+ });
+ return CryptoJS.enc.Utf8.stringify(decrypt).toString();
+ },
+};
diff --git a/utils/permission.js b/utils/permission.js
new file mode 100644
index 0000000..dcdfa86
--- /dev/null
+++ b/utils/permission.js
@@ -0,0 +1,74 @@
+import store from "@/store";
+
+/**
+ * @param {Array} value
+ * @returns {Boolean}
+ * @example see @/views/permission/directive.vue
+ */
+export const checkButtonPermission = (buttonCode, pageCode) => {
+ console.log(store);
+ let resources = store.state.resources;
+ //console.log(resources);
+ if (!resources) {
+ return false;
+ }
+ if (!pageCode) {
+ return false;
+ }
+
+ if (!buttonCode) {
+ return false;
+ }
+
+ let pages = resources.filter(
+ (item) => item.code == pageCode && item.type == 0
+ );
+ if (!pages) {
+ return false;
+ }
+
+ let buttons = [];
+ for (let key in pages) {
+ buttons = resources.filter(
+ (item) =>
+ item.type == 1 && item.code == buttonCode && item.pid == pages[key].id
+ );
+ if (buttons.length > 0) {
+ return true;
+ }
+ }
+
+ return false;
+};
+
+export const checkPagePermission = (pageCode) => {
+ let resources = store.state.resources;
+ //console.log(resources);
+ if (!Array.isArray(resources)) {
+ resources = [];
+ }
+
+ if (!pageCode) {
+ return false;
+ }
+ let pages = resources.filter(
+ (item) => item.code == pageCode && item.type == 0
+ );
+ if (pages.length < 1) {
+ return false;
+ }
+
+ if (
+ [
+ "truckOptBI",
+ "hydrogenBill",
+ "dailyHydrogenOrderBI",
+ "weappMileageBi",
+ "bi_ele_daily_summary",
+ ].includes(pages[0].code)
+ ) {
+ return pages[0].link;
+ }
+
+ return true;
+};
diff --git a/utils/request.js b/utils/request.js
new file mode 100644
index 0000000..e9deac7
--- /dev/null
+++ b/utils/request.js
@@ -0,0 +1,580 @@
+/**
+ * @description 请求配置
+ */
+import axios from "axios";
+import CryptoJS from "crypto-js";
+import { Base64 } from "js-base64";
+import { getToken, removeToken } from "./auth.js";
+import JSONBig from "json-bigint";
+
+import { v1 as uuidv1 } from "uuid";
+
+// export const baseUrl = "https://lingniu-gateway.demo.chinawayltd.com/";
+// export const baseUrl = "http://192.168.1.6:6902/";
+
+const ENV = {
+ test: {
+ URL: "https://lingniu.test.chinawayltd.com/gateway/",
+ },
+ demo: {
+ URL: "https://lingniu-gateway.demo.chinawayltd.com/",
+ },
+ loce: {
+ URL: "http://192.168.130.136:6902/",
+ },
+ loce2: {
+ URL: "http://192.168.110.222:6902/",
+ },
+ loce3: {
+ URL: "http://192.168.110.23:6902/",
+ },
+ local: {
+ URL: "http://lingniu.huixintop.com/",
+ },
+ online: {
+ URL: "https://lnh2e.com/api/",
+ },
+ beta: {
+ URL: "https://beta.lnh2e.com/api/",
+ },
+ test2: {
+ URL: "http://115.230.138.233:6902/",
+ },
+ huixin: {
+ URL: "https://lingniu.huixintop.com/",
+ },
+};
+
+const vega = {
+ ["lingniu-manager-v1"]: {
+ key: "lingniu_server",
+ secret: "TiDjIe7dEaNfzI7n2w9emXkXlCbLmPar",
+ },
+ ["lingniu-export-v1"]: {
+ key: "lingniu_server",
+ secret: "TiDjIe7dEaNfzI7n2w9emXkXlCbLmPar",
+ },
+};
+
+const product = "lingniu-manager-v1";
+const uploadProduct = "lingniu-export-v1";
+const version = "v1";
+const sin_key = "lingniu_server";
+const sin_secret = "TiDjIe7dEaNfzI7n2w9emXkXlCbLmPar";
+
+export const baseUrl = ENV.beta.URL;
+console.log("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" + baseUrl);
+class REQUEST {
+ static request(config) {
+ return new Promise((resolve, reject) => {
+ uni.request({
+ ...config,
+ success: (res) => {
+ resolve(res.data.data);
+ },
+ fail: (e) => {
+ reject(e);
+ },
+ });
+ });
+ }
+
+ static get(url, data, config) {
+ return this.request({
+ url: url, //仅为示例,并非真实接口地址。
+ method: "get",
+ data: data,
+ ...config,
+ });
+ }
+
+ static post(url, data, config = {}) {
+ return this.request({
+ url: url, //仅为示例,并非真实接口地址。
+ method: "post",
+ data: data,
+ ...config,
+ });
+ }
+
+ static put(url, data, config = {}) {
+ return this.request({
+ url: url, //仅为示例,并非真实接口地址。
+ method: "put",
+ data: data,
+ ...config,
+ });
+ }
+
+ static delete(url, data, config = {}) {
+ return this.request({
+ url: url, //仅为示例,并非真实接口地址。
+ method: "delete",
+ data: data,
+ ...config,
+ });
+ }
+
+ static upload(url, config = {}) {
+ const _this = this;
+ return new Promise((resolve, reject) => {
+ uni.uploadFile({
+ url,
+ ...config,
+ success: (res) => {
+ resolve(res.data);
+ },
+ fail: (e) => {
+ reject(e);
+ },
+ });
+ });
+ }
+
+ static download(url, fileName, cb) {
+ let config = {
+ responseType: "blob",
+ };
+ _requestAxios("get", {
+ url: url,
+ data: {},
+ config: config,
+ }).then((res) => {
+ if (cb) {
+ cb();
+ }
+ const blob = new Blob([res.data]);
+ const link = document.createElement("a");
+ link.href = URL.createObjectURL(blob);
+ link.download = fileName || _getFileName(res);
+ link.style.display = "none";
+ document.body.appendChild(link);
+ link.click();
+ window.URL.revokeObjectURL(link.href);
+ document.body.removeChild(link);
+
+ function _getFileName(res) {
+ let headers = res.headers;
+ let contentDisposition = headers["content-disposition"];
+ let reg = /(filename=)(\S)*(;)?/g;
+ let fileNameArr = contentDisposition.match(reg);
+ if (fileNameArr.length < 1) {
+ return "template.txt";
+ }
+ let fileNameStr = fileNameArr[0].replace(";", "");
+ let fileName = fileNameStr.replace("filename=", "");
+ return decodeURI(fileName);
+ }
+ });
+ return false;
+ }
+
+ static getImageUrlParam(url, data, config = {}) {
+ config.params = data;
+ let reg = _regurl(url);
+ if (Array.isArray(reg) && reg.length >= 4) {
+ const [, product, version, path] = reg;
+
+ const key = vega[product].key;
+ const secret = vega[product].secret;
+
+ const timestamp = Date.now();
+ const stringToSign = `GET\n${timestamp}\n/${product}/${version}${path}`;
+ const sign = Base64.btoa(
+ CryptoJS.HmacSHA1(stringToSign, secret).toString()
+ );
+
+ return `g7liteSaasGatewayAppKey=${key}&g7liteSaasGatewayTimestamp=${timestamp}&g7liteSaasGatewaySign=${encodeURIComponent(
+ sign
+ )}&g7liteGToken=${encodeURIComponent(getToken())}`;
+ } else {
+ console.warn("vega配置存在问题,请检查vega相关配置");
+ }
+ }
+}
+
+//BlobUrl转blob数据
+function funobjectURLToBlob(blodurl, nmae) {
+ return new Promise((resolve, reject) => {
+ const fileManager = uni.getFileSystemManager();
+ fileManager.readFile({
+ filePath: `${blodurl}`,
+ position: 0,
+ success(res) {
+ // let files = new window.File([res.data], name, {
+ // type: 'image'
+ // });
+ // console.log(res.data)
+ resolve(res);
+ },
+ fail(res) {
+ console.error(res);
+ },
+ });
+ // var http = new XMLHttpRequest();
+ // http.open('GET', blodurl, true);
+ // http.responseType = 'blob';
+ // http.onload = function(e) {
+
+ // };
+ // http.send();
+ });
+}
+
+function _regurl(url) {
+ return url.match(/([^/]+)\/(v\d)(\/\S+)/);
+}
+
+function _requestAxios(type, { url, config = {}, data = {} }) {
+ console.log(/(http|https):\/\/([\w.]+\/?)\S*/.test(url));
+ const reqUrl = /(http|https):\/\/([\w.]+\/?)\S*/.test(url)
+ ? url
+ : baseUrl + url;
+ let sign = {};
+ const langMapping = {
+ zh: "zh_CN",
+ en: "en_US",
+ th: "th_TH",
+ tw: "zh_TW",
+ };
+ if (Array.isArray(reg) && reg.length >= 4) {
+ const [, product, version, path] = reg;
+ let pathArr = path.split("?");
+ let pathStr = pathArr[0];
+ sign = _makeApiSign({
+ reqType: type,
+ path: pathStr,
+ product,
+ version,
+ key: vega[product].key,
+ secret: vega[product].secret,
+ });
+ } else {
+ console.warn("vega配置存在问题,请检查vega相关配置");
+ }
+
+ config.headers = Object.assign(
+ {
+ "Content-Type": "application/json",
+ from_type: 1,
+ },
+ {
+ "G7LITE-LANGUAGE": "zh_CN",
+ g7liteGToken: getToken(),
+ g7liteSaasGatewayAppKey: sign.key,
+ g7liteSaasGatewayTimestamp: sign.timestamp,
+ g7liteSaasGatewaySign: sign.sign,
+ },
+ config.headers
+ );
+
+ _formatRequestData(type, config, data);
+ let requestConfig = Object.assign(config, {
+ method: type.toLowerCase(),
+ url: reqUrl,
+ });
+ return axios(requestConfig)
+ .then((res) => _requestThen(config, res))
+ .catch((error) => _requestCatch(config, error));
+
+ function _requestThen(config, res) {
+ return new Promise((resolve, reject) => {
+ if (!config.responseType || config.responseType === "json") {
+ if (res.data.code === 0 && res.data.subCode === 0) {
+ resolve(res.data);
+ } else {
+ const vegaErrorCode = [
+ "330000011",
+ "330000012",
+ "330000013",
+ "330000014",
+ "330000015",
+ "330000016",
+ "330000017",
+ "330000018",
+ "330000019",
+ "331040003", // gtoken not allow empty
+ "331040007", // gtoken not existed
+ ];
+ if (
+ vegaErrorCode.includes("" + res.data.subCode) ||
+ vegaErrorCode.includes("" + res.data.code)
+ ) {
+ console.log("token失效");
+ removeToken();
+ uni.reLaunch({
+ url: "pages/index/index",
+ });
+ }
+
+ if (!config.hideErrorMsg) {
+ if (res.data.subCode === 331090010) {
+ uni.$u.toast("禁止访问");
+ } else {
+ let messageStr = "系统错误";
+ if (res.data.message) {
+ messageStr = res.data.message;
+ }
+
+ if (res.data.subMessage) {
+ messageStr = res.data.subMessage;
+ }
+
+ uni.$u.toast(messageStr);
+ }
+ }
+ reject(res);
+ }
+ } else {
+ if (res && res.data) {
+ resolve(res);
+ }
+ }
+ });
+ }
+
+ function _formatRequestData(type, config, data) {
+ const isBody = ["PUT", "put", "POST", "post", "PATCH", "patch"];
+ let resultData = {};
+
+ data.hash = Math.random() * 100000000000000;
+
+ if (isBody.includes(type)) {
+ resultData = _trimParams(data) || {};
+
+ if (
+ config.headers &&
+ config.headers["Content-Type"] &&
+ config.headers["Content-Type"].indexOf(
+ "application/x-www-form-urlencoded"
+ ) > -1
+ ) {
+ resultData = _formatParams(data);
+ }
+ config.data = resultData;
+ } else {
+ data = config.params || data;
+ config.params = _trimParams(data) || {};
+ resultData = config;
+ }
+ return resultData;
+ }
+
+ function _trimParams(data) {
+ if (data.constructor === Object) {
+ for (let i in data) {
+ if (typeof data[i] === "string") {
+ data[i] = data[i].trim();
+ }
+ }
+ }
+
+ return data;
+ }
+
+ function _formatParams(data) {
+ if (data.constructor === Object) {
+ const arr = [];
+
+ for (const i in data) {
+ arr.push(encodeURIComponent(i) + "=" + encodeURIComponent(data[i]));
+ }
+
+ data = arr.join("&");
+ }
+
+ return data;
+ }
+
+ function _requestCatch(config, error = {}) {
+ return new Promise((resolve, reject) => {
+ if (!error.isCancel) {
+ if (config.needReject) {
+ reject(error);
+ } else {
+ const res = (error || {}).data || {};
+ const messageText = res.code !== 0 ? res.message : res.subMessage;
+ this.$refs.uToast.show({
+ type: "error",
+ message: messageText || "请求失败",
+ complete() {
+ params.url &&
+ uni.navigateTo({
+ url: params.url,
+ });
+ },
+ });
+ reject(error);
+ }
+ }
+ });
+ }
+
+ function _makeApiSign(config) {
+ const { reqType, path, product = "", version, key, secret } = config;
+ const timestamp = Date.now();
+ const stringToSign = `${reqType.toUpperCase()}\n${timestamp}\n/${product}/${version}${path}`;
+ const sign = Base64.btoa(
+ CryptoJS.HmacSHA1(stringToSign, secret).toString()
+ );
+
+ return {
+ key,
+ sign,
+ timestamp,
+ };
+ }
+}
+
+function _makeApiSign(config) {
+ const { reqType, path, product = "", version, key, secret } = config;
+ const timestamp = Date.now();
+ const stringToSign = `${reqType.toUpperCase()}\n${timestamp}\n/${product}/${version}${path}`;
+ const sign = Base64.btoa(CryptoJS.HmacSHA1(stringToSign, secret).toString());
+
+ return {
+ key,
+ sign,
+ timestamp,
+ };
+}
+
+async function getFormDataParams() {
+ const date = new Date();
+ date.setHours(date.getHours() + 1);
+ const policyText = {
+ expiration: date.toISOString(), // 设置policy过期时间。
+ conditions: [
+ // 限制上传大小。
+ ["content-length-range", 0, 1024 * 1024 * 1024],
+ ],
+ };
+ const credentials = await axios.get("/getToken");
+ const policy = Base64.encode(JSON.stringify(policyText)); // policy必须为base64的string。
+ const signature = computeSignature(credentials.AccessKeySecret, policy);
+ const formData = {
+ OSSAccessKeyId: credentials.AccessKeyId,
+ signature,
+ policy,
+ "x-oss-security-token": credentials.SecurityToken,
+ };
+ return formData;
+}
+
+uni.addInterceptor("uploadFile", {
+ invoke(args) {
+ // request 触发前拼接 url
+ let pathArr = args.url.split("?");
+ const pathStr = pathArr[0];
+ args.url = baseUrl + uploadProduct + "/" + version + args.url;
+ // args.url = "http://127.0.0.1:6902/"+uploadProduct+"/"+version+ args.url
+ const sign = _makeApiSign({
+ reqType: "post",
+ path: pathStr,
+ uploadProduct,
+ version,
+ key: sin_key,
+ secret: sin_secret,
+ });
+ args.header = {
+ ...args.header,
+ "G7lite-Language": "zh_CN",
+ g7liteSaasGatewayAppKey: sign.key,
+ g7liteSaasGatewayTimestamp: sign.timestamp,
+ g7liteSaasGatewaySign: sign.sign,
+ G7litegtoken: getToken(),
+ };
+ },
+ success(res) {},
+});
+uni.addInterceptor("request", {
+ invoke(args) {
+ // request 触发前拼接 url
+ let pathArr = args.url.split("?");
+ const pathStr = pathArr[0];
+ // 如果是附件上传接口,则使用 uploadProduct
+ if (pathStr == "/attachment/upload") {
+ args.url = baseUrl + uploadProduct + "/" + version + args.url;
+ } else if (pathStr.indexOf("/apis.map.qq.co") > -1) {
+ args.url = args.url;
+ } else {
+ args.url = baseUrl + product + "/" + version + args.url;
+ }
+ //地图API单独处理
+
+ const sign = _makeApiSign({
+ reqType: args.method,
+ path: pathStr,
+ product,
+ version,
+ key: sin_key,
+ secret: sin_secret,
+ });
+ args.header = {
+ ...args.header,
+ "G7lite-Language": "zh_CN",
+ g7liteSaasGatewayAppKey: sign.key,
+ g7liteSaasGatewayTimestamp: sign.timestamp,
+ g7liteSaasGatewaySign: sign.sign,
+ G7litegtoken: getToken(),
+ };
+ },
+ success(res) {
+ res.data = res.data;
+ if (
+ (res.data.code === 0 && res.data.subCode === 0) ||
+ (res.statusCode === 200 && res.data.code === 200) || //获取地图markers接口
+ (res.statusCode === 200 && res.data.status === 0) //微信泛解析地址接口
+ ) {
+ return res.data;
+ }
+ const vegaErrorCode = [
+ "330000011",
+ "330000012",
+ "330000013",
+ "330000014",
+ "330000015",
+ "330000016",
+ "330000017",
+ "330000018",
+ "330000019",
+ "331040003", // gtoken not allow empty
+ "331040007", // gtoken not existed
+ ];
+ console.log("请求失败", res);
+ if (
+ vegaErrorCode.includes("" + res.data.subCode) ||
+ vegaErrorCode.includes("" + res.data.code)
+ ) {
+ removeToken();
+ uni.reLaunch({
+ url: "pages/index/index",
+ });
+ }
+ if (res.data.subCode === 331090010) {
+ uni.$u.toast("禁止访问");
+ } else {
+ let messageStr = "系统错误";
+ if (res.data.message) {
+ messageStr = res.data.message;
+ }
+ if (res.data.subMessage) {
+ messageStr = res.data.subMessage;
+ }
+ if (res.data.code == 330000013) {
+ messageStr = "请登录";
+ }
+ uni.$u.toast(messageStr);
+ }
+ },
+ fail(err) {
+ console.log("interceptor-fail", err);
+ if (err.errno == "600001") {
+ uni.$u.toast("请求超时");
+ } else {
+ uni.$u.toast(err.errMsg);
+ }
+ },
+});
+
+export default REQUEST;
diff --git a/utils/storage.js b/utils/storage.js
new file mode 100644
index 0000000..a00481c
--- /dev/null
+++ b/utils/storage.js
@@ -0,0 +1,32 @@
+import JSONBigint from 'json-bigint';
+export default {
+ get(key) {
+ if (!key) console.error('key不能为空');
+
+ let result = uni.getStorageSync(key);
+ try {
+ result = JSONBigint.parse(result);
+
+ } catch (e) {}
+
+ return result;
+ },
+
+ set(key, value) {
+ if (!key) console.error('key不能为空');
+ typeof value === 'object' && (value = JSONBigint.stringify(value));
+ try {
+ uni.setStorageSync(key, value)
+ } catch (e) {
+ console.log("数据存储错误", e)
+ }
+ },
+
+ remove(key) {
+ uni.removeStorageSync(key);
+ },
+
+ clean() {
+ uni.clearStorage();
+ }
+};
\ No newline at end of file
diff --git a/utils/time.js b/utils/time.js
new file mode 100644
index 0000000..8fd5fb1
--- /dev/null
+++ b/utils/time.js
@@ -0,0 +1,35 @@
+/* ,y 会被替换为年份,M、d、h、H、m、s、q、S、a、A 分别表示月份、日期、小时(12 小时制)、小时(24 小时制)、分钟、秒、季度、毫秒、上午/下午、AM/PM。
+ 例如:yyyy-MM-dd HH:mm:ss
+*/
+export function formatDateTime(date, format) {
+ if(date==undefined||date==''){
+ return ""
+ }
+ date=new Date(date);
+ const o = {
+ 'M+': date.getMonth() + 1, // 月份
+ 'd+': date.getDate(), // 日
+ 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时
+ 'H+': date.getHours(), // 小时
+ 'm+': date.getMinutes(), // 分
+ 's+': date.getSeconds(), // 秒
+ 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+ S: date.getMilliseconds(), // 毫秒
+ a: date.getHours() < 12 ? '上午' : '下午', // 上午/下午
+ A: date.getHours() < 12 ? 'AM' : 'PM', // AM/PM
+ };
+ if (/(y+)/.test(format)) {
+ format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+ }
+ for (let k in o) {
+ if (new RegExp('(' + k + ')').test(format)) {
+ format = format.replace(
+ RegExp.$1,
+ RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
+ );
+ }
+ }
+ return format;
+}
+
+