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 @@ + + + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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 @@ + + + + + + \ 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + + + 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 @@ + + + + + + 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 @@ + + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + \ 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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; +} + +