diff --git a/api/oa/finance/exchangeRate.js b/api/oa/finance/exchangeRate.js
new file mode 100644
index 0000000..3deb7e9
--- /dev/null
+++ b/api/oa/finance/exchangeRate.js
@@ -0,0 +1,10 @@
+// 汇率API,直接请求第三方服务
+import request from "@/util/oaRequest"
+
+// 获取美元兑人民币汇率(dateStr可选,便于后续扩展)
+export async function getExchangeRate(dateStr) {
+ return request({
+ url: '/oa/exchangeRate/usd2cny',
+ date: dateStr
+ })
+}
\ No newline at end of file
diff --git a/api/oa/finance/finance.js b/api/oa/finance/finance.js
new file mode 100644
index 0000000..0e48726
--- /dev/null
+++ b/api/oa/finance/finance.js
@@ -0,0 +1,194 @@
+import request from "@/util/oaRequest"
+
+// 查询进出账管理列表
+export function listFinance(query) {
+ return request({
+ url: '/oa/finance/list',
+ method: 'get',
+ params: query
+ })
+}
+// // 查询进出账管理列表
+// export function barData(query) {
+// return request({
+// url: '/oa/finance/barData',
+// method: 'get',
+// params: query
+// })
+// }
+
+// 查询进项目出账管理列表
+export function listFinancePro(query) {
+ return request({
+ url: '/oa/finance/listPro',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询进出账管理详细
+export function getFinance(financeId) {
+ return request({
+ url: '/oa/finance/' + financeId,
+ method: 'get'
+ })
+}
+
+export function getFinancePro(financeId) {
+ return request({
+ url: '/oa/finance/financePro' + financeId,
+ method: 'get'
+ })
+}
+
+
+// 根据时间范围查询列表
+export function findFinance(params) {
+ return request({
+ url: '/oa/finance/getFinanceByTime',
+ method: 'get',
+ params:params
+ })
+}
+
+// 项目资金管理,根据时间范围查询列表
+export function findProjectFinance(query) {
+ return request({
+ url: '/oa/finance/findFinanceByTimeAndProjectId',
+ method: 'get',
+ params:query
+ })
+}
+
+// 最近6个月核算列表
+export function findFinanceList(query) {
+ return request({
+ url: '/oa/finance/findFinanceByMonth/',
+ method: 'get',
+ params:query
+ })
+}
+
+// 新增进出账管理
+export function addFinance(data) {
+ return request({
+ url: '/oa/finance',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改进出账管理
+export function updateFinance(data) {
+ return request({
+ url: '/oa/finance',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除进出账管理
+export function delFinance(financeId) {
+ return request({
+ url: '/oa/finance/' + financeId,
+ method: 'delete'
+ })
+}
+
+/**
+ *
+ * @returns 获取进出账管理列表
+ */
+export function getCostDetailList(query) {
+ return request({
+ url: '/oa/cost/list',
+ method: 'get',
+ params:query
+ })
+}
+
+/**
+ * @param costId 进出账管理id
+ * @returns 根据id获取进出账管理详情
+ * */
+export function getCostDetailById(costId) {
+ return request({
+ url: `/oa/cost/${costId}`,
+ method: 'get'
+ })
+}
+
+/**
+ *
+ * @param {*} data 创建成本详情
+ * @returns
+ */
+export function createCostDetail(data) {
+ return request({
+ url: '/oa/cost/add',
+ method: 'post',
+ data: data
+ })
+}
+
+/**
+ *
+ * @param {*} costId 删除成本详情
+ * @returns
+ */
+export function deleteCostDetail(costId) {
+ return request({
+ url: `/oa/cost/${costId}`,
+ method: 'delete'
+ })
+}
+
+/**
+ * 获取月度收支对比数据
+ * @param {{ projectId?: number, financeType?: string }} params
+ */
+export function barData(params) {
+ return request({
+ url: '/oa/finance/barData',
+ method: 'get',
+ params
+ });
+}
+
+/**
+ * 获取明细列表(含币种区分)
+ * @param {{ projectId?: number, financeType?: string }} params
+ */
+export function findFinanceList2(params) {
+ return request({
+ url: '/oa/finance/findFinanceList',
+ method: 'get',
+ params
+ });
+}
+
+// 新增进出账管理withBalance
+export function addFinanceWithBalance(data) {
+ return request({
+ url: '/oa/finance/addBalance',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改进出账管理withBalance
+export function updateFinanceWithBalance(data) {
+ return request({
+ url: '/oa/finance/editBalance',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除进出账管理withBalance
+export function delFinanceWithBalance(financeId) {
+ return request({
+ url: '/oa/finance/removeDataBalance/' + financeId,
+ method: 'delete'
+ })
+}
diff --git a/api/oa/post.js b/api/oa/post.js
new file mode 100644
index 0000000..1a8e9ca
--- /dev/null
+++ b/api/oa/post.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询岗位列表
+export function listPost(query) {
+ return request({
+ url: '/system/post/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询岗位详细
+export function getPost(postId) {
+ return request({
+ url: '/system/post/' + postId,
+ method: 'get'
+ })
+}
+
+// 新增岗位
+export function addPost(data) {
+ return request({
+ url: '/system/post',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改岗位
+export function updatePost(data) {
+ return request({
+ url: '/system/post',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除岗位
+export function delPost(postId) {
+ return request({
+ url: '/system/post/' + postId,
+ method: 'delete'
+ })
+}
diff --git a/api/oa/role.js b/api/oa/role.js
new file mode 100644
index 0000000..441c527
--- /dev/null
+++ b/api/oa/role.js
@@ -0,0 +1,127 @@
+import request from "@/utils/request";
+
+// 查询角色列表
+export function listRole(query) {
+ return request({
+ url: "/system/role/list",
+ method: "get",
+ params: query,
+ });
+}
+
+// 查询角色详细
+export function getRole(roleId) {
+ return request({
+ url: "/system/role/" + roleId,
+ method: "get",
+ });
+}
+
+// 查询角色详细
+export function currentRole() {
+ return request({
+ url: "/system/role/currentRole",
+ method: "get",
+ });
+}
+
+// 新增角色
+export function addRole(data) {
+ return request({
+ url: "/system/role",
+ method: "post",
+ data: data,
+ });
+}
+
+// 修改角色
+export function updateRole(data) {
+ return request({
+ url: "/system/role",
+ method: "put",
+ data: data,
+ });
+}
+
+// 角色数据权限
+export function dataScope(data) {
+ return request({
+ url: "/system/role/dataScope",
+ method: "put",
+ data: data,
+ });
+}
+
+// 角色状态修改
+export function changeRoleStatus(roleId, status) {
+ const data = {
+ roleId,
+ status,
+ };
+ return request({
+ url: "/system/role/changeStatus",
+ method: "put",
+ data: data,
+ });
+}
+
+// 删除角色
+export function delRole(roleId) {
+ return request({
+ url: "/system/role/" + roleId,
+ method: "delete",
+ });
+}
+
+// 查询角色已授权用户列表
+export function allocatedUserList(query) {
+ return request({
+ url: "/system/role/authUser/allocatedList",
+ method: "get",
+ params: query,
+ });
+}
+
+// 查询角色未授权用户列表
+export function unallocatedUserList(query) {
+ return request({
+ url: "/system/role/authUser/unallocatedList",
+ method: "get",
+ params: query,
+ });
+}
+
+// 取消用户授权角色
+export function authUserCancel(data) {
+ return request({
+ url: "/system/role/authUser/cancel",
+ method: "put",
+ data: data,
+ });
+}
+
+// 批量取消用户授权角色
+export function authUserCancelAll(data) {
+ return request({
+ url: "/system/role/authUser/cancelAll",
+ method: "put",
+ params: data,
+ });
+}
+
+// 授权用户选择
+export function authUserSelectAll(data) {
+ return request({
+ url: "/system/role/authUser/selectAll",
+ method: "put",
+ params: data,
+ });
+}
+
+// 根据角色ID查询部门树结构
+export function deptTreeSelect(roleId) {
+ return request({
+ url: "/system/role/deptTree/" + roleId,
+ method: "get",
+ });
+}
diff --git a/api/oa/workflow/category.js b/api/oa/workflow/category.js
new file mode 100644
index 0000000..ffe46b5
--- /dev/null
+++ b/api/oa/workflow/category.js
@@ -0,0 +1,53 @@
+import request from "@/util/oaRequest"
+
+// 查询流程分类列表
+export function listCategory(query) {
+ return request({
+ url: '/workflow/category/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询流程分类列表
+export function listAllCategory(query) {
+ return request({
+ url: '/workflow/category/listAll',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询流程分类详细
+export function getCategory(categoryId) {
+ return request({
+ url: '/workflow/category/' + categoryId,
+ method: 'get'
+ })
+}
+
+// 新增流程分类
+export function addCategory(data) {
+ return request({
+ url: '/workflow/category',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改流程分类
+export function updateCategory(data) {
+ return request({
+ url: '/workflow/category',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除流程分类
+export function delCategory(categoryId) {
+ return request({
+ url: '/workflow/category/' + categoryId,
+ method: 'delete'
+ })
+}
diff --git a/api/oa/workflow/deploy.js b/api/oa/workflow/deploy.js
new file mode 100644
index 0000000..8062f57
--- /dev/null
+++ b/api/oa/workflow/deploy.js
@@ -0,0 +1,51 @@
+import request from "@/util/oaRequest"
+
+// 查询流程部署列表
+export function listDeploy(query) {
+ return request({
+ url: '/workflow/deploy/list',
+ method: 'get',
+ params: query
+ })
+}
+
+export function listPublish(query) {
+ return request({
+ url: '/workflow/deploy/publishList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取流程模型流程图
+export function getBpmnXml(definitionId) {
+ return request({
+ url: '/workflow/deploy/bpmnXml/' + definitionId,
+ method: 'get'
+ })
+}
+
+// 修改流程状态
+export function changeState(params) {
+ return request({
+ url: '/workflow/deploy/changeState',
+ method: 'put',
+ params: params
+ })
+}
+
+// 删除流程部署
+export function delDeploy(deployIds) {
+ return request({
+ url: '/workflow/deploy/' + deployIds,
+ method: 'delete'
+ })
+}
+
+// 查询流程部署关联表单信息
+export function getFormByDeployId(deployId) {
+ return request({
+ url: '/workflow/deploy/form/' + deployId,
+ method: 'get',
+ })
+}
diff --git a/api/oa/workflow/finished.js b/api/oa/workflow/finished.js
new file mode 100644
index 0000000..5b43dfa
--- /dev/null
+++ b/api/oa/workflow/finished.js
@@ -0,0 +1,10 @@
+import request from "@/util/oaRequest"
+
+// 撤回任务
+export function revokeProcess(data) {
+ return request({
+ url: '/workflow/task/revokeProcess',
+ method: 'post',
+ data: data
+ })
+}
diff --git a/api/oa/workflow/form.js b/api/oa/workflow/form.js
new file mode 100644
index 0000000..27acdad
--- /dev/null
+++ b/api/oa/workflow/form.js
@@ -0,0 +1,52 @@
+import request from "@/util/oaRequest"
+
+// 查询流程表单列表
+export function listForm(query) {
+ return request({
+ url: '/workflow/form/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询流程表单详细
+export function getForm(formId) {
+ return request({
+ url: '/workflow/form/' + formId,
+ method: 'get'
+ })
+}
+
+// 新增流程表单
+export function addForm(data) {
+ return request({
+ url: '/workflow/form',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改流程表单
+export function updateForm(data) {
+ return request({
+ url: '/workflow/form',
+ method: 'put',
+ data: data
+ })
+}
+// 挂载表单
+export function addDeployForm(data) {
+ return request({
+ url: '/workflow/form/addDeployForm',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除流程表单
+export function delForm(formId) {
+ return request({
+ url: '/workflow/form/' + formId,
+ method: 'delete'
+ })
+}
diff --git a/api/oa/workflow/instance.js b/api/oa/workflow/instance.js
new file mode 100644
index 0000000..ffff3d4
--- /dev/null
+++ b/api/oa/workflow/instance.js
@@ -0,0 +1,10 @@
+import request from "@/util/oaRequest"
+
+// 查询流程实例详情信息
+export function getDetailInstance(query) {
+ return request({
+ url: '/workflow/instance/detail',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/api/oa/workflow/model.js b/api/oa/workflow/model.js
new file mode 100644
index 0000000..58897c4
--- /dev/null
+++ b/api/oa/workflow/model.js
@@ -0,0 +1,84 @@
+import request from "@/util/oaRequest"
+
+// 查询流程模型信息
+export function listModel(query) {
+ return request({
+ url: '/workflow/model/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询流程模型信息
+export function historyModel(query) {
+ return request({
+ url: '/workflow/model/historyList',
+ method: 'get',
+ params: query
+ })
+}
+
+export function getModel(modelId) {
+ return request({
+ url: '/workflow/model/' + modelId,
+ method: 'get'
+ })
+}
+
+// 新增模型信息
+export function addModel(data) {
+ return request({
+ url: '/workflow/model',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改模型信息
+export function updateModel(data) {
+ return request({
+ url: '/workflow/model',
+ method: 'put',
+ data: data
+ })
+}
+
+// 保存流程模型
+export function saveModel(data) {
+ return request({
+ url: '/workflow/model/save',
+ method: 'post',
+ data: data
+ })
+}
+
+export function latestModel(params) {
+ return request({
+ url: '/workflow/model/latest',
+ method: 'post',
+ params: params
+ })
+}
+
+export function delModel(modelIds) {
+ return request({
+ url: '/workflow/model/' + modelIds,
+ method: 'delete'
+ })
+}
+
+export function deployModel(params) {
+ return request({
+ url: '/workflow/model/deploy',
+ method: 'post',
+ params: params
+ })
+}
+
+// 获取流程模型流程图
+export function getBpmnXml(modelId) {
+ return request({
+ url: '/workflow/model/bpmnXml/' + modelId,
+ method: 'get'
+ })
+}
diff --git a/api/oa/workflow/process.js b/api/oa/workflow/process.js
new file mode 100644
index 0000000..39601df
--- /dev/null
+++ b/api/oa/workflow/process.js
@@ -0,0 +1,132 @@
+import request from "@/util/oaRequest"
+
+// 查询流程列表
+export function listProcess(query) {
+ return request({
+ url: '/workflow/process/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询流程列表
+export function getProcessForm(query) {
+ return request({
+ url: '/workflow/process/getProcessForm',
+ method: 'get',
+ params: query
+ })
+}
+
+// 部署流程实例
+export function startProcess(processDefId, data) {
+ return request({
+ url: '/workflow/process/start/' + processDefId,
+ method: 'post',
+ data: data
+ })
+}
+
+// 部署流程实例
+export function startClaim(data) {
+ return request({
+ url: '/workflow/process/startClaim',
+ method: 'post',
+ data: data
+ })
+}
+// 部署流程实例
+export function startMoney(data) {
+ return request({
+ url: '/workflow/process/startMoney',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除流程实例
+export function delProcess(ids) {
+ return request({
+ url: '/workflow/process/instance/' + ids,
+ method: 'delete'
+ })
+}
+
+// 获取流程图
+export function getBpmnXml(processDefId) {
+ return request({
+ url: '/workflow/process/bpmnXml/' + processDefId,
+ method: 'get'
+ })
+}
+
+export function detailProcess(query) {
+ return request({
+ url: '/workflow/process/detail',
+ method: 'get',
+ params: query
+ })
+}
+
+// 我的发起的流程
+export function listOwnProcess(query) {
+ return request({
+ url: '/workflow/process/ownList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 我的发起的流程
+export function listTripAndAbsence(query) {
+ return request({
+ url: '/workflow/process/trip-absence',
+ method: 'get',
+ params: query
+ })
+}
+
+// 我待办的流程
+export function listTodoProcess(query) {
+ return request({
+ url: '/workflow/process/todoList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 我待签的流程
+export function listClaimProcess(query) {
+ return request({
+ url: '/workflow/process/claimList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 我已办的流程
+export function listFinishedProcess(query) {
+ return request({
+ url: '/workflow/process/finishedList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询流程抄送列表
+export function listCopyProcess(query) {
+ return request({
+ url: '/workflow/process/copyList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 取消申请
+export function stopProcess(data) {
+ return request({
+ url: '/workflow/task/stopProcess',
+ method: 'post',
+ data: data
+ })
+}
diff --git a/api/oa/workflow/task.js b/api/oa/workflow/task.js
new file mode 100644
index 0000000..b069fa0
--- /dev/null
+++ b/api/oa/workflow/task.js
@@ -0,0 +1,71 @@
+import request from "@/util/oaRequest"
+
+// 完成任务
+export function complete(data) {
+ return request({
+ url: '/workflow/task/complete',
+ method: 'post',
+ data: data
+ })
+}
+
+// 委派任务
+export function delegate(data) {
+ return request({
+ url: '/workflow/task/delegate',
+ method: 'post',
+ data: data
+ })
+}
+
+// 转办任务
+export function transfer(data) {
+ return request({
+ url: '/workflow/task/transfer',
+ method: 'post',
+ data: data
+ })
+}
+
+// 退回任务
+export function returnTask(data) {
+ return request({
+ url: '/workflow/task/return',
+ method: 'post',
+ data: data
+ })
+}
+
+// 拒绝任务
+export function rejectTask(data) {
+ return request({
+ url: '/workflow/task/reject',
+ method: 'post',
+ data: data
+ })
+}
+
+// 签收任务
+export function claimTask(data) {
+ return request({
+ url: '/workflow/task/claim',
+ method: 'post',
+ data: data
+ })
+}
+
+// 可退回任务列表
+export function returnList(data) {
+ return request({
+ url: '/workflow/task/returnList',
+ method: 'post',
+ data: data
+ })
+}
+
+export function getTaskFormDetail(taskId) {
+ return request({
+ url: '/workflow/task/processVariables/'+taskId,
+ method: 'get',
+ })
+}
diff --git a/components/MyAvatar/index.vue b/components/MyAvatar/index.vue
index 1884f01..27cc4cf 100644
--- a/components/MyAvatar/index.vue
+++ b/components/MyAvatar/index.vue
@@ -66,15 +66,12 @@ export default {
},
methods: {
getFixedSourceUrl(url) {
- console.log('替换头像', url)
// 如果 url 以 http://49.232.154.205/api/object/ 开头,则替换为带端口的
if (typeof url === 'string' && url.startsWith('http://49.232.154.205/api/object/')) {
- console.log('替换1')
return url.replace('http://49.232.154.205/api/object/', 'http://49.232.154.205:10006/api/object/');
}
else if (typeof url === 'string' && url.startsWith('http://47.117.71.33/api/object/')) {
- console.log("替换2")
return url.replace('http://47.117.71.33/api/object/', 'http://49.232.154.205:10006/api/object/');
}
diff --git a/components/oa/oa-schema-form/index.vue b/components/oa/oa-schema-form/index.vue
new file mode 100644
index 0000000..4c8e764
--- /dev/null
+++ b/components/oa/oa-schema-form/index.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+ 手机端暂不支持文件上传
+
+ 未知表单
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages.json b/pages.json
index 90403b5..df04f9a 100644
--- a/pages.json
+++ b/pages.json
@@ -429,6 +429,70 @@
"navigationBarTitleText" : "出库记录",
"navigationStyle": "default"
}
+ },
+ {
+ "path" : "pages/workbench/process/process",
+ "style" :
+ {
+ "navigationBarTitleText" : "流程管理",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/workflow/apply/apply",
+ "style" :
+ {
+ "navigationBarTitleText" : "我的申请",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/workflow/todo/todo",
+ "style" :
+ {
+ "navigationBarTitleText" : "代办任务",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/workflow/finished/finished",
+ "style" :
+ {
+ "navigationBarTitleText" : "已办任务",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/workflow/detail/detail",
+ "style" :
+ {
+ "navigationBarTitleText" : "流程详情",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/workflow/start/start",
+ "style" :
+ {
+ "navigationBarTitleText" : "发起流程",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/user/user",
+ "style" :
+ {
+ "navigationBarTitleText" : "用户管理",
+ "navigationStyle": "default"
+ }
+ },
+ {
+ "path" : "pages/workbench/cost/cost",
+ "style" :
+ {
+ "navigationBarTitleText" : "项目成本",
+ "navigationStyle": "default"
+ }
}
],
"tabBar": {
diff --git a/pages/workbench/cost/components/Bar.vue b/pages/workbench/cost/components/Bar.vue
new file mode 100644
index 0000000..077277d
--- /dev/null
+++ b/pages/workbench/cost/components/Bar.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/cost/components/Line.vue b/pages/workbench/cost/components/Line.vue
new file mode 100644
index 0000000..9d5ea1a
--- /dev/null
+++ b/pages/workbench/cost/components/Line.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/workbench/cost/components/Pie.vue b/pages/workbench/cost/components/Pie.vue
new file mode 100644
index 0000000..0c5c490
--- /dev/null
+++ b/pages/workbench/cost/components/Pie.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/workbench/cost/components/RecentRecords.vue b/pages/workbench/cost/components/RecentRecords.vue
new file mode 100644
index 0000000..112fb0a
--- /dev/null
+++ b/pages/workbench/cost/components/RecentRecords.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.model }}
+ {{ item.inventory }}
+ {{ item.threshold }}
+ {{ item.taskInventory }}
+
+
+ {{ calcInventoryStatus(item.inventory, item.taskInventory, item.threshold).status }}
+
+
+
+
+
+
+
+ 暂无记录
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/cost/components/SummaryCards.vue b/pages/workbench/cost/components/SummaryCards.vue
new file mode 100644
index 0000000..e19e0a6
--- /dev/null
+++ b/pages/workbench/cost/components/SummaryCards.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+ {{ card.title }}
+ 人民币:{{ card.valueCNY }}
+ 美元:{{ card.valueUSD }}
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/cost/cost.vue b/pages/workbench/cost/cost.vue
new file mode 100644
index 0000000..768178a
--- /dev/null
+++ b/pages/workbench/cost/cost.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+ {{ formattedDate }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/workbench/index/index.vue b/pages/workbench/index/index.vue
index 18666f1..17c43ae 100644
--- a/pages/workbench/index/index.vue
+++ b/pages/workbench/index/index.vue
@@ -109,6 +109,12 @@ export default {
category: '财务中心',
access: ['vice', 'baomi', 'ceo'] // 需要特定权限才能访问
},
+ // {
+ // text: '项目成本',
+ // icon: '/static/images/cost.png',
+ // url: '/pages/workbench/cost/cost',
+ // category: '财务中心',
+ // },
{
text: '智慧库房',
icon: '/static/images/smartStock.png',
@@ -133,11 +139,35 @@ export default {
url: '/pages/workbench/wms/out',
category: '库房管理',
},
+ // {
+ // text: '我的申请',
+ // icon: '/static/images/apply.png',
+ // url: '/pages/workbench/workflow/apply/apply',
+ // category: '办公流程'
+ // },
+ // {
+ // text: '代办任务',
+ // icon: '/static/images/todo.png',
+ // url: '/pages/workbench/workflow/todo/todo',
+ // category: '办公流程'
+ // },
+ // {
+ // text: '已办任务',
+ // icon: '/static/images/finished.png',
+ // url: '/pages/workbench/workflow/finished/finished',
+ // category: '办公流程'
+ // },
{
text: '线上营销',
icon: '/static/images/yingxiao.png',
url: '/pages/workbench/sales/sales',
},
+ {
+ text: "用户管理",
+ icon: '/static/images/user.png',
+ url: '/pages/workbench/user/user',
+ // access: ['vice', 'ceo']
+ }
],
};
},
diff --git a/pages/workbench/process/process.vue b/pages/workbench/process/process.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/pages/workbench/process/process.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/user/user.vue b/pages/workbench/user/user.vue
new file mode 100644
index 0000000..bc39a28
--- /dev/null
+++ b/pages/workbench/user/user.vue
@@ -0,0 +1,664 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 筛选
+
+
+ 手机号
+
+
+
+ 状态
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.nickName }}
+
+
+ 用户名称:{{ item.userName }}
+ 部门:{{ item.dept.deptName }}
+ 手机号码:{{ item.phonenumber }}
+ 注册时间:{{ item.createTime }}
+
+
+
+
+
+
+ 暂无数据
+
+
+ 没有更多了
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/workbench/wms/out.vue b/pages/workbench/wms/out.vue
index 133fa64..ba56251 100644
--- a/pages/workbench/wms/out.vue
+++ b/pages/workbench/wms/out.vue
@@ -1,6 +1,6 @@
-
+
@@ -98,7 +98,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/workbench/workflow/apply/apply.vue b/pages/workbench/workflow/apply/apply.vue
new file mode 100644
index 0000000..84cd17f
--- /dev/null
+++ b/pages/workbench/workflow/apply/apply.vue
@@ -0,0 +1,563 @@
+
+
+
+
+
+
+
+
+ 流程标题:
+ {{ (item.procVars) || '无标题' }}
+
+
+
+ 流程名称:
+ {{ item.procDefName || '未知' }}
+
+
+ 版本:
+ v{{ item.procDefVersion || 1 }}
+ {{ item.sort || '' }}
+
+
+
+
+
+
+
+ 当前节点:
+ {{ item.taskName || '无' }}
+
+
+ 提交时间:
+ {{ item.createTime || '未知' }}
+
+
+ 流程状态:
+
+ {{ getStatusText(item.processStatus) }}
+
+
+
+ 耗时:
+ {{ item.duration || '0' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 📦
+
+ 暂无流程数据
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/workflow/detail/detail.vue b/pages/workbench/workflow/detail/detail.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/pages/workbench/workflow/detail/detail.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/workflow/finished/finished.vue b/pages/workbench/workflow/finished/finished.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/pages/workbench/workflow/finished/finished.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/workbench/workflow/start/start.vue b/pages/workbench/workflow/start/start.vue
new file mode 100644
index 0000000..f980020
--- /dev/null
+++ b/pages/workbench/workflow/start/start.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/workbench/workflow/todo/todo.vue b/pages/workbench/workflow/todo/todo.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/pages/workbench/workflow/todo/todo.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/images/apply.png b/static/images/apply.png
new file mode 100644
index 0000000..3838d74
Binary files /dev/null and b/static/images/apply.png differ
diff --git a/static/images/cost.png b/static/images/cost.png
new file mode 100644
index 0000000..ea3b832
Binary files /dev/null and b/static/images/cost.png differ
diff --git a/static/images/finished.png b/static/images/finished.png
new file mode 100644
index 0000000..3eac692
Binary files /dev/null and b/static/images/finished.png differ
diff --git a/static/images/todo.png b/static/images/todo.png
new file mode 100644
index 0000000..4b433b7
Binary files /dev/null and b/static/images/todo.png differ
diff --git a/static/images/user.png b/static/images/user.png
new file mode 100644
index 0000000..b9724b1
Binary files /dev/null and b/static/images/user.png differ
diff --git a/store/modules/conversation.js b/store/modules/conversation.js
index baa8e31..05394b6 100644
--- a/store/modules/conversation.js
+++ b/store/modules/conversation.js
@@ -65,7 +65,7 @@ const actions = {
return [];
}
},
- getCurrentGroup({ commit }, groupID) {
+ getCurrentGroup({ commit }, groupID) {
IMSDK.asyncApi(IMSDK.IMMethods.GetSpecifiedGroupsInfo, uuidv4(), [
groupID,
]).then(({ data }) => {
diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md
index 0658510..1681eae 100644
--- a/uni_modules/uni-data-select/changelog.md
+++ b/uni_modules/uni-data-select/changelog.md
@@ -1,3 +1,11 @@
+## 1.1.0(2025-08-19)
+- 新增 插槽 selected empty option
+- 新增 mutiple 属性,支持多选功能
+- 新增 wrap 属性,支持选中的文字超过一行显示
+- 新增 align 属性,支持修改选中的文字显示的位置
+- 新增 hideRight 属性,支持隐藏右侧所有按钮
+- 新增 mode 属性,支持修改边框样式
+- 新增 事件 open close clear
## 1.0.10(2025-04-14)
- 修复 清除按钮不展示问题
## 1.0.9(2025-03-26)
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
index 71ee950..85b2d7b 100644
--- 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
@@ -2,30 +2,59 @@
{{label + ':'}}
-
-
- {{textShow}}
- {{typePlaceholder}}
-
+
+
+
+
+
+
+
+ {{textShow}}
+
+ {{typePlaceholder}}
+
+
-
+
-
-
-
-
- {{emptyTips}}
-
-
- {{formatItemName(item)}}
-
-
-
+
+
+
+
+
+
+
+
+
+
+ {{emptyTips}}
+
+
+
+
+
+
+
+
+
+ {{formatItemName(item)}}
+
+
+
+
+
+
+
+
+
@@ -36,22 +65,56 @@
* DataChecklist 数据选择器
* @description 通过数据渲染的下拉框组件
* @tutorial https://uniapp.dcloud.io/component/uniui/uni-data-select
- * @property {String} value 默认值
+ * @property {String|Array} value 默认值,多选时为数组
* @property {Array} localdata 本地数据 ,格式 [{text:'',value:''}]
* @property {Boolean} clear 是否可以清空已选项
* @property {Boolean} emptyText 没有数据时显示的文字 ,本地数据无效
* @property {String} label 左侧标题
* @property {String} placeholder 输入框的提示文字
* @property {Boolean} disabled 是否禁用
+ * @property {Boolean} multiple 是否多选模式
+ * @property {Boolean} wrap 是否允许选中文本换行显示
* @property {String} placement 弹出位置
* @value top 顶部弹出
* @value bottom 底部弹出(default)
+ * @property {String} align 选择文字的位置
+ * @value left 显示左侧
+ * @value center 显示中间
+ * @value right 显示 右侧
+ * @property {Boolean} hideRight 是否隐藏右侧按钮
+ * @property {String} mode 边框样式
+ * @value default 四周边框
+ * @value underline 下边框
+ * @value none 无边框
* @event {Function} change 选中发生变化触发
+ * @event {Function} open 选择框开启时触发
+ * @event {Function} close 选择框关闭时触发
+ * @event {Function} clear 点击清除按钮之后触发
*/
export default {
name: "uni-data-select",
mixins: [uniCloud.mixinDatacom || {}],
+ emits: [
+ 'open',
+ 'close',
+ 'update:modelValue',
+ 'input',
+ 'clear',
+ 'change'
+ ],
+ model: {
+ prop: 'modelValue',
+ event: 'update:modelValue'
+ },
+ options: {
+ // #ifdef MP-TOUTIAO
+ virtualHost: false,
+ // #endif
+ // #ifndef MP-TOUTIAO
+ virtualHost: true
+ // #endif
+ },
props: {
localdata: {
type: Array,
@@ -60,11 +123,11 @@
}
},
value: {
- type: [String, Number],
+ type: [String, Number, Array],
default: ''
},
modelValue: {
- type: [String, Number],
+ type: [String, Number, Array],
default: ''
},
label: {
@@ -99,7 +162,27 @@
placement: {
type: String,
default: 'bottom'
- }
+ },
+ multiple: {
+ type: Boolean,
+ default: false
+ },
+ wrap: {
+ type: Boolean,
+ default: false
+ },
+ align:{
+ type: String,
+ default: "left"
+ },
+ hideRight: {
+ type: Boolean,
+ default: false
+ },
+ mode:{
+ type: String,
+ default: 'default'
+ }
},
data() {
return {
@@ -133,17 +216,35 @@
common
},
valueCom() {
- // #ifdef VUE3
- return this.modelValue;
- // #endif
- // #ifndef VUE3
- return this.value;
- // #endif
+ if (this.value === '') return this.modelValue
+ if (this.modelValue === '') return this.value
+ return this.value
},
textShow() {
// 长文本显示
- let text = this.current;
- return text;
+ if (this.multiple) {
+ const currentValues = this.getCurrentValues();
+ if (Array.isArray(currentValues) && currentValues.length > 0) {
+ const selectedItems = this.mixinDatacomResData.filter(item => currentValues.includes(item.value));
+ return selectedItems.map(item => this.formatItemName(item)).join(', ');
+ } else {
+ return ''; // 空数组时返回空字符串,显示占位符
+ }
+ } else {
+ return this.current;
+ }
+ },
+ shouldShowClear() {
+ if (this.multiple) {
+ const currentValues = this.getCurrentValues();
+ return Array.isArray(currentValues) && currentValues.length > 0;
+ } else {
+ return !!this.current;
+ }
+ },
+ shouldWrap() {
+ // 只有在多选模式、开启换行、且有内容时才应用换行样式
+ return this.multiple && this.wrap && !!this.textShow;
},
getOffsetByPlacement() {
switch (this.placement) {
@@ -152,10 +253,38 @@
case 'bottom':
return "top:calc(100% + 12px);";
}
+ },
+ slotSelected(){
+ // #ifdef VUE2
+ return this.$scopedSlots ? this.$scopedSlots.selected : false
+ // #endif
+ // #ifdef VUE3
+ return this.$slots ? this.$slots.selected : false
+ // #endif
+ },
+ slotEmpty(){
+ // #ifdef VUE2
+ return this.$scopedSlots ? this.$scopedSlots.empty : false
+ // #endif
+ // #ifdef VUE3
+ return this.$slots ? this.$slots.empty : false
+ // #endif
+ },
+ slotOption(){
+ // #ifdef VUE2
+ return this.$scopedSlots ? this.$scopedSlots.option : false
+ // #endif
+ // #ifdef VUE3
+ return this.$slots ? this.$slots.option : false
+ // #endif
}
},
-
watch: {
+ showSelector:{
+ handler(val,old){
+ val ? this.$emit('open') : this.$emit('close')
+ }
+ },
localdata: {
immediate: true,
handler(val, old) {
@@ -175,9 +304,20 @@
}
}
},
-
},
methods: {
+ getSelectedItems() {
+ const currentValues = this.getCurrentValues();
+ let _minxData = this.mixinDatacomResData
+ // #ifdef MP-WEIXIN || MP-TOUTIAO
+ _minxData = JSON.parse(JSON.stringify(this.mixinDatacomResData))
+ // #endif
+ if (this.multiple) {
+ return _minxData.filter(item => currentValues.includes(item.value)) || [];
+ } else {
+ return _minxData.filter(item => item.value === currentValues) || [];
+ }
+ },
debounce(fn, time = 100) {
let timer = null
return function(...args) {
@@ -187,6 +327,23 @@
}, time)
}
},
+ // 检查项目是否已选中
+ isSelected(item) {
+ if (this.multiple) {
+ const currentValues = this.getCurrentValues();
+ return Array.isArray(currentValues) && currentValues.includes(item.value);
+ } else {
+ return this.getCurrentValues() === item.value;
+ }
+ },
+ // 获取当前选中的值
+ getCurrentValues() {
+ if (this.multiple) {
+ return Array.isArray(this.valueCom) ? this.valueCom : (this.valueCom ? [this.valueCom] : []);
+ } else {
+ return this.valueCom;
+ }
+ },
// 执行数据库查询
query() {
this.mixinDatacomEasyGet();
@@ -198,7 +355,7 @@
}
},
initDefVal() {
- let defValue = ''
+ let defValue = this.multiple ? [] : ''
if ((this.valueCom || this.valueCom === 0) && !this.isDisabled(this.valueCom)) {
defValue = this.valueCom
} else {
@@ -209,48 +366,105 @@
if (strogeValue || strogeValue === 0) {
defValue = strogeValue
} else {
- let defItem = ''
+ let defItem = this.multiple ? [] : ''
if (this.defItem > 0 && this.defItem <= this.mixinDatacomResData.length) {
- defItem = this.mixinDatacomResData[this.defItem - 1].value
+ defItem = this.multiple ? [this.mixinDatacomResData[this.defItem - 1].value] : this.mixinDatacomResData[this.defItem - 1].value
}
defValue = defItem
}
- if (defValue || defValue === 0) {
+ if (defValue || defValue === 0 || (this.multiple && Array.isArray(defValue) && defValue.length > 0)) {
this.emit(defValue)
}
}
- const def = this.mixinDatacomResData.find(item => item.value === defValue)
- this.current = def ? this.formatItemName(def) : ''
+
+ if (this.multiple) {
+ const selectedValues = Array.isArray(defValue) ? defValue : (defValue ? [defValue] : []);
+ const selectedItems = this.mixinDatacomResData.filter(item => selectedValues.includes(item.value));
+ this.current = selectedItems.map(item => this.formatItemName(item));
+ } else {
+ const def = this.mixinDatacomResData.find(item => item.value === defValue)
+ this.current = def ? this.formatItemName(def) : ''
+ }
},
/**
- * @param {[String, Number]} value
+ * @param {[String, Number, Array]} value
* 判断用户给的 value 是否同时为禁用状态
*/
isDisabled(value) {
- let isDisabled = false;
-
- this.mixinDatacomResData.forEach(item => {
- if (item.value === value) {
- isDisabled = item.disable
- }
- })
-
- return isDisabled;
+ if (Array.isArray(value)) {
+ // 对于数组,如果任意一个值被禁用,则认为整体被禁用
+ return value.some(val => {
+ return this.mixinDatacomResData.some(item => item.value === val && item.disable);
+ });
+ } else {
+ let isDisabled = false;
+ this.mixinDatacomResData.forEach(item => {
+ if (item.value === value) {
+ isDisabled = item.disable
+ }
+ })
+ return isDisabled;
+ }
},
-
clearVal() {
- this.emit('')
- this.current = ''
+ const emptyValue = this.multiple ? [] : '';
+ this.emit(emptyValue)
+ this.current = this.multiple ? [] : ''
if (this.collection) {
this.removeCache()
}
+ this.$emit('clear')
+ },
+ checkBoxChange(res){
+ let range = res.detail.value
+
+ let currentValues = range && range.length > 0? range.map((item)=>{
+ const index = parseInt(item, 10);
+
+ if (isNaN(index)) {
+ console.error(`无效索引: ${item}`);
+ }
+
+ if (index < 0 || index >= this.mixinDatacomResData.length) {
+ console.error(`索引越界: ${index}`);
+ }
+
+ return this.mixinDatacomResData[index].value;
+ }) : []
+ const selectedItems = this.mixinDatacomResData.filter(dataItem => currentValues.includes(dataItem.value));
+ this.current = selectedItems.map(dataItem => this.formatItemName(dataItem));
+
+ this.emit(currentValues);
},
change(item) {
if (!item.disable) {
- this.showSelector = false
- this.current = this.formatItemName(item)
- this.emit(item.value)
+ if (this.multiple) {
+ // 多选模式
+ let currentValues = this.getCurrentValues();
+ if (!Array.isArray(currentValues)) {
+ currentValues = currentValues ? [currentValues] : [];
+ }
+
+ const itemValue = item.value;
+ const index = currentValues.indexOf(itemValue);
+
+ if (index > -1) {
+ currentValues.splice(index, 1);
+ } else {
+ currentValues.push(itemValue);
+ }
+
+ const selectedItems = this.mixinDatacomResData.filter(dataItem => currentValues.includes(dataItem.value));
+ this.current = selectedItems.map(dataItem => this.formatItemName(dataItem));
+
+ this.emit(currentValues);
+ } else {
+ // 单选模式
+ this.showSelector = false
+ this.current = this.formatItemName(item)
+ this.emit(item.value)
+ }
}
},
emit(val) {
@@ -328,6 +542,11 @@
$uni-main-color: #333 !default;
$uni-secondary-color: #909399 !default;
$uni-border-3: #e5e5e5;
+ $uni-primary: #2979ff !default;
+ $uni-success: #4cd964 !default;
+ $uni-warning: #f0ad4e !default;
+ $uni-error: #dd524d !default;
+ $uni-info: #909399 !default;
/* #ifndef APP-NVUE */
@media screen and (max-width: 500px) {
@@ -369,9 +588,16 @@
margin-right: 5px;
}
+ .border-bottom {
+ border-bottom: solid 1px $uni-border-3;
+ }
+
+ .border-default {
+ border: 1px solid $uni-border-3;
+ }
+
.uni-select {
font-size: 14px;
- border: 1px solid $uni-border-3;
box-sizing: border-box;
border-radius: 4px;
padding: 0 5px;
@@ -383,15 +609,20 @@
/* #endif */
flex-direction: row;
align-items: center;
- border-bottom: solid 1px $uni-border-3;
width: 100%;
flex: 1;
- height: 35px;
+ min-height: 35px;
&--disabled {
background-color: #f5f7fa;
cursor: not-allowed;
}
+
+ &--wrap {
+ height: auto;
+ min-height: 35px;
+ // align-items: flex-start;
+ }
}
.uni-select__label {
@@ -403,7 +634,7 @@
}
.uni-select__input-box {
- height: 35px;
+ // height: 35px;
width: 0px;
position: relative;
/* #ifndef APP-NVUE */
@@ -412,6 +643,24 @@
flex: 1;
flex-direction: row;
align-items: center;
+
+ &--wrap {
+ .uni-select__input-text {
+ margin-right: 8px;
+ }
+ }
+
+ .padding-top-bottom {
+ padding-top: 5px;
+ padding-bottom: 5px;
+ }
+
+ .slot-content {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ }
}
.uni-select__input {
@@ -463,15 +712,18 @@
display: flex;
cursor: pointer;
/* #endif */
+ flex-direction: row;
+ align-items: center;
line-height: 35px;
font-size: 14px;
- text-align: center;
/* border-bottom: solid 1px $uni-border-3; */
padding: 0px 10px;
}
- .uni-select__selector-item:hover {
- background-color: #f9f9f9;
+
+
+ .uni-select__selector-item-check {
+ margin-left: auto;
}
.uni-select__selector-empty:last-child,
@@ -490,15 +742,14 @@
.uni-popper__arrow_bottom,
.uni-popper__arrow_bottom::after,
.uni-popper__arrow_top,
- .uni-popper__arrow_top::after,
- {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- border-width: 6px;
+ .uni-popper__arrow_top::after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+ border-width: 6px;
}
.uni-popper__arrow_bottom {
@@ -544,11 +795,22 @@
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
overflow: hidden;
+
+ &--wrap {
+ white-space: normal;
+ text-overflow: initial;
+ -o-text-overflow: initial;
+ overflow: visible;
+ word-wrap: break-word;
+ word-break: break-all;
+ // line-height: 1.5;
+ }
}
.uni-select__input-placeholder {
color: $uni-base-color;
font-size: 12px;
+ margin: 1px 0;
}
.uni-select--mask {
@@ -559,4 +821,17 @@
left: 0;
z-index: 2;
}
+
+ .align-left {
+ text-align: left;
+ }
+
+ .align-center {
+ text-align: center;
+ }
+
+ .align-right {
+ text-align: right;
+ }
+
diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json
index d21cc2d..4033502 100644
--- a/uni_modules/uni-data-select/package.json
+++ b/uni_modules/uni-data-select/package.json
@@ -1,7 +1,7 @@
{
"id": "uni-data-select",
"displayName": "uni-data-select 下拉框选择器",
- "version": "1.0.10",
+ "version": "1.1.0",
"description": "通过数据驱动的下拉框选择器",
"keywords": [
"uni-ui",
@@ -12,12 +12,14 @@
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
- "HBuilderX": "^3.1.1"
+ "HBuilderX": "^3.1.1",
+ "uni-app": "^4.45",
+ "uni-app-x": ""
},
"directories": {
"example": "../../temps/example_temps"
},
-"dcloudext": {
+ "dcloudext": {
"sale": {
"regular": {
"price": "0.00"
@@ -35,54 +37,70 @@
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
- "type": "component-vue"
+ "type": "component-vue",
+ "darkmode": "x",
+ "i18n": "x",
+ "widescreen": "x"
},
"uni_modules": {
- "dependencies": ["uni-load-more"],
+ "dependencies": [
+ "uni-load-more"
+ ],
"encrypt": [],
"platforms": {
"cloud": {
- "tcb": "y",
- "aliyun": "y",
- "alipay": "n"
+ "tcb": "√",
+ "aliyun": "√",
+ "alipay": "√"
},
"client": {
- "App": {
- "app-vue": "y",
- "app-nvue": "n",
- "app-harmony": "u",
- "app-uvue": "u"
+ "uni-app": {
+ "vue": {
+ "vue2": "√",
+ "vue3": "√"
+ },
+ "web": {
+ "safari": "√",
+ "chrome": "√"
+ },
+ "app": {
+ "vue": "√",
+ "nvue": "-",
+ "android": "√",
+ "ios": "√",
+ "harmony": "√"
+ },
+ "mp": {
+ "weixin": "√",
+ "alipay": "√",
+ "toutiao": "√",
+ "baidu": "-",
+ "kuaishou": "-",
+ "jd": "-",
+ "harmony": "-",
+ "qq": "-",
+ "lark": "-"
+ },
+ "quickapp": {
+ "huawei": "-",
+ "union": "-"
+ }
},
- "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"
+ "uni-app-x": {
+ "web": {
+ "safari": "-",
+ "chrome": "-"
+ },
+ "app": {
+ "android": "-",
+ "ios": "-",
+ "harmony": "-"
+ },
+ "mp": {
+ "weixin": "-"
+ }
}
}
}
}
-}
+}
\ No newline at end of file
diff --git a/uni_modules/uni-fab/changelog.md b/uni_modules/uni-fab/changelog.md
new file mode 100644
index 0000000..8a22807
--- /dev/null
+++ b/uni_modules/uni-fab/changelog.md
@@ -0,0 +1,25 @@
+## 1.2.6(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.2.5(2023-03-29)
+- 新增 pattern.icon 属性,可自定义图标
+## 1.2.4(2022-09-07)
+小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false)
+## 1.2.3(2022-09-05)
+- 修复 nvue 环境下,具有 tabBar 时,fab 组件下部位置无法正常获取 --window-bottom 的bug,详见:[https://ask.dcloud.net.cn/question/110638?notification_id=826310](https://ask.dcloud.net.cn/question/110638?notification_id=826310)
+## 1.2.2(2021-12-29)
+- 更新 组件依赖
+## 1.2.1(2021-11-19)
+- 修复 阴影颜色不正确的bug
+## 1.2.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-fab](https://uniapp.dcloud.io/component/uniui/uni-fab)
+## 1.1.1(2021-11-09)
+- 新增 提供组件设计资源,组件样式调整
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-05-12)
+- 新增 组件示例地址
+## 1.0.6(2021-02-05)
+- 调整为uni_modules目录规范
+- 优化 按钮背景色调整
+- 优化 兼容pc端
diff --git a/uni_modules/uni-fab/components/uni-fab/uni-fab.vue b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue
new file mode 100644
index 0000000..492b5d1
--- /dev/null
+++ b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue
@@ -0,0 +1,491 @@
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-fab/package.json b/uni_modules/uni-fab/package.json
new file mode 100644
index 0000000..1b8543c
--- /dev/null
+++ b/uni_modules/uni-fab/package.json
@@ -0,0 +1,85 @@
+{
+ "id": "uni-fab",
+ "displayName": "uni-fab 悬浮按钮",
+ "version": "1.2.6",
+ "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "按钮",
+ "悬浮按钮",
+ "fab"
+],
+ "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","uni-icons"],
+ "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-fab/readme.md b/uni_modules/uni-fab/readme.md
new file mode 100644
index 0000000..9a444e8
--- /dev/null
+++ b/uni_modules/uni-fab/readme.md
@@ -0,0 +1,9 @@
+## Fab 悬浮按钮
+> **组件名:uni-fab**
+> 代码块: `uFab`
+
+
+点击可展开一个图形按钮菜单
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md
index 0cc65a0..62e7682 100644
--- a/uni_modules/uni-icons/changelog.md
+++ b/uni_modules/uni-icons/changelog.md
@@ -1,3 +1,5 @@
+## 2.0.12(2025-08-26)
+- 优化 uni-app x 下 size 类型问题
## 2.0.11(2025-08-18)
- 修复 图标点击事件返回
## 2.0.9(2024-01-12)
diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
index 398678e..53eb2ea 100644
--- a/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
+++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
@@ -29,8 +29,8 @@
default: '#333333'
},
size: {
- type: Object,
- default: 16
+ type: [Number, String],
+ default: 16
},
fontFamily: {
type: String,
@@ -51,9 +51,9 @@
iconSize() : string {
const size = this.size
if (typeof size == 'string') {
- const reg = /^[0-9]*$/g
- return reg.test(size as string) ? '' + size + 'px' : '' + size;
- // return '' + this.size
+ const reg = /^[0-9]*$/g
+ return reg.test(size as string) ? '' + size + 'px' : '' + size;
+ // return '' + this.size
}
return this.getFontSize(size as number)
},
diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json
index 9a9052f..60e45f0 100644
--- a/uni_modules/uni-icons/package.json
+++ b/uni_modules/uni-icons/package.json
@@ -1,7 +1,7 @@
{
"id": "uni-icons",
"displayName": "uni-icons 图标",
- "version": "2.0.11",
+ "version": "2.0.12",
"description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
"keywords": [
"uni-ui",
@@ -64,7 +64,7 @@
},
"app": {
"vue": "√",
- "nvue": "√",
+ "nvue": "-",
"android": {
"extVersion": "",
"minVersion": "29"
diff --git a/version.md b/version.md
index 1649f28..1fe8729 100644
--- a/version.md
+++ b/version.md
@@ -27,4 +27,10 @@
## 4.7.1
+ 修改路径替换规则
-+ 修改更新地址
\ No newline at end of file
++ 修改更新地址
+
+## 4.7.2
++ 项目选择器增加搜索
+
+## 4.7.3
++ 修复出库记录的显示错误
\ No newline at end of file